summaryrefslogtreecommitdiff
path: root/cpp/src/Ice/Network.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/Ice/Network.cpp')
-rw-r--r--cpp/src/Ice/Network.cpp140
1 files changed, 10 insertions, 130 deletions
diff --git a/cpp/src/Ice/Network.cpp b/cpp/src/Ice/Network.cpp
index 919826f6e2e..0ad8aa6cefa 100644
--- a/cpp/src/Ice/Network.cpp
+++ b/cpp/src/Ice/Network.cpp
@@ -19,6 +19,7 @@
#include <IceUtil/DisableWarnings.h>
#include <Ice/Network.h>
+#include <Ice/NetworkProxy.h>
#include <IceUtil/StringUtil.h>
#include <IceUtil/StringConverter.h>
#include <Ice/LocalException.h>
@@ -201,7 +202,6 @@ SOCKET
createSocketImpl(bool udp, int family)
{
SOCKET fd;
-
if(udp)
{
fd = socket(family, SOCK_DGRAM, IPPROTO_UDP);
@@ -786,118 +786,6 @@ IceInternal::NativeInfo::completed(SocketOperation operation)
#endif
-IceUtil::Shared* IceInternal::upCast(NetworkProxy* p) { return p; }
-
-#ifndef ICE_OS_WINRT
-
-IceInternal::SOCKSNetworkProxy::SOCKSNetworkProxy(const string& host, int port) :
- _host(host), _port(port)
-{
- assert(!host.empty());
- memset(&_address, 0, sizeof(_address));
-}
-
-IceInternal::SOCKSNetworkProxy::SOCKSNetworkProxy(const Address& addr) :
- _port(0), _address(addr)
-{
-}
-
-void
-IceInternal::SOCKSNetworkProxy::beginWriteConnectRequest(const Address& addr, Buffer& buf)
-{
- if(addr.saStorage.ss_family != AF_INET)
- {
- throw FeatureNotSupportedException(__FILE__, __LINE__, "SOCKS4 only supports IPv4 addresses");
- }
-
- //
- // SOCKS connect request
- //
- buf.b.resize(9);
- buf.i = buf.b.begin();
- Byte* dest = &buf.b[0];
- *dest++ = 0x04; // SOCKS version 4.
- *dest++ = 0x01; // Command, establish a TCP/IP stream connection
-
- const Byte* src;
-
- //
- // Port (already in big-endian order)
- //
- src = reinterpret_cast<const Byte*>(&addr.saIn.sin_port);
- *dest++ = *src++;
- *dest++ = *src;
-
- //
- // IPv4 address (already in big-endian order)
- //
- src = reinterpret_cast<const Ice::Byte*>(&addr.saIn.sin_addr.s_addr);
- *dest++ = *src++;
- *dest++ = *src++;
- *dest++ = *src++;
- *dest++ = *src;
-
- *dest = 0x00; // User ID.
-}
-
-void
-IceInternal::SOCKSNetworkProxy::endWriteConnectRequest(Buffer& buf)
-{
- buf.b.reset();
-}
-
-void
-IceInternal::SOCKSNetworkProxy::beginReadConnectRequestResponse(Buffer& buf)
-{
- //
- // Read the SOCKS4 response whose size is 8 bytes.
- //
- buf.b.resize(8);
- buf.i = buf.b.begin();
-}
-
-void
-IceInternal::SOCKSNetworkProxy::endReadConnectRequestResponse(Buffer& buf)
-{
- buf.i = buf.b.begin();
-
- if(buf.b.end() - buf.i < 2)
- {
- throw UnmarshalOutOfBoundsException(__FILE__, __LINE__);
- }
-
- const Byte* src = &(*buf.i);
- const Byte b1 = *src++;
- const Byte b2 = *src++;
- if(b1 != 0x00 || b2 != 0x5a)
- {
- throw ConnectFailedException(__FILE__, __LINE__);
- }
- buf.b.reset();
-}
-
-NetworkProxyPtr
-IceInternal::SOCKSNetworkProxy::resolveHost() const
-{
- assert(!_host.empty());
- return new SOCKSNetworkProxy(getAddresses(_host, _port, EnableIPv4, Random, false, true)[0]);
-}
-
-Address
-IceInternal::SOCKSNetworkProxy::getAddress() const
-{
- assert(_host.empty()); // Host must be resolved.
- return _address;
-}
-
-string
-IceInternal::SOCKSNetworkProxy::getName() const
-{
- return "SOCKS";
-}
-
-#endif // ICE_OS_WINRT
-
bool
IceInternal::noMoreFds(int error)
{
@@ -947,7 +835,8 @@ IceInternal::getAddresses(const string& host, int port, ProtocolSupport, Ice::En
// to Windows API.
//
addr.host = ref new HostName(ref new String(
- IceUtil::stringToWstring(host, IceUtil::getProcessStringConverter()).c_str()));
+ IceUtil::stringToWstring(host,
+ IceUtil::getProcessStringConverter()).c_str()));
}
stringstream os;
os << port;
@@ -1400,12 +1289,7 @@ IceInternal::fdToRemoteAddress(SOCKET fd, Address& addr)
}
std::string
-IceInternal::fdToString(SOCKET fd, const NetworkProxyPtr& proxy, const Address& target,
-#if defined(_WIN32)
- bool connected)
-#else
- bool /*connected*/)
-#endif
+IceInternal::fdToString(SOCKET fd, const NetworkProxyPtr& proxy, const Address& target)
{
if(fd == INVALID_SOCKET)
{
@@ -1414,8 +1298,11 @@ IceInternal::fdToString(SOCKET fd, const NetworkProxyPtr& proxy, const Address&
ostringstream s;
-#if defined(_WIN32)
- if(!connected)
+ Address remoteAddr;
+ bool peerConnected = fdToRemoteAddress(fd, remoteAddr);
+
+#ifdef _WIN32
+ if(!peerConnected)
{
//
// The local address is only accessible with connected sockets on Windows.
@@ -1423,19 +1310,12 @@ IceInternal::fdToString(SOCKET fd, const NetworkProxyPtr& proxy, const Address&
s << "local address = <not available>";
}
else
+#endif
{
Address localAddr;
fdToLocalAddress(fd, localAddr);
s << "local address = " << addrToString(localAddr);
}
-#else
- Address localAddr;
- fdToLocalAddress(fd, localAddr);
- s << "local address = " << addrToString(localAddr);
-#endif
-
- Address remoteAddr;
- bool peerConnected = fdToRemoteAddress(fd, remoteAddr);
if(proxy)
{