Skip to content

Commit

Permalink
Support PURGE request method.
Browse files Browse the repository at this point in the history
  • Loading branch information
bnoordhuis committed Feb 20, 2012
1 parent 662e523 commit 62110ef
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 4 deletions.
13 changes: 9 additions & 4 deletions http_parser.c
Expand Up @@ -147,6 +147,7 @@ static const char *method_strings[] =
, "SUBSCRIBE"
, "UNSUBSCRIBE"
, "PATCH"
, "PURGE"
};


Expand Down Expand Up @@ -914,7 +915,7 @@ size_t http_parser_execute (http_parser *parser,
case 'N': parser->method = HTTP_NOTIFY; break;
case 'O': parser->method = HTTP_OPTIONS; break;
case 'P': parser->method = HTTP_POST;
/* or PROPFIND or PROPPATCH or PUT or PATCH */
/* or PROPFIND|PROPPATCH|PUT|PATCH|PURGE */
break;
case 'R': parser->method = HTTP_REPORT; break;
case 'S': parser->method = HTTP_SUBSCRIBE; break;
Expand Down Expand Up @@ -968,14 +969,18 @@ size_t http_parser_execute (http_parser *parser,
if (ch == 'R') {
parser->method = HTTP_PROPFIND; /* or HTTP_PROPPATCH */
} else if (ch == 'U') {
parser->method = HTTP_PUT;
parser->method = HTTP_PUT; /* or HTTP_PURGE */
} else if (ch == 'A') {
parser->method = HTTP_PATCH;
} else {
goto error;
}
} else if (parser->index == 2 && parser->method == HTTP_UNLOCK && ch == 'S') {
parser->method = HTTP_UNSUBSCRIBE;
} else if (parser->index == 2) {
if (parser->method == HTTP_PUT) {
if (ch == 'R') parser->method = HTTP_PURGE;
} else if (parser->method == HTTP_UNLOCK) {
if (ch == 'S') parser->method = HTTP_UNSUBSCRIBE;
}
} else if (parser->index == 4 && parser->method == HTTP_PROPFIND && ch == 'P') {
parser->method = HTTP_PROPPATCH;
} else {
Expand Down
1 change: 1 addition & 0 deletions http_parser.h
Expand Up @@ -116,6 +116,7 @@ enum http_method
, HTTP_UNSUBSCRIBE
/* RFC-5789 */
, HTTP_PATCH
, HTTP_PURGE
};


Expand Down
20 changes: 20 additions & 0 deletions test.c
Expand Up @@ -830,6 +830,26 @@ const struct message requests[] =
,.body= "q=42"
}

#define PURGE_REQ 30
, {.name = "PURGE request"
,.type= HTTP_REQUEST
,.raw= "PURGE /file.txt HTTP/1.1\r\n"
"Host: www.example.com\r\n"
"\r\n"
,.should_keep_alive= TRUE
,.message_complete_on_eof= FALSE
,.http_major= 1
,.http_minor= 1
,.method= HTTP_PURGE
,.query_string= ""
,.fragment= ""
,.request_path= "/file.txt"
,.request_url= "/file.txt"
,.num_headers= 1
,.headers= { { "Host", "www.example.com" } }
,.body= ""
}

, {.name= NULL } /* sentinel */
};

Expand Down

0 comments on commit 62110ef

Please sign in to comment.