Menu

[r423]: / framework / trunk / url.cpp  Maximize  Restore  History

Download this file

93 lines (77 with data), 1.6 kB

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#include "url.h"
#include "worker_thread.h"
using namespace std;
using namespace boost;
using namespace cppcms;
url_parser::~url_parser()
{
}
void url_parser::add(char const *exp,int id)
{
url_def url_def;
url_def.pattern=regex(exp);
url_def.type=url_def::ID;
url_def.id=id;
url_def.callback=NULL;
url_def.url=NULL;
patterns.push_back(url_def);
}
void url_parser::add(char const *exp,url_parser &url)
{
url_def url_def;
url_def.pattern=regex(exp);
url_def.type=url_def::URL;
url_def.id=0;
url_def.url=&url;
patterns.push_back(url_def);
}
void url_parser::add(char const *exp,callback_t callback)
{
url_def url_def;
url_def.pattern=regex(exp);
url_def.type=url_def::CALLBACK;
url_def.id=0;
url_def.callback=callback;
url_def.url=NULL;
patterns.push_back(url_def);
}
int url_parser::parse(string &query)
{
unsigned i;
for(i=0;i<patterns.size();i++) {
boost::regex &r=patterns[i].pattern;
string tmp;
if(boost::regex_match(query.c_str(),result,r)){
switch(patterns[i].type) {
case url_def::ID:
return patterns[i].id;
case url_def::URL:
tmp=result[1];
return patterns[i].url->parse(tmp);
case url_def::CALLBACK:
patterns[i].callback( result[1],result[2],
result[3],result[4],
result[5],result[6],
result[7],result[8],
result[0]);
return 0;
}
}
}
return -1;
}
int url_parser::parse()
{
string query;
if(worker){
query=worker->env->getPathInfo();
}
else {
return not_found;
}
return parse(query);
}
string url_parser::operator[](int i)
{
return result[i];
}
MongoDB Logo MongoDB