samisa      2005/01/05 03:32:22

  Modified:    c/src/transport/axis2 Axis2Transport.cpp Channel.cpp
                        Channel.h
  Log:
  Fixed proxy support. Tests were successful.
  
  Revision  Changes    Path
  1.36      +18 -3     ws-axis/c/src/transport/axis2/Axis2Transport.cpp
  
  Index: Axis2Transport.cpp
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/src/transport/axis2/Axis2Transport.cpp,v
  retrieving revision 1.35
  retrieving revision 1.36
  diff -u -r1.35 -r1.36
  --- Axis2Transport.cpp        4 Jan 2005 18:26:23 -0000       1.35
  +++ Axis2Transport.cpp        5 Jan 2005 11:32:22 -0000       1.36
  @@ -265,13 +265,23 @@
       URL & url = m_pChannel->getURLObject ();
   
       m_strHeaderBytesToSend = m_strHTTPMethod + " ";
  -    m_strHeaderBytesToSend += std::string (url.getResource ()) + " ";
  +    if (m_bUseProxy)
  +        m_strHeaderBytesToSend += std::string (url.getURL ()) + " ";
  +    else
  +        m_strHeaderBytesToSend += std::string (url.getResource ()) + " ";
  +
       m_strHeaderBytesToSend += m_strHTTPProtocol + "\r\n";
  -    m_strHeaderBytesToSend += std::string ("Host: ") + url.getHostName ();
  +
  +    if (m_bUseProxy)
  +        m_strHeaderBytesToSend += std::string ("Host: ") + m_strProxyHost;
  +    else
  +        m_strHeaderBytesToSend += std::string ("Host: ") + url.getHostName 
();
   
       unsigned short uiPort = url.getPort ();
  +    if (m_bUseProxy)
  +        uiPort = m_uiProxyPort;
       char buff[8];
  -
  +   
       sprintf (buff, "%u", uiPort);
   
       m_strHeaderBytesToSend += ":";
  @@ -999,6 +1009,7 @@
   void
   Axis2Transport::setProxy (const char *pcProxyHost, unsigned int uiProxyPort)
   {
  +    m_pChannel->setProxy(pcProxyHost, uiProxyPort);
       m_strProxyHost = pcProxyHost;
       m_uiProxyPort = uiProxyPort;
       m_bUseProxy = true;
  @@ -1149,6 +1160,10 @@
   
            // We need to close the connection and open a new one if we have 
'Connection: close'
            if (key == "Connection" && value == " close")
  +             m_bReopenConnection = true;
  +
  +         // We need to close the connection and open a new one if we have 
'Proxy-Connection: close'
  +         if (key == "Proxy-Connection" && value == " close")
                m_bReopenConnection = true;
   
            // For both HTTP/1.0 and HTTP/1.1,
  
  
  
  1.12      +17 -4     ws-axis/c/src/transport/axis2/Channel.cpp
  
  Index: Channel.cpp
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/src/transport/axis2/Channel.cpp,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- Channel.cpp       4 Jan 2005 18:26:24 -0000       1.11
  +++ Channel.cpp       5 Jan 2005 11:32:22 -0000       1.12
  @@ -148,18 +148,25 @@
                sockaddr_in                     svAddr;
                struct hostent *        pHostEntry = NULL;
   
  +                const char* host = m_URL.getHostName();
  +                unsigned int port = m_URL.getPort();
  +                if (m_bUseProxy)
  +                {
  +                    port = m_uiProxyPort;
  +                    host = m_strProxyHost.c_str();
  +                }
                svAddr.sin_family = AF_INET;
  -             svAddr.sin_port = htons (m_URL.getPort());
  +             svAddr.sin_port = htons (port);
   
                // Probably this is the host-name of the server we are 
connecting to...
  -             if( (pHostEntry = gethostbyname( m_URL.getHostName())))
  +             if( (pHostEntry = gethostbyname(host)))
                {
                        svAddr.sin_addr.s_addr = ((struct in_addr *) 
pHostEntry->h_addr)->s_addr;
                }
                else
                {
                        // No this is the IP address
  -                     svAddr.sin_addr.s_addr = inet_addr 
(m_URL.getHostName());
  +                     svAddr.sin_addr.s_addr = inet_addr (host);
                }
   
                // Attempt to connect to the remote server.
  @@ -310,7 +317,6 @@
    */
   const Channel &Channel::operator << (const char *msg)
   {
  -
        // Check that the Tx/Rx sockets are valid (this will have been done if 
the
        // application has called the open method first.
       if( INVALID_SOCKET == m_Sock)
  @@ -663,4 +669,11 @@
   
                printf( "%s %s\n", sLineHex.c_str(), sLineChar.c_str());
        }
  +}
  +
  +void Channel::setProxy (const char *pcProxyHost, unsigned int uiProxyPort)
  +{
  +    m_strProxyHost = pcProxyHost;
  +    m_uiProxyPort = uiProxyPort;
  +    m_bUseProxy = true;
   }
  
  
  
  1.8       +20 -0     ws-axis/c/src/transport/axis2/Channel.h
  
  Index: Channel.h
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/src/transport/axis2/Channel.h,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- Channel.h 4 Jan 2005 18:26:24 -0000       1.7
  +++ Channel.h 5 Jan 2005 11:32:22 -0000       1.8
  @@ -130,6 +130,14 @@
                return m_sMsg;
        }
   
  +  /**
  +    * Set proxy server and port for transport.
  +    *
  +    * @param pcProxyHost Host name of proxy server
  +    * @param uiProxyPort Port of proxy server
  +    */
  +    void setProxy (const char *pcProxyHost, unsigned int uiProxyPort);
  +
   protected:
       /* OS specific initilization */
       virtual bool Init();
  @@ -158,6 +166,18 @@
       */
       long m_lTimeoutSeconds;
   
  +  /**
  +    * Proxy server name.
  +    */
  +    std::string m_strProxyHost;
  +  /**
  +    * Proxy server port.
  +    */
  +    unsigned int m_uiProxyPort;
  +  /**
  +    * Use Proxy or not?
  +    */
  +    bool m_bUseProxy;
   };
   
   #endif
  
  
  

Reply via email to