summaryrefslogtreecommitdiff
path: root/src/http_req_parser.y
diff options
context:
space:
mode:
Diffstat (limited to 'src/http_req_parser.y')
-rw-r--r--src/http_req_parser.y160
1 files changed, 0 insertions, 160 deletions
diff --git a/src/http_req_parser.y b/src/http_req_parser.y
deleted file mode 100644
index 54c2673a..00000000
--- a/src/http_req_parser.y
+++ /dev/null
@@ -1,160 +0,0 @@
-%token_prefix TK_
-%token_type {buffer *}
-%extra_argument {http_req_ctx_t *ctx}
-%name http_req_parser
-
-%include {
-#include <assert.h>
-#include <string.h>
-#include "http_req.h"
-#include "keyvalue.h"
-#include "array.h"
-#include "log.h"
-}
-
-%parse_failure {
- ctx->ok = 0;
-}
-
-%type protocol { http_version_t }
-%type method { http_method_t }
-%type request_hdr { http_req * }
-%type headers { array * }
-%type header { data_string * }
-%type multiline { buffer * }
-%token_destructor { buffer_free($$); }
-
-/**
-* GET ... HTTP/1.0
-* Host: ...
-*/
-request_hdr ::= method(B) STRING(C) protocol(D) CRLF headers CRLF . {
- http_req *req = ctx->req;
-
- req->method = B;
- req->protocol = D;
- buffer_copy_string_buffer(req->uri_raw, C);
- buffer_pool_append(ctx->unused_buffers, C);
-}
-
-/**
-* \r\n
-* GET ... HTTP/1.0\r\n
-* Host: ...\r\n
-* \r\n
-*/
-request_hdr ::= CRLF method(B) STRING(C) protocol(D) CRLF headers CRLF . {
- http_req *req = ctx->req;
-
- req->method = B;
- req->protocol = D;
- buffer_copy_string_buffer(req->uri_raw, C);
- buffer_pool_append(ctx->unused_buffers, C);
-}
-
-
-/**
-* GET ... HTTP/1.0\r\n
-* \r\n
-*
-*/
-request_hdr ::= method(B) STRING(C) protocol(D) CRLF CRLF . {
- http_req *req = ctx->req;
-
- req->method = B;
- req->protocol = D;
- buffer_copy_string_buffer(req->uri_raw, C);
- buffer_pool_append(ctx->unused_buffers, C);
-}
-
-/**
-* \r\n
-* GET ... HTTP/1.0\r\n
-* \r\n
-*
-*/
-request_hdr ::= CRLF method(B) STRING(C) protocol(D) CRLF CRLF . {
- http_req *req = ctx->req;
-
- req->method = B;
- req->protocol = D;
- buffer_copy_string_buffer(req->uri_raw, C);
- buffer_pool_append(ctx->unused_buffers, C);
-}
-
-
-method(A) ::= STRING(B) . {
- A = get_http_method_key(BUF_STR(B));
-
- buffer_pool_append(ctx->unused_buffers, B);
-}
-
-protocol(A) ::= STRING(B). {
- /* the protocol might be HTTP/1.0 or HTTP/1.1
- * the version string is allowed to have leading zeros
- */
- A = HTTP_VERSION_UNSET;
-
- if (0 == strncmp(BUF_STR(B), "HTTP/", 5)) {
- char *err = NULL;
- /* is there a dot */
- char *major, *minor;
-
- major = BUF_STR(B) + 5;
- minor = strchr(major, '.');
- if (minor) {
- int hi, lo;
- hi = strtol(major, &err, 10);
- minor++;
- if (*err == '.' && *minor != '\0') {
- lo = strtol(minor, &err, 10);
- if (*err == '\0') {
- if (hi == 1 && lo == 1) {
- A = HTTP_VERSION_1_1;
- } else if (hi == 1 && lo == 0) {
- A = HTTP_VERSION_1_0;
- }
- }
- }
- }
- }
-
- buffer_pool_append(ctx->unused_buffers, B);
-}
-
-headers ::= headers header.
-headers ::= header.
-
-header(HDR) ::= STRING(A) COLON multiline(B). {
- http_req *req = ctx->req;
-
- if (NULL == (HDR = (data_string *)array_get_unused_element(req->headers, TYPE_STRING))) {
- HDR = data_string_init();
- }
-
- buffer_copy_string_buffer(HDR->key, A);
- buffer_copy_string_buffer(HDR->value, B);
- buffer_pool_append(ctx->unused_buffers, A);
- buffer_pool_append(ctx->unused_buffers, B);
-
- array_insert_unique(req->headers, (data_unset *)HDR);
-}
-
-header ::= STRING COLON CRLF .
-
-multiline(A) ::= STRING(B) CRLF TAB multiline(C). {
- buffer_append_string_buffer(B, C);
- A = B;
-
- B = NULL;
- buffer_pool_append(ctx->unused_buffers, C);
-}
-
-/* the simple form */
-multiline(A) ::= STRING(B) CRLF. {
- A = B;
-
- B = NULL;
-}
-
-