zeroc-ice 3.7.9.1 → 3.7.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/ext/ice/cpp/include/Ice/Config.h +5 -7
- data/ext/ice/cpp/include/Ice/ConsoleUtil.h +1 -1
- data/ext/ice/cpp/include/Ice/Ice.h +2 -2
- data/ext/ice/cpp/include/Ice/SHA1.h +0 -2
- data/ext/ice/cpp/include/IceSSL/IceSSL.h +3 -7
- data/ext/ice/cpp/include/IceUtil/Config.h +12 -44
- data/ext/ice/cpp/include/IceUtil/ConsoleUtil.h +1 -1
- data/ext/ice/cpp/include/IceUtil/FileUtil.h +0 -3
- data/ext/ice/cpp/include/IceUtil/IceUtil.h +1 -1
- data/ext/ice/cpp/include/IceUtil/Mutex.h +0 -4
- data/ext/ice/cpp/include/IceUtil/ResourceConfig.h +5 -21
- data/ext/ice/cpp/include/IceUtil/Thread.h +4 -18
- data/ext/ice/cpp/include/IceUtil/Timer.h +1 -0
- data/ext/ice/cpp/include/generated/Ice/BuiltinSequences.h +2 -2
- data/ext/ice/cpp/include/generated/Ice/Communicator.h +2 -2
- data/ext/ice/cpp/include/generated/Ice/CommunicatorF.h +2 -2
- data/ext/ice/cpp/include/generated/Ice/Connection.h +2 -2
- data/ext/ice/cpp/include/generated/Ice/ConnectionF.h +2 -2
- data/ext/ice/cpp/include/generated/Ice/Current.h +4 -4
- data/ext/ice/cpp/include/generated/Ice/Endpoint.h +2 -2
- data/ext/ice/cpp/include/generated/Ice/EndpointF.h +2 -2
- data/ext/ice/cpp/include/generated/Ice/EndpointTypes.h +2 -2
- data/ext/ice/cpp/include/generated/Ice/FacetMap.h +2 -2
- data/ext/ice/cpp/include/generated/Ice/Identity.h +2 -2
- data/ext/ice/cpp/include/generated/Ice/ImplicitContext.h +2 -2
- data/ext/ice/cpp/include/generated/Ice/ImplicitContextF.h +2 -2
- data/ext/ice/cpp/include/generated/Ice/Instrumentation.h +2 -2
- data/ext/ice/cpp/include/generated/Ice/InstrumentationF.h +2 -2
- data/ext/ice/cpp/include/generated/Ice/LocalException.h +2 -2
- data/ext/ice/cpp/include/generated/Ice/Locator.h +2 -2
- data/ext/ice/cpp/include/generated/Ice/LocatorF.h +2 -2
- data/ext/ice/cpp/include/generated/Ice/Logger.h +2 -2
- data/ext/ice/cpp/include/generated/Ice/LoggerF.h +2 -2
- data/ext/ice/cpp/include/generated/Ice/Metrics.h +2 -2
- data/ext/ice/cpp/include/generated/Ice/ObjectAdapter.h +2 -2
- data/ext/ice/cpp/include/generated/Ice/ObjectAdapterF.h +2 -2
- data/ext/ice/cpp/include/generated/Ice/ObjectFactory.h +2 -2
- data/ext/ice/cpp/include/generated/Ice/Plugin.h +2 -2
- data/ext/ice/cpp/include/generated/Ice/PluginF.h +2 -2
- data/ext/ice/cpp/include/generated/Ice/Process.h +2 -2
- data/ext/ice/cpp/include/generated/Ice/ProcessF.h +2 -2
- data/ext/ice/cpp/include/generated/Ice/Properties.h +8 -8
- data/ext/ice/cpp/include/generated/Ice/PropertiesAdmin.h +2 -2
- data/ext/ice/cpp/include/generated/Ice/PropertiesF.h +2 -2
- data/ext/ice/cpp/include/generated/Ice/RemoteLogger.h +2 -2
- data/ext/ice/cpp/include/generated/Ice/Router.h +2 -2
- data/ext/ice/cpp/include/generated/Ice/RouterF.h +2 -2
- data/ext/ice/cpp/include/generated/Ice/ServantLocator.h +2 -2
- data/ext/ice/cpp/include/generated/Ice/ServantLocatorF.h +2 -2
- data/ext/ice/cpp/include/generated/Ice/SliceChecksumDict.h +2 -2
- data/ext/ice/cpp/include/generated/Ice/ValueFactory.h +2 -2
- data/ext/ice/cpp/include/generated/Ice/Version.h +2 -2
- data/ext/ice/cpp/include/generated/IceSSL/ConnectionInfo.h +2 -2
- data/ext/ice/cpp/include/generated/IceSSL/ConnectionInfoF.h +2 -2
- data/ext/ice/cpp/include/generated/IceSSL/EndpointInfo.h +2 -2
- data/ext/ice/cpp/src/Ice/Acceptor.h +1 -1
- data/ext/ice/cpp/src/Ice/BuiltinSequences.cpp +2 -2
- data/ext/ice/cpp/src/Ice/Communicator.cpp +2 -2
- data/ext/ice/cpp/src/Ice/CommunicatorF.cpp +2 -2
- data/ext/ice/cpp/src/Ice/Connection.cpp +2 -2
- data/ext/ice/cpp/src/Ice/ConnectionF.cpp +2 -2
- data/ext/ice/cpp/src/Ice/ConnectionFactory.cpp +1 -1
- data/ext/ice/cpp/src/Ice/ConnectionFactory.h +2 -2
- data/ext/ice/cpp/src/Ice/ConnectionI.cpp +5 -5
- data/ext/ice/cpp/src/Ice/ConnectionI.h +6 -8
- data/ext/ice/cpp/src/Ice/CountDownLatch.cpp +0 -8
- data/ext/ice/cpp/src/Ice/Current.cpp +2 -2
- data/ext/ice/cpp/src/Ice/DefaultsAndOverrides.cpp +0 -2
- data/ext/ice/cpp/src/Ice/DynamicLibrary.cpp +2 -9
- data/ext/ice/cpp/src/Ice/Endpoint.cpp +2 -2
- data/ext/ice/cpp/src/Ice/EndpointF.cpp +2 -2
- data/ext/ice/cpp/src/Ice/EndpointTypes.cpp +2 -2
- data/ext/ice/cpp/src/Ice/EventHandler.cpp +1 -1
- data/ext/ice/cpp/src/Ice/EventHandler.h +2 -2
- data/ext/ice/cpp/src/Ice/Exception.cpp +0 -27
- data/ext/ice/cpp/src/Ice/FacetMap.cpp +2 -2
- data/ext/ice/cpp/src/Ice/IPEndpointI.cpp +0 -46
- data/ext/ice/cpp/src/Ice/IPEndpointI.h +1 -11
- data/ext/ice/cpp/src/Ice/Identity.cpp +2 -2
- data/ext/ice/cpp/src/Ice/ImplicitContext.cpp +2 -2
- data/ext/ice/cpp/src/Ice/ImplicitContextF.cpp +2 -2
- data/ext/ice/cpp/src/Ice/Instance.cpp +2 -6
- data/ext/ice/cpp/src/Ice/Instrumentation.cpp +2 -2
- data/ext/ice/cpp/src/Ice/InstrumentationF.cpp +2 -2
- data/ext/ice/cpp/src/Ice/LocalException.cpp +2 -2
- data/ext/ice/cpp/src/Ice/Locator.cpp +2 -2
- data/ext/ice/cpp/src/Ice/LocatorF.cpp +2 -2
- data/ext/ice/cpp/src/Ice/Logger.cpp +2 -2
- data/ext/ice/cpp/src/Ice/LoggerF.cpp +2 -2
- data/ext/ice/cpp/src/Ice/LoggerI.cpp +1 -3
- data/ext/ice/cpp/src/Ice/Metrics.cpp +2 -2
- data/ext/ice/cpp/src/Ice/Network.cpp +15 -841
- data/ext/ice/cpp/src/Ice/Network.h +4 -86
- data/ext/ice/cpp/src/Ice/NetworkF.h +0 -4
- data/ext/ice/cpp/src/Ice/NetworkProxy.cpp +0 -13
- data/ext/ice/cpp/src/Ice/ObjectAdapter.cpp +2 -2
- data/ext/ice/cpp/src/Ice/ObjectAdapterF.cpp +2 -2
- data/ext/ice/cpp/src/Ice/ObjectFactory.cpp +2 -2
- data/ext/ice/cpp/src/Ice/Plugin.cpp +2 -2
- data/ext/ice/cpp/src/Ice/PluginF.cpp +2 -2
- data/ext/ice/cpp/src/Ice/Process.cpp +2 -2
- data/ext/ice/cpp/src/Ice/ProcessF.cpp +2 -2
- data/ext/ice/cpp/src/Ice/Properties.cpp +2 -2
- data/ext/ice/cpp/src/Ice/PropertiesAdmin.cpp +2 -2
- data/ext/ice/cpp/src/Ice/PropertiesF.cpp +2 -2
- data/ext/ice/cpp/src/Ice/PropertiesI.cpp +4 -12
- data/ext/ice/cpp/src/Ice/RemoteLogger.cpp +2 -2
- data/ext/ice/cpp/src/Ice/Router.cpp +2 -2
- data/ext/ice/cpp/src/Ice/RouterF.cpp +2 -2
- data/ext/ice/cpp/src/Ice/SHA1.cpp +27 -43
- data/ext/ice/cpp/src/Ice/Selector.cpp +1 -13
- data/ext/ice/cpp/src/Ice/Selector.h +1 -17
- data/ext/ice/cpp/src/Ice/ServantLocator.cpp +2 -2
- data/ext/ice/cpp/src/Ice/ServantLocatorF.cpp +2 -2
- data/ext/ice/cpp/src/Ice/SliceChecksumDict.cpp +2 -2
- data/ext/ice/cpp/src/Ice/StreamSocket.cpp +4 -167
- data/ext/ice/cpp/src/Ice/StreamSocket.h +3 -10
- data/ext/ice/cpp/src/Ice/TcpAcceptor.cpp +0 -121
- data/ext/ice/cpp/src/Ice/TcpAcceptor.h +2 -10
- data/ext/ice/cpp/src/Ice/TcpTransceiver.cpp +1 -1
- data/ext/ice/cpp/src/Ice/TcpTransceiver.h +1 -1
- data/ext/ice/cpp/src/Ice/Thread.cpp +1 -243
- data/ext/ice/cpp/src/Ice/ThreadPool.cpp +15 -51
- data/ext/ice/cpp/src/Ice/ThreadPool.h +6 -6
- data/ext/ice/cpp/src/Ice/Transceiver.h +1 -1
- data/ext/ice/cpp/src/Ice/UdpConnector.cpp +0 -5
- data/ext/ice/cpp/src/Ice/UdpTransceiver.cpp +13 -360
- data/ext/ice/cpp/src/Ice/UdpTransceiver.h +2 -23
- data/ext/ice/cpp/src/Ice/ValueFactory.cpp +2 -2
- data/ext/ice/cpp/src/Ice/Version.cpp +2 -2
- data/ext/ice/cpp/src/Ice/WSAcceptor.cpp +2 -2
- data/ext/ice/cpp/src/Ice/WSAcceptor.h +2 -2
- data/ext/ice/cpp/src/Ice/WSTransceiver.cpp +2 -45
- data/ext/ice/cpp/src/Ice/WSTransceiver.h +2 -2
- data/ext/ice/cpp/src/IceDiscovery/IceDiscovery.cpp +2 -2
- data/ext/ice/cpp/src/IceDiscovery/IceDiscovery.h +2 -2
- data/ext/ice/cpp/src/IceLocatorDiscovery/IceLocatorDiscovery.cpp +2 -2
- data/ext/ice/cpp/src/IceLocatorDiscovery/IceLocatorDiscovery.h +2 -2
- data/ext/ice/cpp/src/IceSSL/AcceptorI.cpp +2 -2
- data/ext/ice/cpp/src/IceSSL/AcceptorI.h +2 -2
- data/ext/ice/cpp/src/IceSSL/ConnectionInfo.cpp +2 -2
- data/ext/ice/cpp/src/IceSSL/ConnectionInfoF.cpp +2 -2
- data/ext/ice/cpp/src/IceSSL/EndpointInfo.cpp +2 -2
- data/ext/ice/cpp/src/IceSSL/Util.cpp +1 -1
- data/ext/ice/cpp/src/IceUtil/ConsoleUtil.cpp +1 -1
- data/ext/ice/cpp/src/IceUtil/FileUtil.cpp +4 -17
- data/ext/ice/cpp/src/IceUtil/RecMutex.cpp +0 -4
- data/ext/ice/cpp/src/IceUtil/StringUtil.cpp +0 -45
- data/ext/ice/cpp/src/IceUtil/UUID.cpp +2 -6
- data/ext/ice/cpp/src/IceUtil/UtilException.cpp +1 -1
- data/ext/ice/cpp/src/Slice/JavaUtil.cpp +22 -0
- data/ext/ice/cpp/src/Slice/JavaUtil.h +9 -0
- data/ext/ice/mcpp/system.c +0 -4
- data/ice.gemspec +1 -1
- data/lib/Glacier2/Metrics.rb +1 -1
- data/lib/Glacier2/PermissionsVerifier.rb +1 -1
- data/lib/Glacier2/PermissionsVerifierF.rb +1 -1
- data/lib/Glacier2/Router.rb +1 -1
- data/lib/Glacier2/RouterF.rb +1 -1
- data/lib/Glacier2/SSLInfo.rb +1 -1
- data/lib/Glacier2/Session.rb +1 -1
- data/lib/Ice/BuiltinSequences.rb +1 -1
- data/lib/Ice/Communicator.rb +1 -1
- data/lib/Ice/CommunicatorF.rb +1 -1
- data/lib/Ice/Connection.rb +1 -1
- data/lib/Ice/ConnectionF.rb +1 -1
- data/lib/Ice/Current.rb +1 -1
- data/lib/Ice/Endpoint.rb +1 -1
- data/lib/Ice/EndpointF.rb +1 -1
- data/lib/Ice/EndpointTypes.rb +1 -1
- data/lib/Ice/FacetMap.rb +1 -1
- data/lib/Ice/Identity.rb +1 -1
- data/lib/Ice/ImplicitContext.rb +1 -1
- data/lib/Ice/ImplicitContextF.rb +1 -1
- data/lib/Ice/Instrumentation.rb +1 -1
- data/lib/Ice/InstrumentationF.rb +1 -1
- data/lib/Ice/LocalException.rb +1 -1
- data/lib/Ice/Locator.rb +1 -1
- data/lib/Ice/LocatorF.rb +1 -1
- data/lib/Ice/Logger.rb +1 -1
- data/lib/Ice/LoggerF.rb +1 -1
- data/lib/Ice/Metrics.rb +1 -1
- data/lib/Ice/ObjectAdapter.rb +1 -1
- data/lib/Ice/ObjectAdapterF.rb +1 -1
- data/lib/Ice/ObjectFactory.rb +1 -1
- data/lib/Ice/Plugin.rb +1 -1
- data/lib/Ice/PluginF.rb +1 -1
- data/lib/Ice/Process.rb +1 -1
- data/lib/Ice/ProcessF.rb +1 -1
- data/lib/Ice/Properties.rb +1 -1
- data/lib/Ice/PropertiesAdmin.rb +1 -1
- data/lib/Ice/PropertiesF.rb +1 -1
- data/lib/Ice/RemoteLogger.rb +1 -1
- data/lib/Ice/Router.rb +1 -1
- data/lib/Ice/RouterF.rb +1 -1
- data/lib/Ice/ServantLocator.rb +1 -1
- data/lib/Ice/ServantLocatorF.rb +1 -1
- data/lib/Ice/SliceChecksumDict.rb +1 -1
- data/lib/Ice/ValueFactory.rb +1 -1
- data/lib/Ice/Version.rb +1 -1
- data/lib/IceBox/IceBox.rb +1 -1
- data/lib/IceGrid/Admin.rb +1 -1
- data/lib/IceGrid/Descriptor.rb +1 -1
- data/lib/IceGrid/Exception.rb +1 -1
- data/lib/IceGrid/FileParser.rb +1 -1
- data/lib/IceGrid/PluginFacade.rb +1 -1
- data/lib/IceGrid/Registry.rb +1 -1
- data/lib/IceGrid/Session.rb +1 -1
- data/lib/IceGrid/UserAccountMapper.rb +1 -1
- data/lib/IcePatch2/FileInfo.rb +1 -1
- data/lib/IcePatch2/FileServer.rb +1 -1
- data/lib/IceStorm/IceStorm.rb +1 -1
- data/lib/IceStorm/Metrics.rb +1 -1
- data/slice/Ice/Current.ice +1 -1
- data/slice/Ice/Properties.ice +3 -3
- metadata +3 -3
@@ -30,9 +30,7 @@
|
|
30
30
|
# pragma warning(disable:4244) // 'argument': conversion from 'int' to 'u_short', possible loss of data
|
31
31
|
#endif
|
32
32
|
|
33
|
-
#if defined(
|
34
|
-
# include <IceUtil/InputUtil.h>
|
35
|
-
#elif defined(_WIN32)
|
33
|
+
#if defined(_WIN32)
|
36
34
|
# include <winsock2.h>
|
37
35
|
# include <ws2tcpip.h>
|
38
36
|
# ifdef __MINGW32__
|
@@ -56,12 +54,6 @@
|
|
56
54
|
# pragma GCC diagnostic ignored "-Wmissing-field-initializers"
|
57
55
|
#endif
|
58
56
|
|
59
|
-
#if defined(_WIN32)
|
60
|
-
# ifndef SIO_LOOPBACK_FAST_PATH
|
61
|
-
# define SIO_LOOPBACK_FAST_PATH _WSAIOW(IOC_VENDOR,16)
|
62
|
-
# endif
|
63
|
-
#endif
|
64
|
-
|
65
57
|
#if defined(__MINGW32__)
|
66
58
|
//
|
67
59
|
// Work-around for missing definitions in MinGW Windows headers
|
@@ -80,17 +72,6 @@ using namespace std;
|
|
80
72
|
using namespace Ice;
|
81
73
|
using namespace IceInternal;
|
82
74
|
|
83
|
-
#ifdef ICE_OS_UWP
|
84
|
-
using namespace Concurrency;
|
85
|
-
using namespace Platform;
|
86
|
-
using namespace Windows::Foundation;
|
87
|
-
using namespace Windows::Foundation::Collections;
|
88
|
-
using namespace Windows::Storage::Streams;
|
89
|
-
using namespace Windows::Networking;
|
90
|
-
using namespace Windows::Networking::Sockets;
|
91
|
-
using namespace Windows::Networking::Connectivity;
|
92
|
-
#endif
|
93
|
-
|
94
75
|
#ifdef _WIN32
|
95
76
|
int
|
96
77
|
IceInternal::getSystemErrno()
|
@@ -119,9 +100,7 @@ public:
|
|
119
100
|
}
|
120
101
|
};
|
121
102
|
|
122
|
-
#ifndef
|
123
|
-
|
124
|
-
# ifndef ICE_CPP11_COMPILER
|
103
|
+
#ifndef ICE_CPP11_COMPILER
|
125
104
|
|
126
105
|
struct AddressIsIPv6 : public unary_function<Address, bool>
|
127
106
|
{
|
@@ -133,7 +112,7 @@ public:
|
|
133
112
|
return ss.saStorage.ss_family == AF_INET6;
|
134
113
|
}
|
135
114
|
};
|
136
|
-
#
|
115
|
+
#endif
|
137
116
|
|
138
117
|
void
|
139
118
|
sortAddresses(vector<Address>& addrs, ProtocolSupport protocol, Ice::EndpointSelectionType selType, bool preferIPv6)
|
@@ -196,47 +175,7 @@ setKeepAlive(SOCKET fd)
|
|
196
175
|
throw SocketException(__FILE__, __LINE__, getSocketErrno());
|
197
176
|
}
|
198
177
|
}
|
199
|
-
#endif
|
200
178
|
|
201
|
-
#if defined(_WIN32) && !defined(ICE_OS_UWP)
|
202
|
-
void
|
203
|
-
setTcpLoopbackFastPath(SOCKET fd)
|
204
|
-
{
|
205
|
-
int OptionValue = 1;
|
206
|
-
DWORD NumberOfBytesReturned = 0;
|
207
|
-
|
208
|
-
int status =
|
209
|
-
WSAIoctl(fd, SIO_LOOPBACK_FAST_PATH, &OptionValue, sizeof(OptionValue), ICE_NULLPTR, 0, &NumberOfBytesReturned, 0, 0);
|
210
|
-
if(status == SOCKET_ERROR)
|
211
|
-
{
|
212
|
-
// On platforms that do not support fast path (< Windows 8), WSAEONOTSUPP is expected.
|
213
|
-
DWORD LastError = ::GetLastError();
|
214
|
-
if(LastError != WSAEOPNOTSUPP)
|
215
|
-
{
|
216
|
-
closeSocketNoThrow(fd);
|
217
|
-
throw SocketException(__FILE__, __LINE__, getSocketErrno());
|
218
|
-
}
|
219
|
-
}
|
220
|
-
}
|
221
|
-
#endif
|
222
|
-
|
223
|
-
#ifdef ICE_OS_UWP
|
224
|
-
SOCKET
|
225
|
-
createSocketImpl(bool udp, int)
|
226
|
-
{
|
227
|
-
if(udp)
|
228
|
-
{
|
229
|
-
return ref new DatagramSocket();
|
230
|
-
}
|
231
|
-
else
|
232
|
-
{
|
233
|
-
StreamSocket^ socket = ref new StreamSocket();
|
234
|
-
socket->Control->KeepAlive = true;
|
235
|
-
socket->Control->NoDelay = true;
|
236
|
-
return socket;
|
237
|
-
}
|
238
|
-
}
|
239
|
-
#else
|
240
179
|
SOCKET
|
241
180
|
createSocketImpl(bool udp, int family)
|
242
181
|
{
|
@@ -259,25 +198,11 @@ createSocketImpl(bool udp, int family)
|
|
259
198
|
{
|
260
199
|
setTcpNoDelay(fd);
|
261
200
|
setKeepAlive(fd);
|
262
|
-
|
263
|
-
#if defined(_WIN32) && !defined(ICE_OS_UWP)
|
264
|
-
//
|
265
|
-
// FIX: the fast path loopback appears to cause issues with
|
266
|
-
// connection closure when it's enabled. Sometime, a peer
|
267
|
-
// doesn't receive the TCP/IP connection closure (RST) from
|
268
|
-
// the other peer and it ends up hanging. This is showing up
|
269
|
-
// with the background test when ran with WS. The test
|
270
|
-
// sporadically hangs on exit. See bug #6093.
|
271
|
-
//
|
272
|
-
//setTcpLoopbackFastPath(fd);
|
273
|
-
#endif
|
274
201
|
}
|
275
202
|
|
276
203
|
return fd;
|
277
204
|
}
|
278
|
-
#endif
|
279
205
|
|
280
|
-
#ifndef ICE_OS_UWP
|
281
206
|
vector<Address>
|
282
207
|
getLocalAddresses(ProtocolSupport protocol, bool includeLoopback, bool singleAddressPerInterface)
|
283
208
|
{
|
@@ -852,8 +777,6 @@ getLoopbackAddresses(ProtocolSupport protocol, int port = 0)
|
|
852
777
|
return result;
|
853
778
|
}
|
854
779
|
|
855
|
-
#endif // #ifndef ICE_OS_UWP
|
856
|
-
|
857
780
|
}
|
858
781
|
|
859
782
|
ReadyCallback::~ReadyCallback()
|
@@ -896,154 +819,6 @@ IceInternal::NativeInfo::completed(SocketOperation operation)
|
|
896
819
|
}
|
897
820
|
}
|
898
821
|
|
899
|
-
#elif defined(ICE_OS_UWP)
|
900
|
-
|
901
|
-
void
|
902
|
-
IceInternal::NativeInfo::queueAction(SocketOperation op, IAsyncAction^ action, bool connect)
|
903
|
-
{
|
904
|
-
AsyncInfo* asyncInfo = getAsyncInfo(op);
|
905
|
-
if(checkIfErrorOrCompleted(op, action, action->Status, connect))
|
906
|
-
{
|
907
|
-
asyncInfo->count = 0;
|
908
|
-
asyncInfo->error = ERROR_SUCCESS;
|
909
|
-
}
|
910
|
-
else
|
911
|
-
{
|
912
|
-
action->Completed = ref new AsyncActionCompletedHandler(
|
913
|
-
[=] (IAsyncAction^ info, Windows::Foundation::AsyncStatus status)
|
914
|
-
{
|
915
|
-
//
|
916
|
-
// COMPILERFIX with v141 using operator!= and operator== inside
|
917
|
-
// a lambda callback triggers a compiler bug, we move the code to
|
918
|
-
// a seperate private method to workaround the issue.
|
919
|
-
//
|
920
|
-
this->queueActionCompleted(op, asyncInfo, info, status);
|
921
|
-
});
|
922
|
-
asyncInfo->operation = action;
|
923
|
-
}
|
924
|
-
}
|
925
|
-
|
926
|
-
void
|
927
|
-
IceInternal::NativeInfo::queueActionCompleted(SocketOperation op, AsyncInfo* asyncInfo, IAsyncAction^ info,
|
928
|
-
Windows::Foundation::AsyncStatus status)
|
929
|
-
{
|
930
|
-
if(status != Windows::Foundation::AsyncStatus::Completed)
|
931
|
-
{
|
932
|
-
asyncInfo->error = info->ErrorCode.Value;
|
933
|
-
}
|
934
|
-
else
|
935
|
-
{
|
936
|
-
asyncInfo->error = ERROR_SUCCESS;
|
937
|
-
}
|
938
|
-
asyncInfo->count = 0;
|
939
|
-
completed(op);
|
940
|
-
}
|
941
|
-
|
942
|
-
void
|
943
|
-
IceInternal::NativeInfo::queueOperation(SocketOperation op, IAsyncOperation<unsigned int>^ operation)
|
944
|
-
{
|
945
|
-
AsyncInfo* info = getAsyncInfo(op);
|
946
|
-
Windows::Foundation::AsyncStatus status = operation->Status;
|
947
|
-
if(status == Windows::Foundation::AsyncStatus::Completed)
|
948
|
-
{
|
949
|
-
//
|
950
|
-
// NOTE: it's important to modify the count _before_ calling the completion handler
|
951
|
-
// since this might not always be called with the connection mutex but from a Windows
|
952
|
-
// thread pool thread if we chained multiple Async calls (GetGetOutputStreamAsync and
|
953
|
-
// StoreAsync for example, see the UDPTransceiver implementation). So we can't modify
|
954
|
-
// the AsyncInfo structure after calling the completed callback.
|
955
|
-
//
|
956
|
-
info->count = static_cast<int>(operation->GetResults());
|
957
|
-
info->error = ERROR_SUCCESS;
|
958
|
-
_completedHandler(op);
|
959
|
-
return;
|
960
|
-
}
|
961
|
-
else if(!checkIfErrorOrCompleted(op, operation, status))
|
962
|
-
{
|
963
|
-
if(!info->completedHandler)
|
964
|
-
{
|
965
|
-
info->completedHandler = ref new AsyncOperationCompletedHandler<unsigned int>(
|
966
|
-
[=] (IAsyncOperation<unsigned int>^ operation, Windows::Foundation::AsyncStatus status)
|
967
|
-
{
|
968
|
-
//
|
969
|
-
// COMPILERFIX with v141 using operator!= and operator== inside
|
970
|
-
// a lambda callback triggers a compiler bug, we move the code to
|
971
|
-
// a seperate private method to workaround the issue.
|
972
|
-
//
|
973
|
-
this->queueOperationCompleted(op, info, operation, status);
|
974
|
-
});
|
975
|
-
}
|
976
|
-
operation->Completed = info->completedHandler;
|
977
|
-
info->operation = operation;
|
978
|
-
}
|
979
|
-
}
|
980
|
-
|
981
|
-
void
|
982
|
-
IceInternal::NativeInfo::queueOperationCompleted(SocketOperation op, AsyncInfo* info,
|
983
|
-
IAsyncOperation<unsigned int>^ operation,
|
984
|
-
Windows::Foundation::AsyncStatus status)
|
985
|
-
{
|
986
|
-
if(status != Windows::Foundation::AsyncStatus::Completed)
|
987
|
-
{
|
988
|
-
info->count = 0;
|
989
|
-
info->error = operation->ErrorCode.Value;
|
990
|
-
}
|
991
|
-
else
|
992
|
-
{
|
993
|
-
info->count = static_cast<int>(operation->GetResults());
|
994
|
-
info->error = ERROR_SUCCESS;
|
995
|
-
}
|
996
|
-
completed(op);
|
997
|
-
}
|
998
|
-
|
999
|
-
void
|
1000
|
-
IceInternal::NativeInfo::setCompletedHandler(SocketOperationCompletedHandler^ handler)
|
1001
|
-
{
|
1002
|
-
_completedHandler = handler;
|
1003
|
-
}
|
1004
|
-
|
1005
|
-
void
|
1006
|
-
IceInternal::NativeInfo::completed(SocketOperation operation)
|
1007
|
-
{
|
1008
|
-
assert(_completedHandler);
|
1009
|
-
_completedHandler(operation);
|
1010
|
-
}
|
1011
|
-
|
1012
|
-
bool
|
1013
|
-
IceInternal::NativeInfo::checkIfErrorOrCompleted(SocketOperation op, IAsyncInfo^ info, Windows::Foundation::AsyncStatus status, bool connect)
|
1014
|
-
{
|
1015
|
-
//
|
1016
|
-
// NOTE: It's important to only check for info->Status once as it
|
1017
|
-
// might change during the checks below (the Status can be changed
|
1018
|
-
// by the Windows thread pool concurrently).
|
1019
|
-
//
|
1020
|
-
// We consider that a canceled async status is the same as an
|
1021
|
-
// error. A canceled async status can occur if there's a timeout
|
1022
|
-
// and the socket is closed.
|
1023
|
-
//
|
1024
|
-
if(status == Windows::Foundation::AsyncStatus::Completed)
|
1025
|
-
{
|
1026
|
-
_completedHandler(op);
|
1027
|
-
return true;
|
1028
|
-
}
|
1029
|
-
else if (status == Windows::Foundation::AsyncStatus::Started)
|
1030
|
-
{
|
1031
|
-
return false;
|
1032
|
-
}
|
1033
|
-
else
|
1034
|
-
{
|
1035
|
-
if(connect) // Connect
|
1036
|
-
{
|
1037
|
-
checkConnectErrorCode(__FILE__, __LINE__, info->ErrorCode.Value);
|
1038
|
-
}
|
1039
|
-
else
|
1040
|
-
{
|
1041
|
-
checkErrorCode(__FILE__, __LINE__, info->ErrorCode.Value);
|
1042
|
-
}
|
1043
|
-
return true; // Prevent compiler warning.
|
1044
|
-
}
|
1045
|
-
}
|
1046
|
-
|
1047
822
|
#else
|
1048
823
|
|
1049
824
|
void
|
@@ -1070,72 +845,23 @@ IceInternal::NativeInfo::newFd()
|
|
1070
845
|
bool
|
1071
846
|
IceInternal::noMoreFds(int error)
|
1072
847
|
{
|
1073
|
-
#if defined(
|
1074
|
-
return error == (int)SocketErrorStatus::TooManyOpenFiles;
|
1075
|
-
#elif defined(_WIN32)
|
848
|
+
#if defined(_WIN32)
|
1076
849
|
return error == WSAEMFILE;
|
1077
850
|
#else
|
1078
851
|
return error == EMFILE || error == ENFILE;
|
1079
852
|
#endif
|
1080
853
|
}
|
1081
854
|
|
1082
|
-
#if defined(ICE_OS_UWP)
|
1083
|
-
string
|
1084
|
-
IceInternal::errorToStringDNS(int)
|
1085
|
-
{
|
1086
|
-
return "Host not found";
|
1087
|
-
}
|
1088
|
-
#else
|
1089
855
|
string
|
1090
856
|
IceInternal::errorToStringDNS(int error)
|
1091
857
|
{
|
1092
|
-
#
|
858
|
+
#if defined(_WIN32)
|
1093
859
|
return IceUtilInternal::errorToString(error);
|
1094
|
-
#
|
860
|
+
#else
|
1095
861
|
return gai_strerror(error);
|
1096
|
-
# endif
|
1097
|
-
}
|
1098
862
|
#endif
|
1099
|
-
|
1100
|
-
#ifdef ICE_OS_UWP
|
1101
|
-
vector<Address>
|
1102
|
-
IceInternal::getAddresses(const string& host, int port, ProtocolSupport, Ice::EndpointSelectionType, bool, bool)
|
1103
|
-
{
|
1104
|
-
try
|
1105
|
-
{
|
1106
|
-
vector<Address> result;
|
1107
|
-
Address addr;
|
1108
|
-
if(host.empty())
|
1109
|
-
{
|
1110
|
-
addr.host = ref new HostName("localhost");
|
1111
|
-
}
|
1112
|
-
else
|
1113
|
-
{
|
1114
|
-
//
|
1115
|
-
// Don't need to pass a wide string converter as the wide string is passed
|
1116
|
-
// to Windows API.
|
1117
|
-
//
|
1118
|
-
addr.host = ref new HostName(ref new String(
|
1119
|
-
stringToWstring(host,
|
1120
|
-
getProcessStringConverter()).c_str()));
|
1121
|
-
}
|
1122
|
-
stringstream os;
|
1123
|
-
os << port;
|
1124
|
-
//
|
1125
|
-
// Don't need to use any string converter here as the port number use just
|
1126
|
-
// ASCII characters.
|
1127
|
-
//
|
1128
|
-
addr.port = ref new String(stringToWstring(os.str()).c_str());
|
1129
|
-
result.push_back(addr);
|
1130
|
-
return result;
|
1131
|
-
}
|
1132
|
-
catch(Platform::Exception^ pex)
|
1133
|
-
{
|
1134
|
-
throw DNSException(__FILE__, __LINE__, (int)SocketError::GetStatus(pex->HResult), host);
|
1135
|
-
}
|
1136
|
-
|
1137
863
|
}
|
1138
|
-
|
864
|
+
|
1139
865
|
vector<Address>
|
1140
866
|
IceInternal::getAddresses(const string& host, int port, ProtocolSupport protocol, Ice::EndpointSelectionType selType,
|
1141
867
|
bool preferIPv6, bool canBlock)
|
@@ -1189,11 +915,11 @@ IceInternal::getAddresses(const string& host, int port, ProtocolSupport protocol
|
|
1189
915
|
// AI_NUMERICHOST is specified and the host name is not a IP
|
1190
916
|
// address. However on some platforms (e.g. macOS 10.4.x)
|
1191
917
|
// EAI_NODATA is also returned so we also check for it.
|
1192
|
-
#
|
918
|
+
#ifdef EAI_NODATA
|
1193
919
|
if(!canBlock && (rs == EAI_NONAME || rs == EAI_NODATA))
|
1194
|
-
#
|
920
|
+
#else
|
1195
921
|
if(!canBlock && rs == EAI_NONAME)
|
1196
|
-
#
|
922
|
+
#endif
|
1197
923
|
{
|
1198
924
|
return result; // Empty result indicates that a canBlock lookup is necessary.
|
1199
925
|
}
|
@@ -1238,22 +964,12 @@ IceInternal::getAddresses(const string& host, int port, ProtocolSupport protocol
|
|
1238
964
|
sortAddresses(result, protocol, selType, preferIPv6);
|
1239
965
|
return result;
|
1240
966
|
}
|
1241
|
-
#endif
|
1242
967
|
|
1243
|
-
#ifdef ICE_OS_UWP
|
1244
|
-
ProtocolSupport
|
1245
|
-
IceInternal::getProtocolSupport(const Address&)
|
1246
|
-
{
|
1247
|
-
// For UWP, there's no distinction between IPv4 and IPv6 adresses.
|
1248
|
-
return EnableBoth;
|
1249
|
-
}
|
1250
|
-
#else
|
1251
968
|
ProtocolSupport
|
1252
969
|
IceInternal::getProtocolSupport(const Address& addr)
|
1253
970
|
{
|
1254
971
|
return addr.saStorage.ss_family == AF_INET ? EnableIPv4 : EnableIPv6;
|
1255
972
|
}
|
1256
|
-
#endif
|
1257
973
|
|
1258
974
|
Address
|
1259
975
|
IceInternal::getAddressForServer(const string& host, int port, ProtocolSupport protocol, bool preferIPv6, bool canBlock)
|
@@ -1265,16 +981,6 @@ IceInternal::getAddressForServer(const string& host, int port, ProtocolSupport p
|
|
1265
981
|
if(host.empty())
|
1266
982
|
{
|
1267
983
|
Address addr;
|
1268
|
-
#ifdef ICE_OS_UWP
|
1269
|
-
ostringstream os;
|
1270
|
-
os << port;
|
1271
|
-
//
|
1272
|
-
// Don't need to use any string converter here as the port number use just
|
1273
|
-
// ASCII characters.
|
1274
|
-
//
|
1275
|
-
addr.port = ref new String(stringToWstring(os.str()).c_str());
|
1276
|
-
addr.host = nullptr; // Equivalent of inaddr_any, see doBind implementation.
|
1277
|
-
#else
|
1278
984
|
memset(&addr.saStorage, 0, sizeof(sockaddr_storage));
|
1279
985
|
if(protocol != EnableIPv4)
|
1280
986
|
{
|
@@ -1288,7 +994,6 @@ IceInternal::getAddressForServer(const string& host, int port, ProtocolSupport p
|
|
1288
994
|
addr.saIn.sin_port = htons(port);
|
1289
995
|
addr.saIn.sin_addr.s_addr = htonl(INADDR_ANY);
|
1290
996
|
}
|
1291
|
-
#endif
|
1292
997
|
return addr;
|
1293
998
|
}
|
1294
999
|
vector<Address> addrs = getAddresses(host, port, protocol, Ice::ICE_ENUM(EndpointSelectionType, Ordered),
|
@@ -1299,26 +1004,6 @@ IceInternal::getAddressForServer(const string& host, int port, ProtocolSupport p
|
|
1299
1004
|
int
|
1300
1005
|
IceInternal::compareAddress(const Address& addr1, const Address& addr2)
|
1301
1006
|
{
|
1302
|
-
#ifdef ICE_OS_UWP
|
1303
|
-
int o = String::CompareOrdinal(addr1.port, addr2.port);
|
1304
|
-
if(o != 0)
|
1305
|
-
{
|
1306
|
-
return o;
|
1307
|
-
}
|
1308
|
-
if(addr1.host == addr2.host)
|
1309
|
-
{
|
1310
|
-
return 0;
|
1311
|
-
}
|
1312
|
-
if(addr1.host == nullptr)
|
1313
|
-
{
|
1314
|
-
return -1;
|
1315
|
-
}
|
1316
|
-
if(addr2.host == nullptr)
|
1317
|
-
{
|
1318
|
-
return 1;
|
1319
|
-
}
|
1320
|
-
return String::CompareOrdinal(addr1.host->RawName, addr2.host->RawName);
|
1321
|
-
#else
|
1322
1007
|
if(addr1.saStorage.ss_family < addr2.saStorage.ss_family)
|
1323
1008
|
{
|
1324
1009
|
return -1;
|
@@ -1371,16 +1056,8 @@ IceInternal::compareAddress(const Address& addr1, const Address& addr2)
|
|
1371
1056
|
}
|
1372
1057
|
|
1373
1058
|
return 0;
|
1374
|
-
#endif
|
1375
1059
|
}
|
1376
1060
|
|
1377
|
-
#ifdef ICE_OS_UWP
|
1378
|
-
bool
|
1379
|
-
IceInternal::isIPv6Supported()
|
1380
|
-
{
|
1381
|
-
return true;
|
1382
|
-
}
|
1383
|
-
#else
|
1384
1061
|
bool
|
1385
1062
|
IceInternal::isIPv6Supported()
|
1386
1063
|
{
|
@@ -1395,23 +1072,12 @@ IceInternal::isIPv6Supported()
|
|
1395
1072
|
return true;
|
1396
1073
|
}
|
1397
1074
|
}
|
1398
|
-
#endif
|
1399
1075
|
|
1400
|
-
#ifdef ICE_OS_UWP
|
1401
|
-
SOCKET
|
1402
|
-
IceInternal::createSocket(bool udp, const Address&)
|
1403
|
-
{
|
1404
|
-
return createSocketImpl(udp, 0);
|
1405
|
-
}
|
1406
|
-
#else
|
1407
1076
|
SOCKET
|
1408
1077
|
IceInternal::createSocket(bool udp, const Address& addr)
|
1409
1078
|
{
|
1410
1079
|
return createSocketImpl(udp, addr.saStorage.ss_family);
|
1411
1080
|
}
|
1412
|
-
#endif
|
1413
|
-
|
1414
|
-
#ifndef ICE_OS_UWP
|
1415
1081
|
SOCKET
|
1416
1082
|
IceInternal::createServerSocket(bool udp, const Address& addr, ProtocolSupport protocol)
|
1417
1083
|
{
|
@@ -1433,27 +1099,11 @@ IceInternal::createServerSocket(bool udp, const Address& addr, ProtocolSupport p
|
|
1433
1099
|
}
|
1434
1100
|
return fd;
|
1435
1101
|
}
|
1436
|
-
#else
|
1437
|
-
SOCKET
|
1438
|
-
IceInternal::createServerSocket(bool udp, const Address& addr, ProtocolSupport)
|
1439
|
-
{
|
1440
|
-
return createSocket(udp, addr);
|
1441
|
-
}
|
1442
|
-
#endif
|
1443
1102
|
|
1444
1103
|
void
|
1445
1104
|
IceInternal::closeSocketNoThrow(SOCKET fd)
|
1446
1105
|
{
|
1447
|
-
#if defined(
|
1448
|
-
//
|
1449
|
-
// NOTE: StreamSocket::Close or DatagramSocket::Close aren't
|
1450
|
-
// exposed in C++, you have to delete the socket to close
|
1451
|
-
// it. According some Microsoft samples, this is safe even if
|
1452
|
-
// there are still references to the object...
|
1453
|
-
//
|
1454
|
-
//fd->Close();
|
1455
|
-
delete fd;
|
1456
|
-
#elif defined(_WIN32)
|
1106
|
+
#if defined(_WIN32)
|
1457
1107
|
int error = WSAGetLastError();
|
1458
1108
|
closesocket(fd);
|
1459
1109
|
WSASetLastError(error);
|
@@ -1467,16 +1117,7 @@ IceInternal::closeSocketNoThrow(SOCKET fd)
|
|
1467
1117
|
void
|
1468
1118
|
IceInternal::closeSocket(SOCKET fd)
|
1469
1119
|
{
|
1470
|
-
#if defined(
|
1471
|
-
//
|
1472
|
-
// NOTE: StreamSocket::Close or DatagramSocket::Close aren't
|
1473
|
-
// exposed in C++, you have to delete the socket to close
|
1474
|
-
// it. According some Microsoft samples, this is safe even if
|
1475
|
-
// there are still references to the object...
|
1476
|
-
//
|
1477
|
-
//fd->Close();
|
1478
|
-
delete fd;
|
1479
|
-
#elif defined(_WIN32)
|
1120
|
+
#if defined(_WIN32)
|
1480
1121
|
int error = WSAGetLastError();
|
1481
1122
|
if(closesocket(fd) == SOCKET_ERROR)
|
1482
1123
|
{
|
@@ -1514,32 +1155,16 @@ IceInternal::addrToString(const Address& addr)
|
|
1514
1155
|
void
|
1515
1156
|
IceInternal::fdToLocalAddress(SOCKET fd, Address& addr)
|
1516
1157
|
{
|
1517
|
-
#ifndef ICE_OS_UWP
|
1518
1158
|
socklen_t len = static_cast<socklen_t>(sizeof(sockaddr_storage));
|
1519
1159
|
if(getsockname(fd, &addr.sa, &len) == SOCKET_ERROR)
|
1520
1160
|
{
|
1521
1161
|
throw SocketException(__FILE__, __LINE__, getSocketErrno());
|
1522
1162
|
}
|
1523
|
-
#else
|
1524
|
-
StreamSocket^ stream = dynamic_cast<StreamSocket^>(fd);
|
1525
|
-
if(stream)
|
1526
|
-
{
|
1527
|
-
addr.host = stream->Information->LocalAddress;
|
1528
|
-
addr.port = stream->Information->LocalPort;
|
1529
|
-
}
|
1530
|
-
DatagramSocket^ datagram = dynamic_cast<DatagramSocket^>(fd);
|
1531
|
-
if(datagram)
|
1532
|
-
{
|
1533
|
-
addr.host = datagram->Information->LocalAddress;
|
1534
|
-
addr.port = datagram->Information->LocalPort;
|
1535
|
-
}
|
1536
|
-
#endif
|
1537
1163
|
}
|
1538
1164
|
|
1539
1165
|
bool
|
1540
1166
|
IceInternal::fdToRemoteAddress(SOCKET fd, Address& addr)
|
1541
1167
|
{
|
1542
|
-
#ifndef ICE_OS_UWP
|
1543
1168
|
socklen_t len = static_cast<socklen_t>(sizeof(sockaddr_storage));
|
1544
1169
|
if(getpeername(fd, &addr.sa, &len) == SOCKET_ERROR)
|
1545
1170
|
{
|
@@ -1552,23 +1177,7 @@ IceInternal::fdToRemoteAddress(SOCKET fd, Address& addr)
|
|
1552
1177
|
throw SocketException(__FILE__, __LINE__, getSocketErrno());
|
1553
1178
|
}
|
1554
1179
|
}
|
1555
|
-
|
1556
1180
|
return true;
|
1557
|
-
#else
|
1558
|
-
StreamSocket^ stream = dynamic_cast<StreamSocket^>(fd);
|
1559
|
-
if(stream != nullptr)
|
1560
|
-
{
|
1561
|
-
addr.host = stream->Information->RemoteAddress;
|
1562
|
-
addr.port = stream->Information->RemotePort;
|
1563
|
-
}
|
1564
|
-
DatagramSocket^ datagram = dynamic_cast<DatagramSocket^>(fd);
|
1565
|
-
if(datagram != nullptr)
|
1566
|
-
{
|
1567
|
-
addr.host = datagram->Information->RemoteAddress;
|
1568
|
-
addr.port = datagram->Information->RemotePort;
|
1569
|
-
}
|
1570
|
-
return addr.host != nullptr;
|
1571
|
-
#endif
|
1572
1181
|
}
|
1573
1182
|
|
1574
1183
|
std::string
|
@@ -1692,69 +1301,9 @@ IceInternal::addressesToString(const Address& localAddr, const Address& remoteAd
|
|
1692
1301
|
bool
|
1693
1302
|
IceInternal::isAddressValid(const Address& addr)
|
1694
1303
|
{
|
1695
|
-
#ifndef ICE_OS_UWP
|
1696
1304
|
return addr.saStorage.ss_family != AF_UNSPEC;
|
1697
|
-
#else
|
1698
|
-
return addr.host != nullptr || addr.port != nullptr;
|
1699
|
-
#endif
|
1700
1305
|
}
|
1701
1306
|
|
1702
|
-
#ifdef ICE_OS_UWP
|
1703
|
-
vector<string>
|
1704
|
-
IceInternal::getHostsForEndpointExpand(const string& host, ProtocolSupport protocolSupport, bool includeLoopback)
|
1705
|
-
{
|
1706
|
-
vector<string> hosts;
|
1707
|
-
if(host.empty() || host == "0.0.0.0" || host == "::" || host == "0:0:0:0:0:0:0:0")
|
1708
|
-
{
|
1709
|
-
for(IIterator<HostName^>^ it = NetworkInformation::GetHostNames()->First(); it->HasCurrent; it->MoveNext())
|
1710
|
-
{
|
1711
|
-
HostName^ h = it->Current;
|
1712
|
-
if(h->IPInformation != nullptr && h->IPInformation->NetworkAdapter != nullptr)
|
1713
|
-
{
|
1714
|
-
hosts.push_back(wstringToString(h->CanonicalName->Data(), getProcessStringConverter()));
|
1715
|
-
}
|
1716
|
-
}
|
1717
|
-
if(hosts.empty() || includeLoopback)
|
1718
|
-
{
|
1719
|
-
if(protocolSupport != EnableIPv6)
|
1720
|
-
{
|
1721
|
-
hosts.push_back("127.0.0.1");
|
1722
|
-
}
|
1723
|
-
if(protocolSupport != EnableIPv4)
|
1724
|
-
{
|
1725
|
-
hosts.push_back("::1");
|
1726
|
-
}
|
1727
|
-
}
|
1728
|
-
}
|
1729
|
-
return hosts;
|
1730
|
-
}
|
1731
|
-
|
1732
|
-
vector<string>
|
1733
|
-
IceInternal::getInterfacesForMulticast(const string& intf, ProtocolSupport)
|
1734
|
-
{
|
1735
|
-
vector<string> interfaces;
|
1736
|
-
if(intf.empty() || intf == "0.0.0.0" || intf == "::" || intf == "0:0:0:0:0:0:0:0")
|
1737
|
-
{
|
1738
|
-
for(IIterator<HostName^>^ it = NetworkInformation::GetHostNames()->First(); it->HasCurrent; it->MoveNext())
|
1739
|
-
{
|
1740
|
-
HostName^ h = it->Current;
|
1741
|
-
if(h->IPInformation != nullptr && h->IPInformation->NetworkAdapter != nullptr)
|
1742
|
-
{
|
1743
|
-
string s = wstringToString(h->CanonicalName->Data(), getProcessStringConverter());
|
1744
|
-
if(find(interfaces.begin(), interfaces.end(), s) == interfaces.end())
|
1745
|
-
{
|
1746
|
-
interfaces.push_back(s);
|
1747
|
-
}
|
1748
|
-
}
|
1749
|
-
}
|
1750
|
-
}
|
1751
|
-
if(interfaces.empty())
|
1752
|
-
{
|
1753
|
-
interfaces.push_back(intf);
|
1754
|
-
}
|
1755
|
-
return interfaces;
|
1756
|
-
}
|
1757
|
-
#else
|
1758
1307
|
vector<string>
|
1759
1308
|
IceInternal::getHostsForEndpointExpand(const string& host, ProtocolSupport protocolSupport, bool includeLoopback)
|
1760
1309
|
{
|
@@ -1807,12 +1356,10 @@ IceInternal::getInterfacesForMulticast(const string& intf, ProtocolSupport proto
|
|
1807
1356
|
}
|
1808
1357
|
return interfaces;
|
1809
1358
|
}
|
1810
|
-
#endif
|
1811
1359
|
|
1812
1360
|
string
|
1813
1361
|
IceInternal::inetAddrToString(const Address& ss)
|
1814
1362
|
{
|
1815
|
-
#ifndef ICE_OS_UWP
|
1816
1363
|
int size = getAddressStorageSize(ss);
|
1817
1364
|
if(size == 0)
|
1818
1365
|
{
|
@@ -1824,26 +1371,11 @@ IceInternal::inetAddrToString(const Address& ss)
|
|
1824
1371
|
getnameinfo(&ss.sa, static_cast<socklen_t>(size), namebuf, static_cast<socklen_t>(sizeof(namebuf)), 0, 0,
|
1825
1372
|
NI_NUMERICHOST);
|
1826
1373
|
return string(namebuf);
|
1827
|
-
#else
|
1828
|
-
if(ss.host == nullptr)
|
1829
|
-
{
|
1830
|
-
return "";
|
1831
|
-
}
|
1832
|
-
else
|
1833
|
-
{
|
1834
|
-
//
|
1835
|
-
// Don't need to pass a wide string converter as the wide string come
|
1836
|
-
// from Windows API.
|
1837
|
-
//
|
1838
|
-
return wstringToString(ss.host->RawName->Data(), getProcessStringConverter());
|
1839
|
-
}
|
1840
|
-
#endif
|
1841
1374
|
}
|
1842
1375
|
|
1843
1376
|
int
|
1844
1377
|
IceInternal::getPort(const Address& addr)
|
1845
1378
|
{
|
1846
|
-
#ifndef ICE_OS_UWP
|
1847
1379
|
if(addr.saStorage.ss_family == AF_INET)
|
1848
1380
|
{
|
1849
1381
|
return ntohs(addr.saIn.sin_port);
|
@@ -1856,23 +1388,11 @@ IceInternal::getPort(const Address& addr)
|
|
1856
1388
|
{
|
1857
1389
|
return -1;
|
1858
1390
|
}
|
1859
|
-
#else
|
1860
|
-
IceUtil::Int64 port = 0;
|
1861
|
-
//
|
1862
|
-
// Don't need to use any string converter here as the port number use just ASCII characters.
|
1863
|
-
//
|
1864
|
-
if(addr.port == nullptr || !IceUtilInternal::stringToInt64(wstringToString(addr.port->Data()), port))
|
1865
|
-
{
|
1866
|
-
return -1;
|
1867
|
-
}
|
1868
|
-
return static_cast<int>(port);
|
1869
|
-
#endif
|
1870
1391
|
}
|
1871
1392
|
|
1872
1393
|
void
|
1873
1394
|
IceInternal::setPort(Address& addr, int port)
|
1874
1395
|
{
|
1875
|
-
#ifndef ICE_OS_UWP
|
1876
1396
|
if(addr.saStorage.ss_family == AF_INET)
|
1877
1397
|
{
|
1878
1398
|
addr.saIn.sin_port = htons(port);
|
@@ -1882,21 +1402,11 @@ IceInternal::setPort(Address& addr, int port)
|
|
1882
1402
|
assert(addr.saStorage.ss_family == AF_INET6);
|
1883
1403
|
addr.saIn6.sin6_port = htons(port);
|
1884
1404
|
}
|
1885
|
-
#else
|
1886
|
-
ostringstream os;
|
1887
|
-
os << port;
|
1888
|
-
//
|
1889
|
-
// Don't need to use any string converter here as the port number use just
|
1890
|
-
// ASCII characters.
|
1891
|
-
//
|
1892
|
-
addr.port = ref new String(stringToWstring(os.str()).c_str());
|
1893
|
-
#endif
|
1894
1405
|
}
|
1895
1406
|
|
1896
1407
|
bool
|
1897
1408
|
IceInternal::isMulticast(const Address& addr)
|
1898
1409
|
{
|
1899
|
-
#ifndef ICE_OS_UWP
|
1900
1410
|
if(addr.saStorage.ss_family == AF_INET)
|
1901
1411
|
{
|
1902
1412
|
return IN_MULTICAST(ntohl(addr.saIn.sin_addr.s_addr));
|
@@ -1905,35 +1415,6 @@ IceInternal::isMulticast(const Address& addr)
|
|
1905
1415
|
{
|
1906
1416
|
return IN6_IS_ADDR_MULTICAST(&addr.saIn6.sin6_addr);
|
1907
1417
|
}
|
1908
|
-
#else
|
1909
|
-
if(addr.host == nullptr)
|
1910
|
-
{
|
1911
|
-
return false;
|
1912
|
-
}
|
1913
|
-
//
|
1914
|
-
// Don't need to use string converters here, this is just to do a local
|
1915
|
-
// comparison to find if the address is multicast.
|
1916
|
-
//
|
1917
|
-
string host = wstringToString(addr.host->RawName->Data());
|
1918
|
-
string ip = IceUtilInternal::toUpper(host);
|
1919
|
-
vector<string> tokens;
|
1920
|
-
IceUtilInternal::splitString(ip, ".", tokens);
|
1921
|
-
if(tokens.size() == 4)
|
1922
|
-
{
|
1923
|
-
IceUtil::Int64 j;
|
1924
|
-
if(IceUtilInternal::stringToInt64(tokens[0], j))
|
1925
|
-
{
|
1926
|
-
if(j >= 233 && j <= 239)
|
1927
|
-
{
|
1928
|
-
return true;
|
1929
|
-
}
|
1930
|
-
}
|
1931
|
-
}
|
1932
|
-
if(ip.find("::") != string::npos)
|
1933
|
-
{
|
1934
|
-
return ip.compare(0, 2, "FF") == 0;
|
1935
|
-
}
|
1936
|
-
#endif
|
1937
1418
|
return false;
|
1938
1419
|
}
|
1939
1420
|
|
@@ -2009,12 +1490,6 @@ IceInternal::setTcpBufSize(SOCKET fd, int rcvSize, int sndSize, const ProtocolIn
|
|
2009
1490
|
}
|
2010
1491
|
}
|
2011
1492
|
|
2012
|
-
#ifdef ICE_OS_UWP
|
2013
|
-
void
|
2014
|
-
IceInternal::setBlock(SOCKET fd, bool)
|
2015
|
-
{
|
2016
|
-
}
|
2017
|
-
#else
|
2018
1493
|
void
|
2019
1494
|
IceInternal::setBlock(SOCKET fd, bool block)
|
2020
1495
|
{
|
@@ -2060,30 +1535,20 @@ IceInternal::setBlock(SOCKET fd, bool block)
|
|
2060
1535
|
}
|
2061
1536
|
#endif
|
2062
1537
|
}
|
2063
|
-
#endif
|
2064
1538
|
|
2065
1539
|
void
|
2066
1540
|
IceInternal::setSendBufferSize(SOCKET fd, int sz)
|
2067
1541
|
{
|
2068
|
-
#ifndef ICE_OS_UWP
|
2069
1542
|
if(setsockopt(fd, SOL_SOCKET, SO_SNDBUF, reinterpret_cast<char*>(&sz), int(sizeof(int))) == SOCKET_ERROR)
|
2070
1543
|
{
|
2071
1544
|
closeSocketNoThrow(fd);
|
2072
1545
|
throw SocketException(__FILE__, __LINE__, getSocketErrno());
|
2073
1546
|
}
|
2074
|
-
#else
|
2075
|
-
StreamSocket^ stream = dynamic_cast<StreamSocket^>(fd);
|
2076
|
-
if(stream != nullptr)
|
2077
|
-
{
|
2078
|
-
stream->Control->OutboundBufferSizeInBytes = sz;
|
2079
|
-
}
|
2080
|
-
#endif
|
2081
1547
|
}
|
2082
1548
|
|
2083
1549
|
int
|
2084
1550
|
IceInternal::getSendBufferSize(SOCKET fd)
|
2085
1551
|
{
|
2086
|
-
#ifndef ICE_OS_UWP
|
2087
1552
|
int sz;
|
2088
1553
|
socklen_t len = sizeof(sz);
|
2089
1554
|
if(getsockopt(fd, SOL_SOCKET, SO_SNDBUF, reinterpret_cast<char*>(&sz), &len) == SOCKET_ERROR ||
|
@@ -2093,22 +1558,8 @@ IceInternal::getSendBufferSize(SOCKET fd)
|
|
2093
1558
|
throw SocketException(__FILE__, __LINE__, getSocketErrno());
|
2094
1559
|
}
|
2095
1560
|
return sz;
|
2096
|
-
#else
|
2097
|
-
StreamSocket^ stream = dynamic_cast<StreamSocket^>(fd);
|
2098
|
-
if(stream != nullptr)
|
2099
|
-
{
|
2100
|
-
return stream->Control->OutboundBufferSizeInBytes;
|
2101
|
-
}
|
2102
|
-
return 0; // Not supported
|
2103
|
-
#endif
|
2104
1561
|
}
|
2105
1562
|
|
2106
|
-
#ifdef ICE_OS_UWP
|
2107
|
-
void
|
2108
|
-
IceInternal::setRecvBufferSize(SOCKET, int)
|
2109
|
-
{
|
2110
|
-
}
|
2111
|
-
#else
|
2112
1563
|
void
|
2113
1564
|
IceInternal::setRecvBufferSize(SOCKET fd, int sz)
|
2114
1565
|
{
|
@@ -2118,12 +1569,10 @@ IceInternal::setRecvBufferSize(SOCKET fd, int sz)
|
|
2118
1569
|
throw SocketException(__FILE__, __LINE__, getSocketErrno());
|
2119
1570
|
}
|
2120
1571
|
}
|
2121
|
-
#endif
|
2122
1572
|
|
2123
1573
|
int
|
2124
1574
|
IceInternal::getRecvBufferSize(SOCKET fd)
|
2125
1575
|
{
|
2126
|
-
#ifndef ICE_OS_UWP
|
2127
1576
|
int sz;
|
2128
1577
|
socklen_t len = sizeof(sz);
|
2129
1578
|
if(getsockopt(fd, SOL_SOCKET, SO_RCVBUF, reinterpret_cast<char*>(&sz), &len) == SOCKET_ERROR ||
|
@@ -2133,12 +1582,8 @@ IceInternal::getRecvBufferSize(SOCKET fd)
|
|
2133
1582
|
throw SocketException(__FILE__, __LINE__, getSocketErrno());
|
2134
1583
|
}
|
2135
1584
|
return sz;
|
2136
|
-
#else
|
2137
|
-
return 0; // Not supported
|
2138
|
-
#endif
|
2139
1585
|
}
|
2140
1586
|
|
2141
|
-
#ifndef ICE_OS_UWP
|
2142
1587
|
void
|
2143
1588
|
IceInternal::setMcastGroup(SOCKET fd, const Address& group, const string& intf)
|
2144
1589
|
{
|
@@ -2173,55 +1618,7 @@ IceInternal::setMcastGroup(SOCKET fd, const Address& group, const string& intf)
|
|
2173
1618
|
}
|
2174
1619
|
}
|
2175
1620
|
}
|
2176
|
-
#else
|
2177
|
-
void
|
2178
|
-
IceInternal::setMcastGroup(SOCKET fd, const Address& group, const string&)
|
2179
|
-
{
|
2180
|
-
try
|
2181
|
-
{
|
2182
|
-
//
|
2183
|
-
// NOTE: UWP mcast interface is set earlier in doBind.
|
2184
|
-
//
|
2185
|
-
safe_cast<DatagramSocket^>(fd)->JoinMulticastGroup(group.host);
|
2186
|
-
|
2187
|
-
//
|
2188
|
-
// BUGFIX DatagramSocket will not recive any messages from a multicast group if the
|
2189
|
-
// messages originate in the same host until the socket is used to send at least one
|
2190
|
-
// message. We send a valiate connection message that the peers will ignore to workaround
|
2191
|
-
// the issue.
|
2192
|
-
//
|
2193
|
-
auto out = IceInternal::runSync(safe_cast<DatagramSocket^>(fd)->GetOutputStreamAsync(group.host, group.port));
|
2194
|
-
auto writer = ref new DataWriter(out);
|
2195
1621
|
|
2196
|
-
OutputStream os;
|
2197
|
-
os.write(magic[0]);
|
2198
|
-
os.write(magic[1]);
|
2199
|
-
os.write(magic[2]);
|
2200
|
-
os.write(magic[3]);
|
2201
|
-
os.write(currentProtocol);
|
2202
|
-
os.write(currentProtocolEncoding);
|
2203
|
-
os.write(validateConnectionMsg);
|
2204
|
-
os.write(static_cast<Byte>(0)); // Compression status (always zero for validate connection).
|
2205
|
-
os.write(headerSize); // Message size.
|
2206
|
-
os.i = os.b.begin();
|
2207
|
-
|
2208
|
-
writer->WriteBytes(ref new Array<unsigned char>(&*os.i, static_cast<unsigned int>(headerSize)));
|
2209
|
-
|
2210
|
-
IceInternal::runSync(writer->StoreAsync());
|
2211
|
-
}
|
2212
|
-
catch(Platform::Exception^ pex)
|
2213
|
-
{
|
2214
|
-
throw SocketException(__FILE__, __LINE__, (int)SocketError::GetStatus(pex->HResult));
|
2215
|
-
}
|
2216
|
-
}
|
2217
|
-
#endif
|
2218
|
-
|
2219
|
-
#ifdef ICE_OS_UWP
|
2220
|
-
void
|
2221
|
-
IceInternal::setMcastInterface(SOCKET, const string&, const Address&)
|
2222
|
-
{
|
2223
|
-
}
|
2224
|
-
#else
|
2225
1622
|
void
|
2226
1623
|
IceInternal::setMcastInterface(SOCKET fd, const string& intf, const Address& addr)
|
2227
1624
|
{
|
@@ -2242,14 +1639,7 @@ IceInternal::setMcastInterface(SOCKET fd, const string& intf, const Address& add
|
|
2242
1639
|
throw SocketException(__FILE__, __LINE__, getSocketErrno());
|
2243
1640
|
}
|
2244
1641
|
}
|
2245
|
-
#endif
|
2246
1642
|
|
2247
|
-
#ifdef ICE_OS_UWP
|
2248
|
-
void
|
2249
|
-
IceInternal::setMcastTtl(SOCKET, int, const Address&)
|
2250
|
-
{
|
2251
|
-
}
|
2252
|
-
#else
|
2253
1643
|
void
|
2254
1644
|
IceInternal::setMcastTtl(SOCKET fd, int ttl, const Address& addr)
|
2255
1645
|
{
|
@@ -2268,14 +1658,7 @@ IceInternal::setMcastTtl(SOCKET fd, int ttl, const Address& addr)
|
|
2268
1658
|
throw SocketException(__FILE__, __LINE__, getSocketErrno());
|
2269
1659
|
}
|
2270
1660
|
}
|
2271
|
-
#endif
|
2272
1661
|
|
2273
|
-
#ifdef ICE_OS_UWP
|
2274
|
-
void
|
2275
|
-
IceInternal::setReuseAddress(SOCKET, bool)
|
2276
|
-
{
|
2277
|
-
}
|
2278
|
-
#else
|
2279
1662
|
void
|
2280
1663
|
IceInternal::setReuseAddress(SOCKET fd, bool reuse)
|
2281
1664
|
{
|
@@ -2286,119 +1669,7 @@ IceInternal::setReuseAddress(SOCKET fd, bool reuse)
|
|
2286
1669
|
throw SocketException(__FILE__, __LINE__, getSocketErrno());
|
2287
1670
|
}
|
2288
1671
|
}
|
2289
|
-
#endif
|
2290
|
-
|
2291
|
-
#ifdef ICE_OS_UWP
|
2292
|
-
namespace
|
2293
|
-
{
|
2294
|
-
|
2295
|
-
void
|
2296
|
-
checkResultAndWait(IAsyncAction^ action)
|
2297
|
-
{
|
2298
|
-
auto status = action->Status;
|
2299
|
-
switch(status)
|
2300
|
-
{
|
2301
|
-
case Windows::Foundation::AsyncStatus::Started:
|
2302
|
-
{
|
2303
|
-
promise<HRESULT> p;
|
2304
|
-
action->Completed = ref new AsyncActionCompletedHandler(
|
2305
|
-
[&p] (IAsyncAction^ action, Windows::Foundation::AsyncStatus status)
|
2306
|
-
{
|
2307
|
-
p.set_value(status != Windows::Foundation::AsyncStatus::Completed ? action->ErrorCode.Value : 0);
|
2308
|
-
});
|
2309
|
-
|
2310
|
-
HRESULT result = p.get_future().get();
|
2311
|
-
if(result)
|
2312
|
-
{
|
2313
|
-
checkErrorCode(__FILE__, __LINE__, result);
|
2314
|
-
}
|
2315
|
-
break;
|
2316
|
-
}
|
2317
|
-
case Windows::Foundation::AsyncStatus::Error:
|
2318
|
-
{
|
2319
|
-
checkErrorCode(__FILE__, __LINE__, action->ErrorCode.Value);
|
2320
|
-
break;
|
2321
|
-
}
|
2322
|
-
default:
|
2323
|
-
{
|
2324
|
-
break;
|
2325
|
-
}
|
2326
|
-
}
|
2327
|
-
}
|
2328
1672
|
|
2329
|
-
}
|
2330
|
-
#endif
|
2331
|
-
|
2332
|
-
#ifdef ICE_OS_UWP
|
2333
|
-
Address
|
2334
|
-
IceInternal::doBind(SOCKET fd, const Address& addr, const string& intf)
|
2335
|
-
{
|
2336
|
-
Address local;
|
2337
|
-
try
|
2338
|
-
{
|
2339
|
-
StreamSocketListener^ listener = dynamic_cast<StreamSocketListener^>(fd);
|
2340
|
-
if(listener != nullptr)
|
2341
|
-
{
|
2342
|
-
if(addr.host == nullptr) // inaddr_any
|
2343
|
-
{
|
2344
|
-
checkResultAndWait(listener->BindServiceNameAsync(addr.port));
|
2345
|
-
}
|
2346
|
-
else
|
2347
|
-
{
|
2348
|
-
checkResultAndWait(listener->BindEndpointAsync(addr.host, addr.port));
|
2349
|
-
}
|
2350
|
-
local.host = addr.host;
|
2351
|
-
local.port = listener->Information->LocalPort;
|
2352
|
-
}
|
2353
|
-
|
2354
|
-
DatagramSocket^ datagram = dynamic_cast<DatagramSocket^>(fd);
|
2355
|
-
if(datagram != nullptr)
|
2356
|
-
{
|
2357
|
-
if(addr.host == nullptr) // inaddr_any
|
2358
|
-
{
|
2359
|
-
NetworkAdapter^ adapter;
|
2360
|
-
if(!intf.empty())
|
2361
|
-
{
|
2362
|
-
auto s = ref new String(Ice::stringToWstring(intf).c_str());
|
2363
|
-
auto profiles = NetworkInformation::GetConnectionProfiles();
|
2364
|
-
for(auto i = profiles->First(); adapter == nullptr && i->HasCurrent; i->MoveNext())
|
2365
|
-
{
|
2366
|
-
auto names = i->Current->GetNetworkNames();
|
2367
|
-
for(auto j = names->First(); adapter == nullptr && j->HasCurrent; j->MoveNext())
|
2368
|
-
{
|
2369
|
-
if(j->Current->Equals(s))
|
2370
|
-
{
|
2371
|
-
adapter = i->Current->NetworkAdapter;
|
2372
|
-
}
|
2373
|
-
}
|
2374
|
-
}
|
2375
|
-
}
|
2376
|
-
|
2377
|
-
if(adapter)
|
2378
|
-
{
|
2379
|
-
checkResultAndWait(datagram->BindServiceNameAsync(addr.port, adapter));
|
2380
|
-
}
|
2381
|
-
else
|
2382
|
-
{
|
2383
|
-
checkResultAndWait(datagram->BindServiceNameAsync(addr.port));
|
2384
|
-
}
|
2385
|
-
}
|
2386
|
-
else
|
2387
|
-
{
|
2388
|
-
checkResultAndWait(datagram->BindEndpointAsync(addr.host, addr.port));
|
2389
|
-
}
|
2390
|
-
local.host = datagram->Information->LocalAddress;
|
2391
|
-
local.port = datagram->Information->LocalPort;
|
2392
|
-
}
|
2393
|
-
}
|
2394
|
-
catch(const Ice::SocketException&)
|
2395
|
-
{
|
2396
|
-
closeSocketNoThrow(fd);
|
2397
|
-
throw;
|
2398
|
-
}
|
2399
|
-
return local;
|
2400
|
-
}
|
2401
|
-
#else
|
2402
1673
|
Address
|
2403
1674
|
IceInternal::doBind(SOCKET fd, const Address& addr, const string&)
|
2404
1675
|
{
|
@@ -2413,17 +1684,14 @@ IceInternal::doBind(SOCKET fd, const Address& addr, const string&)
|
|
2413
1684
|
|
2414
1685
|
Address local;
|
2415
1686
|
socklen_t len = static_cast<socklen_t>(sizeof(sockaddr_storage));
|
2416
|
-
#
|
1687
|
+
#ifdef NDEBUG
|
2417
1688
|
getsockname(fd, &local.sa, &len);
|
2418
|
-
#
|
1689
|
+
#else
|
2419
1690
|
int ret = getsockname(fd, &local.sa, &len);
|
2420
1691
|
assert(ret != SOCKET_ERROR);
|
2421
|
-
#
|
1692
|
+
#endif
|
2422
1693
|
return local;
|
2423
1694
|
}
|
2424
|
-
#endif
|
2425
|
-
|
2426
|
-
#ifndef ICE_OS_UWP
|
2427
1695
|
|
2428
1696
|
Address
|
2429
1697
|
IceInternal::getNumericAddress(const std::string& address)
|
@@ -2865,94 +2133,6 @@ IceInternal::createPipe(SOCKET fds[2])
|
|
2865
2133
|
#endif
|
2866
2134
|
}
|
2867
2135
|
|
2868
|
-
#else // ICE_OS_UWP
|
2869
|
-
|
2870
|
-
void
|
2871
|
-
IceInternal::checkConnectErrorCode(const char* file, int line, HRESULT herr)
|
2872
|
-
{
|
2873
|
-
if(herr == E_ACCESSDENIED)
|
2874
|
-
{
|
2875
|
-
throw SocketException(file, line, static_cast<int>(herr));
|
2876
|
-
}
|
2877
|
-
SocketErrorStatus error = SocketError::GetStatus(herr);
|
2878
|
-
if(error == SocketErrorStatus::ConnectionRefused)
|
2879
|
-
{
|
2880
|
-
throw ConnectionRefusedException(file, line, static_cast<int>(error));
|
2881
|
-
}
|
2882
|
-
else if(error == SocketErrorStatus::NetworkDroppedConnectionOnReset ||
|
2883
|
-
error == SocketErrorStatus::ConnectionTimedOut ||
|
2884
|
-
error == SocketErrorStatus::NetworkIsUnreachable ||
|
2885
|
-
error == SocketErrorStatus::UnreachableHost ||
|
2886
|
-
error == SocketErrorStatus::ConnectionResetByPeer ||
|
2887
|
-
error == SocketErrorStatus::SoftwareCausedConnectionAbort)
|
2888
|
-
{
|
2889
|
-
throw ConnectFailedException(file, line, static_cast<int>(error));
|
2890
|
-
}
|
2891
|
-
else if(error == SocketErrorStatus::HostNotFound)
|
2892
|
-
{
|
2893
|
-
throw DNSException(file, line, static_cast<int>(error), "");
|
2894
|
-
}
|
2895
|
-
else
|
2896
|
-
{
|
2897
|
-
throw SocketException(file, line, static_cast<int>(error));
|
2898
|
-
}
|
2899
|
-
}
|
2900
|
-
|
2901
|
-
void
|
2902
|
-
IceInternal::checkErrorCode(const char* file, int line, HRESULT herr)
|
2903
|
-
{
|
2904
|
-
if(herr == E_ACCESSDENIED)
|
2905
|
-
{
|
2906
|
-
throw SocketException(file, line, static_cast<int>(herr));
|
2907
|
-
}
|
2908
|
-
SocketErrorStatus error = SocketError::GetStatus(herr);
|
2909
|
-
if(error == SocketErrorStatus::NetworkDroppedConnectionOnReset ||
|
2910
|
-
error == SocketErrorStatus::SoftwareCausedConnectionAbort ||
|
2911
|
-
error == SocketErrorStatus::ConnectionResetByPeer)
|
2912
|
-
{
|
2913
|
-
throw ConnectionLostException(file, line, static_cast<int>(error));
|
2914
|
-
}
|
2915
|
-
else if(error == SocketErrorStatus::HostNotFound)
|
2916
|
-
{
|
2917
|
-
throw DNSException(file, line, static_cast<int>(error), "");
|
2918
|
-
}
|
2919
|
-
else
|
2920
|
-
{
|
2921
|
-
throw SocketException(file, line, static_cast<int>(error));
|
2922
|
-
}
|
2923
|
-
}
|
2924
|
-
|
2925
|
-
//
|
2926
|
-
// UWP impose some restriction on operations that block when run from
|
2927
|
-
// STA thread and throws concurrency::invalid_operation. We cannot
|
2928
|
-
// directly call task::get or task::way, this helper method is used to
|
2929
|
-
// workaround this limitation.
|
2930
|
-
//
|
2931
|
-
void
|
2932
|
-
IceInternal::runSync(Windows::Foundation::IAsyncAction^ action)
|
2933
|
-
{
|
2934
|
-
std::promise<void> p;
|
2935
|
-
|
2936
|
-
concurrency::create_task(action).then(
|
2937
|
-
[&p](concurrency::task<void> t)
|
2938
|
-
{
|
2939
|
-
try
|
2940
|
-
{
|
2941
|
-
t.get();
|
2942
|
-
p.set_value();
|
2943
|
-
}
|
2944
|
-
catch(...)
|
2945
|
-
{
|
2946
|
-
p.set_exception(std::current_exception());
|
2947
|
-
}
|
2948
|
-
},
|
2949
|
-
concurrency::task_continuation_context::use_arbitrary());
|
2950
|
-
|
2951
|
-
return p.get_future().get();
|
2952
|
-
}
|
2953
|
-
|
2954
|
-
#endif
|
2955
|
-
|
2956
2136
|
#if defined(ICE_USE_IOCP)
|
2957
2137
|
void
|
2958
2138
|
IceInternal::doConnectAsync(SOCKET fd, const Address& addr, const Address& sourceAddr, AsyncInfo& info)
|
@@ -3062,14 +2242,8 @@ IceInternal::doFinishConnectAsync(SOCKET fd, AsyncInfo& info)
|
|
3062
2242
|
bool
|
3063
2243
|
IceInternal::isIpAddress(const string& name)
|
3064
2244
|
{
|
3065
|
-
#ifdef ICE_OS_UWP
|
3066
|
-
HostName^ hostname = ref new HostName(ref new String(stringToWstring(name,
|
3067
|
-
getProcessStringConverter()).c_str()));
|
3068
|
-
return hostname->Type == HostNameType::Ipv4 || hostname->Type == HostNameType::Ipv6;
|
3069
|
-
#else
|
3070
2245
|
in_addr addr;
|
3071
2246
|
in6_addr addr6;
|
3072
2247
|
|
3073
2248
|
return inet_pton(AF_INET, name.c_str(), &addr) > 0 || inet_pton(AF_INET6, name.c_str(), &addr6) > 0;
|
3074
|
-
#endif
|
3075
2249
|
}
|