src/server/httpparser.h

changeset 1
3c066d52342d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/server/httpparser.h	Tue Sep 06 22:27:32 2011 +0200
@@ -0,0 +1,90 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright 2011 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 "sstring.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 varaibles */
+    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