int QHttpConnection::HeadersComplete(http_parser *parser) { QHttpConnection *theConnection = (QHttpConnection *)parser->data; Q_ASSERT(theConnection->m_request); /** set method **/ theConnection->m_request->setMethod(static_cast<QHttpRequest::HttpMethod>(parser->method)); /** set version **/ theConnection->m_request->setVersion(QString("%1.%2").arg(parser->http_major).arg(parser->http_minor)); // Insert last remaining header theConnection->m_currentHeaders[theConnection->m_currentHeaderField.toLower()] = theConnection->m_currentHeaderValue; theConnection->m_request->setHeaders(theConnection->m_currentHeaders); /** set client information **/ theConnection->m_request->m_remoteAddress = theConnection->m_socket->peerAddress().toString(); theConnection->m_request->m_remotePort = theConnection->m_socket->peerPort(); QHttpResponse *response = new QHttpResponse(theConnection); if( parser->http_major < 1 || parser->http_minor < 1 ) response->m_keepAlive = false; connect(theConnection, SIGNAL(destroyed()), response, SLOT(connectionClosed())); // we are good to go! Q_EMIT theConnection->newRequest(theConnection->m_request, response); return 0; }
int QHttpConnection::HeadersComplete(http_parser *parser) { QHttpConnection *theConnection = static_cast<QHttpConnection *>(parser->data); Q_ASSERT(theConnection->m_request); /** set method **/ theConnection->m_request->setMethod(static_cast<QHttpRequest::HttpMethod>(parser->method)); /** set version **/ theConnection->m_request->setVersion( QString("%1.%2").arg(parser->http_major).arg(parser->http_minor)); /** get parsed url **/ struct http_parser_url urlInfo; int r = http_parser_parse_url(theConnection->m_currentUrl.constData(), theConnection->m_currentUrl.size(), parser->method == HTTP_CONNECT, &urlInfo); Q_ASSERT(r == 0); Q_UNUSED(r); theConnection->m_request->setUrl(createUrl(theConnection->m_currentUrl.constData(), urlInfo)); // Insert last remaining header theConnection->m_currentHeaders[theConnection->m_currentHeaderField.toLower()] = theConnection->m_currentHeaderValue; theConnection->m_request->setHeaders(theConnection->m_currentHeaders); /** set client information **/ theConnection->m_request->m_remoteAddress = theConnection->m_socket->peerAddress().toString(); theConnection->m_request->m_remotePort = theConnection->m_socket->peerPort(); QHttpResponse *response = new QHttpResponse(theConnection); if (parser->http_major < 1 || parser->http_minor < 1) response->m_keepAlive = false; connect(theConnection, SIGNAL(destroyed()), response, SLOT(connectionClosed())); connect(response, SIGNAL(done()), theConnection, SLOT(responseDone())); // we are good to go! emit theConnection->newRequest(theConnection->m_request, response); return 0; }