|
|
|
@ -27,45 +27,18 @@ |
|
|
|
#include "http/request.h" |
|
|
|
#include "http/message.h" |
|
|
|
|
|
|
|
#define MAX(x,y) ((x) > (y) ? (x) : (y)) |
|
|
|
#define MIN(x,y) ((x) < (y) ? (x) : (y)) |
|
|
|
#define MIN_SIZE(x,y) (MAX(strlen((x)), (y))) |
|
|
|
|
|
|
|
enum e_method { |
|
|
|
OPTIONS=0, |
|
|
|
GET, |
|
|
|
HEAD, |
|
|
|
POST, |
|
|
|
PUT, |
|
|
|
DELETE, |
|
|
|
TRACE, |
|
|
|
CONNECT |
|
|
|
}; |
|
|
|
|
|
|
|
#define N_METHODS 8 |
|
|
|
|
|
|
|
static |
|
|
|
const |
|
|
|
char * method[N_METHODS] = { |
|
|
|
"OPTIONS", |
|
|
|
"GET", |
|
|
|
"HEAD", |
|
|
|
"POST", |
|
|
|
"PUT", |
|
|
|
"DELETE", |
|
|
|
"TRACE", |
|
|
|
"CONNECT" |
|
|
|
}; |
|
|
|
|
|
|
|
ssize_t |
|
|
|
httpRequestParserGetRequestLine(HttpRequestParser this, char * cr) |
|
|
|
void |
|
|
|
httpRequestParserGetRequestLine( |
|
|
|
HttpRequest request, |
|
|
|
const char * line, |
|
|
|
const char * line_end) |
|
|
|
{ |
|
|
|
char * method, * uri, * version; |
|
|
|
HttpMessage message = (HttpMessage)request; |
|
|
|
int mlen, ulen, vlen; |
|
|
|
|
|
|
|
method = line; |
|
|
|
uri = strchr(line, ' '); |
|
|
|
uri = memchr(line, ' ', line_end - line); |
|
|
|
|
|
|
|
if (NULL == uri) |
|
|
|
return; |
|
|
|
@ -73,7 +46,7 @@ httpRequestParserGetRequestLine(HttpRequestParser this, char * cr) |
|
|
|
mlen = uri - method; |
|
|
|
for (; *uri == ' ' && *uri != 0; uri++); |
|
|
|
|
|
|
|
version = strchr(uri, ' '); |
|
|
|
version = memchr(uri, ' ', line_end - uri); |
|
|
|
|
|
|
|
if (NULL == version) |
|
|
|
return; |
|
|
|
@ -81,13 +54,16 @@ httpRequestParserGetRequestLine(HttpRequestParser this, char * cr) |
|
|
|
ulen = version - uri; |
|
|
|
for (; *version == ' ' && *version != 0; version++); |
|
|
|
|
|
|
|
vlen = strlen(version); |
|
|
|
vlen = line_end - uri; |
|
|
|
|
|
|
|
request->method = calloc(1, mlen + 1); |
|
|
|
request->method = malloc(mlen + 1); |
|
|
|
request->method[mlen] = 0; |
|
|
|
memcpy(request->method, method, mlen); |
|
|
|
request->uri = calloc(1, ulen + 1); |
|
|
|
request->uri = malloc(ulen + 1); |
|
|
|
request->uri[ulen] = 0; |
|
|
|
memcpy(request->uri, uri, ulen); |
|
|
|
message->version = calloc(1, vlen + 1); |
|
|
|
message->version = malloc(vlen + 1); |
|
|
|
message->version[vlen] = 0; |
|
|
|
memcpy(message->version, version, vlen); |
|
|
|
} |
|
|
|
|
|
|
|
|