Menu

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

Download this file

101 lines (83 with data), 1.7 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
 93
 94
 95
 96
 97
 98
 99
100
#include "url.h"
#include "worker_thread.h"
using namespace std;
using namespace boost;
URL_Parser::~URL_Parser()
{
unsigned i;
for(i=0;i<patterns.size();i++) {
delete patterns[i].callback;
}
}
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.callback=NULL;
url_def.url=&url;
patterns.push_back(url_def);
}
void URL_Parser::add(char const *exp,callback_t callback)
{
URL_Def url_def;
callback_signal_t *signal = new callback_signal_t;
signal->connect(callback);
url_def.pattern=regex(exp);
url_def.type=URL_Def::CALLBACK;
url_def.id=0;
url_def.callback=signal;
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