X-Git-Url: https://git.saurik.com/apple/security.git/blobdiff_plain/ded8f8e2930c4e5d6e866d59fc94c6b179af527c..67c7378dcb8de24c86b7fedff90b4b496f2e474c:/Network/http-protocol.cpp?ds=sidebyside diff --git a/Network/http-protocol.cpp b/Network/http-protocol.cpp index 53e7806d..6a94d92f 100644 --- a/Network/http-protocol.cpp +++ b/Network/http-protocol.cpp @@ -72,6 +72,7 @@ HTTPProtocol::HTTPTransfer *HTTPProtocol::makeTransfer(const Target &target, Ope HTTPProtocol::HTTPConnection::HTTPConnection(Protocol &proto, const HostTarget &hostTarget) : TCPConnection(proto, hostTarget), + subVersion(defaultSubVersion), state(errorState), deferSendRequest(false) { const HostTarget &host = proxyHostTarget(); @@ -96,15 +97,17 @@ void HTTPProtocol::HTTPConnection::sendRequest() { assert(state == idle); + // what version of HTTP/1 shall we use? + subVersion = getv(kNetworkHttpUseVersion, defaultSubVersion); + flushOutput(false); // hold output until we're done const Target &target = this->target(); if (transfer().useProxyHeaders()) { - printfe("%s %s HTTP/1.1", - mOperation.c_str(), target.urlForm().c_str()); + printfe("%s %s HTTP/1.%d", mOperation.c_str(), target.urlForm().c_str(), subVersion); authorizationHeader("Proxy-Authorization", hostTarget, kNetworkGenericProxyUsername, kNetworkGenericProxyPassword); } else { - printfe("%s %s HTTP/1.1", mOperation.c_str(), target.path.c_str()); + printfe("%s %s HTTP/1.%d", mOperation.c_str(), target.path.c_str(), subVersion); } hostHeader(); authorizationHeader("Authorization", target, @@ -144,6 +147,7 @@ void HTTPProtocol::HTTPConnection::sendRequest() } else { printfe("Content-length: %ld", size); } + printfe("Content-Type: %s", getv(kNetworkHttpPostContentType, "text/plain").c_str()); printfe(""); // end of headers mode(source); // initiate autoWrite mode } else { @@ -274,6 +278,7 @@ void HTTPProtocol::HTTPConnection::transit(Event event, char *input, size_t leng } else { // end of headers // we are now handling the transition from response headers to response body observe(Observer::protocolReceive, "** END OF HEADER **"); + observe(Observer::downloading, input); // Transfer-Encoding overrides Content-Length as per RFC2616 p.34 if (const char *encoding = headers().find("Transfer-Encoding")) { @@ -434,6 +439,7 @@ void HTTPProtocol::HTTPTransfer::start() void HTTPProtocol::HTTPTransfer::abort() { + observe(Observer::aborting); setError("aborted"); connectionAs().abort(); }