|
Server 0.0.1
HTTP/REST server implementation
|
00001 00023 #include <stdlib.h> 00024 #include <string.h> 00025 #include <sys/types.h> 00026 00027 #include "http/parser.h" 00028 #include "http/request.h" 00029 #include "hash.h" 00030 #include "class.h" 00031 00032 void 00033 httpParserRequestVars(HttpParser this) 00034 { 00035 HttpRequest request = (HttpRequest)this->current; 00036 char * delim = strchr(request->uri, '?'); 00037 00038 if (NULL == delim) { 00039 delim = request->uri + strlen(request->uri); 00040 } 00041 00042 request->path = malloc(delim - request->uri + 1); 00043 request->path[delim - request->uri] = 0; 00044 memcpy(request->path, request->uri, delim - request->uri); 00045 00046 while(NULL != delim && 0 != *delim) { 00047 char * key = delim + 1; 00048 char * eqsign = strchr(key, '='); 00049 char * value; 00050 size_t nvalue; 00051 00052 if (NULL == eqsign) { 00053 return; 00054 } 00055 00056 delim = strchr(eqsign, '&'); 00057 00058 if (NULL == delim) { 00059 delim = key + strlen(key); 00060 } 00061 00062 nvalue = delim-eqsign-1; 00063 value = (0 != nvalue)? eqsign+1 : NULL; 00064 00065 hashAdd(request->get, 00066 new(HashValue, key, eqsign-key, value, nvalue)); 00067 } 00068 } 00069 00070 // vim: set ts=4 sw=4: