src/server/daemon/httpparser.h

Sat, 21 Jan 2017 12:46:31 +0100

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Sat, 21 Jan 2017 12:46:31 +0100
changeset 150
89af278b7dbb
parent 114
c3a0f1275d71
child 180
98462e878ca7
permissions
-rw-r--r--

fixes socket fd leak when SSL_accept fails

/*
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
 *
 * Copyright 2013 Olaf Wintermann. All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 *   1. Redistributions of source code must retain the above copyright
 *      notice, this list of conditions and the following disclaimer.
 *
 *   2. Redistributions in binary form must reproduce the above copyright
 *      notice, this list of conditions and the following disclaimer in the
 *      documentation and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */

#ifndef HTTPPARSER_H
#define	HTTPPARSER_H


#include <ucx/string.h>
#include "httprequest.h"

#ifdef	__cplusplus
extern "C" {
#endif

/*
 * http parser states
 *
 * 0: start line
 * 1: header
 * 2: finish
 */

typedef struct _http_parser {
    HTTPRequest *request;

    int state;
    sstr_t start_line;

    /* local parser variables */
    int wl;       /* only white space */
    int tk;       /* token: 0: header name 1: header value */
    int offset;   /* offset of parsed string */
    int strend;   /* end position */
    sstr_t name;
    sstr_t value;

} HttpParser;

HttpParser* http_parser_new(HTTPRequest *request);
void http_parser_free(HttpParser *parser);

/*
 * process http parsing
 *
 * return
 * 0: finish
 * 1: need more data
 * 2: error
 */
int http_parser_process(HttpParser *parser);

int get_start_line(HttpParser *parser);
int http_parser_parse_header(HttpParser *parser);

int parse_request_line(HttpParser *parser);



#ifdef	__cplusplus
}
#endif


#endif	/* HTTPPARSER_H */

mercurial