Просмотр исходного кода

* 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.

Tatsuhiro Tsujikawa 19 лет назад
Родитель
Сommit
583e09780b
4 измененных файлов с 130 добавлено и 38 удалено
  1. 4 0
      ChangeLog
  2. 4 1
      src/HttpConnection.cc
  3. 46 21
      src/Socket.h
  4. 76 16
      src/SocketCore.h

+ 4 - 0
ChangeLog

@@ -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>
 

+ 4 - 1
src/HttpConnection.cc

@@ -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) {

+ 46 - 21
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;
 };

+ 76 - 16
src/SocketCore.h

@@ -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() ;
 };