#endif
static CTCB clientLifetimeTimeout;
static ClientSocketContext *parseHttpRequestAbort(ConnStateData * conn, const char *uri);
-static ClientSocketContext *parseHttpRequest(ConnStateData *, const Http::Http1ParserPointer &, HttpRequestMethod *);
+static ClientSocketContext *parseHttpRequest(ConnStateData *, const Http::Http1ParserPointer &);
#if USE_IDENT
static IDCB clientIdentDone;
#endif
* a ClientSocketContext structure on success or failure.
*/
static ClientSocketContext *
-parseHttpRequest(ConnStateData *csd, const Http::Http1ParserPointer &hp, HttpRequestMethod * method_p)
+parseHttpRequest(ConnStateData *csd, const Http::Http1ParserPointer &hp)
{
char *req_hdr = NULL;
char *end;
ClientSocketContext *result;
StoreIOBuffer tempBuffer;
- /* pre-set these values to make aborting simpler */
- *method_p = Http::METHOD_NONE;
-
/* NP: don't be tempted to move this down or remove again.
* It's the only DDoS protection old-String has against long URL */
if ( hp->bufsiz <= 0) {
return parseHttpRequestAbort(csd, "error:request-too-large");
}
- /* Set method_p */
- *method_p = HttpRequestMethod(&hp->buf[hp->req.m_start], &hp->buf[hp->req.m_end]+1);
-
/* deny CONNECT via accelerated ports */
- if (*method_p == Http::METHOD_CONNECT && csd->port && csd->port->flags.accelSurrogate) {
+ if (*(hp->method()) == Http::METHOD_CONNECT && csd->port && csd->port->flags.accelSurrogate) {
debugs(33, DBG_IMPORTANT, "WARNING: CONNECT method received on " << csd->port->transport.protocol << " Accelerator port " << csd->port->s.port());
/* XXX need a way to say "this many character length string" */
debugs(33, DBG_IMPORTANT, "WARNING: for request: " << hp->buf);
return parseHttpRequestAbort(csd, "error:method-not-allowed");
}
- if (*method_p == Http::METHOD_NONE) {
+ if (*(hp->method()) == Http::METHOD_NONE) {
/* XXX need a way to say "this many character length string" */
debugs(33, DBG_IMPORTANT, "clientParseRequestMethod: Unsupported method in request '" << hp->buf << "'");
hp->request_parse_status = Http::scMethodNotAllowed;
#endif // USE_SSL
static void
-clientProcessRequest(ConnStateData *conn, const Http::Http1ParserPointer &hp, ClientSocketContext *context, const HttpRequestMethod& method)
+clientProcessRequest(ConnStateData *conn, const Http::Http1ParserPointer &hp, ClientSocketContext *context)
{
ClientHttpRequest *http = context->http;
HttpRequest::Pointer request;
bool unsupportedTe = false;
bool expectBody = false;
const AnyP::ProtocolVersion &http_ver = hp->messageProtocol();
+ const HttpRequestMethodPointer method = hp->method();
/* We have an initial client stream in place should it be needed */
/* setup our private context */
assert (repContext);
switch (hp->request_parse_status) {
case Http::scHeaderTooLarge:
- repContext->setReplyToError(ERR_TOO_BIG, Http::scBadRequest, method, http->uri, conn->clientConnection->remote, NULL, conn->in.buf, NULL);
+ repContext->setReplyToError(ERR_TOO_BIG, Http::scBadRequest, *method, http->uri, conn->clientConnection->remote, NULL, conn->in.buf, NULL);
break;
case Http::scMethodNotAllowed:
- repContext->setReplyToError(ERR_UNSUP_REQ, Http::scMethodNotAllowed, method, http->uri,
+ repContext->setReplyToError(ERR_UNSUP_REQ, Http::scMethodNotAllowed, *method, http->uri,
conn->clientConnection->remote, NULL, conn->in.buf, NULL);
break;
default:
- repContext->setReplyToError(ERR_INVALID_REQ, hp->request_parse_status, method, http->uri,
+ repContext->setReplyToError(ERR_INVALID_REQ, hp->request_parse_status, *method, http->uri,
conn->clientConnection->remote, NULL, conn->in.buf, NULL);
}
assert(context->http->out.offset == 0);
goto finish;
}
- if ((request = HttpRequest::CreateFromUrlAndMethod(http->uri, method)) == NULL) {
+ if ((request = HttpRequest::CreateFromUrlAndMethod(http->uri, *method)) == NULL) {
clientStreamNode *node = context->getClientReplyContext();
debugs(33, 5, "Invalid URL: " << http->uri);
conn->quitAfterError(request.getRaw());
setLogUri(http, http->uri, true);
clientReplyContext *repContext = dynamic_cast<clientReplyContext *>(node->data.getRaw());
assert (repContext);
- repContext->setReplyToError(ERR_INVALID_URL, Http::scBadRequest, method, http->uri, conn->clientConnection->remote, NULL, NULL, NULL);
+ repContext->setReplyToError(ERR_INVALID_URL, Http::scBadRequest, *method, http->uri, conn->clientConnection->remote, NULL, NULL, NULL);
assert(context->http->out.offset == 0);
context->pullData();
goto finish;
setLogUri(http, http->uri, true);
clientReplyContext *repContext = dynamic_cast<clientReplyContext *>(node->data.getRaw());
assert (repContext);
- repContext->setReplyToError(ERR_UNSUP_HTTPVERSION, Http::scHttpVersionNotSupported, method, http->uri,
+ repContext->setReplyToError(ERR_UNSUP_HTTPVERSION, Http::scHttpVersionNotSupported, *method, http->uri,
conn->clientConnection->remote, NULL, hp->rawHeaderBuf(), NULL);
assert(context->http->out.offset == 0);
context->pullData();
setLogUri(http, http->uri, true);
clientReplyContext *repContext = dynamic_cast<clientReplyContext *>(node->data.getRaw());
assert (repContext);
- repContext->setReplyToError(ERR_INVALID_REQ, Http::scBadRequest, method, http->uri, conn->clientConnection->remote, NULL, NULL, NULL);
+ repContext->setReplyToError(ERR_INVALID_REQ, Http::scBadRequest, *method, http->uri, conn->clientConnection->remote, NULL, NULL, NULL);
assert(context->http->out.offset == 0);
context->pullData();
goto finish;
unsupportedTe = te.size() && te != "identity";
} // else implied identity coding
- mustReplyToOptions = (method == Http::METHOD_OPTIONS) &&
+ mustReplyToOptions = (*method == Http::METHOD_OPTIONS) &&
(request->header.getInt64(HDR_MAX_FORWARDS) == 0);
if (!urlCheckRequest(request.getRaw()) || mustReplyToOptions || unsupportedTe) {
clientStreamNode *node = context->getClientReplyContext();
bool
ConnStateData::clientParseRequests()
{
- HttpRequestMethod method;
bool parsed_req = false;
debugs(33, 5, HERE << clientConnection << ": attempting to parse");
parser_->bufsiz = in.notYetUsed;
/* Process request */
- ClientSocketContext *context = parseHttpRequest(this, parser_, &method);
+ ClientSocketContext *context = parseHttpRequest(this, parser_);
PROF_stop(parseHttpRequest);
/* partial or incomplete request */
CommTimeoutCbPtrFun(clientLifetimeTimeout, context->http));
commSetConnTimeout(clientConnection, Config.Timeout.lifetime, timeoutCall);
- clientProcessRequest(this, parser_, context, method);
+ clientProcessRequest(this, parser_, context);
parsed_req = true; // XXX: do we really need to parse everything right NOW ?
#include "testHttp1Parser.h"
#include "http/Http1Parser.h"
+#include "http/RequestMethod.h"
#include "Mem.h"
#include "MemBuf.h"
#include "SquidConfig.h"
CPPUNIT_ASSERT_EQUAL(0, output.req.m_start);
CPPUNIT_ASSERT_EQUAL(2, output.req.m_end);
CPPUNIT_ASSERT_EQUAL(0, memcmp("GET", &output.buf[output.req.m_start], (output.req.m_end-output.req.m_start+1)));
+ CPPUNIT_ASSERT_EQUAL(HttpRequestMethod(Http::METHOD_GET), *output.method_);
CPPUNIT_ASSERT_EQUAL(4, output.req.u_start);
CPPUNIT_ASSERT_EQUAL(4, output.req.u_end);
CPPUNIT_ASSERT_EQUAL(0, memcmp("/", &output.buf[output.req.u_start], (output.req.u_end-output.req.u_start+1)));
CPPUNIT_ASSERT_EQUAL(Http::scOkay, output.request_parse_status);
CPPUNIT_ASSERT_EQUAL(0, output.req.start);
CPPUNIT_ASSERT_EQUAL((int)input.contentSize()-1, output.req.end);
- CPPUNIT_ASSERT_EQUAL(0,memcmp("GET /\r\n", &output.buf[output.req.start],(output.req.end-output.req.start+1)));
+ CPPUNIT_ASSERT_EQUAL(0,memcmp("POST /\r\n", &output.buf[output.req.start],(output.req.end-output.req.start+1)));
CPPUNIT_ASSERT_EQUAL(0, output.req.m_start);
- CPPUNIT_ASSERT_EQUAL(2, output.req.m_end);
- CPPUNIT_ASSERT_EQUAL(0, memcmp("GET", &output.buf[output.req.m_start], (output.req.m_end-output.req.m_start+1)));
- CPPUNIT_ASSERT_EQUAL(4, output.req.u_start);
- CPPUNIT_ASSERT_EQUAL(4, output.req.u_end);
+ CPPUNIT_ASSERT_EQUAL(3, output.req.m_end);
+ CPPUNIT_ASSERT_EQUAL(0, memcmp("POST", &output.buf[output.req.m_start], (output.req.m_end-output.req.m_start+1)));
+ CPPUNIT_ASSERT_EQUAL(HttpRequestMethod(Http::METHOD_POST), *output.method_);
+ CPPUNIT_ASSERT_EQUAL(5, output.req.u_start);
+ CPPUNIT_ASSERT_EQUAL(5, output.req.u_end);
CPPUNIT_ASSERT_EQUAL(0, memcmp("/", &output.buf[output.req.u_start], (output.req.u_end-output.req.u_start+1)));
CPPUNIT_ASSERT_EQUAL(-1, output.req.v_start);
CPPUNIT_ASSERT_EQUAL(-1, output.req.v_end);
- CPPUNIT_ASSERT_EQUAL(AnyP::ProtocolVersion(AnyP::PROTO_HTTP,0,9), output.msgProtocol_);
+ CPPUNIT_ASSERT_EQUAL(AnyP::ProtocolVersion(), output.msgProtocol_);
input.reset();
}
#endif
CPPUNIT_ASSERT_EQUAL(0, output.req.m_start);
CPPUNIT_ASSERT_EQUAL(2, output.req.m_end);
CPPUNIT_ASSERT_EQUAL(0, memcmp("GET", &output.buf[output.req.m_start],(output.req.m_end-output.req.m_start+1)));
+ CPPUNIT_ASSERT_EQUAL(HttpRequestMethod(Http::METHOD_GET), *output.method_);
CPPUNIT_ASSERT_EQUAL(4, output.req.u_start);
CPPUNIT_ASSERT_EQUAL(4, output.req.u_end);
CPPUNIT_ASSERT_EQUAL(0, memcmp("/", &output.buf[output.req.u_start],(output.req.u_end-output.req.u_start+1)));
CPPUNIT_ASSERT_EQUAL(0, output.req.m_start);
CPPUNIT_ASSERT_EQUAL(2, output.req.m_end);
CPPUNIT_ASSERT_EQUAL(0, memcmp("GET", &output.buf[output.req.m_start],(output.req.m_end-output.req.m_start+1)));
+ CPPUNIT_ASSERT_EQUAL(HttpRequestMethod(Http::METHOD_GET), *output.method_);
CPPUNIT_ASSERT_EQUAL(4, output.req.u_start);
CPPUNIT_ASSERT_EQUAL(4, output.req.u_end);
CPPUNIT_ASSERT_EQUAL(0, memcmp("/", &output.buf[output.req.u_start],(output.req.u_end-output.req.u_start+1)));
CPPUNIT_ASSERT_EQUAL(0, output.req.m_start);
CPPUNIT_ASSERT_EQUAL(2, output.req.m_end);
CPPUNIT_ASSERT_EQUAL(0, memcmp("GET", &output.buf[output.req.m_start],(output.req.m_end-output.req.m_start+1)));
+ CPPUNIT_ASSERT_EQUAL(HttpRequestMethod(Http::METHOD_GET), *output.method_);
CPPUNIT_ASSERT_EQUAL(4, output.req.u_start);
CPPUNIT_ASSERT_EQUAL(4, output.req.u_end);
CPPUNIT_ASSERT_EQUAL(0, memcmp("/", &output.buf[output.req.u_start],(output.req.u_end-output.req.u_start+1)));
CPPUNIT_ASSERT_EQUAL(0, output.req.m_start);
CPPUNIT_ASSERT_EQUAL(2, output.req.m_end);
CPPUNIT_ASSERT_EQUAL(0, memcmp("GET", &output.buf[output.req.m_start],(output.req.m_end-output.req.m_start+1)));
+ CPPUNIT_ASSERT_EQUAL(HttpRequestMethod(Http::METHOD_GET), *output.method_);
CPPUNIT_ASSERT_EQUAL(4, output.req.u_start);
CPPUNIT_ASSERT_EQUAL(4, output.req.u_end);
CPPUNIT_ASSERT_EQUAL(0, memcmp("/", &output.buf[output.req.u_start],(output.req.u_end-output.req.u_start+1)));
CPPUNIT_ASSERT_EQUAL(0, output.req.m_start);
CPPUNIT_ASSERT_EQUAL(2, output.req.m_end);
CPPUNIT_ASSERT_EQUAL(0, memcmp("GET", &output.buf[output.req.m_start],(output.req.m_end-output.req.m_start+1)));
+ CPPUNIT_ASSERT_EQUAL(HttpRequestMethod(Http::METHOD_GET), *output.method_);
CPPUNIT_ASSERT_EQUAL(4, output.req.u_start);
CPPUNIT_ASSERT_EQUAL(6, output.req.v_start);
CPPUNIT_ASSERT_EQUAL(12, output.req.v_end);
CPPUNIT_ASSERT_EQUAL(0, output.req.m_start);
CPPUNIT_ASSERT_EQUAL(2, output.req.m_end);
CPPUNIT_ASSERT_EQUAL(0, memcmp("GET", &output.buf[output.req.m_start],(output.req.m_end-output.req.m_start+1)));
+ CPPUNIT_ASSERT_EQUAL(HttpRequestMethod(Http::METHOD_GET), *output.method_);
CPPUNIT_ASSERT_EQUAL(4, output.req.u_start);
CPPUNIT_ASSERT_EQUAL(4, output.req.u_end);
CPPUNIT_ASSERT_EQUAL(0, memcmp("/", &output.buf[output.req.u_start],(output.req.u_end-output.req.u_start+1)));
CPPUNIT_ASSERT_EQUAL(0, output.req.m_start);
CPPUNIT_ASSERT_EQUAL(2, output.req.m_end);
CPPUNIT_ASSERT_EQUAL(0, memcmp("GET", &output.buf[output.req.m_start],(output.req.m_end-output.req.m_start+1)));
+ CPPUNIT_ASSERT_EQUAL(HttpRequestMethod(Http::METHOD_GET), *output.method_);
CPPUNIT_ASSERT_EQUAL(4, output.req.u_start);
CPPUNIT_ASSERT_EQUAL(4, output.req.u_end);
CPPUNIT_ASSERT_EQUAL(0, memcmp("/", &output.buf[output.req.u_start],(output.req.u_end-output.req.u_start+1)));
CPPUNIT_ASSERT_EQUAL(0, output.req.m_start);
CPPUNIT_ASSERT_EQUAL(2, output.req.m_end);
CPPUNIT_ASSERT_EQUAL(0, memcmp("GET", &output.buf[output.req.m_start],(output.req.m_end-output.req.m_start+1)));
+ CPPUNIT_ASSERT_EQUAL(HttpRequestMethod(Http::METHOD_GET), *output.method_);
CPPUNIT_ASSERT_EQUAL(4, output.req.u_start);
CPPUNIT_ASSERT_EQUAL(4, output.req.u_end);
CPPUNIT_ASSERT_EQUAL(0, memcmp("/", &output.buf[output.req.u_start],(output.req.u_end-output.req.u_start+1)));
CPPUNIT_ASSERT_EQUAL(0, output.req.m_start);
CPPUNIT_ASSERT_EQUAL(2, output.req.m_end);
CPPUNIT_ASSERT_EQUAL(0, memcmp("GET", &output.buf[output.req.m_start],(output.req.m_end-output.req.m_start+1)));
+ CPPUNIT_ASSERT_EQUAL(HttpRequestMethod(Http::METHOD_GET), *output.method_);
CPPUNIT_ASSERT_EQUAL(4, output.req.u_start);
CPPUNIT_ASSERT_EQUAL(4, output.req.u_end);
CPPUNIT_ASSERT_EQUAL(0, memcmp("/", &output.buf[output.req.u_start],(output.req.u_end-output.req.u_start+1)));
CPPUNIT_ASSERT_EQUAL(0, output.req.m_start);
CPPUNIT_ASSERT_EQUAL(2, output.req.m_end);
CPPUNIT_ASSERT_EQUAL(0, memcmp("GET", &output.buf[output.req.m_start],(output.req.m_end-output.req.m_start+1)));
+ CPPUNIT_ASSERT_EQUAL(HttpRequestMethod(Http::METHOD_GET), *output.method_);
CPPUNIT_ASSERT_EQUAL(4, output.req.u_start);
CPPUNIT_ASSERT_EQUAL(4, output.req.u_end);
CPPUNIT_ASSERT_EQUAL(0, memcmp("/", &output.buf[output.req.u_start],(output.req.u_end-output.req.u_start+1)));
CPPUNIT_ASSERT_EQUAL(0, output.req.m_start);
CPPUNIT_ASSERT_EQUAL(2, output.req.m_end);
CPPUNIT_ASSERT_EQUAL(0, memcmp("GET", &output.buf[output.req.m_start],(output.req.m_end-output.req.m_start+1)));
+ CPPUNIT_ASSERT_EQUAL(HttpRequestMethod(Http::METHOD_GET), *output.method_);
CPPUNIT_ASSERT_EQUAL(4, output.req.u_start);
CPPUNIT_ASSERT_EQUAL(4, output.req.u_end);
CPPUNIT_ASSERT_EQUAL(0, memcmp("/", &output.buf[output.req.u_start],(output.req.u_end-output.req.u_start+1)));
CPPUNIT_ASSERT_EQUAL(0, output.req.m_start);
CPPUNIT_ASSERT_EQUAL(2, output.req.m_end);
CPPUNIT_ASSERT_EQUAL(0, memcmp("GET", &output.buf[output.req.m_start],(output.req.m_end-output.req.m_start+1)));
+ CPPUNIT_ASSERT_EQUAL(HttpRequestMethod(Http::METHOD_GET), *output.method_);
CPPUNIT_ASSERT_EQUAL(5, output.req.u_start);
CPPUNIT_ASSERT_EQUAL(5, output.req.u_end);
CPPUNIT_ASSERT_EQUAL(0, memcmp("/", &output.buf[output.req.u_start],(output.req.u_end-output.req.u_start+1)));
CPPUNIT_ASSERT_EQUAL(0, output.req.m_start);
CPPUNIT_ASSERT_EQUAL(2, output.req.m_end);
CPPUNIT_ASSERT_EQUAL(0, memcmp("GET", &output.buf[output.req.m_start],(output.req.m_end-output.req.m_start+1)));
+ CPPUNIT_ASSERT_EQUAL(HttpRequestMethod(Http::METHOD_GET), *output.method_);
CPPUNIT_ASSERT_EQUAL(4, output.req.u_start);
CPPUNIT_ASSERT_EQUAL(9, output.req.u_end);
CPPUNIT_ASSERT_EQUAL(0, memcmp("/fo o/", &output.buf[output.req.u_start],(output.req.u_end-output.req.u_start+1)));
CPPUNIT_ASSERT_EQUAL(0, output.req.m_start);
CPPUNIT_ASSERT_EQUAL(2, output.req.m_end);
CPPUNIT_ASSERT_EQUAL(0, memcmp("GET", &output.buf[output.req.m_start],(output.req.m_end-output.req.m_start+1)));
+ CPPUNIT_ASSERT_EQUAL(HttpRequestMethod(Http::METHOD_GET), *output.method_);
CPPUNIT_ASSERT_EQUAL(4, output.req.u_start);
CPPUNIT_ASSERT_EQUAL(4, output.req.u_end); // strangeness generated by following RFC
CPPUNIT_ASSERT_EQUAL(0, memcmp("/", &output.buf[output.req.u_start],(output.req.u_end-output.req.u_start+1)));
CPPUNIT_ASSERT_EQUAL(0, output.req.m_start);
CPPUNIT_ASSERT_EQUAL(2, output.req.m_end);
CPPUNIT_ASSERT_EQUAL(0, memcmp("GET", &output.buf[output.req.m_start],(output.req.m_end-output.req.m_start+1)));
+ CPPUNIT_ASSERT_EQUAL(HttpRequestMethod(Http::METHOD_GET), *output.method_);
CPPUNIT_ASSERT_EQUAL(4, output.req.u_start);
CPPUNIT_ASSERT_EQUAL(4, output.req.u_end);
CPPUNIT_ASSERT_EQUAL(0, memcmp("/", &output.buf[output.req.u_start],(output.req.u_end-output.req.u_start+1)));
CPPUNIT_ASSERT_EQUAL(0, output.req.m_start);
CPPUNIT_ASSERT_EQUAL(2, output.req.m_end);
CPPUNIT_ASSERT_EQUAL(0, memcmp("GET", &output.buf[output.req.m_start],(output.req.m_end-output.req.m_start+1)));
+ CPPUNIT_ASSERT_EQUAL(HttpRequestMethod(Http::METHOD_GET), *output.method_);
CPPUNIT_ASSERT_EQUAL(4, output.req.u_start);
CPPUNIT_ASSERT_EQUAL(4, output.req.u_end);
CPPUNIT_ASSERT_EQUAL(0, memcmp("/", &output.buf[output.req.u_start],(output.req.u_end-output.req.u_start+1)));
CPPUNIT_ASSERT_EQUAL(0, output.req.m_start);
CPPUNIT_ASSERT_EQUAL(2, output.req.m_end);
CPPUNIT_ASSERT_EQUAL(0, memcmp("GET", &output.buf[output.req.m_start],(output.req.m_end-output.req.m_start+1)));
+ CPPUNIT_ASSERT_EQUAL(HttpRequestMethod(Http::METHOD_GET), *output.method_);
CPPUNIT_ASSERT_EQUAL(4, output.req.u_start);
CPPUNIT_ASSERT_EQUAL(4, output.req.u_end);
CPPUNIT_ASSERT_EQUAL(0, memcmp("/", &output.buf[output.req.u_start],(output.req.u_end-output.req.u_start+1)));
CPPUNIT_ASSERT_EQUAL(0, output.req.m_start);
CPPUNIT_ASSERT_EQUAL(2, output.req.m_end);
CPPUNIT_ASSERT_EQUAL(0, memcmp("GET", &output.buf[output.req.m_start],(output.req.m_end-output.req.m_start+1)));
+ CPPUNIT_ASSERT_EQUAL(HttpRequestMethod(Http::METHOD_GET), *output.method_);
CPPUNIT_ASSERT_EQUAL(4, output.req.u_start);
CPPUNIT_ASSERT_EQUAL(13, output.req.u_end);
CPPUNIT_ASSERT_EQUAL(0, memcmp("/ HTTP/1.1", &output.buf[output.req.u_start],(output.req.u_end-output.req.u_start+1)));
CPPUNIT_ASSERT_EQUAL(-1, output.req.end);
CPPUNIT_ASSERT_EQUAL(-1, output.req.m_start);
CPPUNIT_ASSERT_EQUAL(-1, output.req.m_end);
+ CPPUNIT_ASSERT(!output.method_);
CPPUNIT_ASSERT_EQUAL(-1, output.req.u_start);
CPPUNIT_ASSERT_EQUAL(-1, output.req.u_end);
CPPUNIT_ASSERT_EQUAL(-1, output.req.v_start);
CPPUNIT_ASSERT_EQUAL(-1, output.req.end);
CPPUNIT_ASSERT_EQUAL(-1, output.req.m_start);
CPPUNIT_ASSERT_EQUAL(-1, output.req.m_end);
+ CPPUNIT_ASSERT(!output.method_);
CPPUNIT_ASSERT_EQUAL(-1, output.req.u_start);
CPPUNIT_ASSERT_EQUAL(-1, output.req.u_end);
CPPUNIT_ASSERT_EQUAL(-1, output.req.v_start);
CPPUNIT_ASSERT_EQUAL(-1, output.req.end);
CPPUNIT_ASSERT_EQUAL(-1, output.req.m_start);
CPPUNIT_ASSERT_EQUAL(-1, output.req.m_end);
+ CPPUNIT_ASSERT(!output.method_);
CPPUNIT_ASSERT_EQUAL(-1, output.req.u_start);
CPPUNIT_ASSERT_EQUAL(-1, output.req.u_end);
CPPUNIT_ASSERT_EQUAL(-1, output.req.v_start);
CPPUNIT_ASSERT_EQUAL(-1, output.req.end);
CPPUNIT_ASSERT_EQUAL(-1, output.req.m_start);
CPPUNIT_ASSERT_EQUAL(-1, output.req.m_end);
+ CPPUNIT_ASSERT(!output.method_);
CPPUNIT_ASSERT_EQUAL(-1, output.req.u_start);
CPPUNIT_ASSERT_EQUAL(-1, output.req.u_end);
CPPUNIT_ASSERT_EQUAL(-1, output.req.v_start);
CPPUNIT_ASSERT_EQUAL(0, output.req.m_start);
CPPUNIT_ASSERT_EQUAL(0, output.req.m_end);
CPPUNIT_ASSERT_EQUAL(0, memcmp(".", &output.buf[output.req.m_start],(output.req.m_end-output.req.m_start+1)));
+ CPPUNIT_ASSERT_EQUAL(HttpRequestMethod(".", NULL), *output.method_);
CPPUNIT_ASSERT_EQUAL(2, output.req.u_start);
CPPUNIT_ASSERT_EQUAL(2, output.req.u_end);
CPPUNIT_ASSERT_EQUAL(0, memcmp("/", &output.buf[output.req.u_start],(output.req.u_end-output.req.u_start+1)));
CPPUNIT_ASSERT_EQUAL(0, output.req.m_start);
CPPUNIT_ASSERT_EQUAL(6, output.req.m_end);
CPPUNIT_ASSERT_EQUAL(0, memcmp("OPTIONS", &output.buf[output.req.m_start],(output.req.m_end-output.req.m_start+1)));
+ CPPUNIT_ASSERT_EQUAL(HttpRequestMethod(Http::METHOD_OPTIONS), *output.method_);
CPPUNIT_ASSERT_EQUAL(8, output.req.u_start);
CPPUNIT_ASSERT_EQUAL(8, output.req.u_end);
CPPUNIT_ASSERT_EQUAL(0, memcmp("*", &output.buf[output.req.u_start],(output.req.u_end-output.req.u_start+1)));
CPPUNIT_ASSERT_EQUAL(0, output.req.m_start);
CPPUNIT_ASSERT_EQUAL(9, output.req.m_end);
CPPUNIT_ASSERT_EQUAL(0, memcmp("HELLOWORLD", &output.buf[output.req.m_start],(output.req.m_end-output.req.m_start+1)));
+ CPPUNIT_ASSERT_EQUAL(HttpRequestMethod("HELLOWORLD",NULL), *output.method_);
CPPUNIT_ASSERT_EQUAL(11, output.req.u_start);
CPPUNIT_ASSERT_EQUAL(11, output.req.u_end);
CPPUNIT_ASSERT_EQUAL(0, memcmp("/", &output.buf[output.req.u_start],(output.req.u_end-output.req.u_start+1)));
CPPUNIT_ASSERT_EQUAL(0, memcmp("A\n", &output.buf[output.req.start],(output.req.end-output.req.start+1)));
CPPUNIT_ASSERT_EQUAL(0, output.req.m_start);
CPPUNIT_ASSERT_EQUAL(-1, output.req.m_end);
+ CPPUNIT_ASSERT(!output.method_);
CPPUNIT_ASSERT_EQUAL(-1, output.req.u_start);
CPPUNIT_ASSERT_EQUAL(-1, output.req.u_end);
CPPUNIT_ASSERT_EQUAL(-1, output.req.v_start);
CPPUNIT_ASSERT_EQUAL(0, memcmp("GET\n", &output.buf[output.req.start],(output.req.end-output.req.start+1)));
CPPUNIT_ASSERT_EQUAL(0, output.req.m_start);
CPPUNIT_ASSERT_EQUAL(-1, output.req.m_end);
+ CPPUNIT_ASSERT(!output.method_);
CPPUNIT_ASSERT_EQUAL(-1, output.req.u_start);
CPPUNIT_ASSERT_EQUAL(-1, output.req.u_end);
CPPUNIT_ASSERT_EQUAL(-1, output.req.v_start);
CPPUNIT_ASSERT_EQUAL(1, output.req.m_start);
CPPUNIT_ASSERT_EQUAL(3, output.req.m_end);
CPPUNIT_ASSERT_EQUAL(0, memcmp("GET", &output.buf[output.req.m_start],(output.req.m_end-output.req.m_start+1)));
+ CPPUNIT_ASSERT_EQUAL(HttpRequestMethod(Http::METHOD_GET), *output.method_);
CPPUNIT_ASSERT_EQUAL(5, output.req.u_start);
CPPUNIT_ASSERT_EQUAL(5, output.req.u_end);
CPPUNIT_ASSERT_EQUAL(0, memcmp("/", &output.buf[output.req.u_start],(output.req.u_end-output.req.u_start+1)));
CPPUNIT_ASSERT_EQUAL(0, memcmp(" GET / HTTP/1.1\n", &output.buf[output.req.start],(output.req.end-output.req.start+1)));
CPPUNIT_ASSERT_EQUAL(0, output.req.m_start);
CPPUNIT_ASSERT_EQUAL(-1, output.req.m_end);
+ CPPUNIT_ASSERT(!output.method_);
CPPUNIT_ASSERT_EQUAL(-1, output.req.u_start);
CPPUNIT_ASSERT_EQUAL(-1, output.req.u_end);
CPPUNIT_ASSERT_EQUAL(-1, output.req.v_start);
CPPUNIT_ASSERT_EQUAL(-1, output.req.v_end);
CPPUNIT_ASSERT_EQUAL(AnyP::ProtocolVersion(AnyP::PROTO_NONE,0,0), output.msgProtocol_);
input.reset();
+ Config.onoff.relaxed_header_parser = 1;
}
// tab padded method (NP: tab is not SP so treated as any other binary)
CPPUNIT_ASSERT_EQUAL(0, output.req.m_start);
CPPUNIT_ASSERT_EQUAL(3, output.req.m_end);
CPPUNIT_ASSERT_EQUAL(0, memcmp("\tGET", &output.buf[output.req.m_start],(output.req.m_end-output.req.m_start+1)));
+ CPPUNIT_ASSERT_EQUAL(HttpRequestMethod(&output.buf[output.req.m_start],&output.buf[output.req.m_end+1]), *output.method_);
CPPUNIT_ASSERT_EQUAL(5, output.req.u_start);
CPPUNIT_ASSERT_EQUAL(5, output.req.u_end);
CPPUNIT_ASSERT_EQUAL(0, memcmp("/", &output.buf[output.req.u_start],(output.req.u_end-output.req.u_start+1)));
CPPUNIT_ASSERT_EQUAL(0, output.req.m_start);
CPPUNIT_ASSERT_EQUAL(0, output.req.m_end);
CPPUNIT_ASSERT_EQUAL(0, memcmp("/", &output.buf[output.req.m_start],(output.req.m_end-output.req.m_start+1)));
+ CPPUNIT_ASSERT_EQUAL(HttpRequestMethod("/",NULL), *output.method_);
CPPUNIT_ASSERT_EQUAL(2, output.req.u_start);
CPPUNIT_ASSERT_EQUAL(9, output.req.u_end);
CPPUNIT_ASSERT_EQUAL(0, memcmp("HTTP/1.0", &output.buf[output.req.u_start],(output.req.u_end-output.req.u_start+1)));
CPPUNIT_ASSERT_EQUAL(1, output.req.m_start);
CPPUNIT_ASSERT_EQUAL(1, output.req.m_end);
CPPUNIT_ASSERT_EQUAL(0, memcmp("/", &output.buf[output.req.m_start],(output.req.m_end-output.req.m_start+1)));
+ CPPUNIT_ASSERT_EQUAL(HttpRequestMethod("/",NULL), *output.method_);
CPPUNIT_ASSERT_EQUAL(3, output.req.u_start);
CPPUNIT_ASSERT_EQUAL(10, output.req.u_end);
CPPUNIT_ASSERT_EQUAL(0, memcmp("HTTP/1.0", &output.buf[output.req.u_start],(output.req.u_end-output.req.u_start+1)));
CPPUNIT_ASSERT_EQUAL(0, memcmp(" / HTTP/1.0\n", &output.buf[output.req.start],(output.req.end-output.req.start+1)));
CPPUNIT_ASSERT_EQUAL(0, output.req.m_start);
CPPUNIT_ASSERT_EQUAL(-1, output.req.m_end);
+ CPPUNIT_ASSERT(!output.method_);
CPPUNIT_ASSERT_EQUAL(-1, output.req.u_start);
CPPUNIT_ASSERT_EQUAL(-1, output.req.u_end);
CPPUNIT_ASSERT_EQUAL(-1, output.req.v_start);
CPPUNIT_ASSERT_EQUAL(0, output.req.m_start);
CPPUNIT_ASSERT_EQUAL(3, output.req.m_end);
CPPUNIT_ASSERT_EQUAL(0, memcmp("GET\x0B", &output.buf[output.req.m_start],(output.req.m_end-output.req.m_start+1)));
+// CPPUNIT_ASSERT_EQUAL(HttpRequestMethod("GET\0x0B",NULL), *output.method_);
CPPUNIT_ASSERT_EQUAL(5, output.req.u_start);
CPPUNIT_ASSERT_EQUAL(5, output.req.u_end);
CPPUNIT_ASSERT_EQUAL(0, memcmp("/", &output.buf[output.req.u_start],(output.req.u_end-output.req.u_start+1)));
CPPUNIT_ASSERT_EQUAL(-1, output.req.end);
CPPUNIT_ASSERT_EQUAL(-1, output.req.m_start);
CPPUNIT_ASSERT_EQUAL(-1, output.req.m_end);
+ CPPUNIT_ASSERT(!output.method_);
CPPUNIT_ASSERT_EQUAL(-1, output.req.u_start);
CPPUNIT_ASSERT_EQUAL(-1, output.req.u_end);
CPPUNIT_ASSERT_EQUAL(-1, output.req.v_start);
CPPUNIT_ASSERT_EQUAL(0, output.req.m_start);
CPPUNIT_ASSERT_EQUAL(3, output.req.m_end);
CPPUNIT_ASSERT_EQUAL(0, memcmp("GET\0", &output.buf[output.req.m_start],(output.req.m_end-output.req.m_start+1)));
+// CPPUNIT_ASSERT_EQUAL(HttpRequestMethod("GET\0",NULL), *output.method_);
CPPUNIT_ASSERT_EQUAL(5, output.req.u_start);
CPPUNIT_ASSERT_EQUAL(5, output.req.u_end);
CPPUNIT_ASSERT_EQUAL(0, memcmp("/", &output.buf[output.req.u_start],(output.req.u_end-output.req.u_start+1)));
CPPUNIT_ASSERT_EQUAL(0, output.req.m_start);
CPPUNIT_ASSERT_EQUAL(2, output.req.m_end);
CPPUNIT_ASSERT_EQUAL(0, memcmp("GET", &output.buf[output.req.m_start],(output.req.m_end-output.req.m_start+1)));
+ CPPUNIT_ASSERT_EQUAL(HttpRequestMethod(Http::METHOD_GET), *output.method_);
CPPUNIT_ASSERT_EQUAL(5, output.req.u_start);
CPPUNIT_ASSERT_EQUAL(12, output.req.u_end);
CPPUNIT_ASSERT_EQUAL(-1, output.req.v_start);
CPPUNIT_ASSERT_EQUAL(0, output.req.m_start);
CPPUNIT_ASSERT_EQUAL(2, output.req.m_end);
CPPUNIT_ASSERT_EQUAL(0, memcmp("GET", &output.buf[output.req.m_start],(output.req.m_end-output.req.m_start+1)));
+ CPPUNIT_ASSERT_EQUAL(HttpRequestMethod(Http::METHOD_GET), *output.method_);
CPPUNIT_ASSERT_EQUAL(4, output.req.u_start);
CPPUNIT_ASSERT_EQUAL(11, output.req.u_end);
CPPUNIT_ASSERT_EQUAL(0, memcmp("HTTP/1.1", &output.buf[output.req.u_start],(output.req.u_end-output.req.u_start+1)));
CPPUNIT_ASSERT_EQUAL(0, memcmp("\xB\xC\xE\xF\n", &output.buf[output.req.start],(output.req.end-output.req.start+1)));
CPPUNIT_ASSERT_EQUAL(0, output.req.m_start);
CPPUNIT_ASSERT_EQUAL(-1, output.req.m_end);
+ CPPUNIT_ASSERT(!output.method_);
CPPUNIT_ASSERT_EQUAL(-1, output.req.u_start);
CPPUNIT_ASSERT_EQUAL(-1, output.req.u_end);
CPPUNIT_ASSERT_EQUAL(-1, output.req.v_start);
CPPUNIT_ASSERT_EQUAL(0, output.req.m_start);
CPPUNIT_ASSERT_EQUAL(0, output.req.m_end);
CPPUNIT_ASSERT_EQUAL(0, memcmp("\t", &output.buf[output.req.m_start],(output.req.m_end-output.req.m_start+1)));
+ CPPUNIT_ASSERT_EQUAL(HttpRequestMethod(&output.buf[output.req.m_start],&output.buf[output.req.m_end+1]), *output.method_);
CPPUNIT_ASSERT_EQUAL(-1, output.req.u_start);
CPPUNIT_ASSERT_EQUAL(-1, output.req.u_end);
CPPUNIT_ASSERT_EQUAL(-1, output.req.v_start);
CPPUNIT_ASSERT_EQUAL(-1, output.req.end);
CPPUNIT_ASSERT_EQUAL(-1, output.req.m_start);
CPPUNIT_ASSERT_EQUAL(-1, output.req.m_end);
+ CPPUNIT_ASSERT(!output.method_);
CPPUNIT_ASSERT_EQUAL(-1, output.req.u_start);
CPPUNIT_ASSERT_EQUAL(-1, output.req.u_end);
CPPUNIT_ASSERT_EQUAL(-1, output.req.v_start);