14 int qs_strncmp(
const char *
s,
const char * qs,
size_t n);
21 int qs_parse(
char * qs,
char * qs_kv[],
int qs_kv_size);
32 char *
qs_k2v(
const char * key,
char *
const * qs_kv,
int qs_kv_size,
int nth);
37 char *
qs_scanvalue(
const char * key,
const char * qs,
char * val,
size_t val_len);
43 #define CROW_QS_ISHEX(x) ((((x)>='0'&&(x)<='9') || ((x)>='A'&&(x)<='F') || ((x)>='a'&&(x)<='f')) ? 1 : 0) 44 #define CROW_QS_HEX2DEC(x) (((x)>='0'&&(x)<='9') ? (x)-48 : ((x)>='A'&&(x)<='F') ? (x)-55 : ((x)>='a'&&(x)<='f') ? (x)-87 : 0) 45 #define CROW_QS_ISQSCHR(x) ((((x)=='=')||((x)=='#')||((x)=='&')||((x)=='\0')) ? 0 : 1) 47 inline int qs_strncmp(
const char *
s,
const char * qs,
size_t n)
50 unsigned char u1,
u2, unyb, lnyb;
54 u1 = (
unsigned char) *
s++;
55 u2 = (
unsigned char) *qs++;
60 if (
u1 ==
'+' ) {
u1 =
' '; }
63 unyb = (
unsigned char) *
s++;
64 lnyb = (
unsigned char) *
s++;
71 if (
u2 ==
'+' ) {
u2 =
' '; }
74 unyb = (
unsigned char) *qs++;
75 lnyb = (
unsigned char) *qs++;
95 inline int qs_parse(
char * qs,
char * qs_kv[],
int qs_kv_size)
100 for(i=0; i<qs_kv_size; i++) qs_kv[i] = NULL;
103 substr_ptr = qs + strcspn(qs,
"?#");
104 if (substr_ptr[0] !=
'\0')
112 qs_kv[i] = substr_ptr;
113 j = strcspn(substr_ptr,
"&");
114 if ( substr_ptr[j] ==
'\0' ) {
break; }
124 substr_ptr = qs_kv[j] + strcspn(qs_kv[j],
"=&#");
125 if ( substr_ptr[0] ==
'&' || substr_ptr[0] ==
'\0')
126 substr_ptr[0] =
'\0';
145 if ( qs[j] ==
'+' ) { qs[i] =
' '; }
146 else if ( qs[j] ==
'%' )
168 inline char *
qs_k2v(
const char * key,
char *
const * qs_kv,
int qs_kv_size,
int nth = 0)
171 size_t key_len, skip;
173 key_len = strlen(key);
178 for(i=0; i<qs_kv_size; i++)
181 if (
qs_strncmp(key, qs_kv[i], key_len) == 0 )
183 skip = strcspn(qs_kv[i],
"=");
184 if ( qs_kv[i][skip] ==
'=' )
188 return qs_kv[i] + skip;
199 inline char *
qs_scanvalue(
const char * key,
const char * qs,
char * val,
size_t val_len)
205 if ( (tmp = strchr(qs,
'?')) != NULL )
208 key_len = strlen(key);
209 while(qs[0] !=
'#' && qs[0] !=
'\0')
213 qs += strcspn(qs,
"&") + 1;
216 if ( qs[0] ==
'\0' )
return NULL;
218 qs += strcspn(qs,
"=&#");
222 i = strcspn(qs,
"&=#");
223 strncpy(val, qs, (val_len-1)<(i+1) ? (val_len-1) : (i+1));
272 char* old_data = (
char*)qs.url_.c_str();
273 url_ = std::move(qs.url_);
276 p += (
char*)
url_.c_str() - old_data;
313 char*
get (
const std::string&
name)
const 321 std::vector<char*> ret;
322 std::string plus =
name +
"[]";
323 char* element =
nullptr;
331 ret.push_back(element);
static const int MAX_KEY_VALUE_PAIRS_COUNT
Definition: query_string.h:242
int qs_strncmp(const char *s, const char *qs, size_t n)
Definition: query_string.h:47
void clear()
Definition: query_string.h:294
#define CROW_QS_ISHEX(x)
Definition: query_string.h:43
Definition: block_queue.cpp:41
#define CROW_QS_HEX2DEC(x)
Definition: query_string.h:44
std::vector< char * > key_value_pairs_
Definition: query_string.h:339
#define CROW_QS_ISQSCHR(x)
Definition: query_string.h:45
friend std::ostream & operator<<(std::ostream &os, const query_string &qs)
Definition: query_string.h:300
#define u1(p)
Definition: aesb.c:111
std::vector< char * > get_list(const std::string &name) const
Definition: query_string.h:319
char * qs_k2v(const char *key, char *const *qs_kv, int qs_kv_size, int nth)
Definition: query_string.h:168
int qs_parse(char *qs, char *qs_kv[], int qs_kv_size)
Definition: query_string.h:95
query_string & operator=(const query_string &qs)
Definition: query_string.h:258
std::string url_
Definition: query_string.h:338
#define u2(p)
Definition: aesb.c:112
query_string()
Definition: query_string.h:244
int qs_decode(char *qs)
Definition: query_string.h:139
char * qs_scanvalue(const char *key, const char *qs, char *val, size_t val_len)
Definition: query_string.h:199
const char * name
Definition: simplewallet.cpp:180
query_string(const query_string &qs)
Definition: query_string.h:249
query_string(std::string url)
Definition: query_string.h:282
#define s(x, c)
Definition: aesb.c:46
Definition: query_string.h:239