Server 0.0.1
HTTP/REST server implementation

src/http/parser/p_post_vars.c File Reference

#include <string.h>
#include <sys/types.h>
#include "http/parser.h"
#include "http/request.h"
#include "hash.h"
#include "class.h"
Include dependency graph for p_post_vars.c:

Go to the source code of this file.

Functions

void httpParserPostVars (HttpParser this)

Detailed Description

Author:
Georg Hopp

Copyright © 2012 Georg Hopp

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>.

Definition in file p_post_vars.c.


Function Documentation

void httpParserPostVars ( HttpParser  this)
Todo:
this is very similar to other pair parsing things... key1=val1<delim>key2=val2<delim>...keyn=valn Generalize this!!!!

Definition at line 37 of file p_post_vars.c.

{
        HttpRequest request = (HttpRequest)this->current;
        char *      pair    = this->current->body;
        ssize_t     togo    = this->current->nbody;

        while(NULL != pair && 0 < togo) {
                char * key    = pair;
                char * eqsign = memchr(key, '=', togo);
                char * value;
                size_t nvalue;

                if (NULL == eqsign) {
                        return;
                }

                togo -= (eqsign - key);
                pair  = memchr(eqsign, '&', togo);

                if (NULL == pair) {
                        pair = &(this->current->body[this->current->nbody]);
                }

                nvalue = pair-eqsign-1;
                value  = (0 != nvalue)? eqsign+1 : NULL;

                hashAdd(request->post,
                                new(HashValue, key, eqsign-key, value, nvalue));

                pair++;
                togo -= (pair - eqsign);
        }
}

Here is the call graph for this function:

Here is the caller graph for this function:

 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Defines