Server 0.0.1
HTTP/REST server implementation

src/http/parser/p_request_vars.c

Go to the documentation of this file.
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:
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Defines