mirror of https://github.com/aria2/aria2
* 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
parent
bc1cf6ed2d
commit
583e09780b
|
@ -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>
|
||||
|
||||
|
|
|
@ -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) {
|
||||
|
|
67
src/Socket.h
67
src/Socket.h
|
@ -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;
|
||||
};
|
||||
|
|
|
@ -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() ;
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue