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