diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2006-02-22 15:40:04 +0000 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2006-02-22 15:40:04 +0000 |
| commit | cd5f591c417ec4924181af6c7f3c439b20f614b1 (patch) | |
| tree | 43ccd5b0b3c17cba0c4b31ca3b3917e1204c9e9c /src/HttpConnection.cc | |
| parent | 5a624f5a3dba9a55bc8659338f694c5ea9059940 (diff) | |
Diffstat (limited to 'src/HttpConnection.cc')
| -rw-r--r-- | src/HttpConnection.cc | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/src/HttpConnection.cc b/src/HttpConnection.cc index 38949bd0..815975d2 100644 --- a/src/HttpConnection.cc +++ b/src/HttpConnection.cc @@ -41,22 +41,26 @@ void HttpConnection::sendProxyRequest() const { string(" HTTP/1.1\r\n")+ "Host: "+getHost(req->getHost(), req->getPort())+"\r\n"; if(useProxyAuth()) { - request += "Proxy-Authorization: Basic "+ - Base64::encode(option->get(PREF_HTTP_PROXY_USER)+":"+ - option->get(PREF_HTTP_PROXY_PORT))+"\r\n"; + request += getProxyAuthString(); } request += "\r\n"; logger->info(MSG_SENDING_REQUEST, cuid, request.c_str()); socket->writeData(request.c_str(), request.size()); } +string HttpConnection::getProxyAuthString() const { + return "Proxy-Authorization: Basic "+ + Base64::encode(option->get(PREF_HTTP_PROXY_USER)+":"+ + option->get(PREF_HTTP_PROXY_PORT))+"\r\n"; +} + string HttpConnection::getHost(const string& host, int port) const { return host+(port == 80 || port == 443 ? "" : ":"+Util::llitos(port)); } string HttpConnection::createRequest(const Segment& segment) const { string request = string("GET ")+ - (req->getProtocol() == "ftp" ? + (req->getProtocol() == "ftp" || useProxy() && useProxyGet() ? req->getCurrentUrl() : ((req->getDir() == "/" ? "/" : req->getDir()+"/")+req->getFile()))+ string(" HTTP/1.1\r\n")+ @@ -70,6 +74,9 @@ string HttpConnection::createRequest(const Segment& segment) const { request += "Range: bytes="+ Util::llitos(segment.sp+segment.ds)+"-"+Util::llitos(segment.ep)+"\r\n"; } + if(useProxy() && useProxyAuth() && useProxyGet()) { + request += getProxyAuthString(); + } if(option->get(PREF_HTTP_AUTH_SCHEME) == V_BASIC) { request += "Authorization: Basic "+ Base64::encode(option->get(PREF_HTTP_USER)+":"+ @@ -96,6 +103,9 @@ int HttpConnection::receiveResponse(HttpHeader& headers) { while(socket->isReadable(0)) { int size = sizeof(buf)-1; socket->peekData(buf, size); + if(size == 0) { + throw new DlRetryEx(EX_INVALID_RESPONSE); + } buf[size] = '\0'; int hlenTemp = header.size(); header += buf; @@ -145,3 +155,7 @@ bool HttpConnection::useProxy() const { bool HttpConnection::useProxyAuth() const { return option->get(PREF_HTTP_PROXY_AUTH_ENABLED) == V_TRUE; } + +bool HttpConnection::useProxyGet() const { + return option->get(PREF_HTTP_PROXY_METHOD) == V_GET; +} |
