Support PURGE request method.

Fixes joyent/node#2775.
v0.10
Ben Noordhuis 13 years ago
parent 662e523a92
commit 62110efe7a

@ -147,6 +147,7 @@ static const char *method_strings[] =
, "SUBSCRIBE" , "SUBSCRIBE"
, "UNSUBSCRIBE" , "UNSUBSCRIBE"
, "PATCH" , "PATCH"
, "PURGE"
}; };
@ -914,7 +915,7 @@ size_t http_parser_execute (http_parser *parser,
case 'N': parser->method = HTTP_NOTIFY; break; case 'N': parser->method = HTTP_NOTIFY; break;
case 'O': parser->method = HTTP_OPTIONS; break; case 'O': parser->method = HTTP_OPTIONS; break;
case 'P': parser->method = HTTP_POST; case 'P': parser->method = HTTP_POST;
/* or PROPFIND or PROPPATCH or PUT or PATCH */ /* or PROPFIND|PROPPATCH|PUT|PATCH|PURGE */
break; break;
case 'R': parser->method = HTTP_REPORT; break; case 'R': parser->method = HTTP_REPORT; break;
case 'S': parser->method = HTTP_SUBSCRIBE; break; case 'S': parser->method = HTTP_SUBSCRIBE; break;
@ -968,14 +969,18 @@ size_t http_parser_execute (http_parser *parser,
if (ch == 'R') { if (ch == 'R') {
parser->method = HTTP_PROPFIND; /* or HTTP_PROPPATCH */ parser->method = HTTP_PROPFIND; /* or HTTP_PROPPATCH */
} else if (ch == 'U') { } else if (ch == 'U') {
parser->method = HTTP_PUT; parser->method = HTTP_PUT; /* or HTTP_PURGE */
} else if (ch == 'A') { } else if (ch == 'A') {
parser->method = HTTP_PATCH; parser->method = HTTP_PATCH;
} else { } else {
goto error; goto error;
} }
} else if (parser->index == 2 && parser->method == HTTP_UNLOCK && ch == 'S') { } else if (parser->index == 2) {
parser->method = HTTP_UNSUBSCRIBE; 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') { } else if (parser->index == 4 && parser->method == HTTP_PROPFIND && ch == 'P') {
parser->method = HTTP_PROPPATCH; parser->method = HTTP_PROPPATCH;
} else { } else {

@ -116,6 +116,7 @@ enum http_method
, HTTP_UNSUBSCRIBE , HTTP_UNSUBSCRIBE
/* RFC-5789 */ /* RFC-5789 */
, HTTP_PATCH , HTTP_PATCH
, HTTP_PURGE
}; };

@ -830,6 +830,26 @@ const struct message requests[] =
,.body= "q=42" ,.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 */ , {.name= NULL } /* sentinel */
}; };

Loading…
Cancel
Save