Changeset 5726:4a15c13827a8 in roaraudio for plugins/universal/protocol-http.c
- Timestamp:
- 11/03/12 00:23:14 (12 years ago)
- Branch:
- default
- Phase:
- public
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
plugins/universal/protocol-http.c
r5725 r5726 154 154 return root; 155 155 } 156 157 static inline int __is_hex(char c) { 158 if ( c >= '0' && c <= '9' ) 159 return 1; 160 if ( c >= 'a' && c <= 'f' ) 161 return 1; 162 if ( c >= 'A' && c <= 'F' ) 163 return 1; 164 return 0; 165 } 166 167 static inline int __hex2num(char c) { 168 if ( c >= '0' && c <= '9' ) 169 return c - '0'; 170 if ( c >= 'a' && c <= 'f' ) 171 return c - 'a' + 10; 172 if ( c >= 'A' && c <= 'F' ) 173 return c - 'A' + 10; 174 return 0; 175 } 176 177 static void __res_vio_handle_uste_uridecode(char * str) { 178 const char * c = str; 179 180 for (; *c; c++) { 181 if ( *c == '%' && __is_hex(c[1]) && __is_hex(c[2]) ) { 182 *str = __hex2num(c[1])*16 + __hex2num(c[2]); 183 str++; 184 c += 2; 185 } else { 186 *str = *c; 187 str++; 188 } 189 } 190 *str = *c; 191 } 192 193 static void __res_vio_handle_uste_keyify(char * str) { 194 if ( *str == '#' ) 195 *str = '_'; 196 for (;*str; str++) 197 if (*str == '.') 198 *str = '_'; 199 } 200 201 static uste_var_t __res_vio_handle_uste_build_getparams(struct http_client * self) { 202 uste_var_t root = uste_var_new_kv(); 203 uste_var_t subroot; 204 uste_var_t var; 205 char * qs_buffer; 206 char * cur; 207 char * state; 208 char * key, * value; 209 210 if ( root == NULL ) 211 return NULL; 212 213 uste_var_set_key(root, "get"); 214 if ( self->query_string == NULL ) 215 return root; 216 217 qs_buffer = roar_mm_strdup(self->query_string); 218 219 // do better handling here. 220 if ( qs_buffer == NULL ) 221 return root; 222 223 cur = roar_mm_strtok_r(qs_buffer, "&", &state); 224 225 while (cur != NULL) { 226 printf("cur='%s'\n", cur); 227 key = cur; 228 value = strstr(cur, "="); 229 if ( value != NULL ) { 230 *value = 0; 231 value++; 232 __res_vio_handle_uste_uridecode(value); 233 } 234 __res_vio_handle_uste_uridecode(key); 235 __res_vio_handle_uste_keyify(key); 236 237 if ( value == NULL ) { 238 var = uste_var_new_undef(); 239 } else { 240 var = uste_var_new_str(value); 241 } 242 243 subroot = uste_var_pull(root, key); 244 if ( subroot == NULL ) { 245 subroot = uste_var_new_array(); 246 if ( subroot != NULL ) { 247 uste_var_set_key(subroot, key); 248 uste_var_push(root, subroot); 249 } 250 } 251 252 if ( subroot != NULL ) { 253 uste_var_push(subroot, var); 254 uste_var_unref(subroot); 255 } 256 uste_var_unref(var); 257 cur = roar_mm_strtok_r(NULL, "&", &state); 258 } 259 260 roar_mm_free(qs_buffer); 261 return root; 262 } 263 156 264 static uste_var_t __res_vio_handle_uste_build_rootkv(struct http_client * self) { 157 265 uste_var_t root = uste_var_new_kv(); … … 193 301 194 302 var = __res_vio_handle_uste_build_headers(self); 303 uste_var_push(subsubroot, var); 304 uste_var_unref(var); 305 306 var = __res_vio_handle_uste_build_getparams(self); 195 307 uste_var_push(subsubroot, var); 196 308 uste_var_unref(var);
Note: See TracChangeset
for help on using the changeset viewer.