* HttpConnection.cc: Added "Proxy-Connection" header to proxy

request.
	Added "User-Agent" header to CONNECT proxy request.
	Fixed "Proxy-Authorization" header. Now proxy authorization 
works
	properly.
pull/1/head
Tatsuhiro Tsujikawa 2006-03-01 07:00:39 +00:00
parent bc1cf6ed2d
commit 583e09780b
4 changed files with 130 additions and 38 deletions

View File

@ -5,6 +5,10 @@
unregister its cuid from SegmentMan.
* DownloadEngine.cc: .aria2 file was written when a downloading
failed with errors.
* HttpConnection.cc: Added "Proxy-Connection" header to proxy request.
Added "User-Agent" header to CONNECT proxy request.
Fixed "Proxy-Authorization" header. Now proxy authorization works
properly.
2006-02-28 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>

View File

@ -39,6 +39,8 @@ void HttpConnection::sendProxyRequest() const {
string request =
string("CONNECT ")+req->getHost()+":"+Util::llitos(req->getPort())+
string(" HTTP/1.1\r\n")+
"User-Agent: aria2\r\n"+
"Proxy-Connection: close\r\n"+
"Host: "+getHost(req->getHost(), req->getPort())+"\r\n";
if(useProxyAuth()) {
request += getProxyAuthString();
@ -51,7 +53,7 @@ void HttpConnection::sendProxyRequest() const {
string HttpConnection::getProxyAuthString() const {
return "Proxy-Authorization: Basic "+
Base64::encode(option->get(PREF_HTTP_PROXY_USER)+":"+
option->get(PREF_HTTP_PROXY_PORT))+"\r\n";
option->get(PREF_HTTP_PROXY_PASSWD))+"\r\n";
}
string HttpConnection::getHost(const string& host, int port) const {
@ -75,6 +77,7 @@ string HttpConnection::createRequest(const Segment& segment) const {
Util::llitos(segment.sp+segment.ds)+"-"+Util::llitos(segment.ep)+"\r\n";
}
if(useProxy() && useProxyAuth() && useProxyGet()) {
request += "Proxy-Connection: close\r\n";
request += getProxyAuthString();
}
if(option->get(PREF_HTTP_AUTH_SCHEME) == V_BASIC) {

View File

@ -30,8 +30,10 @@ using namespace std;
class Socket {
private:
// socket endpoint descriptor
SocketCore* core;
/**
* This method doesn't increment the use count of core.
*/
Socket(SocketCore* core);
public:
Socket();
@ -40,51 +42,74 @@ public:
Socket& operator=(const Socket& s);
/**
* Returns socket descriptor of this socket.
* @returns socket descriptor of this socket.
*/
int getSockfd() const { return core->sockfd; }
/**
* @see SocketCore::beginListen()
*/
void beginListen() const;
/**
* @see SocketCore::getAddrInfo()
*/
void getAddrInfo(pair<string, int>& addrinfo) const;
/**
* @see SocketCore::acceptConnection()
*/
Socket* acceptConnection() const;
/**
* Connects to the server named host and the destination port is port.
* This method make socket non-blocking mode.
* To make the socket blocking mode, call setBlockingMode() after
* the connection is established.
* @see SocketCore::establishConnection()
*/
void establishConnection(string host, int port) const;
/**
* @see SocketCore::setBlockingMode()
*/
void setBlockingMode() const;
// Closes the connection which this socket object has
/**
* @see SocketCore::closeConnection()
*/
void closeConnection() const;
// examines whether the socket of this Socket object is available for writing.
// returns true if the socket is available for writing, otherwise returns false.
/**
* @see SocketCore::isWritable()
*/
bool isWritable(int timeout) const;
// examines whether the socket of this Socket object is available for reading.
// returns true if the socket is available for reading, otherwise returns false.
/**
* @see SocketCore::isReadable()
*/
bool isReadable(int timeout) const;
// writes characters into the socket. data is a pointer pointing the first
// byte of the data and len is the length of the data.
/**
* @see SocketCore::writeData()
*/
void writeData(const char* data, int len, int timeout = 5) const;
/**
* A covenient function that can take string class parameter and
* internally calls SocketCore::writeData().
*/
void writeData(string str, int timeout = 5) const;
// Reads up to len bytes from this socket.
// data is a pointer pointing the first
// byte of the data, which must be allocated before this method is called.
// len is the size of the allocated memory. When this method returns
// successfully, len is replaced by the size of the read data.
/**
* @see SocketCore::readData()
*/
void readData(char* data, int& len, int timeout = 5) const;
// Reads up to len bytes from this socket, but bytes are not removed from
// this socket.
/**
* @see SocketCore::peekData()
*/
void peekData(char* data, int& len, int timeout = 5) const;
/**
* Makes this socket secure.
* If the system has not OpenSSL, then this method do nothing.
* @see SocketCore::initiateSecureConnection()
*/
void initiateSecureConnection() const;
};

View File

@ -52,47 +52,107 @@ public:
SocketCore();
~SocketCore();
/**
* Creates a socket and listens form connection on it.
*/
void beginListen();
/**
* Stores host address and port of this socket to addrinfo.
* @param addrinfo placeholder to store host address and port.
*/
void getAddrInfo(pair<string, int>& addrinfo) const;
/**
* Accepts incoming connection on this socket.
* You must call beginListen() before calling this method.
* @return accepted socket. The caller must delete it after using it.
*/
SocketCore* acceptConnection() const;
/**
* Connects to the server named host and the destination port is port.
* This method make socket non-blocking mode.
* To make the socket blocking mode, call setBlockingMode() after
* This method makes socket non-blocking mode.
* To make the socket blocking mode again, call setBlockingMode() after
* the connection is established.
* @param host hostname or ip address to connect to
* @param port service port number to connect to
*/
void establishConnection(string host, int port);
/**
* Makes this socket blocking mode.
*/
void setBlockingMode() const;
// Closes the connection which this socket object has
/**
* Closes the connection of this socket.
*/
void closeConnection();
// examines whether the socket of this SocketCore object is available for writing.
// returns true if the socket is available for writing, otherwise returns false.
/**
* Checks whether this socket is available for writing.
* @param timeout the amount of time elapsed before the checking are timed
* out.
* @return true if the socket is available for writing,
* otherwise returns false.
*/
bool isWritable(int timeout) const;
// examines whether the socket of this SocketCore object is available for reading.
// returns true if the socket is available for reading, otherwise returns false.
/**
* Checks whether this socket is available for reading.
* @param timeout the amount of time elapsed before the checking are timed
* out.
* @return true if the socket is available for reading,
* otherwise returns false.
*/
bool isReadable(int timeout) const;
// writes characters into the socket. data is a pointer pointing the first
// byte of the data and len is the length of the data.
/**
* Writes characters into this socket. data is a pointer pointing the first
* byte of the data and len is the length of data.
* This method internally calls isWritable(). The parmeter timeout is used
* for this method call.
* @param data data to write
* @param len length of data
* @param timeout the amount of time elapsed before isWritable()
* are timed out.
*/
void writeData(const char* data, int len, int timeout = 5) const;
// Reads up to len bytes from this socket.
// data is a pointer pointing the first
// byte of the data, which must be allocated before this method is called.
// len is the size of the allocated memory. When this method returns
// successfully, len is replaced by the size of the read data.
/**
* Reads up to len bytes from this socket.
* data is a pointer pointing the first
* byte of the data, which must be allocated before this method is called.
* len is the size of the allocated memory. When this method returns
* successfully, len is replaced by the size of the read data.
* This method internally calls isReadable(). The parameter timeout is used
* for this method call.
* @param data holder to store data.
* @param len the maximum size data can store. This method assigns
* the number of bytes read to len.
* @param timeout the amount of time elapsed before isReadable() are timed
* out.
*/
void readData(char* data, int& len, int timeout = 5) const;
// Reads up to len bytes from this socket, but bytes are not removed from
// this socket.
/**
* Reads up to len bytes from this socket, but bytes are not removed from
* this socket.
* This method internally calls isReadable(). The parameter timeout is used
* for this method call.
* @param data holder to store data.
* @param len the maximum size data can store. This method assigns
* the number of bytes read to len.
* @param timeout the amount of time elapsed before isReadable() are timed
* out.
*/
void peekData(char* data, int& len, int timeout = 5) const;
/**
* Makes this socket secure.
* If the system has not OpenSSL, then this method do nothing.
* connection must be established before calling this method.
*/
void initiateSecureConnection() ;
};