summaryrefslogtreecommitdiff
path: root/src/HttpConnection.cc
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2006-02-22 15:40:04 +0000
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2006-02-22 15:40:04 +0000
commitcd5f591c417ec4924181af6c7f3c439b20f614b1 (patch)
tree43ccd5b0b3c17cba0c4b31ca3b3917e1204c9e9c /src/HttpConnection.cc
parent5a624f5a3dba9a55bc8659338f694c5ea9059940 (diff)
Diffstat (limited to 'src/HttpConnection.cc')
-rw-r--r--src/HttpConnection.cc22
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;
+}