summaryrefslogtreecommitdiff
path: root/cpp/src
diff options
context:
space:
mode:
authorJose <jose@zeroc.com>2014-08-07 01:00:42 +0200
committerJose <jose@zeroc.com>2014-08-07 01:00:42 +0200
commitd86ef31c63190285dda3233b8ee2cb5d381c7686 (patch)
tree653d33813fef2d5997916d8462f516646af919c3 /cpp/src
parentupdating .depend files (diff)
downloadice-d86ef31c63190285dda3233b8ee2cb5d381c7686.tar.bz2
ice-d86ef31c63190285dda3233b8ee2cb5d381c7686.tar.xz
ice-d86ef31c63190285dda3233b8ee2cb5d381c7686.zip
Windows SSL SChannel implementation & OS X Secure Transport fixes.
Diffstat (limited to 'cpp/src')
-rw-r--r--cpp/src/Glacier2/CryptPermissionsVerifierI.cpp12
-rw-r--r--cpp/src/Glacier2/Makefile.mak2
-rw-r--r--cpp/src/Ice/ConnectionI.cpp24
-rw-r--r--cpp/src/Ice/PropertyNames.cpp3
-rw-r--r--cpp/src/Ice/PropertyNames.h2
-rw-r--r--cpp/src/Ice/TcpTransceiver.cpp2
-rw-r--r--cpp/src/Ice/TcpTransceiver.h2
-rw-r--r--cpp/src/Ice/Transceiver.h2
-rw-r--r--cpp/src/Ice/UdpTransceiver.cpp2
-rw-r--r--cpp/src/Ice/UdpTransceiver.h2
-rw-r--r--cpp/src/IceGrid/Makefile.mak2
-rw-r--r--cpp/src/IceGrid/RegistryI.cpp15
-rw-r--r--cpp/src/IcePatch2Lib/.depend2
-rw-r--r--cpp/src/IcePatch2Lib/.depend.mak2
-rw-r--r--cpp/src/IcePatch2Lib/Util.cpp25
-rw-r--r--cpp/src/IceSSL/.depend26
-rw-r--r--cpp/src/IceSSL/.depend.mak26
-rw-r--r--cpp/src/IceSSL/AcceptorI.cpp4
-rw-r--r--cpp/src/IceSSL/Certificate.cpp462
-rw-r--r--cpp/src/IceSSL/ConnectorI.cpp5
-rw-r--r--cpp/src/IceSSL/EndpointI.cpp1
-rw-r--r--cpp/src/IceSSL/Makefile6
-rw-r--r--cpp/src/IceSSL/Makefile.mak30
-rw-r--r--cpp/src/IceSSL/OpenSSLEngine.cpp386
-rw-r--r--cpp/src/IceSSL/OpenSSLTransceiverI.cpp (renamed from cpp/src/IceSSL/TransceiverI.cpp)678
-rw-r--r--cpp/src/IceSSL/OpenSSLTransceiverI.h (renamed from cpp/src/IceSSL/TransceiverI.h)1
-rw-r--r--cpp/src/IceSSL/PluginI.cpp9
-rw-r--r--cpp/src/IceSSL/PluginI.h8
-rw-r--r--cpp/src/IceSSL/SChannelEngine.cpp664
-rw-r--r--cpp/src/IceSSL/SChannelTransceiverI.cpp1463
-rw-r--r--cpp/src/IceSSL/SChannelTransceiverI.h145
-rw-r--r--cpp/src/IceSSL/SSLEngine.cpp12
-rw-r--r--cpp/src/IceSSL/SSLEngine.h160
-rw-r--r--cpp/src/IceSSL/SSLEngineF.h10
-rw-r--r--cpp/src/IceSSL/SecureTransportEngine.cpp781
-rw-r--r--cpp/src/IceSSL/SecureTransportTransceiverI.cpp422
-rw-r--r--cpp/src/IceSSL/SecureTransportTransceiverI.h2
-rw-r--r--cpp/src/IceSSL/Util.cpp427
-rw-r--r--cpp/src/IceSSL/Util.h76
-rw-r--r--cpp/src/IceSSL/UtilF.h30
-rw-r--r--cpp/src/IceUtil/.depend1
-rw-r--r--cpp/src/IceUtil/.depend.mak1
-rw-r--r--cpp/src/IceUtil/Makefile3
-rw-r--r--cpp/src/IceUtil/Makefile.mak3
-rw-r--r--cpp/src/IceUtil/SHA1.cpp128
-rw-r--r--cpp/src/IceWS/.depend2
-rw-r--r--cpp/src/IceWS/.depend.mak2
-rw-r--r--cpp/src/IceWS/Makefile2
-rw-r--r--cpp/src/IceWS/TransceiverI.cpp40
-rw-r--r--cpp/src/IceWS/TransceiverI.h8
-rw-r--r--cpp/src/IceWS/Util.cpp28
51 files changed, 4173 insertions, 1978 deletions
diff --git a/cpp/src/Glacier2/CryptPermissionsVerifierI.cpp b/cpp/src/Glacier2/CryptPermissionsVerifierI.cpp
index 0f1e3027a59..f677a41b570 100644
--- a/cpp/src/Glacier2/CryptPermissionsVerifierI.cpp
+++ b/cpp/src/Glacier2/CryptPermissionsVerifierI.cpp
@@ -8,11 +8,9 @@
// **********************************************************************
#include <Glacier2/CryptPermissionsVerifierI.h>
-#include <openssl/des.h>
-// Ignore OS X OpenSSL deprecation warnings
-#ifdef __APPLE__
-#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+#ifndef __APPLE__
+# include <openssl/des.h>
#endif
using namespace std;
@@ -44,10 +42,10 @@ Glacier2::CryptPermissionsVerifierI::checkPermissions(
char buff[14];
string salt = p->second.substr(0, 2);
-#if OPENSSL_VERSION_NUMBER >= 0x0090700fL
- DES_fcrypt(password.c_str(), salt.c_str(), buff);
+#if defined(__APPLE__)
+ return p->second == crypt(password.c_str(), salt.c_str());
#else
- des_fcrypt(password.c_str(), salt.c_str(), buff);
+ DES_fcrypt(password.c_str(), salt.c_str(), buff);
#endif
return p->second == buff;
}
diff --git a/cpp/src/Glacier2/Makefile.mak b/cpp/src/Glacier2/Makefile.mak
index 5d82e55571f..6ca049e0837 100644
--- a/cpp/src/Glacier2/Makefile.mak
+++ b/cpp/src/Glacier2/Makefile.mak
@@ -35,7 +35,7 @@ SRCS = $(OBJS:.obj=.cpp)
CPPFLAGS = -I.. $(CPPFLAGS) -DWIN32_LEAN_AND_MEAN
SLICE2CPPFLAGS = --include-dir Glacier2 $(SLICE2CPPFLAGS)
-LINKWITH = $(LIBS) $(OPENSSL_LIBS) glacier2$(LIBSUFFIX).lib icessl$(LIBSUFFIX).lib
+LINKWITH = $(LIBS) $(OPENSSL_LIBS) glacier2$(LIBSUFFIX).lib icessl$(LIBSUFFIX).lib libeay32.lib
!if "$(GENERATE_PDB)" == "yes"
PDBFLAGS = /pdb:$(ROUTER:.exe=.pdb)
diff --git a/cpp/src/Ice/ConnectionI.cpp b/cpp/src/Ice/ConnectionI.cpp
index 22cc069ef08..37afd228ca7 100644
--- a/cpp/src/Ice/ConnectionI.cpp
+++ b/cpp/src/Ice/ConnectionI.cpp
@@ -1532,12 +1532,19 @@ Ice::ConnectionI::startAsync(SocketOperation operation)
}
else if(operation & SocketOperationRead)
{
- if(_observer && !_readHeader)
+ if(!_hasMoreData)
{
- _observer.startRead(_readStream);
+ if(_observer && !_readHeader)
+ {
+ _observer.startRead(_readStream);
+ }
+
+ _transceiver->startRead(_readStream);
+ }
+ else
+ {
+ _transceiver->getNativeInfo()->completed(IceInternal::SocketOperationRead);
}
-
- _transceiver->startRead(_readStream);
}
}
catch(const Ice::LocalException& ex)
@@ -1563,10 +1570,13 @@ Ice::ConnectionI::finishAsync(SocketOperation operation)
}
else if(operation & SocketOperationRead)
{
- _transceiver->finishRead(_readStream);
- if(_observer && !_readHeader)
+ if(!_hasMoreData)
{
- _observer.finishRead(_readStream);
+ _transceiver->finishRead(_readStream, _hasMoreData);
+ if(_observer && !_readHeader)
+ {
+ _observer.finishRead(_readStream);
+ }
}
}
}
diff --git a/cpp/src/Ice/PropertyNames.cpp b/cpp/src/Ice/PropertyNames.cpp
index e8173132ac5..bbd8bf78e33 100644
--- a/cpp/src/Ice/PropertyNames.cpp
+++ b/cpp/src/Ice/PropertyNames.cpp
@@ -6,7 +6,7 @@
// ICE_LICENSE file included in this distribution.
//
// **********************************************************************
-// Generated by makeprops.py from file ./config/PropertyNames.xml, Thu Jul 31 10:17:55 2014
+// Generated by makeprops.py from file ./config/PropertyNames.xml, Fri Aug 1 17:15:07 2014
// IMPORTANT: Do not edit this file -- any edits made here will be lost!
@@ -1002,6 +1002,7 @@ const IceInternal::Property IceSSLPropsData[] =
IceInternal::Property("IceSSL.Alias", false, 0),
IceInternal::Property("IceSSL.CertAuthDir", false, 0),
IceInternal::Property("IceSSL.CertAuthFile", false, 0),
+ IceInternal::Property("IceSSL.CertStore", false, 0),
IceInternal::Property("IceSSL.CertFile", false, 0),
IceInternal::Property("IceSSL.CertVerifier", false, 0),
IceInternal::Property("IceSSL.CheckCertName", false, 0),
diff --git a/cpp/src/Ice/PropertyNames.h b/cpp/src/Ice/PropertyNames.h
index 0ea2573f46b..aac06f2e5ca 100644
--- a/cpp/src/Ice/PropertyNames.h
+++ b/cpp/src/Ice/PropertyNames.h
@@ -6,7 +6,7 @@
// ICE_LICENSE file included in this distribution.
//
// **********************************************************************
-// Generated by makeprops.py from file ./config/PropertyNames.xml, Thu Jul 31 10:17:55 2014
+// Generated by makeprops.py from file ./config/PropertyNames.xml, Fri Aug 1 17:15:07 2014
// IMPORTANT: Do not edit this file -- any edits made here will be lost!
diff --git a/cpp/src/Ice/TcpTransceiver.cpp b/cpp/src/Ice/TcpTransceiver.cpp
index 6f32d06ed8f..f5c30d11457 100644
--- a/cpp/src/Ice/TcpTransceiver.cpp
+++ b/cpp/src/Ice/TcpTransceiver.cpp
@@ -464,7 +464,7 @@ IceInternal::TcpTransceiver::startRead(Buffer& buf)
}
void
-IceInternal::TcpTransceiver::finishRead(Buffer& buf)
+IceInternal::TcpTransceiver::finishRead(Buffer& buf, bool&)
{
if(static_cast<int>(_read.count) == SOCKET_ERROR)
{
diff --git a/cpp/src/Ice/TcpTransceiver.h b/cpp/src/Ice/TcpTransceiver.h
index 165cbebe523..691e9aafce7 100644
--- a/cpp/src/Ice/TcpTransceiver.h
+++ b/cpp/src/Ice/TcpTransceiver.h
@@ -47,7 +47,7 @@ public:
virtual bool startWrite(Buffer&);
virtual void finishWrite(Buffer&);
virtual void startRead(Buffer&);
- virtual void finishRead(Buffer&);
+ virtual void finishRead(Buffer&, bool&);
#endif
virtual std::string protocol() const;
virtual std::string toString() const;
diff --git a/cpp/src/Ice/Transceiver.h b/cpp/src/Ice/Transceiver.h
index 0849f6c735f..3e645a7793e 100644
--- a/cpp/src/Ice/Transceiver.h
+++ b/cpp/src/Ice/Transceiver.h
@@ -36,7 +36,7 @@ public:
virtual bool startWrite(Buffer&) = 0;
virtual void finishWrite(Buffer&) = 0;
virtual void startRead(Buffer&) = 0;
- virtual void finishRead(Buffer&) = 0;
+ virtual void finishRead(Buffer&, bool&) = 0;
#endif
virtual std::string protocol() const = 0;
diff --git a/cpp/src/Ice/UdpTransceiver.cpp b/cpp/src/Ice/UdpTransceiver.cpp
index 37483a7fb09..a82f0e0f4ae 100644
--- a/cpp/src/Ice/UdpTransceiver.cpp
+++ b/cpp/src/Ice/UdpTransceiver.cpp
@@ -668,7 +668,7 @@ IceInternal::UdpTransceiver::startRead(Buffer& buf)
}
void
-IceInternal::UdpTransceiver::finishRead(Buffer& buf)
+IceInternal::UdpTransceiver::finishRead(Buffer& buf, bool&)
{
#ifdef ICE_OS_WINRT
IceUtil::Mutex::Lock lock(_mutex);
diff --git a/cpp/src/Ice/UdpTransceiver.h b/cpp/src/Ice/UdpTransceiver.h
index 27891d53a2f..02b8c3267f5 100644
--- a/cpp/src/Ice/UdpTransceiver.h
+++ b/cpp/src/Ice/UdpTransceiver.h
@@ -53,7 +53,7 @@ public:
virtual bool startWrite(Buffer&);
virtual void finishWrite(Buffer&);
virtual void startRead(Buffer&);
- virtual void finishRead(Buffer&);
+ virtual void finishRead(Buffer&, bool&);
#endif
virtual std::string protocol() const;
virtual std::string toString() const;
diff --git a/cpp/src/IceGrid/Makefile.mak b/cpp/src/IceGrid/Makefile.mak
index a5198b77954..7edf4b4f2c1 100644
--- a/cpp/src/IceGrid/Makefile.mak
+++ b/cpp/src/IceGrid/Makefile.mak
@@ -103,7 +103,7 @@ LINKWITH = $(LIBS) glacier2$(LIBSUFFIX).lib
ALINKWITH = $(LINKWITH) icegrid$(LIBSUFFIX).lib icexml$(LIBSUFFIX).lib icepatch2$(LIBSUFFIX).lib \
icebox$(LIBSUFFIX).lib
NLINKWITH = $(ALINKWITH) freeze$(LIBSUFFIX).lib icestorm$(LIBSUFFIX).lib icebox$(LIBSUFFIX).lib \
- icessl$(LIBSUFFIX).lib icestormservice$(LIBSUFFIX).lib $(OPENSSL_LIBS) pdh.lib ws2_32.lib
+ icessl$(LIBSUFFIX).lib icestormservice$(LIBSUFFIX).lib libeay32.lib pdh.lib ws2_32.lib
SLICE2CPPFLAGS = --checksum --ice --include-dir IceGrid $(SLICE2CPPFLAGS)
CPPFLAGS = -I. -I.. $(CPPFLAGS) -DWIN32_LEAN_AND_MEAN -Zm200
diff --git a/cpp/src/IceGrid/RegistryI.cpp b/cpp/src/IceGrid/RegistryI.cpp
index 5bc98f5b188..319686336e7 100644
--- a/cpp/src/IceGrid/RegistryI.cpp
+++ b/cpp/src/IceGrid/RegistryI.cpp
@@ -40,15 +40,12 @@
#include <fstream>
-#include <openssl/des.h> // For crypt() passwords
+#ifndef __APPLE__
+# include <openssl/des.h> // For crypt() passwords
+#endif
#include <sys/types.h>
-// Ignore OS X OpenSSL deprecation warnings
-#ifdef __APPLE__
-#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
-#endif
-
using namespace std;
using namespace Ice;
using namespace IceGrid;
@@ -100,10 +97,10 @@ public:
char buff[14];
string salt = p->second.substr(0, 2);
-#if OPENSSL_VERSION_NUMBER >= 0x0090700fL
- DES_fcrypt(password.c_str(), salt.c_str(), buff);
+#if defined(__APPLE__)
+ return p->second == crypt(password.c_str(), salt.c_str());
#else
- des_fcrypt(password.c_str(), salt.c_str(), buff);
+ DES_fcrypt(password.c_str(), salt.c_str(), buff);
#endif
return p->second == buff;
}
diff --git a/cpp/src/IcePatch2Lib/.depend b/cpp/src/IcePatch2Lib/.depend
index 2bea7a32b25..c3f9f48b3ee 100644
--- a/cpp/src/IcePatch2Lib/.depend
+++ b/cpp/src/IcePatch2Lib/.depend
@@ -1,4 +1,4 @@
-Util$(OBJEXT): Util.cpp $(includedir)/IceUtil/DisableWarnings.h $(includedir)/IceUtil/IceUtil.h $(includedir)/IceUtil/Config.h $(includedir)/IceUtil/AbstractMutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Exception.h $(includedir)/IceUtil/Time.h $(includedir)/IceUtil/Cache.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/MutexProtocol.h $(includedir)/IceUtil/CountDownLatch.h $(includedir)/IceUtil/Cond.h $(includedir)/IceUtil/CtrlCHandler.h $(includedir)/IceUtil/Functional.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/MutexPtrLock.h $(includedir)/IceUtil/RecMutex.h $(includedir)/IceUtil/ScopedArray.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/StringConverter.h $(includedir)/IceUtil/Thread.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/UUID.h $(includedir)/IceUtil/UniquePtr.h $(includedir)/IceUtil/IconvStringConverter.h $(includedir)/IceUtil/UndefSysMacros.h $(includedir)/IceUtil/StringUtil.h $(includedir)/IceUtil/FileUtil.h $(includedir)/IcePatch2/Util.h $(includedir)/Ice/Ice.h $(includedir)/Ice/Config.h $(includedir)/Ice/DeprecatedStringConverter.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/Handle.h $(includedir)/Ice/Exception.h $(includedir)/Ice/Format.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/LocalObjectF.h $(includedir)/Ice/StreamHelpers.h $(includedir)/IceUtil/Iterator.h $(includedir)/IceUtil/Optional.h $(includedir)/Ice/Initialize.h $(includedir)/Ice/PropertiesF.h $(includedir)/Ice/Proxy.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointF.h $(includedir)/Ice/EndpointTypes.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/Version.h $(includedir)/Ice/BasicStream.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/ObjectFactoryManagerF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/Ice/SlicedDataF.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/FactoryTable.h $(includedir)/Ice/ObserverHelper.h $(includedir)/Ice/Instrumentation.h $(includedir)/Ice/ThreadPoolF.h $(includedir)/Ice/LoggerF.h $(includedir)/Ice/InstrumentationF.h $(includedir)/Ice/Dispatcher.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/Ice/Plugin.h $(includedir)/Ice/LocalException.h $(includedir)/Ice/PropertiesAdmin.h $(includedir)/Ice/GCObject.h $(includedir)/Ice/Outgoing.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/ResponseHandlerF.h $(includedir)/Ice/IncomingAsync.h $(includedir)/Ice/Properties.h $(includedir)/Ice/Logger.h $(includedir)/Ice/LoggerUtil.h $(includedir)/Ice/Communicator.h $(includedir)/Ice/RouterF.h $(includedir)/Ice/LocatorF.h $(includedir)/Ice/PluginF.h $(includedir)/Ice/ImplicitContextF.h $(includedir)/Ice/CommunicatorAsync.h $(includedir)/Ice/ObjectFactory.h $(includedir)/Ice/ObjectAdapter.h $(includedir)/Ice/FacetMap.h $(includedir)/Ice/Endpoint.h $(includedir)/Ice/ServantLocator.h $(includedir)/Ice/SlicedData.h $(includedir)/Ice/Process.h $(includedir)/Ice/Application.h $(includedir)/Ice/Connection.h $(includedir)/Ice/ConnectionAsync.h $(includedir)/Ice/Functional.h $(includedir)/Ice/Stream.h $(includedir)/Ice/ImplicitContext.h $(includedir)/Ice/Locator.h $(includedir)/Ice/FactoryTableInit.h $(includedir)/Ice/DefaultObjectFactory.h $(includedir)/Ice/ProcessF.h $(includedir)/Ice/Router.h $(includedir)/Ice/DispatchInterceptor.h $(includedir)/Ice/NativePropertiesAdmin.h $(includedir)/Ice/Metrics.h $(includedir)/Ice/Service.h $(includedir)/IcePatch2/FileInfo.h
+Util$(OBJEXT): Util.cpp $(includedir)/IceUtil/DisableWarnings.h $(includedir)/IceUtil/IceUtil.h $(includedir)/IceUtil/Config.h $(includedir)/IceUtil/AbstractMutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Exception.h $(includedir)/IceUtil/Time.h $(includedir)/IceUtil/Cache.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/MutexProtocol.h $(includedir)/IceUtil/CountDownLatch.h $(includedir)/IceUtil/Cond.h $(includedir)/IceUtil/CtrlCHandler.h $(includedir)/IceUtil/Functional.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/MutexPtrLock.h $(includedir)/IceUtil/RecMutex.h $(includedir)/IceUtil/ScopedArray.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/StringConverter.h $(includedir)/IceUtil/Thread.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/UUID.h $(includedir)/IceUtil/UniquePtr.h $(includedir)/IceUtil/IconvStringConverter.h $(includedir)/IceUtil/UndefSysMacros.h $(includedir)/IceUtil/StringUtil.h $(includedir)/IceUtil/FileUtil.h $(includedir)/IceUtil/SHA1.h $(includedir)/IcePatch2/Util.h $(includedir)/Ice/Ice.h $(includedir)/Ice/Config.h $(includedir)/Ice/DeprecatedStringConverter.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/Handle.h $(includedir)/Ice/Exception.h $(includedir)/Ice/Format.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/LocalObjectF.h $(includedir)/Ice/StreamHelpers.h $(includedir)/IceUtil/Iterator.h $(includedir)/IceUtil/Optional.h $(includedir)/Ice/Initialize.h $(includedir)/Ice/PropertiesF.h $(includedir)/Ice/Proxy.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointF.h $(includedir)/Ice/EndpointTypes.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/Version.h $(includedir)/Ice/BasicStream.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/ObjectFactoryManagerF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/Ice/SlicedDataF.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/FactoryTable.h $(includedir)/Ice/ObserverHelper.h $(includedir)/Ice/Instrumentation.h $(includedir)/Ice/ThreadPoolF.h $(includedir)/Ice/LoggerF.h $(includedir)/Ice/InstrumentationF.h $(includedir)/Ice/Dispatcher.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/Ice/Plugin.h $(includedir)/Ice/LocalException.h $(includedir)/Ice/PropertiesAdmin.h $(includedir)/Ice/GCObject.h $(includedir)/Ice/Outgoing.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/ResponseHandlerF.h $(includedir)/Ice/IncomingAsync.h $(includedir)/Ice/Properties.h $(includedir)/Ice/Logger.h $(includedir)/Ice/LoggerUtil.h $(includedir)/Ice/Communicator.h $(includedir)/Ice/RouterF.h $(includedir)/Ice/LocatorF.h $(includedir)/Ice/PluginF.h $(includedir)/Ice/ImplicitContextF.h $(includedir)/Ice/CommunicatorAsync.h $(includedir)/Ice/ObjectFactory.h $(includedir)/Ice/ObjectAdapter.h $(includedir)/Ice/FacetMap.h $(includedir)/Ice/Endpoint.h $(includedir)/Ice/ServantLocator.h $(includedir)/Ice/SlicedData.h $(includedir)/Ice/Process.h $(includedir)/Ice/Application.h $(includedir)/Ice/Connection.h $(includedir)/Ice/ConnectionAsync.h $(includedir)/Ice/Functional.h $(includedir)/Ice/Stream.h $(includedir)/Ice/ImplicitContext.h $(includedir)/Ice/Locator.h $(includedir)/Ice/FactoryTableInit.h $(includedir)/Ice/DefaultObjectFactory.h $(includedir)/Ice/ProcessF.h $(includedir)/Ice/Router.h $(includedir)/Ice/DispatchInterceptor.h $(includedir)/Ice/NativePropertiesAdmin.h $(includedir)/Ice/Metrics.h $(includedir)/Ice/Service.h $(includedir)/IcePatch2/FileInfo.h
ClientUtil$(OBJEXT): ClientUtil.cpp $(includedir)/IceUtil/StringUtil.h $(includedir)/IceUtil/Config.h $(includedir)/IceUtil/FileUtil.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Exception.h $(includedir)/IcePatch2/ClientUtil.h $(includedir)/Ice/Ice.h $(includedir)/Ice/Config.h $(includedir)/Ice/DeprecatedStringConverter.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/Handle.h $(includedir)/Ice/Exception.h $(includedir)/Ice/Format.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/LocalObjectF.h $(includedir)/Ice/StreamHelpers.h $(includedir)/IceUtil/ScopedArray.h $(includedir)/IceUtil/Iterator.h $(includedir)/IceUtil/Optional.h $(includedir)/IceUtil/UndefSysMacros.h $(includedir)/IceUtil/StringConverter.h $(includedir)/Ice/Initialize.h $(includedir)/Ice/PropertiesF.h $(includedir)/Ice/Proxy.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Time.h $(includedir)/IceUtil/MutexProtocol.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointF.h $(includedir)/Ice/EndpointTypes.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/Thread.h $(includedir)/IceUtil/UniquePtr.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/Version.h $(includedir)/Ice/BasicStream.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/ObjectFactoryManagerF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/Ice/SlicedDataF.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/FactoryTable.h $(includedir)/Ice/ObserverHelper.h $(includedir)/Ice/Instrumentation.h $(includedir)/Ice/ThreadPoolF.h $(includedir)/Ice/LoggerF.h $(includedir)/Ice/InstrumentationF.h $(includedir)/Ice/Dispatcher.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/Ice/Plugin.h $(includedir)/Ice/LocalException.h $(includedir)/Ice/PropertiesAdmin.h $(includedir)/Ice/GCObject.h $(includedir)/IceUtil/MutexPtrLock.h $(includedir)/Ice/Outgoing.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/ResponseHandlerF.h $(includedir)/Ice/IncomingAsync.h $(includedir)/Ice/Properties.h $(includedir)/Ice/Logger.h $(includedir)/Ice/LoggerUtil.h $(includedir)/Ice/Communicator.h $(includedir)/Ice/RouterF.h $(includedir)/Ice/LocatorF.h $(includedir)/Ice/PluginF.h $(includedir)/Ice/ImplicitContextF.h $(includedir)/Ice/CommunicatorAsync.h $(includedir)/Ice/ObjectFactory.h $(includedir)/Ice/ObjectAdapter.h $(includedir)/Ice/FacetMap.h $(includedir)/Ice/Endpoint.h $(includedir)/Ice/ServantLocator.h $(includedir)/Ice/SlicedData.h $(includedir)/Ice/Process.h $(includedir)/Ice/Application.h $(includedir)/Ice/Connection.h $(includedir)/Ice/ConnectionAsync.h $(includedir)/Ice/Functional.h $(includedir)/IceUtil/Functional.h $(includedir)/Ice/Stream.h $(includedir)/Ice/ImplicitContext.h $(includedir)/Ice/Locator.h $(includedir)/Ice/FactoryTableInit.h $(includedir)/Ice/DefaultObjectFactory.h $(includedir)/Ice/ProcessF.h $(includedir)/Ice/Router.h $(includedir)/Ice/DispatchInterceptor.h $(includedir)/Ice/NativePropertiesAdmin.h $(includedir)/Ice/Metrics.h $(includedir)/Ice/Service.h $(includedir)/IcePatch2/FileServer.h $(includedir)/IcePatch2/FileInfo.h $(includedir)/IcePatch2/Util.h
FileInfo$(OBJEXT): FileInfo.cpp $(includedir)/IcePatch2/FileInfo.h $(includedir)/Ice/ProxyF.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/Config.h $(includedir)/Ice/Config.h $(includedir)/Ice/ProxyHandle.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Exception.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/Handle.h $(includedir)/Ice/Exception.h $(includedir)/Ice/Format.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/LocalObjectF.h $(includedir)/Ice/StreamHelpers.h $(includedir)/IceUtil/ScopedArray.h $(includedir)/IceUtil/Iterator.h $(includedir)/IceUtil/Optional.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/IceUtil/UndefSysMacros.h $(includedir)/Ice/BasicStream.h $(includedir)/IceUtil/StringConverter.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/Object.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Time.h $(includedir)/IceUtil/MutexProtocol.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/Version.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/ObjectFactoryManagerF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/Ice/SlicedDataF.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/FactoryTable.h $(includedir)/IceUtil/DisableWarnings.h
FileServer$(OBJEXT): FileServer.cpp $(includedir)/IcePatch2/FileServer.h $(includedir)/Ice/ProxyF.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/Config.h $(includedir)/Ice/Config.h $(includedir)/Ice/ProxyHandle.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Exception.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/Handle.h $(includedir)/Ice/Exception.h $(includedir)/Ice/Format.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/LocalObjectF.h $(includedir)/Ice/StreamHelpers.h $(includedir)/IceUtil/ScopedArray.h $(includedir)/IceUtil/Iterator.h $(includedir)/Ice/Proxy.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Time.h $(includedir)/IceUtil/MutexProtocol.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointF.h $(includedir)/IceUtil/Optional.h $(includedir)/IceUtil/UndefSysMacros.h $(includedir)/Ice/EndpointTypes.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/Thread.h $(includedir)/IceUtil/UniquePtr.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/Version.h $(includedir)/Ice/BasicStream.h $(includedir)/IceUtil/StringConverter.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/ObjectFactoryManagerF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/Ice/SlicedDataF.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/FactoryTable.h $(includedir)/Ice/ObserverHelper.h $(includedir)/Ice/Instrumentation.h $(includedir)/Ice/ThreadPoolF.h $(includedir)/Ice/GCObject.h $(includedir)/IceUtil/MutexPtrLock.h $(includedir)/Ice/Outgoing.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/ResponseHandlerF.h $(includedir)/Ice/IncomingAsync.h $(includedir)/Ice/FactoryTableInit.h $(includedir)/Ice/DefaultObjectFactory.h $(includedir)/Ice/ObjectFactory.h $(includedir)/IcePatch2/FileInfo.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/Ice/LocalException.h $(includedir)/IceUtil/DisableWarnings.h
diff --git a/cpp/src/IcePatch2Lib/.depend.mak b/cpp/src/IcePatch2Lib/.depend.mak
index 15f6e28e684..fdc39895fa9 100644
--- a/cpp/src/IcePatch2Lib/.depend.mak
+++ b/cpp/src/IcePatch2Lib/.depend.mak
@@ -1,4 +1,4 @@
-Util$(OBJEXT): Util.cpp "$(includedir)/IceUtil/DisableWarnings.h" "$(includedir)/IceUtil/IceUtil.h" "$(includedir)/IceUtil/Config.h" "$(includedir)/IceUtil/AbstractMutex.h" "$(includedir)/IceUtil/Lock.h" "$(includedir)/IceUtil/ThreadException.h" "$(includedir)/IceUtil/Exception.h" "$(includedir)/IceUtil/Time.h" "$(includedir)/IceUtil/Cache.h" "$(includedir)/IceUtil/Handle.h" "$(includedir)/IceUtil/Mutex.h" "$(includedir)/IceUtil/MutexProtocol.h" "$(includedir)/IceUtil/CountDownLatch.h" "$(includedir)/IceUtil/Cond.h" "$(includedir)/IceUtil/CtrlCHandler.h" "$(includedir)/IceUtil/Functional.h" "$(includedir)/IceUtil/Monitor.h" "$(includedir)/IceUtil/MutexPtrLock.h" "$(includedir)/IceUtil/RecMutex.h" "$(includedir)/IceUtil/ScopedArray.h" "$(includedir)/IceUtil/Shared.h" "$(includedir)/IceUtil/StringConverter.h" "$(includedir)/IceUtil/Thread.h" "$(includedir)/IceUtil/Timer.h" "$(includedir)/IceUtil/UUID.h" "$(includedir)/IceUtil/UniquePtr.h" "$(includedir)/IceUtil/IconvStringConverter.h" "$(includedir)/IceUtil/UndefSysMacros.h" "$(includedir)/IceUtil/StringUtil.h" "$(includedir)/IceUtil/FileUtil.h" "$(includedir)/IcePatch2/Util.h" "$(includedir)/Ice/Ice.h" "$(includedir)/Ice/Config.h" "$(includedir)/Ice/DeprecatedStringConverter.h" "$(includedir)/Ice/CommunicatorF.h" "$(includedir)/Ice/ProxyF.h" "$(includedir)/Ice/ProxyHandle.h" "$(includedir)/Ice/ObjectF.h" "$(includedir)/Ice/Handle.h" "$(includedir)/Ice/Exception.h" "$(includedir)/Ice/Format.h" "$(includedir)/Ice/StreamF.h" "$(includedir)/Ice/LocalObject.h" "$(includedir)/Ice/LocalObjectF.h" "$(includedir)/Ice/StreamHelpers.h" "$(includedir)/IceUtil/Iterator.h" "$(includedir)/IceUtil/Optional.h" "$(includedir)/Ice/Initialize.h" "$(includedir)/Ice/PropertiesF.h" "$(includedir)/Ice/Proxy.h" "$(includedir)/Ice/ProxyFactoryF.h" "$(includedir)/Ice/ConnectionIF.h" "$(includedir)/Ice/RequestHandlerF.h" "$(includedir)/Ice/EndpointF.h" "$(includedir)/Ice/EndpointTypes.h" "$(includedir)/Ice/ObjectAdapterF.h" "$(includedir)/Ice/ReferenceF.h" "$(includedir)/Ice/OutgoingAsync.h" "$(includedir)/Ice/OutgoingAsyncF.h" "$(includedir)/Ice/InstanceF.h" "$(includedir)/Ice/Current.h" "$(includedir)/Ice/ConnectionF.h" "$(includedir)/Ice/Identity.h" "$(includedir)/Ice/Version.h" "$(includedir)/Ice/BasicStream.h" "$(includedir)/Ice/Object.h" "$(includedir)/Ice/IncomingAsyncF.h" "$(includedir)/Ice/ObjectFactoryF.h" "$(includedir)/Ice/ObjectFactoryManagerF.h" "$(includedir)/Ice/Buffer.h" "$(includedir)/Ice/Protocol.h" "$(includedir)/Ice/SlicedDataF.h" "$(includedir)/Ice/UserExceptionFactory.h" "$(includedir)/Ice/FactoryTable.h" "$(includedir)/Ice/ObserverHelper.h" "$(includedir)/Ice/Instrumentation.h" "$(includedir)/Ice/ThreadPoolF.h" "$(includedir)/Ice/LoggerF.h" "$(includedir)/Ice/InstrumentationF.h" "$(includedir)/Ice/Dispatcher.h" "$(includedir)/Ice/BuiltinSequences.h" "$(includedir)/Ice/Plugin.h" "$(includedir)/Ice/LocalException.h" "$(includedir)/Ice/PropertiesAdmin.h" "$(includedir)/Ice/GCObject.h" "$(includedir)/Ice/Outgoing.h" "$(includedir)/Ice/Incoming.h" "$(includedir)/Ice/ServantLocatorF.h" "$(includedir)/Ice/ServantManagerF.h" "$(includedir)/Ice/ResponseHandlerF.h" "$(includedir)/Ice/IncomingAsync.h" "$(includedir)/Ice/Properties.h" "$(includedir)/Ice/Logger.h" "$(includedir)/Ice/LoggerUtil.h" "$(includedir)/Ice/Communicator.h" "$(includedir)/Ice/RouterF.h" "$(includedir)/Ice/LocatorF.h" "$(includedir)/Ice/PluginF.h" "$(includedir)/Ice/ImplicitContextF.h" "$(includedir)/Ice/CommunicatorAsync.h" "$(includedir)/Ice/ObjectFactory.h" "$(includedir)/Ice/ObjectAdapter.h" "$(includedir)/Ice/FacetMap.h" "$(includedir)/Ice/Endpoint.h" "$(includedir)/Ice/ServantLocator.h" "$(includedir)/Ice/SlicedData.h" "$(includedir)/Ice/Process.h" "$(includedir)/Ice/Application.h" "$(includedir)/Ice/Connection.h" "$(includedir)/Ice/ConnectionAsync.h" "$(includedir)/Ice/Functional.h" "$(includedir)/Ice/Stream.h" "$(includedir)/Ice/ImplicitContext.h" "$(includedir)/Ice/Locator.h" "$(includedir)/Ice/FactoryTableInit.h" "$(includedir)/Ice/DefaultObjectFactory.h" "$(includedir)/Ice/ProcessF.h" "$(includedir)/Ice/Router.h" "$(includedir)/Ice/DispatchInterceptor.h" "$(includedir)/Ice/NativePropertiesAdmin.h" "$(includedir)/Ice/Metrics.h" "$(includedir)/Ice/Service.h" "$(includedir)/IcePatch2/FileInfo.h"
+Util$(OBJEXT): Util.cpp "$(includedir)/IceUtil/DisableWarnings.h" "$(includedir)/IceUtil/IceUtil.h" "$(includedir)/IceUtil/Config.h" "$(includedir)/IceUtil/AbstractMutex.h" "$(includedir)/IceUtil/Lock.h" "$(includedir)/IceUtil/ThreadException.h" "$(includedir)/IceUtil/Exception.h" "$(includedir)/IceUtil/Time.h" "$(includedir)/IceUtil/Cache.h" "$(includedir)/IceUtil/Handle.h" "$(includedir)/IceUtil/Mutex.h" "$(includedir)/IceUtil/MutexProtocol.h" "$(includedir)/IceUtil/CountDownLatch.h" "$(includedir)/IceUtil/Cond.h" "$(includedir)/IceUtil/CtrlCHandler.h" "$(includedir)/IceUtil/Functional.h" "$(includedir)/IceUtil/Monitor.h" "$(includedir)/IceUtil/MutexPtrLock.h" "$(includedir)/IceUtil/RecMutex.h" "$(includedir)/IceUtil/ScopedArray.h" "$(includedir)/IceUtil/Shared.h" "$(includedir)/IceUtil/StringConverter.h" "$(includedir)/IceUtil/Thread.h" "$(includedir)/IceUtil/Timer.h" "$(includedir)/IceUtil/UUID.h" "$(includedir)/IceUtil/UniquePtr.h" "$(includedir)/IceUtil/IconvStringConverter.h" "$(includedir)/IceUtil/UndefSysMacros.h" "$(includedir)/IceUtil/StringUtil.h" "$(includedir)/IceUtil/FileUtil.h" "$(includedir)/IceUtil/SHA1.h" "$(includedir)/IcePatch2/Util.h" "$(includedir)/Ice/Ice.h" "$(includedir)/Ice/Config.h" "$(includedir)/Ice/DeprecatedStringConverter.h" "$(includedir)/Ice/CommunicatorF.h" "$(includedir)/Ice/ProxyF.h" "$(includedir)/Ice/ProxyHandle.h" "$(includedir)/Ice/ObjectF.h" "$(includedir)/Ice/Handle.h" "$(includedir)/Ice/Exception.h" "$(includedir)/Ice/Format.h" "$(includedir)/Ice/StreamF.h" "$(includedir)/Ice/LocalObject.h" "$(includedir)/Ice/LocalObjectF.h" "$(includedir)/Ice/StreamHelpers.h" "$(includedir)/IceUtil/Iterator.h" "$(includedir)/IceUtil/Optional.h" "$(includedir)/Ice/Initialize.h" "$(includedir)/Ice/PropertiesF.h" "$(includedir)/Ice/Proxy.h" "$(includedir)/Ice/ProxyFactoryF.h" "$(includedir)/Ice/ConnectionIF.h" "$(includedir)/Ice/RequestHandlerF.h" "$(includedir)/Ice/EndpointF.h" "$(includedir)/Ice/EndpointTypes.h" "$(includedir)/Ice/ObjectAdapterF.h" "$(includedir)/Ice/ReferenceF.h" "$(includedir)/Ice/OutgoingAsync.h" "$(includedir)/Ice/OutgoingAsyncF.h" "$(includedir)/Ice/InstanceF.h" "$(includedir)/Ice/Current.h" "$(includedir)/Ice/ConnectionF.h" "$(includedir)/Ice/Identity.h" "$(includedir)/Ice/Version.h" "$(includedir)/Ice/BasicStream.h" "$(includedir)/Ice/Object.h" "$(includedir)/Ice/IncomingAsyncF.h" "$(includedir)/Ice/ObjectFactoryF.h" "$(includedir)/Ice/ObjectFactoryManagerF.h" "$(includedir)/Ice/Buffer.h" "$(includedir)/Ice/Protocol.h" "$(includedir)/Ice/SlicedDataF.h" "$(includedir)/Ice/UserExceptionFactory.h" "$(includedir)/Ice/FactoryTable.h" "$(includedir)/Ice/ObserverHelper.h" "$(includedir)/Ice/Instrumentation.h" "$(includedir)/Ice/ThreadPoolF.h" "$(includedir)/Ice/LoggerF.h" "$(includedir)/Ice/InstrumentationF.h" "$(includedir)/Ice/Dispatcher.h" "$(includedir)/Ice/BuiltinSequences.h" "$(includedir)/Ice/Plugin.h" "$(includedir)/Ice/LocalException.h" "$(includedir)/Ice/PropertiesAdmin.h" "$(includedir)/Ice/GCObject.h" "$(includedir)/Ice/Outgoing.h" "$(includedir)/Ice/Incoming.h" "$(includedir)/Ice/ServantLocatorF.h" "$(includedir)/Ice/ServantManagerF.h" "$(includedir)/Ice/ResponseHandlerF.h" "$(includedir)/Ice/IncomingAsync.h" "$(includedir)/Ice/Properties.h" "$(includedir)/Ice/Logger.h" "$(includedir)/Ice/LoggerUtil.h" "$(includedir)/Ice/Communicator.h" "$(includedir)/Ice/RouterF.h" "$(includedir)/Ice/LocatorF.h" "$(includedir)/Ice/PluginF.h" "$(includedir)/Ice/ImplicitContextF.h" "$(includedir)/Ice/CommunicatorAsync.h" "$(includedir)/Ice/ObjectFactory.h" "$(includedir)/Ice/ObjectAdapter.h" "$(includedir)/Ice/FacetMap.h" "$(includedir)/Ice/Endpoint.h" "$(includedir)/Ice/ServantLocator.h" "$(includedir)/Ice/SlicedData.h" "$(includedir)/Ice/Process.h" "$(includedir)/Ice/Application.h" "$(includedir)/Ice/Connection.h" "$(includedir)/Ice/ConnectionAsync.h" "$(includedir)/Ice/Functional.h" "$(includedir)/Ice/Stream.h" "$(includedir)/Ice/ImplicitContext.h" "$(includedir)/Ice/Locator.h" "$(includedir)/Ice/FactoryTableInit.h" "$(includedir)/Ice/DefaultObjectFactory.h" "$(includedir)/Ice/ProcessF.h" "$(includedir)/Ice/Router.h" "$(includedir)/Ice/DispatchInterceptor.h" "$(includedir)/Ice/NativePropertiesAdmin.h" "$(includedir)/Ice/Metrics.h" "$(includedir)/Ice/Service.h" "$(includedir)/IcePatch2/FileInfo.h"
ClientUtil$(OBJEXT): ClientUtil.cpp "$(includedir)/IceUtil/StringUtil.h" "$(includedir)/IceUtil/Config.h" "$(includedir)/IceUtil/FileUtil.h" "$(includedir)/IceUtil/Shared.h" "$(includedir)/IceUtil/Handle.h" "$(includedir)/IceUtil/Exception.h" "$(includedir)/IcePatch2/ClientUtil.h" "$(includedir)/Ice/Ice.h" "$(includedir)/Ice/Config.h" "$(includedir)/Ice/DeprecatedStringConverter.h" "$(includedir)/Ice/CommunicatorF.h" "$(includedir)/Ice/ProxyF.h" "$(includedir)/Ice/ProxyHandle.h" "$(includedir)/Ice/ObjectF.h" "$(includedir)/Ice/Handle.h" "$(includedir)/Ice/Exception.h" "$(includedir)/Ice/Format.h" "$(includedir)/Ice/StreamF.h" "$(includedir)/Ice/LocalObject.h" "$(includedir)/Ice/LocalObjectF.h" "$(includedir)/Ice/StreamHelpers.h" "$(includedir)/IceUtil/ScopedArray.h" "$(includedir)/IceUtil/Iterator.h" "$(includedir)/IceUtil/Optional.h" "$(includedir)/IceUtil/UndefSysMacros.h" "$(includedir)/IceUtil/StringConverter.h" "$(includedir)/Ice/Initialize.h" "$(includedir)/Ice/PropertiesF.h" "$(includedir)/Ice/Proxy.h" "$(includedir)/IceUtil/Mutex.h" "$(includedir)/IceUtil/Lock.h" "$(includedir)/IceUtil/ThreadException.h" "$(includedir)/IceUtil/Time.h" "$(includedir)/IceUtil/MutexProtocol.h" "$(includedir)/Ice/ProxyFactoryF.h" "$(includedir)/Ice/ConnectionIF.h" "$(includedir)/Ice/RequestHandlerF.h" "$(includedir)/Ice/EndpointF.h" "$(includedir)/Ice/EndpointTypes.h" "$(includedir)/Ice/ObjectAdapterF.h" "$(includedir)/Ice/ReferenceF.h" "$(includedir)/Ice/OutgoingAsync.h" "$(includedir)/IceUtil/Monitor.h" "$(includedir)/IceUtil/Cond.h" "$(includedir)/IceUtil/Timer.h" "$(includedir)/IceUtil/Thread.h" "$(includedir)/IceUtil/UniquePtr.h" "$(includedir)/Ice/OutgoingAsyncF.h" "$(includedir)/Ice/InstanceF.h" "$(includedir)/Ice/Current.h" "$(includedir)/Ice/ConnectionF.h" "$(includedir)/Ice/Identity.h" "$(includedir)/Ice/Version.h" "$(includedir)/Ice/BasicStream.h" "$(includedir)/Ice/Object.h" "$(includedir)/Ice/IncomingAsyncF.h" "$(includedir)/Ice/ObjectFactoryF.h" "$(includedir)/Ice/ObjectFactoryManagerF.h" "$(includedir)/Ice/Buffer.h" "$(includedir)/Ice/Protocol.h" "$(includedir)/Ice/SlicedDataF.h" "$(includedir)/Ice/UserExceptionFactory.h" "$(includedir)/Ice/FactoryTable.h" "$(includedir)/Ice/ObserverHelper.h" "$(includedir)/Ice/Instrumentation.h" "$(includedir)/Ice/ThreadPoolF.h" "$(includedir)/Ice/LoggerF.h" "$(includedir)/Ice/InstrumentationF.h" "$(includedir)/Ice/Dispatcher.h" "$(includedir)/Ice/BuiltinSequences.h" "$(includedir)/Ice/Plugin.h" "$(includedir)/Ice/LocalException.h" "$(includedir)/Ice/PropertiesAdmin.h" "$(includedir)/Ice/GCObject.h" "$(includedir)/IceUtil/MutexPtrLock.h" "$(includedir)/Ice/Outgoing.h" "$(includedir)/Ice/Incoming.h" "$(includedir)/Ice/ServantLocatorF.h" "$(includedir)/Ice/ServantManagerF.h" "$(includedir)/Ice/ResponseHandlerF.h" "$(includedir)/Ice/IncomingAsync.h" "$(includedir)/Ice/Properties.h" "$(includedir)/Ice/Logger.h" "$(includedir)/Ice/LoggerUtil.h" "$(includedir)/Ice/Communicator.h" "$(includedir)/Ice/RouterF.h" "$(includedir)/Ice/LocatorF.h" "$(includedir)/Ice/PluginF.h" "$(includedir)/Ice/ImplicitContextF.h" "$(includedir)/Ice/CommunicatorAsync.h" "$(includedir)/Ice/ObjectFactory.h" "$(includedir)/Ice/ObjectAdapter.h" "$(includedir)/Ice/FacetMap.h" "$(includedir)/Ice/Endpoint.h" "$(includedir)/Ice/ServantLocator.h" "$(includedir)/Ice/SlicedData.h" "$(includedir)/Ice/Process.h" "$(includedir)/Ice/Application.h" "$(includedir)/Ice/Connection.h" "$(includedir)/Ice/ConnectionAsync.h" "$(includedir)/Ice/Functional.h" "$(includedir)/IceUtil/Functional.h" "$(includedir)/Ice/Stream.h" "$(includedir)/Ice/ImplicitContext.h" "$(includedir)/Ice/Locator.h" "$(includedir)/Ice/FactoryTableInit.h" "$(includedir)/Ice/DefaultObjectFactory.h" "$(includedir)/Ice/ProcessF.h" "$(includedir)/Ice/Router.h" "$(includedir)/Ice/DispatchInterceptor.h" "$(includedir)/Ice/NativePropertiesAdmin.h" "$(includedir)/Ice/Metrics.h" "$(includedir)/Ice/Service.h" "$(includedir)/IcePatch2/FileServer.h" "$(includedir)/IcePatch2/FileInfo.h" "$(includedir)/IcePatch2/Util.h"
FileInfo$(OBJEXT): FileInfo.cpp "$(includedir)/IcePatch2/FileInfo.h" "$(includedir)/Ice/ProxyF.h" "$(includedir)/IceUtil/Shared.h" "$(includedir)/IceUtil/Config.h" "$(includedir)/Ice/Config.h" "$(includedir)/Ice/ProxyHandle.h" "$(includedir)/IceUtil/Handle.h" "$(includedir)/IceUtil/Exception.h" "$(includedir)/Ice/ObjectF.h" "$(includedir)/Ice/Handle.h" "$(includedir)/Ice/Exception.h" "$(includedir)/Ice/Format.h" "$(includedir)/Ice/StreamF.h" "$(includedir)/Ice/LocalObject.h" "$(includedir)/Ice/LocalObjectF.h" "$(includedir)/Ice/StreamHelpers.h" "$(includedir)/IceUtil/ScopedArray.h" "$(includedir)/IceUtil/Iterator.h" "$(includedir)/IceUtil/Optional.h" "$(includedir)/Ice/BuiltinSequences.h" "$(includedir)/IceUtil/UndefSysMacros.h" "$(includedir)/Ice/BasicStream.h" "$(includedir)/IceUtil/StringConverter.h" "$(includedir)/Ice/InstanceF.h" "$(includedir)/Ice/Object.h" "$(includedir)/IceUtil/Mutex.h" "$(includedir)/IceUtil/Lock.h" "$(includedir)/IceUtil/ThreadException.h" "$(includedir)/IceUtil/Time.h" "$(includedir)/IceUtil/MutexProtocol.h" "$(includedir)/Ice/IncomingAsyncF.h" "$(includedir)/Ice/Current.h" "$(includedir)/Ice/ObjectAdapterF.h" "$(includedir)/Ice/ConnectionF.h" "$(includedir)/Ice/Identity.h" "$(includedir)/Ice/Version.h" "$(includedir)/Ice/ObjectFactoryF.h" "$(includedir)/Ice/ObjectFactoryManagerF.h" "$(includedir)/Ice/Buffer.h" "$(includedir)/Ice/Protocol.h" "$(includedir)/Ice/SlicedDataF.h" "$(includedir)/Ice/UserExceptionFactory.h" "$(includedir)/Ice/FactoryTable.h" "$(includedir)/IceUtil/DisableWarnings.h"
FileServer$(OBJEXT): FileServer.cpp "$(includedir)/IcePatch2/FileServer.h" "$(includedir)/Ice/ProxyF.h" "$(includedir)/IceUtil/Shared.h" "$(includedir)/IceUtil/Config.h" "$(includedir)/Ice/Config.h" "$(includedir)/Ice/ProxyHandle.h" "$(includedir)/IceUtil/Handle.h" "$(includedir)/IceUtil/Exception.h" "$(includedir)/Ice/ObjectF.h" "$(includedir)/Ice/Handle.h" "$(includedir)/Ice/Exception.h" "$(includedir)/Ice/Format.h" "$(includedir)/Ice/StreamF.h" "$(includedir)/Ice/LocalObject.h" "$(includedir)/Ice/LocalObjectF.h" "$(includedir)/Ice/StreamHelpers.h" "$(includedir)/IceUtil/ScopedArray.h" "$(includedir)/IceUtil/Iterator.h" "$(includedir)/Ice/Proxy.h" "$(includedir)/IceUtil/Mutex.h" "$(includedir)/IceUtil/Lock.h" "$(includedir)/IceUtil/ThreadException.h" "$(includedir)/IceUtil/Time.h" "$(includedir)/IceUtil/MutexProtocol.h" "$(includedir)/Ice/ProxyFactoryF.h" "$(includedir)/Ice/ConnectionIF.h" "$(includedir)/Ice/RequestHandlerF.h" "$(includedir)/Ice/EndpointF.h" "$(includedir)/IceUtil/Optional.h" "$(includedir)/IceUtil/UndefSysMacros.h" "$(includedir)/Ice/EndpointTypes.h" "$(includedir)/Ice/ObjectAdapterF.h" "$(includedir)/Ice/ReferenceF.h" "$(includedir)/Ice/OutgoingAsync.h" "$(includedir)/IceUtil/Monitor.h" "$(includedir)/IceUtil/Cond.h" "$(includedir)/IceUtil/Timer.h" "$(includedir)/IceUtil/Thread.h" "$(includedir)/IceUtil/UniquePtr.h" "$(includedir)/Ice/OutgoingAsyncF.h" "$(includedir)/Ice/InstanceF.h" "$(includedir)/Ice/CommunicatorF.h" "$(includedir)/Ice/Current.h" "$(includedir)/Ice/ConnectionF.h" "$(includedir)/Ice/Identity.h" "$(includedir)/Ice/Version.h" "$(includedir)/Ice/BasicStream.h" "$(includedir)/IceUtil/StringConverter.h" "$(includedir)/Ice/Object.h" "$(includedir)/Ice/IncomingAsyncF.h" "$(includedir)/Ice/ObjectFactoryF.h" "$(includedir)/Ice/ObjectFactoryManagerF.h" "$(includedir)/Ice/Buffer.h" "$(includedir)/Ice/Protocol.h" "$(includedir)/Ice/SlicedDataF.h" "$(includedir)/Ice/UserExceptionFactory.h" "$(includedir)/Ice/FactoryTable.h" "$(includedir)/Ice/ObserverHelper.h" "$(includedir)/Ice/Instrumentation.h" "$(includedir)/Ice/ThreadPoolF.h" "$(includedir)/Ice/GCObject.h" "$(includedir)/IceUtil/MutexPtrLock.h" "$(includedir)/Ice/Outgoing.h" "$(includedir)/Ice/Incoming.h" "$(includedir)/Ice/ServantLocatorF.h" "$(includedir)/Ice/ServantManagerF.h" "$(includedir)/Ice/ResponseHandlerF.h" "$(includedir)/Ice/IncomingAsync.h" "$(includedir)/Ice/FactoryTableInit.h" "$(includedir)/Ice/DefaultObjectFactory.h" "$(includedir)/Ice/ObjectFactory.h" "$(includedir)/IcePatch2/FileInfo.h" "$(includedir)/Ice/BuiltinSequences.h" "$(includedir)/Ice/LocalException.h" "$(includedir)/IceUtil/DisableWarnings.h"
diff --git a/cpp/src/IcePatch2Lib/Util.cpp b/cpp/src/IcePatch2Lib/Util.cpp
index d743528d531..3c8ef35f84f 100644
--- a/cpp/src/IcePatch2Lib/Util.cpp
+++ b/cpp/src/IcePatch2Lib/Util.cpp
@@ -19,9 +19,10 @@
#include <IceUtil/IceUtil.h>
#include <IceUtil/StringUtil.h>
#include <IceUtil/FileUtil.h>
+#include <IceUtil/SHA1.h>
+
#define ICE_PATCH2_API_EXPORTS
#include <IcePatch2/Util.h>
-#include <openssl/sha.h>
#include <bzlib.h>
#include <iomanip>
@@ -789,8 +790,7 @@ getFileInfoSeqInt(const string& basePath, const string& relPath, int compress, G
ByteSeq bytesSHA(20);
if(!bytes.empty())
{
- SHA1(reinterpret_cast<unsigned char*>(&bytes[0]), bytes.size(),
- reinterpret_cast<unsigned char*>(&bytesSHA[0]));
+ IceUtil::sha1(reinterpret_cast<unsigned char*>(&bytes[0]), bytes.size(), bytesSHA);
}
else
{
@@ -850,19 +850,19 @@ getFileInfoSeqInt(const string& basePath, const string& relPath, int compress, G
return false;
}
- ByteSeq bytesSHA(20);
+ ByteSeq bytesSHA;
if(relPath.size() + buf.st_size == 0)
{
+ bytesSHA.resize(20);
fill(bytesSHA.begin(), bytesSHA.end(), 0);
}
else
{
- SHA_CTX ctx;
- SHA1_Init(&ctx);
+ IceUtil::SHA1 hasher;
if(relPath.size() != 0)
{
- SHA1_Update(&ctx, reinterpret_cast<const void*>(relPath.c_str()), relPath.size());
+ hasher.update(reinterpret_cast<const IceUtil::Byte*>(relPath.c_str()), relPath.size());
}
if(buf.st_size != 0)
@@ -939,7 +939,7 @@ getFileInfoSeqInt(const string& basePath, const string& relPath, int compress, G
}
}
- SHA1_Update(&ctx, reinterpret_cast<const void*>(&bytes[0]), bytes.size());
+ hasher.update(reinterpret_cast<IceUtil::Byte*>(&bytes[0]), bytes.size());
}
IceUtilInternal::close(fd);
@@ -970,8 +970,7 @@ getFileInfoSeqInt(const string& basePath, const string& relPath, int compress, G
info.size = static_cast<Int>(bufBZ2.st_size);
}
}
-
- SHA1_Final(reinterpret_cast<unsigned char*>(&bytesSHA[0]), &ctx);
+ hasher.finalize(bytesSHA);
}
info.checksum.swap(bytesSHA);
@@ -1186,8 +1185,7 @@ IcePatch2::getFileTree0(const FileInfoSeq& infoSeq, FileTree0& tree0)
if(!allChecksums1.empty())
{
- SHA1(reinterpret_cast<unsigned char*>(&allChecksums1[0]), allChecksums1.size(),
- reinterpret_cast<unsigned char*>(&tree1.checksum[0]));
+ IceUtil::sha1(reinterpret_cast<unsigned char*>(&allChecksums1[0]), allChecksums1.size(), tree1.checksum);
}
else
{
@@ -1199,8 +1197,7 @@ IcePatch2::getFileTree0(const FileInfoSeq& infoSeq, FileTree0& tree0)
if(!allChecksums0.empty())
{
- SHA1(reinterpret_cast<unsigned char*>(&allChecksums0[0]), allChecksums0.size(),
- reinterpret_cast<unsigned char*>(&tree0.checksum[0]));
+ IceUtil::sha1(reinterpret_cast<unsigned char*>(&allChecksums0[0]), allChecksums0.size(), tree0.checksum);
}
else
{
diff --git a/cpp/src/IceSSL/.depend b/cpp/src/IceSSL/.depend
index 823fdab2981..a0105a2fdb0 100644
--- a/cpp/src/IceSSL/.depend
+++ b/cpp/src/IceSSL/.depend
@@ -1,18 +1,20 @@
-AcceptorI$(OBJEXT): AcceptorI.cpp ../IceSSL/AcceptorI.h ../Ice/TransceiverF.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/Config.h $(includedir)/Ice/Handle.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Exception.h $(includedir)/Ice/Config.h ../Ice/Acceptor.h ../Ice/AcceptorF.h ../Ice/Network.h ../Ice/NetworkF.h $(includedir)/Ice/PropertiesF.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/Exception.h $(includedir)/Ice/Format.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/LocalObjectF.h $(includedir)/Ice/StreamHelpers.h $(includedir)/IceUtil/ScopedArray.h $(includedir)/IceUtil/Iterator.h $(includedir)/Ice/Proxy.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Time.h $(includedir)/IceUtil/MutexProtocol.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointF.h $(includedir)/IceUtil/Optional.h $(includedir)/IceUtil/UndefSysMacros.h $(includedir)/Ice/EndpointTypes.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/Thread.h $(includedir)/IceUtil/UniquePtr.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/Version.h $(includedir)/Ice/BasicStream.h $(includedir)/IceUtil/StringConverter.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/ObjectFactoryManagerF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/Ice/SlicedDataF.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/FactoryTable.h $(includedir)/Ice/ObserverHelper.h $(includedir)/Ice/Instrumentation.h $(includedir)/Ice/ThreadPoolF.h $(includedir)/Ice/LoggerF.h ../IceSSL/InstanceF.h ../IceSSL/Instance.h ../Ice/ProtocolInstance.h ../Ice/ProtocolInstanceF.h ../Ice/EndpointIF.h ../Ice/ConnectorF.h ../Ice/IPEndpointIF.h ../IceSSL/SSLEngineF.h $(includedir)/IceSSL/Plugin.h $(includedir)/Ice/Plugin.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/IceSSL/Config.h $(includedir)/IceSSL/ConnectionInfo.h $(includedir)/Ice/Connection.h $(includedir)/Ice/Endpoint.h ../IceSSL/SecureTransportTransceiverI.h ../Ice/Transceiver.h ../IceSSL/TransceiverI.h ../IceSSL/Util.h ../IceSSL/UtilF.h $(includedir)/Ice/Communicator.h $(includedir)/Ice/GCObject.h $(includedir)/IceUtil/MutexPtrLock.h $(includedir)/Ice/Outgoing.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/ResponseHandlerF.h $(includedir)/Ice/IncomingAsync.h $(includedir)/Ice/InstrumentationF.h $(includedir)/Ice/RouterF.h $(includedir)/Ice/LocatorF.h $(includedir)/Ice/PluginF.h $(includedir)/Ice/ImplicitContextF.h $(includedir)/Ice/Properties.h $(includedir)/Ice/PropertiesAdmin.h $(includedir)/Ice/LocalException.h $(includedir)/Ice/LoggerUtil.h $(includedir)/Ice/Logger.h $(includedir)/IceUtil/StringUtil.h
-Certificate$(OBJEXT): Certificate.cpp $(includedir)/IceUtil/DisableWarnings.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Config.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Exception.h $(includedir)/IceUtil/Time.h $(includedir)/IceUtil/MutexProtocol.h $(includedir)/IceUtil/MutexPtrLock.h $(includedir)/IceUtil/StringUtil.h $(includedir)/IceSSL/Plugin.h $(includedir)/Ice/Plugin.h $(includedir)/Ice/ProxyF.h $(includedir)/IceUtil/Shared.h $(includedir)/Ice/Config.h $(includedir)/Ice/ProxyHandle.h $(includedir)/IceUtil/Handle.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/Handle.h $(includedir)/Ice/Exception.h $(includedir)/Ice/Format.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/LocalObjectF.h $(includedir)/Ice/StreamHelpers.h $(includedir)/IceUtil/ScopedArray.h $(includedir)/IceUtil/Iterator.h $(includedir)/IceUtil/Optional.h $(includedir)/Ice/LoggerF.h $(includedir)/IceUtil/UndefSysMacros.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/IceSSL/Config.h $(includedir)/IceSSL/ConnectionInfo.h $(includedir)/Ice/Proxy.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointF.h $(includedir)/Ice/EndpointTypes.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/Thread.h $(includedir)/IceUtil/UniquePtr.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/Version.h $(includedir)/Ice/BasicStream.h $(includedir)/IceUtil/StringConverter.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/ObjectFactoryManagerF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/Ice/SlicedDataF.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/FactoryTable.h $(includedir)/Ice/ObserverHelper.h $(includedir)/Ice/Instrumentation.h $(includedir)/Ice/ThreadPoolF.h $(includedir)/Ice/Connection.h $(includedir)/Ice/Endpoint.h ../IceSSL/Util.h ../IceSSL/UtilF.h ../Ice/Network.h ../Ice/NetworkF.h $(includedir)/Ice/PropertiesF.h ../IceSSL/RFC2253.h
-ConnectorI$(OBJEXT): ConnectorI.cpp ../IceSSL/ConnectorI.h ../Ice/TransceiverF.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/Config.h $(includedir)/Ice/Handle.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Exception.h $(includedir)/Ice/Config.h ../Ice/Connector.h ../Ice/ConnectorF.h ../Ice/Network.h ../Ice/NetworkF.h $(includedir)/Ice/PropertiesF.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/Exception.h $(includedir)/Ice/Format.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/LocalObjectF.h $(includedir)/Ice/StreamHelpers.h $(includedir)/IceUtil/ScopedArray.h $(includedir)/IceUtil/Iterator.h $(includedir)/Ice/Proxy.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Time.h $(includedir)/IceUtil/MutexProtocol.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointF.h $(includedir)/IceUtil/Optional.h $(includedir)/IceUtil/UndefSysMacros.h $(includedir)/Ice/EndpointTypes.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/Thread.h $(includedir)/IceUtil/UniquePtr.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/Version.h $(includedir)/Ice/BasicStream.h $(includedir)/IceUtil/StringConverter.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/ObjectFactoryManagerF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/Ice/SlicedDataF.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/FactoryTable.h $(includedir)/Ice/ObserverHelper.h $(includedir)/Ice/Instrumentation.h $(includedir)/Ice/ThreadPoolF.h $(includedir)/Ice/LoggerF.h ../IceSSL/InstanceF.h ../IceSSL/Instance.h ../Ice/ProtocolInstance.h ../Ice/ProtocolInstanceF.h ../Ice/EndpointIF.h ../Ice/IPEndpointIF.h ../IceSSL/SSLEngineF.h $(includedir)/IceSSL/Plugin.h $(includedir)/Ice/Plugin.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/IceSSL/Config.h $(includedir)/IceSSL/ConnectionInfo.h $(includedir)/Ice/Connection.h $(includedir)/Ice/Endpoint.h ../IceSSL/SecureTransportTransceiverI.h ../Ice/Transceiver.h ../IceSSL/TransceiverI.h ../IceSSL/EndpointI.h ../Ice/IPEndpointI.h ../Ice/EndpointI.h ../Ice/AcceptorF.h ../Ice/EndpointFactory.h ../Ice/EndpointFactoryF.h $(includedir)/IceSSL/EndpointInfo.h ../IceSSL/Util.h ../IceSSL/UtilF.h $(includedir)/Ice/Communicator.h $(includedir)/Ice/GCObject.h $(includedir)/IceUtil/MutexPtrLock.h $(includedir)/Ice/Outgoing.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/ResponseHandlerF.h $(includedir)/Ice/IncomingAsync.h $(includedir)/Ice/InstrumentationF.h $(includedir)/Ice/RouterF.h $(includedir)/Ice/LocatorF.h $(includedir)/Ice/PluginF.h $(includedir)/Ice/ImplicitContextF.h $(includedir)/Ice/Properties.h $(includedir)/Ice/PropertiesAdmin.h $(includedir)/Ice/LocalException.h $(includedir)/Ice/LoggerUtil.h $(includedir)/Ice/Logger.h
+AcceptorI$(OBJEXT): AcceptorI.cpp ../IceSSL/AcceptorI.h ../Ice/TransceiverF.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/Config.h $(includedir)/Ice/Handle.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Exception.h $(includedir)/Ice/Config.h ../Ice/Acceptor.h ../Ice/AcceptorF.h ../Ice/Network.h ../Ice/NetworkF.h $(includedir)/Ice/PropertiesF.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/Exception.h $(includedir)/Ice/Format.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/LocalObjectF.h $(includedir)/Ice/StreamHelpers.h $(includedir)/IceUtil/ScopedArray.h $(includedir)/IceUtil/Iterator.h $(includedir)/Ice/Proxy.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Time.h $(includedir)/IceUtil/MutexProtocol.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointF.h $(includedir)/IceUtil/Optional.h $(includedir)/IceUtil/UndefSysMacros.h $(includedir)/Ice/EndpointTypes.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/Thread.h $(includedir)/IceUtil/UniquePtr.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/Version.h $(includedir)/Ice/BasicStream.h $(includedir)/IceUtil/StringConverter.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/ObjectFactoryManagerF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/Ice/SlicedDataF.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/FactoryTable.h $(includedir)/Ice/ObserverHelper.h $(includedir)/Ice/Instrumentation.h $(includedir)/Ice/ThreadPoolF.h $(includedir)/Ice/LoggerF.h ../IceSSL/InstanceF.h ../IceSSL/Instance.h ../Ice/ProtocolInstance.h ../Ice/ProtocolInstanceF.h ../Ice/EndpointIF.h ../Ice/ConnectorF.h ../Ice/IPEndpointIF.h ../IceSSL/SSLEngineF.h $(includedir)/IceSSL/Plugin.h $(includedir)/Ice/Plugin.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/IceSSL/Config.h $(includedir)/IceSSL/ConnectionInfo.h $(includedir)/Ice/Connection.h $(includedir)/Ice/Endpoint.h ../IceSSL/OpenSSLTransceiverI.h ../Ice/Transceiver.h ../IceSSL/SecureTransportTransceiverI.h ../IceSSL/SChannelTransceiverI.h ../IceSSL/Util.h $(includedir)/Ice/Communicator.h $(includedir)/Ice/GCObject.h $(includedir)/IceUtil/MutexPtrLock.h $(includedir)/Ice/Outgoing.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/ResponseHandlerF.h $(includedir)/Ice/IncomingAsync.h $(includedir)/Ice/InstrumentationF.h $(includedir)/Ice/RouterF.h $(includedir)/Ice/LocatorF.h $(includedir)/Ice/PluginF.h $(includedir)/Ice/ImplicitContextF.h $(includedir)/Ice/Properties.h $(includedir)/Ice/PropertiesAdmin.h $(includedir)/Ice/LocalException.h $(includedir)/Ice/LoggerUtil.h $(includedir)/Ice/Logger.h $(includedir)/IceUtil/StringUtil.h
+Certificate$(OBJEXT): Certificate.cpp $(includedir)/IceUtil/DisableWarnings.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Config.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Exception.h $(includedir)/IceUtil/Time.h $(includedir)/IceUtil/MutexProtocol.h $(includedir)/IceUtil/MutexPtrLock.h $(includedir)/IceUtil/StringUtil.h $(includedir)/IceSSL/Plugin.h $(includedir)/Ice/Plugin.h $(includedir)/Ice/ProxyF.h $(includedir)/IceUtil/Shared.h $(includedir)/Ice/Config.h $(includedir)/Ice/ProxyHandle.h $(includedir)/IceUtil/Handle.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/Handle.h $(includedir)/Ice/Exception.h $(includedir)/Ice/Format.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/LocalObjectF.h $(includedir)/Ice/StreamHelpers.h $(includedir)/IceUtil/ScopedArray.h $(includedir)/IceUtil/Iterator.h $(includedir)/IceUtil/Optional.h $(includedir)/Ice/LoggerF.h $(includedir)/IceUtil/UndefSysMacros.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/IceSSL/Config.h $(includedir)/IceSSL/ConnectionInfo.h $(includedir)/Ice/Proxy.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointF.h $(includedir)/Ice/EndpointTypes.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/Thread.h $(includedir)/IceUtil/UniquePtr.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/Version.h $(includedir)/Ice/BasicStream.h $(includedir)/IceUtil/StringConverter.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/ObjectFactoryManagerF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/Ice/SlicedDataF.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/FactoryTable.h $(includedir)/Ice/ObserverHelper.h $(includedir)/Ice/Instrumentation.h $(includedir)/Ice/ThreadPoolF.h $(includedir)/Ice/Connection.h $(includedir)/Ice/Endpoint.h ../IceSSL/Util.h ../IceSSL/RFC2253.h
+ConnectorI$(OBJEXT): ConnectorI.cpp ../IceSSL/ConnectorI.h ../Ice/TransceiverF.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/Config.h $(includedir)/Ice/Handle.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Exception.h $(includedir)/Ice/Config.h ../Ice/Connector.h ../Ice/ConnectorF.h ../Ice/Network.h ../Ice/NetworkF.h $(includedir)/Ice/PropertiesF.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/Exception.h $(includedir)/Ice/Format.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/LocalObjectF.h $(includedir)/Ice/StreamHelpers.h $(includedir)/IceUtil/ScopedArray.h $(includedir)/IceUtil/Iterator.h $(includedir)/Ice/Proxy.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Time.h $(includedir)/IceUtil/MutexProtocol.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointF.h $(includedir)/IceUtil/Optional.h $(includedir)/IceUtil/UndefSysMacros.h $(includedir)/Ice/EndpointTypes.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/Thread.h $(includedir)/IceUtil/UniquePtr.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/Version.h $(includedir)/Ice/BasicStream.h $(includedir)/IceUtil/StringConverter.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/ObjectFactoryManagerF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/Ice/SlicedDataF.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/FactoryTable.h $(includedir)/Ice/ObserverHelper.h $(includedir)/Ice/Instrumentation.h $(includedir)/Ice/ThreadPoolF.h $(includedir)/Ice/LoggerF.h ../IceSSL/InstanceF.h ../IceSSL/Instance.h ../Ice/ProtocolInstance.h ../Ice/ProtocolInstanceF.h ../Ice/EndpointIF.h ../Ice/IPEndpointIF.h ../IceSSL/SSLEngineF.h $(includedir)/IceSSL/Plugin.h $(includedir)/Ice/Plugin.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/IceSSL/Config.h $(includedir)/IceSSL/ConnectionInfo.h $(includedir)/Ice/Connection.h $(includedir)/Ice/Endpoint.h ../IceSSL/OpenSSLTransceiverI.h ../Ice/Transceiver.h ../IceSSL/SecureTransportTransceiverI.h ../IceSSL/SChannelTransceiverI.h ../IceSSL/EndpointI.h ../Ice/IPEndpointI.h ../Ice/EndpointI.h ../Ice/AcceptorF.h ../Ice/EndpointFactory.h ../Ice/EndpointFactoryF.h $(includedir)/IceSSL/EndpointInfo.h ../IceSSL/Util.h $(includedir)/Ice/Communicator.h $(includedir)/Ice/GCObject.h $(includedir)/IceUtil/MutexPtrLock.h $(includedir)/Ice/Outgoing.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/ResponseHandlerF.h $(includedir)/Ice/IncomingAsync.h $(includedir)/Ice/InstrumentationF.h $(includedir)/Ice/RouterF.h $(includedir)/Ice/LocatorF.h $(includedir)/Ice/PluginF.h $(includedir)/Ice/ImplicitContextF.h $(includedir)/Ice/Properties.h $(includedir)/Ice/PropertiesAdmin.h $(includedir)/Ice/LocalException.h $(includedir)/Ice/LoggerUtil.h $(includedir)/Ice/Logger.h
EndpointInfo$(OBJEXT): EndpointInfo.cpp $(includedir)/IceSSL/EndpointInfo.h $(includedir)/Ice/ProxyF.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/Config.h $(includedir)/Ice/Config.h $(includedir)/Ice/ProxyHandle.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Exception.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/Handle.h $(includedir)/Ice/Exception.h $(includedir)/Ice/Format.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/LocalObjectF.h $(includedir)/Ice/StreamHelpers.h $(includedir)/IceUtil/ScopedArray.h $(includedir)/IceUtil/Iterator.h $(includedir)/IceUtil/Optional.h $(includedir)/Ice/Endpoint.h $(includedir)/Ice/Version.h $(includedir)/IceUtil/UndefSysMacros.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/Ice/EndpointF.h $(includedir)/Ice/BasicStream.h $(includedir)/IceUtil/StringConverter.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/Object.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Time.h $(includedir)/IceUtil/MutexProtocol.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/ObjectFactoryManagerF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/Ice/SlicedDataF.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/FactoryTable.h $(includedir)/IceUtil/DisableWarnings.h
ConnectionInfo$(OBJEXT): ConnectionInfo.cpp $(includedir)/IceSSL/ConnectionInfo.h $(includedir)/Ice/ProxyF.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/Config.h $(includedir)/Ice/Config.h $(includedir)/Ice/ProxyHandle.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Exception.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/Handle.h $(includedir)/Ice/Exception.h $(includedir)/Ice/Format.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/LocalObjectF.h $(includedir)/Ice/StreamHelpers.h $(includedir)/IceUtil/ScopedArray.h $(includedir)/IceUtil/Iterator.h $(includedir)/Ice/Proxy.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Time.h $(includedir)/IceUtil/MutexProtocol.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointF.h $(includedir)/IceUtil/Optional.h $(includedir)/IceUtil/UndefSysMacros.h $(includedir)/Ice/EndpointTypes.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/Thread.h $(includedir)/IceUtil/UniquePtr.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/Version.h $(includedir)/Ice/BasicStream.h $(includedir)/IceUtil/StringConverter.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/ObjectFactoryManagerF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/Ice/SlicedDataF.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/FactoryTable.h $(includedir)/Ice/ObserverHelper.h $(includedir)/Ice/Instrumentation.h $(includedir)/Ice/ThreadPoolF.h $(includedir)/Ice/Connection.h $(includedir)/Ice/Endpoint.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/IceUtil/DisableWarnings.h
-EndpointI$(OBJEXT): EndpointI.cpp ../IceSSL/EndpointI.h ../Ice/IPEndpointI.h $(includedir)/IceUtil/Config.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/Thread.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Exception.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Time.h $(includedir)/IceUtil/MutexProtocol.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h ../Ice/IPEndpointIF.h $(includedir)/Ice/Handle.h $(includedir)/Ice/Config.h ../Ice/EndpointI.h ../Ice/EndpointIF.h $(includedir)/Ice/Endpoint.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/Exception.h $(includedir)/Ice/Format.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/LocalObjectF.h $(includedir)/Ice/StreamHelpers.h $(includedir)/IceUtil/ScopedArray.h $(includedir)/IceUtil/Iterator.h $(includedir)/IceUtil/Optional.h $(includedir)/Ice/Version.h $(includedir)/IceUtil/UndefSysMacros.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/Ice/EndpointF.h $(includedir)/Ice/EndpointTypes.h ../Ice/TransceiverF.h ../Ice/ConnectorF.h ../Ice/AcceptorF.h ../Ice/Network.h ../Ice/NetworkF.h $(includedir)/Ice/PropertiesF.h $(includedir)/Ice/Proxy.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/UniquePtr.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/BasicStream.h $(includedir)/IceUtil/StringConverter.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/ObjectFactoryManagerF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/Ice/SlicedDataF.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/FactoryTable.h $(includedir)/Ice/ObserverHelper.h $(includedir)/Ice/Instrumentation.h $(includedir)/Ice/ThreadPoolF.h $(includedir)/Ice/LoggerF.h ../Ice/ProtocolInstanceF.h ../Ice/EndpointFactory.h ../Ice/EndpointFactoryF.h ../IceSSL/InstanceF.h $(includedir)/IceSSL/EndpointInfo.h ../IceSSL/AcceptorI.h ../Ice/Acceptor.h ../IceSSL/ConnectorI.h ../Ice/Connector.h ../IceSSL/TransceiverI.h $(includedir)/IceSSL/Config.h $(includedir)/IceSSL/Plugin.h $(includedir)/Ice/Plugin.h $(includedir)/IceSSL/ConnectionInfo.h $(includedir)/Ice/Connection.h ../IceSSL/SSLEngineF.h ../Ice/Transceiver.h ../IceSSL/Instance.h ../Ice/ProtocolInstance.h $(includedir)/Ice/LocalException.h ../Ice/DefaultsAndOverrides.h ../Ice/DefaultsAndOverridesF.h ../Ice/HashUtil.h
-Instance$(OBJEXT): Instance.cpp $(includedir)/IceUtil/Config.h ../IceSSL/Instance.h ../IceSSL/InstanceF.h $(includedir)/IceUtil/Shared.h $(includedir)/Ice/Handle.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Exception.h $(includedir)/Ice/Config.h ../Ice/ProtocolInstance.h ../Ice/ProtocolInstanceF.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/Exception.h $(includedir)/Ice/Format.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/LocalObjectF.h $(includedir)/Ice/StreamHelpers.h $(includedir)/IceUtil/ScopedArray.h $(includedir)/IceUtil/Iterator.h $(includedir)/IceUtil/Optional.h $(includedir)/IceUtil/UndefSysMacros.h $(includedir)/Ice/PropertiesF.h $(includedir)/Ice/Proxy.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Time.h $(includedir)/IceUtil/MutexProtocol.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointF.h $(includedir)/Ice/EndpointTypes.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/Thread.h $(includedir)/IceUtil/UniquePtr.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/Version.h $(includedir)/Ice/BasicStream.h $(includedir)/IceUtil/StringConverter.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/ObjectFactoryManagerF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/Ice/SlicedDataF.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/FactoryTable.h $(includedir)/Ice/ObserverHelper.h $(includedir)/Ice/Instrumentation.h $(includedir)/Ice/ThreadPoolF.h $(includedir)/Ice/LoggerF.h ../Ice/EndpointIF.h ../Ice/ConnectorF.h ../Ice/IPEndpointIF.h ../Ice/NetworkF.h ../IceSSL/SSLEngineF.h $(includedir)/IceSSL/Plugin.h $(includedir)/Ice/Plugin.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/IceSSL/Config.h $(includedir)/IceSSL/ConnectionInfo.h $(includedir)/Ice/Connection.h $(includedir)/Ice/Endpoint.h ../IceSSL/SSLEngine.h ../IceSSL/Util.h ../IceSSL/UtilF.h ../Ice/Network.h ../IceSSL/TrustManagerF.h $(includedir)/Ice/Properties.h $(includedir)/Ice/GCObject.h $(includedir)/IceUtil/MutexPtrLock.h $(includedir)/Ice/Outgoing.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/ResponseHandlerF.h $(includedir)/Ice/IncomingAsync.h $(includedir)/Ice/PropertiesAdmin.h
-PluginI$(OBJEXT): PluginI.cpp ../IceSSL/PluginI.h $(includedir)/IceSSL/Plugin.h $(includedir)/IceUtil/Time.h $(includedir)/IceUtil/Config.h $(includedir)/Ice/Plugin.h $(includedir)/Ice/ProxyF.h $(includedir)/IceUtil/Shared.h $(includedir)/Ice/Config.h $(includedir)/Ice/ProxyHandle.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Exception.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/Handle.h $(includedir)/Ice/Exception.h $(includedir)/Ice/Format.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/LocalObjectF.h $(includedir)/Ice/StreamHelpers.h $(includedir)/IceUtil/ScopedArray.h $(includedir)/IceUtil/Iterator.h $(includedir)/IceUtil/Optional.h $(includedir)/Ice/LoggerF.h $(includedir)/IceUtil/UndefSysMacros.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/IceSSL/Config.h $(includedir)/IceSSL/ConnectionInfo.h $(includedir)/Ice/Proxy.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/MutexProtocol.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointF.h $(includedir)/Ice/EndpointTypes.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/Thread.h $(includedir)/IceUtil/UniquePtr.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/Version.h $(includedir)/Ice/BasicStream.h $(includedir)/IceUtil/StringConverter.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/ObjectFactoryManagerF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/Ice/SlicedDataF.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/FactoryTable.h $(includedir)/Ice/ObserverHelper.h $(includedir)/Ice/Instrumentation.h $(includedir)/Ice/ThreadPoolF.h $(includedir)/Ice/Connection.h $(includedir)/Ice/Endpoint.h ../IceSSL/SSLEngineF.h ../IceSSL/Instance.h ../IceSSL/InstanceF.h ../Ice/ProtocolInstance.h ../Ice/ProtocolInstanceF.h $(includedir)/Ice/PropertiesF.h ../Ice/EndpointIF.h ../Ice/ConnectorF.h ../Ice/IPEndpointIF.h ../Ice/NetworkF.h ../IceSSL/TransceiverI.h ../Ice/Transceiver.h ../Ice/TransceiverF.h ../Ice/Network.h ../IceSSL/SSLEngine.h ../IceSSL/Util.h ../IceSSL/UtilF.h ../IceSSL/TrustManagerF.h ../IceSSL/EndpointI.h ../Ice/IPEndpointI.h ../Ice/EndpointI.h ../Ice/AcceptorF.h ../Ice/EndpointFactory.h ../Ice/EndpointFactoryF.h $(includedir)/IceSSL/EndpointInfo.h ../Ice/ProtocolPluginFacade.h ../Ice/ProtocolPluginFacadeF.h $(includedir)/Ice/LocalException.h
-TransceiverI$(OBJEXT): TransceiverI.cpp ../IceSSL/TransceiverI.h $(includedir)/IceSSL/Config.h $(includedir)/Ice/Config.h $(includedir)/IceUtil/Config.h ../IceSSL/InstanceF.h $(includedir)/IceUtil/Shared.h $(includedir)/Ice/Handle.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Exception.h $(includedir)/IceSSL/Plugin.h $(includedir)/IceUtil/Time.h $(includedir)/Ice/Plugin.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/Exception.h $(includedir)/Ice/Format.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/LocalObjectF.h $(includedir)/Ice/StreamHelpers.h $(includedir)/IceUtil/ScopedArray.h $(includedir)/IceUtil/Iterator.h $(includedir)/IceUtil/Optional.h $(includedir)/Ice/LoggerF.h $(includedir)/IceUtil/UndefSysMacros.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/IceSSL/ConnectionInfo.h $(includedir)/Ice/Proxy.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/MutexProtocol.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointF.h $(includedir)/Ice/EndpointTypes.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/Thread.h $(includedir)/IceUtil/UniquePtr.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/Version.h $(includedir)/Ice/BasicStream.h $(includedir)/IceUtil/StringConverter.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/ObjectFactoryManagerF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/Ice/SlicedDataF.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/FactoryTable.h $(includedir)/Ice/ObserverHelper.h $(includedir)/Ice/Instrumentation.h $(includedir)/Ice/ThreadPoolF.h $(includedir)/Ice/Connection.h $(includedir)/Ice/Endpoint.h ../IceSSL/SSLEngineF.h ../Ice/Transceiver.h ../Ice/TransceiverF.h ../Ice/Network.h ../Ice/NetworkF.h $(includedir)/Ice/PropertiesF.h $(includedir)/IceUtil/MutexPtrLock.h ../IceSSL/Instance.h ../Ice/ProtocolInstance.h ../Ice/ProtocolInstanceF.h ../Ice/EndpointIF.h ../Ice/ConnectorF.h ../Ice/IPEndpointIF.h ../IceSSL/SSLEngine.h ../IceSSL/Util.h ../IceSSL/UtilF.h ../IceSSL/TrustManagerF.h $(includedir)/Ice/Communicator.h $(includedir)/Ice/GCObject.h $(includedir)/Ice/Outgoing.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/ResponseHandlerF.h $(includedir)/Ice/IncomingAsync.h $(includedir)/Ice/InstrumentationF.h $(includedir)/Ice/RouterF.h $(includedir)/Ice/LocatorF.h $(includedir)/Ice/PluginF.h $(includedir)/Ice/ImplicitContextF.h $(includedir)/Ice/Properties.h $(includedir)/Ice/PropertiesAdmin.h $(includedir)/Ice/LoggerUtil.h $(includedir)/Ice/Logger.h $(includedir)/Ice/LocalException.h $(includedir)/IceUtil/DisableWarnings.h
-SecureTransportTransceiverI$(OBJEXT): SecureTransportTransceiverI.cpp ../IceSSL/SecureTransportTransceiverI.h $(includedir)/IceSSL/Config.h $(includedir)/Ice/Config.h $(includedir)/IceUtil/Config.h ../IceSSL/InstanceF.h $(includedir)/IceUtil/Shared.h $(includedir)/Ice/Handle.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Exception.h ../IceSSL/SSLEngineF.h $(includedir)/IceSSL/Plugin.h $(includedir)/IceUtil/Time.h $(includedir)/Ice/Plugin.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/Exception.h $(includedir)/Ice/Format.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/LocalObjectF.h $(includedir)/Ice/StreamHelpers.h $(includedir)/IceUtil/ScopedArray.h $(includedir)/IceUtil/Iterator.h $(includedir)/IceUtil/Optional.h $(includedir)/Ice/LoggerF.h $(includedir)/IceUtil/UndefSysMacros.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/IceSSL/ConnectionInfo.h $(includedir)/Ice/Proxy.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/MutexProtocol.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointF.h $(includedir)/Ice/EndpointTypes.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/Thread.h $(includedir)/IceUtil/UniquePtr.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/Version.h $(includedir)/Ice/BasicStream.h $(includedir)/IceUtil/StringConverter.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/ObjectFactoryManagerF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/Ice/SlicedDataF.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/FactoryTable.h $(includedir)/Ice/ObserverHelper.h $(includedir)/Ice/Instrumentation.h $(includedir)/Ice/ThreadPoolF.h $(includedir)/Ice/Connection.h $(includedir)/Ice/Endpoint.h ../Ice/Transceiver.h ../Ice/TransceiverF.h ../Ice/Network.h ../Ice/NetworkF.h $(includedir)/Ice/PropertiesF.h $(includedir)/IceUtil/FileUtil.h $(includedir)/IceUtil/MutexPtrLock.h ../IceSSL/Instance.h ../Ice/ProtocolInstance.h ../Ice/ProtocolInstanceF.h ../Ice/EndpointIF.h ../Ice/ConnectorF.h ../Ice/IPEndpointIF.h ../IceSSL/SSLEngine.h ../IceSSL/Util.h ../IceSSL/UtilF.h ../IceSSL/TrustManagerF.h $(includedir)/Ice/Communicator.h $(includedir)/Ice/GCObject.h $(includedir)/Ice/Outgoing.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/ResponseHandlerF.h $(includedir)/Ice/IncomingAsync.h $(includedir)/Ice/InstrumentationF.h $(includedir)/Ice/RouterF.h $(includedir)/Ice/LocatorF.h $(includedir)/Ice/PluginF.h $(includedir)/Ice/ImplicitContextF.h $(includedir)/Ice/Properties.h $(includedir)/Ice/PropertiesAdmin.h $(includedir)/Ice/LoggerUtil.h $(includedir)/Ice/Logger.h $(includedir)/Ice/LocalException.h
-Util$(OBJEXT): Util.cpp $(includedir)/IceUtil/Config.h ../IceSSL/Util.h $(includedir)/IceSSL/Config.h $(includedir)/Ice/Config.h ../IceSSL/UtilF.h $(includedir)/IceUtil/Shared.h $(includedir)/Ice/Handle.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Exception.h ../Ice/Network.h ../Ice/NetworkF.h $(includedir)/Ice/PropertiesF.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/Exception.h $(includedir)/Ice/Format.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/LocalObjectF.h $(includedir)/Ice/StreamHelpers.h $(includedir)/IceUtil/ScopedArray.h $(includedir)/IceUtil/Iterator.h $(includedir)/Ice/Proxy.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Time.h $(includedir)/IceUtil/MutexProtocol.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointF.h $(includedir)/IceUtil/Optional.h $(includedir)/IceUtil/UndefSysMacros.h $(includedir)/Ice/EndpointTypes.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/Thread.h $(includedir)/IceUtil/UniquePtr.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/Version.h $(includedir)/Ice/BasicStream.h $(includedir)/IceUtil/StringConverter.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/ObjectFactoryManagerF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/Ice/SlicedDataF.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/FactoryTable.h $(includedir)/Ice/ObserverHelper.h $(includedir)/Ice/Instrumentation.h $(includedir)/Ice/ThreadPoolF.h $(includedir)/Ice/LoggerF.h $(includedir)/IceSSL/Plugin.h $(includedir)/Ice/Plugin.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/IceSSL/ConnectionInfo.h $(includedir)/Ice/Connection.h $(includedir)/Ice/Endpoint.h $(includedir)/IceUtil/FileUtil.h $(includedir)/Ice/LocalException.h
+EndpointI$(OBJEXT): EndpointI.cpp ../IceSSL/EndpointI.h ../Ice/IPEndpointI.h $(includedir)/IceUtil/Config.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/Thread.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Exception.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Time.h $(includedir)/IceUtil/MutexProtocol.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h ../Ice/IPEndpointIF.h $(includedir)/Ice/Handle.h $(includedir)/Ice/Config.h ../Ice/EndpointI.h ../Ice/EndpointIF.h $(includedir)/Ice/Endpoint.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/Exception.h $(includedir)/Ice/Format.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/LocalObjectF.h $(includedir)/Ice/StreamHelpers.h $(includedir)/IceUtil/ScopedArray.h $(includedir)/IceUtil/Iterator.h $(includedir)/IceUtil/Optional.h $(includedir)/Ice/Version.h $(includedir)/IceUtil/UndefSysMacros.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/Ice/EndpointF.h $(includedir)/Ice/EndpointTypes.h ../Ice/TransceiverF.h ../Ice/ConnectorF.h ../Ice/AcceptorF.h ../Ice/Network.h ../Ice/NetworkF.h $(includedir)/Ice/PropertiesF.h $(includedir)/Ice/Proxy.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/UniquePtr.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/BasicStream.h $(includedir)/IceUtil/StringConverter.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/ObjectFactoryManagerF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/Ice/SlicedDataF.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/FactoryTable.h $(includedir)/Ice/ObserverHelper.h $(includedir)/Ice/Instrumentation.h $(includedir)/Ice/ThreadPoolF.h $(includedir)/Ice/LoggerF.h ../Ice/ProtocolInstanceF.h ../Ice/EndpointFactory.h ../Ice/EndpointFactoryF.h ../IceSSL/InstanceF.h $(includedir)/IceSSL/EndpointInfo.h ../IceSSL/AcceptorI.h ../Ice/Acceptor.h ../IceSSL/ConnectorI.h ../Ice/Connector.h ../IceSSL/Instance.h ../Ice/ProtocolInstance.h ../IceSSL/SSLEngineF.h $(includedir)/IceSSL/Plugin.h $(includedir)/Ice/Plugin.h $(includedir)/IceSSL/Config.h $(includedir)/IceSSL/ConnectionInfo.h $(includedir)/Ice/Connection.h $(includedir)/Ice/LocalException.h ../Ice/DefaultsAndOverrides.h ../Ice/DefaultsAndOverridesF.h ../Ice/HashUtil.h
+Instance$(OBJEXT): Instance.cpp $(includedir)/IceUtil/Config.h ../IceSSL/Instance.h ../IceSSL/InstanceF.h $(includedir)/IceUtil/Shared.h $(includedir)/Ice/Handle.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Exception.h $(includedir)/Ice/Config.h ../Ice/ProtocolInstance.h ../Ice/ProtocolInstanceF.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/Exception.h $(includedir)/Ice/Format.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/LocalObjectF.h $(includedir)/Ice/StreamHelpers.h $(includedir)/IceUtil/ScopedArray.h $(includedir)/IceUtil/Iterator.h $(includedir)/IceUtil/Optional.h $(includedir)/IceUtil/UndefSysMacros.h $(includedir)/Ice/PropertiesF.h $(includedir)/Ice/Proxy.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Time.h $(includedir)/IceUtil/MutexProtocol.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointF.h $(includedir)/Ice/EndpointTypes.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/Thread.h $(includedir)/IceUtil/UniquePtr.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/Version.h $(includedir)/Ice/BasicStream.h $(includedir)/IceUtil/StringConverter.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/ObjectFactoryManagerF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/Ice/SlicedDataF.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/FactoryTable.h $(includedir)/Ice/ObserverHelper.h $(includedir)/Ice/Instrumentation.h $(includedir)/Ice/ThreadPoolF.h $(includedir)/Ice/LoggerF.h ../Ice/EndpointIF.h ../Ice/ConnectorF.h ../Ice/IPEndpointIF.h ../Ice/NetworkF.h ../IceSSL/SSLEngineF.h $(includedir)/IceSSL/Plugin.h $(includedir)/Ice/Plugin.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/IceSSL/Config.h $(includedir)/IceSSL/ConnectionInfo.h $(includedir)/Ice/Connection.h $(includedir)/Ice/Endpoint.h ../IceSSL/SSLEngine.h ../IceSSL/Util.h ../IceSSL/TrustManagerF.h ../Ice/Network.h $(includedir)/Ice/Properties.h $(includedir)/Ice/GCObject.h $(includedir)/IceUtil/MutexPtrLock.h $(includedir)/Ice/Outgoing.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/ResponseHandlerF.h $(includedir)/Ice/IncomingAsync.h $(includedir)/Ice/PropertiesAdmin.h
+PluginI$(OBJEXT): PluginI.cpp ../IceSSL/PluginI.h $(includedir)/IceSSL/Plugin.h $(includedir)/IceUtil/Time.h $(includedir)/IceUtil/Config.h $(includedir)/Ice/Plugin.h $(includedir)/Ice/ProxyF.h $(includedir)/IceUtil/Shared.h $(includedir)/Ice/Config.h $(includedir)/Ice/ProxyHandle.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Exception.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/Handle.h $(includedir)/Ice/Exception.h $(includedir)/Ice/Format.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/LocalObjectF.h $(includedir)/Ice/StreamHelpers.h $(includedir)/IceUtil/ScopedArray.h $(includedir)/IceUtil/Iterator.h $(includedir)/IceUtil/Optional.h $(includedir)/Ice/LoggerF.h $(includedir)/IceUtil/UndefSysMacros.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/IceSSL/Config.h $(includedir)/IceSSL/ConnectionInfo.h $(includedir)/Ice/Proxy.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/MutexProtocol.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointF.h $(includedir)/Ice/EndpointTypes.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/Thread.h $(includedir)/IceUtil/UniquePtr.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/Version.h $(includedir)/Ice/BasicStream.h $(includedir)/IceUtil/StringConverter.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/ObjectFactoryManagerF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/Ice/SlicedDataF.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/FactoryTable.h $(includedir)/Ice/ObserverHelper.h $(includedir)/Ice/Instrumentation.h $(includedir)/Ice/ThreadPoolF.h $(includedir)/Ice/Connection.h $(includedir)/Ice/Endpoint.h ../IceSSL/SSLEngineF.h ../IceSSL/Instance.h ../IceSSL/InstanceF.h ../Ice/ProtocolInstance.h ../Ice/ProtocolInstanceF.h $(includedir)/Ice/PropertiesF.h ../Ice/EndpointIF.h ../Ice/ConnectorF.h ../Ice/IPEndpointIF.h ../Ice/NetworkF.h ../IceSSL/SSLEngine.h ../IceSSL/Util.h ../IceSSL/TrustManagerF.h ../Ice/Network.h ../IceSSL/EndpointI.h ../Ice/IPEndpointI.h ../Ice/EndpointI.h ../Ice/TransceiverF.h ../Ice/AcceptorF.h ../Ice/EndpointFactory.h ../Ice/EndpointFactoryF.h $(includedir)/IceSSL/EndpointInfo.h ../Ice/ProtocolPluginFacade.h ../Ice/ProtocolPluginFacadeF.h $(includedir)/Ice/LocalException.h
+OpenSSLTransceiverI$(OBJEXT): OpenSSLTransceiverI.cpp ../IceSSL/OpenSSLTransceiverI.h $(includedir)/IceSSL/Config.h $(includedir)/Ice/Config.h $(includedir)/IceUtil/Config.h ../IceSSL/InstanceF.h $(includedir)/IceUtil/Shared.h $(includedir)/Ice/Handle.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Exception.h $(includedir)/IceSSL/Plugin.h $(includedir)/IceUtil/Time.h $(includedir)/Ice/Plugin.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/Exception.h $(includedir)/Ice/Format.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/LocalObjectF.h $(includedir)/Ice/StreamHelpers.h $(includedir)/IceUtil/ScopedArray.h $(includedir)/IceUtil/Iterator.h $(includedir)/IceUtil/Optional.h $(includedir)/Ice/LoggerF.h $(includedir)/IceUtil/UndefSysMacros.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/IceSSL/ConnectionInfo.h $(includedir)/Ice/Proxy.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/MutexProtocol.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointF.h $(includedir)/Ice/EndpointTypes.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/Thread.h $(includedir)/IceUtil/UniquePtr.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/Version.h $(includedir)/Ice/BasicStream.h $(includedir)/IceUtil/StringConverter.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/ObjectFactoryManagerF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/Ice/SlicedDataF.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/FactoryTable.h $(includedir)/Ice/ObserverHelper.h $(includedir)/Ice/Instrumentation.h $(includedir)/Ice/ThreadPoolF.h $(includedir)/Ice/Connection.h $(includedir)/Ice/Endpoint.h ../IceSSL/SSLEngineF.h ../Ice/Transceiver.h ../Ice/TransceiverF.h ../Ice/Network.h ../Ice/NetworkF.h $(includedir)/Ice/PropertiesF.h $(includedir)/IceUtil/MutexPtrLock.h ../IceSSL/Instance.h ../Ice/ProtocolInstance.h ../Ice/ProtocolInstanceF.h ../Ice/EndpointIF.h ../Ice/ConnectorF.h ../Ice/IPEndpointIF.h ../IceSSL/SSLEngine.h ../IceSSL/Util.h ../IceSSL/TrustManagerF.h $(includedir)/Ice/Communicator.h $(includedir)/Ice/GCObject.h $(includedir)/Ice/Outgoing.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/ResponseHandlerF.h $(includedir)/Ice/IncomingAsync.h $(includedir)/Ice/InstrumentationF.h $(includedir)/Ice/RouterF.h $(includedir)/Ice/LocatorF.h $(includedir)/Ice/PluginF.h $(includedir)/Ice/ImplicitContextF.h $(includedir)/Ice/Properties.h $(includedir)/Ice/PropertiesAdmin.h $(includedir)/Ice/LoggerUtil.h $(includedir)/Ice/Logger.h $(includedir)/Ice/LocalException.h $(includedir)/IceUtil/DisableWarnings.h
+SecureTransportTransceiverI$(OBJEXT): SecureTransportTransceiverI.cpp ../IceSSL/SecureTransportTransceiverI.h $(includedir)/IceSSL/Config.h $(includedir)/Ice/Config.h $(includedir)/IceUtil/Config.h ../IceSSL/InstanceF.h $(includedir)/IceUtil/Shared.h $(includedir)/Ice/Handle.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Exception.h ../IceSSL/SSLEngineF.h $(includedir)/IceSSL/Plugin.h $(includedir)/IceUtil/Time.h $(includedir)/Ice/Plugin.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/Exception.h $(includedir)/Ice/Format.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/LocalObjectF.h $(includedir)/Ice/StreamHelpers.h $(includedir)/IceUtil/ScopedArray.h $(includedir)/IceUtil/Iterator.h $(includedir)/IceUtil/Optional.h $(includedir)/Ice/LoggerF.h $(includedir)/IceUtil/UndefSysMacros.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/IceSSL/ConnectionInfo.h $(includedir)/Ice/Proxy.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/MutexProtocol.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointF.h $(includedir)/Ice/EndpointTypes.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/Thread.h $(includedir)/IceUtil/UniquePtr.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/Version.h $(includedir)/Ice/BasicStream.h $(includedir)/IceUtil/StringConverter.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/ObjectFactoryManagerF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/Ice/SlicedDataF.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/FactoryTable.h $(includedir)/Ice/ObserverHelper.h $(includedir)/Ice/Instrumentation.h $(includedir)/Ice/ThreadPoolF.h $(includedir)/Ice/Connection.h $(includedir)/Ice/Endpoint.h ../Ice/Transceiver.h ../Ice/TransceiverF.h ../Ice/Network.h ../Ice/NetworkF.h $(includedir)/Ice/PropertiesF.h ../IceSSL/Instance.h ../Ice/ProtocolInstance.h ../Ice/ProtocolInstanceF.h ../Ice/EndpointIF.h ../Ice/ConnectorF.h ../Ice/IPEndpointIF.h ../IceSSL/SSLEngine.h ../IceSSL/Util.h ../IceSSL/TrustManagerF.h $(includedir)/Ice/LoggerUtil.h $(includedir)/Ice/Logger.h $(includedir)/Ice/LocalException.h
+Util$(OBJEXT): Util.cpp $(includedir)/IceUtil/Config.h ../IceSSL/Util.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Exception.h $(includedir)/IceUtil/Time.h $(includedir)/IceUtil/MutexProtocol.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/Handle.h $(includedir)/IceSSL/Plugin.h $(includedir)/Ice/Plugin.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/Config.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/Handle.h $(includedir)/Ice/Exception.h $(includedir)/Ice/Format.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/LocalObjectF.h $(includedir)/Ice/StreamHelpers.h $(includedir)/IceUtil/ScopedArray.h $(includedir)/IceUtil/Iterator.h $(includedir)/IceUtil/Optional.h $(includedir)/Ice/LoggerF.h $(includedir)/IceUtil/UndefSysMacros.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/IceSSL/Config.h $(includedir)/IceSSL/ConnectionInfo.h $(includedir)/Ice/Proxy.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointF.h $(includedir)/Ice/EndpointTypes.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/Thread.h $(includedir)/IceUtil/UniquePtr.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/Version.h $(includedir)/Ice/BasicStream.h $(includedir)/IceUtil/StringConverter.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/ObjectFactoryManagerF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/Ice/SlicedDataF.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/FactoryTable.h $(includedir)/Ice/ObserverHelper.h $(includedir)/Ice/Instrumentation.h $(includedir)/Ice/ThreadPoolF.h $(includedir)/Ice/Connection.h $(includedir)/Ice/Endpoint.h $(includedir)/IceUtil/FileUtil.h $(includedir)/IceUtil/StringUtil.h $(includedir)/Ice/LocalException.h ../Ice/Network.h ../Ice/NetworkF.h $(includedir)/Ice/PropertiesF.h
RFC2253$(OBJEXT): RFC2253.cpp $(includedir)/IceUtil/StringUtil.h $(includedir)/IceUtil/Config.h $(includedir)/IceSSL/Plugin.h $(includedir)/IceUtil/Time.h $(includedir)/Ice/Plugin.h $(includedir)/Ice/ProxyF.h $(includedir)/IceUtil/Shared.h $(includedir)/Ice/Config.h $(includedir)/Ice/ProxyHandle.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Exception.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/Handle.h $(includedir)/Ice/Exception.h $(includedir)/Ice/Format.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/LocalObjectF.h $(includedir)/Ice/StreamHelpers.h $(includedir)/IceUtil/ScopedArray.h $(includedir)/IceUtil/Iterator.h $(includedir)/IceUtil/Optional.h $(includedir)/Ice/LoggerF.h $(includedir)/IceUtil/UndefSysMacros.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/IceSSL/Config.h $(includedir)/IceSSL/ConnectionInfo.h $(includedir)/Ice/Proxy.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/MutexProtocol.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointF.h $(includedir)/Ice/EndpointTypes.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/Thread.h $(includedir)/IceUtil/UniquePtr.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/Version.h $(includedir)/Ice/BasicStream.h $(includedir)/IceUtil/StringConverter.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/ObjectFactoryManagerF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/Ice/SlicedDataF.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/FactoryTable.h $(includedir)/Ice/ObserverHelper.h $(includedir)/Ice/Instrumentation.h $(includedir)/Ice/ThreadPoolF.h $(includedir)/Ice/Connection.h $(includedir)/Ice/Endpoint.h ../IceSSL/RFC2253.h
TrustManager$(OBJEXT): TrustManager.cpp ../IceSSL/TrustManager.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/ProxyF.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/Config.h $(includedir)/Ice/Config.h $(includedir)/Ice/ProxyHandle.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Exception.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/Handle.h $(includedir)/Ice/Exception.h $(includedir)/Ice/Format.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/LocalObjectF.h $(includedir)/Ice/StreamHelpers.h $(includedir)/IceUtil/ScopedArray.h $(includedir)/IceUtil/Iterator.h $(includedir)/IceUtil/Optional.h $(includedir)/IceUtil/UndefSysMacros.h ../IceSSL/TrustManagerF.h $(includedir)/IceSSL/Plugin.h $(includedir)/IceUtil/Time.h $(includedir)/Ice/Plugin.h $(includedir)/Ice/LoggerF.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/IceSSL/Config.h $(includedir)/IceSSL/ConnectionInfo.h $(includedir)/Ice/Proxy.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/MutexProtocol.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointF.h $(includedir)/Ice/EndpointTypes.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/Thread.h $(includedir)/IceUtil/UniquePtr.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/Version.h $(includedir)/Ice/BasicStream.h $(includedir)/IceUtil/StringConverter.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/ObjectFactoryManagerF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/Ice/SlicedDataF.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/FactoryTable.h $(includedir)/Ice/ObserverHelper.h $(includedir)/Ice/Instrumentation.h $(includedir)/Ice/ThreadPoolF.h $(includedir)/Ice/Connection.h $(includedir)/Ice/Endpoint.h ../IceSSL/RFC2253.h $(includedir)/Ice/Properties.h $(includedir)/Ice/GCObject.h $(includedir)/IceUtil/MutexPtrLock.h $(includedir)/Ice/Outgoing.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/ResponseHandlerF.h $(includedir)/Ice/IncomingAsync.h $(includedir)/Ice/PropertiesAdmin.h $(includedir)/Ice/Communicator.h $(includedir)/Ice/InstrumentationF.h $(includedir)/Ice/RouterF.h $(includedir)/Ice/LocatorF.h $(includedir)/Ice/PluginF.h $(includedir)/Ice/ImplicitContextF.h $(includedir)/Ice/LocalException.h $(includedir)/Ice/Logger.h $(includedir)/Ice/LoggerUtil.h ../Ice/Network.h ../Ice/NetworkF.h $(includedir)/Ice/PropertiesF.h
-SSLEngine$(OBJEXT): SSLEngine.cpp ../IceSSL/SSLEngine.h $(includedir)/IceSSL/Plugin.h $(includedir)/IceUtil/Time.h $(includedir)/IceUtil/Config.h $(includedir)/Ice/Plugin.h $(includedir)/Ice/ProxyF.h $(includedir)/IceUtil/Shared.h $(includedir)/Ice/Config.h $(includedir)/Ice/ProxyHandle.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Exception.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/Handle.h $(includedir)/Ice/Exception.h $(includedir)/Ice/Format.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/LocalObjectF.h $(includedir)/Ice/StreamHelpers.h $(includedir)/IceUtil/ScopedArray.h $(includedir)/IceUtil/Iterator.h $(includedir)/IceUtil/Optional.h $(includedir)/Ice/LoggerF.h $(includedir)/IceUtil/UndefSysMacros.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/IceSSL/Config.h $(includedir)/IceSSL/ConnectionInfo.h $(includedir)/Ice/Proxy.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/MutexProtocol.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointF.h $(includedir)/Ice/EndpointTypes.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/Thread.h $(includedir)/IceUtil/UniquePtr.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/Version.h $(includedir)/Ice/BasicStream.h $(includedir)/IceUtil/StringConverter.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/ObjectFactoryManagerF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/Ice/SlicedDataF.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/FactoryTable.h $(includedir)/Ice/ObserverHelper.h $(includedir)/Ice/Instrumentation.h $(includedir)/Ice/ThreadPoolF.h $(includedir)/Ice/Connection.h $(includedir)/Ice/Endpoint.h ../IceSSL/Util.h ../IceSSL/UtilF.h ../Ice/Network.h ../Ice/NetworkF.h $(includedir)/Ice/PropertiesF.h ../IceSSL/SSLEngineF.h ../IceSSL/TrustManagerF.h ../IceSSL/TrustManager.h ../IceSSL/RFC2253.h $(includedir)/IceUtil/StringUtil.h $(includedir)/Ice/Communicator.h $(includedir)/Ice/GCObject.h $(includedir)/IceUtil/MutexPtrLock.h $(includedir)/Ice/Outgoing.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/ResponseHandlerF.h $(includedir)/Ice/IncomingAsync.h $(includedir)/Ice/InstrumentationF.h $(includedir)/Ice/RouterF.h $(includedir)/Ice/LocatorF.h $(includedir)/Ice/PluginF.h $(includedir)/Ice/ImplicitContextF.h $(includedir)/Ice/Properties.h $(includedir)/Ice/PropertiesAdmin.h $(includedir)/Ice/Logger.h $(includedir)/Ice/LoggerUtil.h $(includedir)/Ice/LocalException.h
-OpenSSLEngine$(OBJEXT): OpenSSLEngine.cpp $(includedir)/IceSSL/Config.h $(includedir)/Ice/Config.h $(includedir)/IceUtil/Config.h ../IceSSL/SSLEngine.h $(includedir)/IceSSL/Plugin.h $(includedir)/IceUtil/Time.h $(includedir)/Ice/Plugin.h $(includedir)/Ice/ProxyF.h $(includedir)/IceUtil/Shared.h $(includedir)/Ice/ProxyHandle.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Exception.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/Handle.h $(includedir)/Ice/Exception.h $(includedir)/Ice/Format.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/LocalObjectF.h $(includedir)/Ice/StreamHelpers.h $(includedir)/IceUtil/ScopedArray.h $(includedir)/IceUtil/Iterator.h $(includedir)/IceUtil/Optional.h $(includedir)/Ice/LoggerF.h $(includedir)/IceUtil/UndefSysMacros.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/IceSSL/ConnectionInfo.h $(includedir)/Ice/Proxy.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/MutexProtocol.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointF.h $(includedir)/Ice/EndpointTypes.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/Thread.h $(includedir)/IceUtil/UniquePtr.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/Version.h $(includedir)/Ice/BasicStream.h $(includedir)/IceUtil/StringConverter.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/ObjectFactoryManagerF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/Ice/SlicedDataF.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/FactoryTable.h $(includedir)/Ice/ObserverHelper.h $(includedir)/Ice/Instrumentation.h $(includedir)/Ice/ThreadPoolF.h $(includedir)/Ice/Connection.h $(includedir)/Ice/Endpoint.h ../IceSSL/Util.h ../IceSSL/UtilF.h ../Ice/Network.h ../Ice/NetworkF.h $(includedir)/Ice/PropertiesF.h ../IceSSL/SSLEngineF.h ../IceSSL/TrustManagerF.h ../IceSSL/TrustManager.h ../IceSSL/RFC2253.h $(includedir)/Ice/Communicator.h $(includedir)/Ice/GCObject.h $(includedir)/IceUtil/MutexPtrLock.h $(includedir)/Ice/Outgoing.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/ResponseHandlerF.h $(includedir)/Ice/IncomingAsync.h $(includedir)/Ice/InstrumentationF.h $(includedir)/Ice/RouterF.h $(includedir)/Ice/LocatorF.h $(includedir)/Ice/PluginF.h $(includedir)/Ice/ImplicitContextF.h $(includedir)/Ice/Properties.h $(includedir)/Ice/PropertiesAdmin.h $(includedir)/Ice/LocalException.h $(includedir)/Ice/Logger.h $(includedir)/Ice/LoggerUtil.h $(includedir)/IceUtil/StringUtil.h $(includedir)/IceUtil/FileUtil.h
-SecureTransportEngine$(OBJEXT): SecureTransportEngine.cpp $(includedir)/IceSSL/Config.h $(includedir)/Ice/Config.h $(includedir)/IceUtil/Config.h $(includedir)/IceUtil/FileUtil.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Exception.h $(includedir)/IceUtil/StringUtil.h $(includedir)/Ice/LocalException.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/Handle.h $(includedir)/Ice/Exception.h $(includedir)/Ice/Format.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/LocalObjectF.h $(includedir)/Ice/StreamHelpers.h $(includedir)/IceUtil/ScopedArray.h $(includedir)/IceUtil/Iterator.h $(includedir)/IceUtil/Optional.h $(includedir)/Ice/Identity.h $(includedir)/IceUtil/UndefSysMacros.h $(includedir)/Ice/Version.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/Ice/Properties.h $(includedir)/Ice/Proxy.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Time.h $(includedir)/IceUtil/MutexProtocol.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointF.h $(includedir)/Ice/EndpointTypes.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/Thread.h $(includedir)/IceUtil/UniquePtr.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/BasicStream.h $(includedir)/IceUtil/StringConverter.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/ObjectFactoryManagerF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/Ice/SlicedDataF.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/FactoryTable.h $(includedir)/Ice/ObserverHelper.h $(includedir)/Ice/Instrumentation.h $(includedir)/Ice/ThreadPoolF.h $(includedir)/Ice/GCObject.h $(includedir)/IceUtil/MutexPtrLock.h $(includedir)/Ice/Outgoing.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/ResponseHandlerF.h $(includedir)/Ice/IncomingAsync.h $(includedir)/Ice/PropertiesAdmin.h $(includedir)/Ice/Communicator.h $(includedir)/Ice/LoggerF.h $(includedir)/Ice/InstrumentationF.h $(includedir)/Ice/RouterF.h $(includedir)/Ice/LocatorF.h $(includedir)/Ice/PluginF.h $(includedir)/Ice/ImplicitContextF.h $(includedir)/Ice/Logger.h $(includedir)/Ice/LoggerUtil.h $(includedir)/Ice/Plugin.h ../IceSSL/SecureTransportTransceiverI.h ../IceSSL/InstanceF.h ../IceSSL/SSLEngineF.h $(includedir)/IceSSL/Plugin.h $(includedir)/IceSSL/ConnectionInfo.h $(includedir)/Ice/Connection.h $(includedir)/Ice/Endpoint.h ../Ice/Transceiver.h ../Ice/TransceiverF.h ../Ice/Network.h ../Ice/NetworkF.h $(includedir)/Ice/PropertiesF.h ../IceSSL/SSLEngine.h ../IceSSL/Util.h ../IceSSL/UtilF.h ../IceSSL/TrustManagerF.h
+SSLEngine$(OBJEXT): SSLEngine.cpp ../IceSSL/SSLEngine.h $(includedir)/IceSSL/Plugin.h $(includedir)/IceUtil/Time.h $(includedir)/IceUtil/Config.h $(includedir)/Ice/Plugin.h $(includedir)/Ice/ProxyF.h $(includedir)/IceUtil/Shared.h $(includedir)/Ice/Config.h $(includedir)/Ice/ProxyHandle.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Exception.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/Handle.h $(includedir)/Ice/Exception.h $(includedir)/Ice/Format.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/LocalObjectF.h $(includedir)/Ice/StreamHelpers.h $(includedir)/IceUtil/ScopedArray.h $(includedir)/IceUtil/Iterator.h $(includedir)/IceUtil/Optional.h $(includedir)/Ice/LoggerF.h $(includedir)/IceUtil/UndefSysMacros.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/IceSSL/Config.h $(includedir)/IceSSL/ConnectionInfo.h $(includedir)/Ice/Proxy.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/MutexProtocol.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointF.h $(includedir)/Ice/EndpointTypes.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/Thread.h $(includedir)/IceUtil/UniquePtr.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/Version.h $(includedir)/Ice/BasicStream.h $(includedir)/IceUtil/StringConverter.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/ObjectFactoryManagerF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/Ice/SlicedDataF.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/FactoryTable.h $(includedir)/Ice/ObserverHelper.h $(includedir)/Ice/Instrumentation.h $(includedir)/Ice/ThreadPoolF.h $(includedir)/Ice/Connection.h $(includedir)/Ice/Endpoint.h ../IceSSL/Util.h ../IceSSL/SSLEngineF.h ../IceSSL/TrustManagerF.h ../Ice/Network.h ../Ice/NetworkF.h $(includedir)/Ice/PropertiesF.h ../IceSSL/TrustManager.h ../IceSSL/RFC2253.h $(includedir)/IceUtil/StringUtil.h $(includedir)/Ice/Communicator.h $(includedir)/Ice/GCObject.h $(includedir)/IceUtil/MutexPtrLock.h $(includedir)/Ice/Outgoing.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/ResponseHandlerF.h $(includedir)/Ice/IncomingAsync.h $(includedir)/Ice/InstrumentationF.h $(includedir)/Ice/RouterF.h $(includedir)/Ice/LocatorF.h $(includedir)/Ice/PluginF.h $(includedir)/Ice/ImplicitContextF.h $(includedir)/Ice/Properties.h $(includedir)/Ice/PropertiesAdmin.h $(includedir)/Ice/Logger.h $(includedir)/Ice/LoggerUtil.h $(includedir)/Ice/LocalException.h
+OpenSSLEngine$(OBJEXT): OpenSSLEngine.cpp $(includedir)/IceSSL/Config.h $(includedir)/Ice/Config.h $(includedir)/IceUtil/Config.h ../IceSSL/SSLEngine.h $(includedir)/IceSSL/Plugin.h $(includedir)/IceUtil/Time.h $(includedir)/Ice/Plugin.h $(includedir)/Ice/ProxyF.h $(includedir)/IceUtil/Shared.h $(includedir)/Ice/ProxyHandle.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Exception.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/Handle.h $(includedir)/Ice/Exception.h $(includedir)/Ice/Format.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/LocalObjectF.h $(includedir)/Ice/StreamHelpers.h $(includedir)/IceUtil/ScopedArray.h $(includedir)/IceUtil/Iterator.h $(includedir)/IceUtil/Optional.h $(includedir)/Ice/LoggerF.h $(includedir)/IceUtil/UndefSysMacros.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/IceSSL/ConnectionInfo.h $(includedir)/Ice/Proxy.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/MutexProtocol.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointF.h $(includedir)/Ice/EndpointTypes.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/Thread.h $(includedir)/IceUtil/UniquePtr.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/Version.h $(includedir)/Ice/BasicStream.h $(includedir)/IceUtil/StringConverter.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/ObjectFactoryManagerF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/Ice/SlicedDataF.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/FactoryTable.h $(includedir)/Ice/ObserverHelper.h $(includedir)/Ice/Instrumentation.h $(includedir)/Ice/ThreadPoolF.h $(includedir)/Ice/Connection.h $(includedir)/Ice/Endpoint.h ../IceSSL/Util.h ../IceSSL/SSLEngineF.h ../IceSSL/TrustManagerF.h ../Ice/Network.h ../Ice/NetworkF.h $(includedir)/Ice/PropertiesF.h ../IceSSL/TrustManager.h ../IceSSL/RFC2253.h $(includedir)/Ice/Communicator.h $(includedir)/Ice/GCObject.h $(includedir)/IceUtil/MutexPtrLock.h $(includedir)/Ice/Outgoing.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/ResponseHandlerF.h $(includedir)/Ice/IncomingAsync.h $(includedir)/Ice/InstrumentationF.h $(includedir)/Ice/RouterF.h $(includedir)/Ice/LocatorF.h $(includedir)/Ice/PluginF.h $(includedir)/Ice/ImplicitContextF.h $(includedir)/Ice/Properties.h $(includedir)/Ice/PropertiesAdmin.h $(includedir)/Ice/LocalException.h $(includedir)/Ice/Logger.h $(includedir)/Ice/LoggerUtil.h $(includedir)/IceUtil/StringUtil.h $(includedir)/IceUtil/FileUtil.h
+SecureTransportEngine$(OBJEXT): SecureTransportEngine.cpp $(includedir)/IceSSL/Config.h $(includedir)/Ice/Config.h $(includedir)/IceUtil/Config.h $(includedir)/IceUtil/FileUtil.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Exception.h $(includedir)/IceUtil/StringUtil.h $(includedir)/Ice/LocalException.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/Handle.h $(includedir)/Ice/Exception.h $(includedir)/Ice/Format.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/LocalObjectF.h $(includedir)/Ice/StreamHelpers.h $(includedir)/IceUtil/ScopedArray.h $(includedir)/IceUtil/Iterator.h $(includedir)/IceUtil/Optional.h $(includedir)/Ice/Identity.h $(includedir)/IceUtil/UndefSysMacros.h $(includedir)/Ice/Version.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/Ice/Properties.h $(includedir)/Ice/Proxy.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Time.h $(includedir)/IceUtil/MutexProtocol.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointF.h $(includedir)/Ice/EndpointTypes.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/Thread.h $(includedir)/IceUtil/UniquePtr.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/BasicStream.h $(includedir)/IceUtil/StringConverter.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/ObjectFactoryManagerF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/Ice/SlicedDataF.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/FactoryTable.h $(includedir)/Ice/ObserverHelper.h $(includedir)/Ice/Instrumentation.h $(includedir)/Ice/ThreadPoolF.h $(includedir)/Ice/GCObject.h $(includedir)/IceUtil/MutexPtrLock.h $(includedir)/Ice/Outgoing.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/ResponseHandlerF.h $(includedir)/Ice/IncomingAsync.h $(includedir)/Ice/PropertiesAdmin.h $(includedir)/Ice/Communicator.h $(includedir)/Ice/LoggerF.h $(includedir)/Ice/InstrumentationF.h $(includedir)/Ice/RouterF.h $(includedir)/Ice/LocatorF.h $(includedir)/Ice/PluginF.h $(includedir)/Ice/ImplicitContextF.h $(includedir)/Ice/Logger.h $(includedir)/Ice/LoggerUtil.h $(includedir)/Ice/Plugin.h ../IceSSL/SecureTransportTransceiverI.h ../IceSSL/InstanceF.h ../IceSSL/SSLEngineF.h $(includedir)/IceSSL/Plugin.h $(includedir)/IceSSL/ConnectionInfo.h $(includedir)/Ice/Connection.h $(includedir)/Ice/Endpoint.h ../Ice/Transceiver.h ../Ice/TransceiverF.h ../Ice/Network.h ../Ice/NetworkF.h $(includedir)/Ice/PropertiesF.h ../IceSSL/SSLEngine.h ../IceSSL/Util.h ../IceSSL/TrustManagerF.h
+SChannelEngine$(OBJEXT): SChannelEngine.cpp ../IceSSL/SSLEngine.h $(includedir)/IceSSL/Plugin.h $(includedir)/IceUtil/Time.h $(includedir)/IceUtil/Config.h $(includedir)/Ice/Plugin.h $(includedir)/Ice/ProxyF.h $(includedir)/IceUtil/Shared.h $(includedir)/Ice/Config.h $(includedir)/Ice/ProxyHandle.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Exception.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/Handle.h $(includedir)/Ice/Exception.h $(includedir)/Ice/Format.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/LocalObjectF.h $(includedir)/Ice/StreamHelpers.h $(includedir)/IceUtil/ScopedArray.h $(includedir)/IceUtil/Iterator.h $(includedir)/IceUtil/Optional.h $(includedir)/Ice/LoggerF.h $(includedir)/IceUtil/UndefSysMacros.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/IceSSL/Config.h $(includedir)/IceSSL/ConnectionInfo.h $(includedir)/Ice/Proxy.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/MutexProtocol.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointF.h $(includedir)/Ice/EndpointTypes.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/Thread.h $(includedir)/IceUtil/UniquePtr.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/Version.h $(includedir)/Ice/BasicStream.h $(includedir)/IceUtil/StringConverter.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/ObjectFactoryManagerF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/Ice/SlicedDataF.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/FactoryTable.h $(includedir)/Ice/ObserverHelper.h $(includedir)/Ice/Instrumentation.h $(includedir)/Ice/ThreadPoolF.h $(includedir)/Ice/Connection.h $(includedir)/Ice/Endpoint.h ../IceSSL/Util.h ../IceSSL/SSLEngineF.h ../IceSSL/TrustManagerF.h ../Ice/Network.h ../Ice/NetworkF.h $(includedir)/Ice/PropertiesF.h $(includedir)/Ice/LocalException.h $(includedir)/Ice/Logger.h $(includedir)/Ice/Communicator.h $(includedir)/Ice/GCObject.h $(includedir)/IceUtil/MutexPtrLock.h $(includedir)/Ice/Outgoing.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/ResponseHandlerF.h $(includedir)/Ice/IncomingAsync.h $(includedir)/Ice/InstrumentationF.h $(includedir)/Ice/RouterF.h $(includedir)/Ice/LocatorF.h $(includedir)/Ice/PluginF.h $(includedir)/Ice/ImplicitContextF.h $(includedir)/Ice/Properties.h $(includedir)/Ice/PropertiesAdmin.h $(includedir)/IceUtil/StringUtil.h $(includedir)/IceUtil/FileUtil.h $(includedir)/IceUtil/UUID.h
+SChannelTransceiverI$(OBJEXT): SChannelTransceiverI.cpp ../IceSSL/SChannelTransceiverI.h $(includedir)/IceSSL/Config.h $(includedir)/Ice/Config.h $(includedir)/IceUtil/Config.h ../IceSSL/InstanceF.h $(includedir)/IceUtil/Shared.h $(includedir)/Ice/Handle.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Exception.h $(includedir)/IceSSL/Plugin.h $(includedir)/IceUtil/Time.h $(includedir)/Ice/Plugin.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/Exception.h $(includedir)/Ice/Format.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/LocalObjectF.h $(includedir)/Ice/StreamHelpers.h $(includedir)/IceUtil/ScopedArray.h $(includedir)/IceUtil/Iterator.h $(includedir)/IceUtil/Optional.h $(includedir)/Ice/LoggerF.h $(includedir)/IceUtil/UndefSysMacros.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/IceSSL/ConnectionInfo.h $(includedir)/Ice/Proxy.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/MutexProtocol.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointF.h $(includedir)/Ice/EndpointTypes.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/Thread.h $(includedir)/IceUtil/UniquePtr.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/Version.h $(includedir)/Ice/BasicStream.h $(includedir)/IceUtil/StringConverter.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/ObjectFactoryManagerF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/Ice/SlicedDataF.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/FactoryTable.h $(includedir)/Ice/ObserverHelper.h $(includedir)/Ice/Instrumentation.h $(includedir)/Ice/ThreadPoolF.h $(includedir)/Ice/Connection.h $(includedir)/Ice/Endpoint.h ../IceSSL/SSLEngineF.h ../Ice/Transceiver.h ../Ice/TransceiverF.h ../Ice/Network.h ../Ice/NetworkF.h $(includedir)/Ice/PropertiesF.h $(includedir)/IceUtil/StringUtil.h ../IceSSL/Instance.h ../Ice/ProtocolInstance.h ../Ice/ProtocolInstanceF.h ../Ice/EndpointIF.h ../Ice/ConnectorF.h ../Ice/IPEndpointIF.h ../IceSSL/SSLEngine.h ../IceSSL/Util.h ../IceSSL/TrustManagerF.h $(includedir)/Ice/Communicator.h $(includedir)/Ice/GCObject.h $(includedir)/IceUtil/MutexPtrLock.h $(includedir)/Ice/Outgoing.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/ResponseHandlerF.h $(includedir)/Ice/IncomingAsync.h $(includedir)/Ice/InstrumentationF.h $(includedir)/Ice/RouterF.h $(includedir)/Ice/LocatorF.h $(includedir)/Ice/PluginF.h $(includedir)/Ice/ImplicitContextF.h $(includedir)/Ice/Properties.h $(includedir)/Ice/PropertiesAdmin.h $(includedir)/Ice/LoggerUtil.h $(includedir)/Ice/Logger.h $(includedir)/Ice/LocalException.h
$(HDIR)/EndpointInfo.h EndpointInfo.cpp: $(slicedir)/IceSSL/EndpointInfo.ice $(slicedir)/Ice/Endpoint.ice $(slicedir)/Ice/Version.ice $(slicedir)/Ice/BuiltinSequences.ice $(slicedir)/Ice/EndpointF.ice $(SLICE2CPP) $(SLICEPARSERLIB)
$(HDIR)/ConnectionInfo.h ConnectionInfo.cpp: $(slicedir)/IceSSL/ConnectionInfo.ice $(slicedir)/Ice/Connection.ice $(slicedir)/Ice/ObjectAdapterF.ice $(slicedir)/Ice/Identity.ice $(slicedir)/Ice/Endpoint.ice $(slicedir)/Ice/Version.ice $(slicedir)/Ice/BuiltinSequences.ice $(slicedir)/Ice/EndpointF.ice $(SLICE2CPP) $(SLICEPARSERLIB)
diff --git a/cpp/src/IceSSL/.depend.mak b/cpp/src/IceSSL/.depend.mak
index 1b0a158b6a0..530b00c3808 100644
--- a/cpp/src/IceSSL/.depend.mak
+++ b/cpp/src/IceSSL/.depend.mak
@@ -1,18 +1,20 @@
-AcceptorI$(OBJEXT): AcceptorI.cpp ../IceSSL/AcceptorI.h ../Ice/TransceiverF.h "$(includedir)/IceUtil/Shared.h" "$(includedir)/IceUtil/Config.h" "$(includedir)/Ice/Handle.h" "$(includedir)/IceUtil/Handle.h" "$(includedir)/IceUtil/Exception.h" "$(includedir)/Ice/Config.h" ../Ice/Acceptor.h ../Ice/AcceptorF.h ../Ice/Network.h ../Ice/NetworkF.h "$(includedir)/Ice/PropertiesF.h" "$(includedir)/Ice/ProxyF.h" "$(includedir)/Ice/ProxyHandle.h" "$(includedir)/Ice/ObjectF.h" "$(includedir)/Ice/Exception.h" "$(includedir)/Ice/Format.h" "$(includedir)/Ice/StreamF.h" "$(includedir)/Ice/LocalObject.h" "$(includedir)/Ice/LocalObjectF.h" "$(includedir)/Ice/StreamHelpers.h" "$(includedir)/IceUtil/ScopedArray.h" "$(includedir)/IceUtil/Iterator.h" "$(includedir)/Ice/Proxy.h" "$(includedir)/IceUtil/Mutex.h" "$(includedir)/IceUtil/Lock.h" "$(includedir)/IceUtil/ThreadException.h" "$(includedir)/IceUtil/Time.h" "$(includedir)/IceUtil/MutexProtocol.h" "$(includedir)/Ice/ProxyFactoryF.h" "$(includedir)/Ice/ConnectionIF.h" "$(includedir)/Ice/RequestHandlerF.h" "$(includedir)/Ice/EndpointF.h" "$(includedir)/IceUtil/Optional.h" "$(includedir)/IceUtil/UndefSysMacros.h" "$(includedir)/Ice/EndpointTypes.h" "$(includedir)/Ice/ObjectAdapterF.h" "$(includedir)/Ice/ReferenceF.h" "$(includedir)/Ice/OutgoingAsync.h" "$(includedir)/IceUtil/Monitor.h" "$(includedir)/IceUtil/Cond.h" "$(includedir)/IceUtil/Timer.h" "$(includedir)/IceUtil/Thread.h" "$(includedir)/IceUtil/UniquePtr.h" "$(includedir)/Ice/OutgoingAsyncF.h" "$(includedir)/Ice/InstanceF.h" "$(includedir)/Ice/CommunicatorF.h" "$(includedir)/Ice/Current.h" "$(includedir)/Ice/ConnectionF.h" "$(includedir)/Ice/Identity.h" "$(includedir)/Ice/Version.h" "$(includedir)/Ice/BasicStream.h" "$(includedir)/IceUtil/StringConverter.h" "$(includedir)/Ice/Object.h" "$(includedir)/Ice/IncomingAsyncF.h" "$(includedir)/Ice/ObjectFactoryF.h" "$(includedir)/Ice/ObjectFactoryManagerF.h" "$(includedir)/Ice/Buffer.h" "$(includedir)/Ice/Protocol.h" "$(includedir)/Ice/SlicedDataF.h" "$(includedir)/Ice/UserExceptionFactory.h" "$(includedir)/Ice/FactoryTable.h" "$(includedir)/Ice/ObserverHelper.h" "$(includedir)/Ice/Instrumentation.h" "$(includedir)/Ice/ThreadPoolF.h" "$(includedir)/Ice/LoggerF.h" ../IceSSL/InstanceF.h ../IceSSL/Instance.h ../Ice/ProtocolInstance.h ../Ice/ProtocolInstanceF.h ../Ice/EndpointIF.h ../Ice/ConnectorF.h ../Ice/IPEndpointIF.h ../IceSSL/SSLEngineF.h "$(includedir)/IceSSL/Plugin.h" "$(includedir)/Ice/Plugin.h" "$(includedir)/Ice/BuiltinSequences.h" "$(includedir)/IceSSL/Config.h" "$(includedir)/IceSSL/ConnectionInfo.h" "$(includedir)/Ice/Connection.h" "$(includedir)/Ice/Endpoint.h" ../IceSSL/SecureTransportTransceiverI.h ../Ice/Transceiver.h ../IceSSL/TransceiverI.h ../IceSSL/Util.h ../IceSSL/UtilF.h "$(includedir)/Ice/Communicator.h" "$(includedir)/Ice/GCObject.h" "$(includedir)/IceUtil/MutexPtrLock.h" "$(includedir)/Ice/Outgoing.h" "$(includedir)/Ice/Incoming.h" "$(includedir)/Ice/ServantLocatorF.h" "$(includedir)/Ice/ServantManagerF.h" "$(includedir)/Ice/ResponseHandlerF.h" "$(includedir)/Ice/IncomingAsync.h" "$(includedir)/Ice/InstrumentationF.h" "$(includedir)/Ice/RouterF.h" "$(includedir)/Ice/LocatorF.h" "$(includedir)/Ice/PluginF.h" "$(includedir)/Ice/ImplicitContextF.h" "$(includedir)/Ice/Properties.h" "$(includedir)/Ice/PropertiesAdmin.h" "$(includedir)/Ice/LocalException.h" "$(includedir)/Ice/LoggerUtil.h" "$(includedir)/Ice/Logger.h" "$(includedir)/IceUtil/StringUtil.h"
-Certificate$(OBJEXT): Certificate.cpp "$(includedir)/IceUtil/DisableWarnings.h" "$(includedir)/IceUtil/Mutex.h" "$(includedir)/IceUtil/Config.h" "$(includedir)/IceUtil/Lock.h" "$(includedir)/IceUtil/ThreadException.h" "$(includedir)/IceUtil/Exception.h" "$(includedir)/IceUtil/Time.h" "$(includedir)/IceUtil/MutexProtocol.h" "$(includedir)/IceUtil/MutexPtrLock.h" "$(includedir)/IceUtil/StringUtil.h" "$(includedir)/IceSSL/Plugin.h" "$(includedir)/Ice/Plugin.h" "$(includedir)/Ice/ProxyF.h" "$(includedir)/IceUtil/Shared.h" "$(includedir)/Ice/Config.h" "$(includedir)/Ice/ProxyHandle.h" "$(includedir)/IceUtil/Handle.h" "$(includedir)/Ice/ObjectF.h" "$(includedir)/Ice/Handle.h" "$(includedir)/Ice/Exception.h" "$(includedir)/Ice/Format.h" "$(includedir)/Ice/StreamF.h" "$(includedir)/Ice/LocalObject.h" "$(includedir)/Ice/LocalObjectF.h" "$(includedir)/Ice/StreamHelpers.h" "$(includedir)/IceUtil/ScopedArray.h" "$(includedir)/IceUtil/Iterator.h" "$(includedir)/IceUtil/Optional.h" "$(includedir)/Ice/LoggerF.h" "$(includedir)/IceUtil/UndefSysMacros.h" "$(includedir)/Ice/BuiltinSequences.h" "$(includedir)/IceSSL/Config.h" "$(includedir)/IceSSL/ConnectionInfo.h" "$(includedir)/Ice/Proxy.h" "$(includedir)/Ice/ProxyFactoryF.h" "$(includedir)/Ice/ConnectionIF.h" "$(includedir)/Ice/RequestHandlerF.h" "$(includedir)/Ice/EndpointF.h" "$(includedir)/Ice/EndpointTypes.h" "$(includedir)/Ice/ObjectAdapterF.h" "$(includedir)/Ice/ReferenceF.h" "$(includedir)/Ice/OutgoingAsync.h" "$(includedir)/IceUtil/Monitor.h" "$(includedir)/IceUtil/Cond.h" "$(includedir)/IceUtil/Timer.h" "$(includedir)/IceUtil/Thread.h" "$(includedir)/IceUtil/UniquePtr.h" "$(includedir)/Ice/OutgoingAsyncF.h" "$(includedir)/Ice/InstanceF.h" "$(includedir)/Ice/CommunicatorF.h" "$(includedir)/Ice/Current.h" "$(includedir)/Ice/ConnectionF.h" "$(includedir)/Ice/Identity.h" "$(includedir)/Ice/Version.h" "$(includedir)/Ice/BasicStream.h" "$(includedir)/IceUtil/StringConverter.h" "$(includedir)/Ice/Object.h" "$(includedir)/Ice/IncomingAsyncF.h" "$(includedir)/Ice/ObjectFactoryF.h" "$(includedir)/Ice/ObjectFactoryManagerF.h" "$(includedir)/Ice/Buffer.h" "$(includedir)/Ice/Protocol.h" "$(includedir)/Ice/SlicedDataF.h" "$(includedir)/Ice/UserExceptionFactory.h" "$(includedir)/Ice/FactoryTable.h" "$(includedir)/Ice/ObserverHelper.h" "$(includedir)/Ice/Instrumentation.h" "$(includedir)/Ice/ThreadPoolF.h" "$(includedir)/Ice/Connection.h" "$(includedir)/Ice/Endpoint.h" ../IceSSL/Util.h ../IceSSL/UtilF.h ../Ice/Network.h ../Ice/NetworkF.h "$(includedir)/Ice/PropertiesF.h" ../IceSSL/RFC2253.h
-ConnectorI$(OBJEXT): ConnectorI.cpp ../IceSSL/ConnectorI.h ../Ice/TransceiverF.h "$(includedir)/IceUtil/Shared.h" "$(includedir)/IceUtil/Config.h" "$(includedir)/Ice/Handle.h" "$(includedir)/IceUtil/Handle.h" "$(includedir)/IceUtil/Exception.h" "$(includedir)/Ice/Config.h" ../Ice/Connector.h ../Ice/ConnectorF.h ../Ice/Network.h ../Ice/NetworkF.h "$(includedir)/Ice/PropertiesF.h" "$(includedir)/Ice/ProxyF.h" "$(includedir)/Ice/ProxyHandle.h" "$(includedir)/Ice/ObjectF.h" "$(includedir)/Ice/Exception.h" "$(includedir)/Ice/Format.h" "$(includedir)/Ice/StreamF.h" "$(includedir)/Ice/LocalObject.h" "$(includedir)/Ice/LocalObjectF.h" "$(includedir)/Ice/StreamHelpers.h" "$(includedir)/IceUtil/ScopedArray.h" "$(includedir)/IceUtil/Iterator.h" "$(includedir)/Ice/Proxy.h" "$(includedir)/IceUtil/Mutex.h" "$(includedir)/IceUtil/Lock.h" "$(includedir)/IceUtil/ThreadException.h" "$(includedir)/IceUtil/Time.h" "$(includedir)/IceUtil/MutexProtocol.h" "$(includedir)/Ice/ProxyFactoryF.h" "$(includedir)/Ice/ConnectionIF.h" "$(includedir)/Ice/RequestHandlerF.h" "$(includedir)/Ice/EndpointF.h" "$(includedir)/IceUtil/Optional.h" "$(includedir)/IceUtil/UndefSysMacros.h" "$(includedir)/Ice/EndpointTypes.h" "$(includedir)/Ice/ObjectAdapterF.h" "$(includedir)/Ice/ReferenceF.h" "$(includedir)/Ice/OutgoingAsync.h" "$(includedir)/IceUtil/Monitor.h" "$(includedir)/IceUtil/Cond.h" "$(includedir)/IceUtil/Timer.h" "$(includedir)/IceUtil/Thread.h" "$(includedir)/IceUtil/UniquePtr.h" "$(includedir)/Ice/OutgoingAsyncF.h" "$(includedir)/Ice/InstanceF.h" "$(includedir)/Ice/CommunicatorF.h" "$(includedir)/Ice/Current.h" "$(includedir)/Ice/ConnectionF.h" "$(includedir)/Ice/Identity.h" "$(includedir)/Ice/Version.h" "$(includedir)/Ice/BasicStream.h" "$(includedir)/IceUtil/StringConverter.h" "$(includedir)/Ice/Object.h" "$(includedir)/Ice/IncomingAsyncF.h" "$(includedir)/Ice/ObjectFactoryF.h" "$(includedir)/Ice/ObjectFactoryManagerF.h" "$(includedir)/Ice/Buffer.h" "$(includedir)/Ice/Protocol.h" "$(includedir)/Ice/SlicedDataF.h" "$(includedir)/Ice/UserExceptionFactory.h" "$(includedir)/Ice/FactoryTable.h" "$(includedir)/Ice/ObserverHelper.h" "$(includedir)/Ice/Instrumentation.h" "$(includedir)/Ice/ThreadPoolF.h" "$(includedir)/Ice/LoggerF.h" ../IceSSL/InstanceF.h ../IceSSL/Instance.h ../Ice/ProtocolInstance.h ../Ice/ProtocolInstanceF.h ../Ice/EndpointIF.h ../Ice/IPEndpointIF.h ../IceSSL/SSLEngineF.h "$(includedir)/IceSSL/Plugin.h" "$(includedir)/Ice/Plugin.h" "$(includedir)/Ice/BuiltinSequences.h" "$(includedir)/IceSSL/Config.h" "$(includedir)/IceSSL/ConnectionInfo.h" "$(includedir)/Ice/Connection.h" "$(includedir)/Ice/Endpoint.h" ../IceSSL/SecureTransportTransceiverI.h ../Ice/Transceiver.h ../IceSSL/TransceiverI.h ../IceSSL/EndpointI.h ../Ice/IPEndpointI.h ../Ice/EndpointI.h ../Ice/AcceptorF.h ../Ice/EndpointFactory.h ../Ice/EndpointFactoryF.h "$(includedir)/IceSSL/EndpointInfo.h" ../IceSSL/Util.h ../IceSSL/UtilF.h "$(includedir)/Ice/Communicator.h" "$(includedir)/Ice/GCObject.h" "$(includedir)/IceUtil/MutexPtrLock.h" "$(includedir)/Ice/Outgoing.h" "$(includedir)/Ice/Incoming.h" "$(includedir)/Ice/ServantLocatorF.h" "$(includedir)/Ice/ServantManagerF.h" "$(includedir)/Ice/ResponseHandlerF.h" "$(includedir)/Ice/IncomingAsync.h" "$(includedir)/Ice/InstrumentationF.h" "$(includedir)/Ice/RouterF.h" "$(includedir)/Ice/LocatorF.h" "$(includedir)/Ice/PluginF.h" "$(includedir)/Ice/ImplicitContextF.h" "$(includedir)/Ice/Properties.h" "$(includedir)/Ice/PropertiesAdmin.h" "$(includedir)/Ice/LocalException.h" "$(includedir)/Ice/LoggerUtil.h" "$(includedir)/Ice/Logger.h"
+AcceptorI$(OBJEXT): AcceptorI.cpp ../IceSSL/AcceptorI.h ../Ice/TransceiverF.h "$(includedir)/IceUtil/Shared.h" "$(includedir)/IceUtil/Config.h" "$(includedir)/Ice/Handle.h" "$(includedir)/IceUtil/Handle.h" "$(includedir)/IceUtil/Exception.h" "$(includedir)/Ice/Config.h" ../Ice/Acceptor.h ../Ice/AcceptorF.h ../Ice/Network.h ../Ice/NetworkF.h "$(includedir)/Ice/PropertiesF.h" "$(includedir)/Ice/ProxyF.h" "$(includedir)/Ice/ProxyHandle.h" "$(includedir)/Ice/ObjectF.h" "$(includedir)/Ice/Exception.h" "$(includedir)/Ice/Format.h" "$(includedir)/Ice/StreamF.h" "$(includedir)/Ice/LocalObject.h" "$(includedir)/Ice/LocalObjectF.h" "$(includedir)/Ice/StreamHelpers.h" "$(includedir)/IceUtil/ScopedArray.h" "$(includedir)/IceUtil/Iterator.h" "$(includedir)/Ice/Proxy.h" "$(includedir)/IceUtil/Mutex.h" "$(includedir)/IceUtil/Lock.h" "$(includedir)/IceUtil/ThreadException.h" "$(includedir)/IceUtil/Time.h" "$(includedir)/IceUtil/MutexProtocol.h" "$(includedir)/Ice/ProxyFactoryF.h" "$(includedir)/Ice/ConnectionIF.h" "$(includedir)/Ice/RequestHandlerF.h" "$(includedir)/Ice/EndpointF.h" "$(includedir)/IceUtil/Optional.h" "$(includedir)/IceUtil/UndefSysMacros.h" "$(includedir)/Ice/EndpointTypes.h" "$(includedir)/Ice/ObjectAdapterF.h" "$(includedir)/Ice/ReferenceF.h" "$(includedir)/Ice/OutgoingAsync.h" "$(includedir)/IceUtil/Monitor.h" "$(includedir)/IceUtil/Cond.h" "$(includedir)/IceUtil/Timer.h" "$(includedir)/IceUtil/Thread.h" "$(includedir)/IceUtil/UniquePtr.h" "$(includedir)/Ice/OutgoingAsyncF.h" "$(includedir)/Ice/InstanceF.h" "$(includedir)/Ice/CommunicatorF.h" "$(includedir)/Ice/Current.h" "$(includedir)/Ice/ConnectionF.h" "$(includedir)/Ice/Identity.h" "$(includedir)/Ice/Version.h" "$(includedir)/Ice/BasicStream.h" "$(includedir)/IceUtil/StringConverter.h" "$(includedir)/Ice/Object.h" "$(includedir)/Ice/IncomingAsyncF.h" "$(includedir)/Ice/ObjectFactoryF.h" "$(includedir)/Ice/ObjectFactoryManagerF.h" "$(includedir)/Ice/Buffer.h" "$(includedir)/Ice/Protocol.h" "$(includedir)/Ice/SlicedDataF.h" "$(includedir)/Ice/UserExceptionFactory.h" "$(includedir)/Ice/FactoryTable.h" "$(includedir)/Ice/ObserverHelper.h" "$(includedir)/Ice/Instrumentation.h" "$(includedir)/Ice/ThreadPoolF.h" "$(includedir)/Ice/LoggerF.h" ../IceSSL/InstanceF.h ../IceSSL/Instance.h ../Ice/ProtocolInstance.h ../Ice/ProtocolInstanceF.h ../Ice/EndpointIF.h ../Ice/ConnectorF.h ../Ice/IPEndpointIF.h ../IceSSL/SSLEngineF.h "$(includedir)/IceSSL/Plugin.h" "$(includedir)/Ice/Plugin.h" "$(includedir)/Ice/BuiltinSequences.h" "$(includedir)/IceSSL/Config.h" "$(includedir)/IceSSL/ConnectionInfo.h" "$(includedir)/Ice/Connection.h" "$(includedir)/Ice/Endpoint.h" ../IceSSL/OpenSSLTransceiverI.h ../Ice/Transceiver.h ../IceSSL/SecureTransportTransceiverI.h ../IceSSL/SChannelTransceiverI.h ../IceSSL/Util.h "$(includedir)/Ice/Communicator.h" "$(includedir)/Ice/GCObject.h" "$(includedir)/IceUtil/MutexPtrLock.h" "$(includedir)/Ice/Outgoing.h" "$(includedir)/Ice/Incoming.h" "$(includedir)/Ice/ServantLocatorF.h" "$(includedir)/Ice/ServantManagerF.h" "$(includedir)/Ice/ResponseHandlerF.h" "$(includedir)/Ice/IncomingAsync.h" "$(includedir)/Ice/InstrumentationF.h" "$(includedir)/Ice/RouterF.h" "$(includedir)/Ice/LocatorF.h" "$(includedir)/Ice/PluginF.h" "$(includedir)/Ice/ImplicitContextF.h" "$(includedir)/Ice/Properties.h" "$(includedir)/Ice/PropertiesAdmin.h" "$(includedir)/Ice/LocalException.h" "$(includedir)/Ice/LoggerUtil.h" "$(includedir)/Ice/Logger.h" "$(includedir)/IceUtil/StringUtil.h"
+Certificate$(OBJEXT): Certificate.cpp "$(includedir)/IceUtil/DisableWarnings.h" "$(includedir)/IceUtil/Mutex.h" "$(includedir)/IceUtil/Config.h" "$(includedir)/IceUtil/Lock.h" "$(includedir)/IceUtil/ThreadException.h" "$(includedir)/IceUtil/Exception.h" "$(includedir)/IceUtil/Time.h" "$(includedir)/IceUtil/MutexProtocol.h" "$(includedir)/IceUtil/MutexPtrLock.h" "$(includedir)/IceUtil/StringUtil.h" "$(includedir)/IceSSL/Plugin.h" "$(includedir)/Ice/Plugin.h" "$(includedir)/Ice/ProxyF.h" "$(includedir)/IceUtil/Shared.h" "$(includedir)/Ice/Config.h" "$(includedir)/Ice/ProxyHandle.h" "$(includedir)/IceUtil/Handle.h" "$(includedir)/Ice/ObjectF.h" "$(includedir)/Ice/Handle.h" "$(includedir)/Ice/Exception.h" "$(includedir)/Ice/Format.h" "$(includedir)/Ice/StreamF.h" "$(includedir)/Ice/LocalObject.h" "$(includedir)/Ice/LocalObjectF.h" "$(includedir)/Ice/StreamHelpers.h" "$(includedir)/IceUtil/ScopedArray.h" "$(includedir)/IceUtil/Iterator.h" "$(includedir)/IceUtil/Optional.h" "$(includedir)/Ice/LoggerF.h" "$(includedir)/IceUtil/UndefSysMacros.h" "$(includedir)/Ice/BuiltinSequences.h" "$(includedir)/IceSSL/Config.h" "$(includedir)/IceSSL/ConnectionInfo.h" "$(includedir)/Ice/Proxy.h" "$(includedir)/Ice/ProxyFactoryF.h" "$(includedir)/Ice/ConnectionIF.h" "$(includedir)/Ice/RequestHandlerF.h" "$(includedir)/Ice/EndpointF.h" "$(includedir)/Ice/EndpointTypes.h" "$(includedir)/Ice/ObjectAdapterF.h" "$(includedir)/Ice/ReferenceF.h" "$(includedir)/Ice/OutgoingAsync.h" "$(includedir)/IceUtil/Monitor.h" "$(includedir)/IceUtil/Cond.h" "$(includedir)/IceUtil/Timer.h" "$(includedir)/IceUtil/Thread.h" "$(includedir)/IceUtil/UniquePtr.h" "$(includedir)/Ice/OutgoingAsyncF.h" "$(includedir)/Ice/InstanceF.h" "$(includedir)/Ice/CommunicatorF.h" "$(includedir)/Ice/Current.h" "$(includedir)/Ice/ConnectionF.h" "$(includedir)/Ice/Identity.h" "$(includedir)/Ice/Version.h" "$(includedir)/Ice/BasicStream.h" "$(includedir)/IceUtil/StringConverter.h" "$(includedir)/Ice/Object.h" "$(includedir)/Ice/IncomingAsyncF.h" "$(includedir)/Ice/ObjectFactoryF.h" "$(includedir)/Ice/ObjectFactoryManagerF.h" "$(includedir)/Ice/Buffer.h" "$(includedir)/Ice/Protocol.h" "$(includedir)/Ice/SlicedDataF.h" "$(includedir)/Ice/UserExceptionFactory.h" "$(includedir)/Ice/FactoryTable.h" "$(includedir)/Ice/ObserverHelper.h" "$(includedir)/Ice/Instrumentation.h" "$(includedir)/Ice/ThreadPoolF.h" "$(includedir)/Ice/Connection.h" "$(includedir)/Ice/Endpoint.h" ../IceSSL/Util.h ../IceSSL/RFC2253.h
+ConnectorI$(OBJEXT): ConnectorI.cpp ../IceSSL/ConnectorI.h ../Ice/TransceiverF.h "$(includedir)/IceUtil/Shared.h" "$(includedir)/IceUtil/Config.h" "$(includedir)/Ice/Handle.h" "$(includedir)/IceUtil/Handle.h" "$(includedir)/IceUtil/Exception.h" "$(includedir)/Ice/Config.h" ../Ice/Connector.h ../Ice/ConnectorF.h ../Ice/Network.h ../Ice/NetworkF.h "$(includedir)/Ice/PropertiesF.h" "$(includedir)/Ice/ProxyF.h" "$(includedir)/Ice/ProxyHandle.h" "$(includedir)/Ice/ObjectF.h" "$(includedir)/Ice/Exception.h" "$(includedir)/Ice/Format.h" "$(includedir)/Ice/StreamF.h" "$(includedir)/Ice/LocalObject.h" "$(includedir)/Ice/LocalObjectF.h" "$(includedir)/Ice/StreamHelpers.h" "$(includedir)/IceUtil/ScopedArray.h" "$(includedir)/IceUtil/Iterator.h" "$(includedir)/Ice/Proxy.h" "$(includedir)/IceUtil/Mutex.h" "$(includedir)/IceUtil/Lock.h" "$(includedir)/IceUtil/ThreadException.h" "$(includedir)/IceUtil/Time.h" "$(includedir)/IceUtil/MutexProtocol.h" "$(includedir)/Ice/ProxyFactoryF.h" "$(includedir)/Ice/ConnectionIF.h" "$(includedir)/Ice/RequestHandlerF.h" "$(includedir)/Ice/EndpointF.h" "$(includedir)/IceUtil/Optional.h" "$(includedir)/IceUtil/UndefSysMacros.h" "$(includedir)/Ice/EndpointTypes.h" "$(includedir)/Ice/ObjectAdapterF.h" "$(includedir)/Ice/ReferenceF.h" "$(includedir)/Ice/OutgoingAsync.h" "$(includedir)/IceUtil/Monitor.h" "$(includedir)/IceUtil/Cond.h" "$(includedir)/IceUtil/Timer.h" "$(includedir)/IceUtil/Thread.h" "$(includedir)/IceUtil/UniquePtr.h" "$(includedir)/Ice/OutgoingAsyncF.h" "$(includedir)/Ice/InstanceF.h" "$(includedir)/Ice/CommunicatorF.h" "$(includedir)/Ice/Current.h" "$(includedir)/Ice/ConnectionF.h" "$(includedir)/Ice/Identity.h" "$(includedir)/Ice/Version.h" "$(includedir)/Ice/BasicStream.h" "$(includedir)/IceUtil/StringConverter.h" "$(includedir)/Ice/Object.h" "$(includedir)/Ice/IncomingAsyncF.h" "$(includedir)/Ice/ObjectFactoryF.h" "$(includedir)/Ice/ObjectFactoryManagerF.h" "$(includedir)/Ice/Buffer.h" "$(includedir)/Ice/Protocol.h" "$(includedir)/Ice/SlicedDataF.h" "$(includedir)/Ice/UserExceptionFactory.h" "$(includedir)/Ice/FactoryTable.h" "$(includedir)/Ice/ObserverHelper.h" "$(includedir)/Ice/Instrumentation.h" "$(includedir)/Ice/ThreadPoolF.h" "$(includedir)/Ice/LoggerF.h" ../IceSSL/InstanceF.h ../IceSSL/Instance.h ../Ice/ProtocolInstance.h ../Ice/ProtocolInstanceF.h ../Ice/EndpointIF.h ../Ice/IPEndpointIF.h ../IceSSL/SSLEngineF.h "$(includedir)/IceSSL/Plugin.h" "$(includedir)/Ice/Plugin.h" "$(includedir)/Ice/BuiltinSequences.h" "$(includedir)/IceSSL/Config.h" "$(includedir)/IceSSL/ConnectionInfo.h" "$(includedir)/Ice/Connection.h" "$(includedir)/Ice/Endpoint.h" ../IceSSL/OpenSSLTransceiverI.h ../Ice/Transceiver.h ../IceSSL/SecureTransportTransceiverI.h ../IceSSL/SChannelTransceiverI.h ../IceSSL/EndpointI.h ../Ice/IPEndpointI.h ../Ice/EndpointI.h ../Ice/AcceptorF.h ../Ice/EndpointFactory.h ../Ice/EndpointFactoryF.h "$(includedir)/IceSSL/EndpointInfo.h" ../IceSSL/Util.h "$(includedir)/Ice/Communicator.h" "$(includedir)/Ice/GCObject.h" "$(includedir)/IceUtil/MutexPtrLock.h" "$(includedir)/Ice/Outgoing.h" "$(includedir)/Ice/Incoming.h" "$(includedir)/Ice/ServantLocatorF.h" "$(includedir)/Ice/ServantManagerF.h" "$(includedir)/Ice/ResponseHandlerF.h" "$(includedir)/Ice/IncomingAsync.h" "$(includedir)/Ice/InstrumentationF.h" "$(includedir)/Ice/RouterF.h" "$(includedir)/Ice/LocatorF.h" "$(includedir)/Ice/PluginF.h" "$(includedir)/Ice/ImplicitContextF.h" "$(includedir)/Ice/Properties.h" "$(includedir)/Ice/PropertiesAdmin.h" "$(includedir)/Ice/LocalException.h" "$(includedir)/Ice/LoggerUtil.h" "$(includedir)/Ice/Logger.h"
EndpointInfo$(OBJEXT): EndpointInfo.cpp "$(includedir)/IceSSL/EndpointInfo.h" "$(includedir)/Ice/ProxyF.h" "$(includedir)/IceUtil/Shared.h" "$(includedir)/IceUtil/Config.h" "$(includedir)/Ice/Config.h" "$(includedir)/Ice/ProxyHandle.h" "$(includedir)/IceUtil/Handle.h" "$(includedir)/IceUtil/Exception.h" "$(includedir)/Ice/ObjectF.h" "$(includedir)/Ice/Handle.h" "$(includedir)/Ice/Exception.h" "$(includedir)/Ice/Format.h" "$(includedir)/Ice/StreamF.h" "$(includedir)/Ice/LocalObject.h" "$(includedir)/Ice/LocalObjectF.h" "$(includedir)/Ice/StreamHelpers.h" "$(includedir)/IceUtil/ScopedArray.h" "$(includedir)/IceUtil/Iterator.h" "$(includedir)/IceUtil/Optional.h" "$(includedir)/Ice/Endpoint.h" "$(includedir)/Ice/Version.h" "$(includedir)/IceUtil/UndefSysMacros.h" "$(includedir)/Ice/BuiltinSequences.h" "$(includedir)/Ice/EndpointF.h" "$(includedir)/Ice/BasicStream.h" "$(includedir)/IceUtil/StringConverter.h" "$(includedir)/Ice/InstanceF.h" "$(includedir)/Ice/Object.h" "$(includedir)/IceUtil/Mutex.h" "$(includedir)/IceUtil/Lock.h" "$(includedir)/IceUtil/ThreadException.h" "$(includedir)/IceUtil/Time.h" "$(includedir)/IceUtil/MutexProtocol.h" "$(includedir)/Ice/IncomingAsyncF.h" "$(includedir)/Ice/Current.h" "$(includedir)/Ice/ObjectAdapterF.h" "$(includedir)/Ice/ConnectionF.h" "$(includedir)/Ice/Identity.h" "$(includedir)/Ice/ObjectFactoryF.h" "$(includedir)/Ice/ObjectFactoryManagerF.h" "$(includedir)/Ice/Buffer.h" "$(includedir)/Ice/Protocol.h" "$(includedir)/Ice/SlicedDataF.h" "$(includedir)/Ice/UserExceptionFactory.h" "$(includedir)/Ice/FactoryTable.h" "$(includedir)/IceUtil/DisableWarnings.h"
ConnectionInfo$(OBJEXT): ConnectionInfo.cpp "$(includedir)/IceSSL/ConnectionInfo.h" "$(includedir)/Ice/ProxyF.h" "$(includedir)/IceUtil/Shared.h" "$(includedir)/IceUtil/Config.h" "$(includedir)/Ice/Config.h" "$(includedir)/Ice/ProxyHandle.h" "$(includedir)/IceUtil/Handle.h" "$(includedir)/IceUtil/Exception.h" "$(includedir)/Ice/ObjectF.h" "$(includedir)/Ice/Handle.h" "$(includedir)/Ice/Exception.h" "$(includedir)/Ice/Format.h" "$(includedir)/Ice/StreamF.h" "$(includedir)/Ice/LocalObject.h" "$(includedir)/Ice/LocalObjectF.h" "$(includedir)/Ice/StreamHelpers.h" "$(includedir)/IceUtil/ScopedArray.h" "$(includedir)/IceUtil/Iterator.h" "$(includedir)/Ice/Proxy.h" "$(includedir)/IceUtil/Mutex.h" "$(includedir)/IceUtil/Lock.h" "$(includedir)/IceUtil/ThreadException.h" "$(includedir)/IceUtil/Time.h" "$(includedir)/IceUtil/MutexProtocol.h" "$(includedir)/Ice/ProxyFactoryF.h" "$(includedir)/Ice/ConnectionIF.h" "$(includedir)/Ice/RequestHandlerF.h" "$(includedir)/Ice/EndpointF.h" "$(includedir)/IceUtil/Optional.h" "$(includedir)/IceUtil/UndefSysMacros.h" "$(includedir)/Ice/EndpointTypes.h" "$(includedir)/Ice/ObjectAdapterF.h" "$(includedir)/Ice/ReferenceF.h" "$(includedir)/Ice/OutgoingAsync.h" "$(includedir)/IceUtil/Monitor.h" "$(includedir)/IceUtil/Cond.h" "$(includedir)/IceUtil/Timer.h" "$(includedir)/IceUtil/Thread.h" "$(includedir)/IceUtil/UniquePtr.h" "$(includedir)/Ice/OutgoingAsyncF.h" "$(includedir)/Ice/InstanceF.h" "$(includedir)/Ice/CommunicatorF.h" "$(includedir)/Ice/Current.h" "$(includedir)/Ice/ConnectionF.h" "$(includedir)/Ice/Identity.h" "$(includedir)/Ice/Version.h" "$(includedir)/Ice/BasicStream.h" "$(includedir)/IceUtil/StringConverter.h" "$(includedir)/Ice/Object.h" "$(includedir)/Ice/IncomingAsyncF.h" "$(includedir)/Ice/ObjectFactoryF.h" "$(includedir)/Ice/ObjectFactoryManagerF.h" "$(includedir)/Ice/Buffer.h" "$(includedir)/Ice/Protocol.h" "$(includedir)/Ice/SlicedDataF.h" "$(includedir)/Ice/UserExceptionFactory.h" "$(includedir)/Ice/FactoryTable.h" "$(includedir)/Ice/ObserverHelper.h" "$(includedir)/Ice/Instrumentation.h" "$(includedir)/Ice/ThreadPoolF.h" "$(includedir)/Ice/Connection.h" "$(includedir)/Ice/Endpoint.h" "$(includedir)/Ice/BuiltinSequences.h" "$(includedir)/IceUtil/DisableWarnings.h"
-EndpointI$(OBJEXT): EndpointI.cpp ../IceSSL/EndpointI.h ../Ice/IPEndpointI.h "$(includedir)/IceUtil/Config.h" "$(includedir)/IceUtil/Shared.h" "$(includedir)/IceUtil/Thread.h" "$(includedir)/IceUtil/Handle.h" "$(includedir)/IceUtil/Exception.h" "$(includedir)/IceUtil/Mutex.h" "$(includedir)/IceUtil/Lock.h" "$(includedir)/IceUtil/ThreadException.h" "$(includedir)/IceUtil/Time.h" "$(includedir)/IceUtil/MutexProtocol.h" "$(includedir)/IceUtil/Monitor.h" "$(includedir)/IceUtil/Cond.h" ../Ice/IPEndpointIF.h "$(includedir)/Ice/Handle.h" "$(includedir)/Ice/Config.h" ../Ice/EndpointI.h ../Ice/EndpointIF.h "$(includedir)/Ice/Endpoint.h" "$(includedir)/Ice/ProxyF.h" "$(includedir)/Ice/ProxyHandle.h" "$(includedir)/Ice/ObjectF.h" "$(includedir)/Ice/Exception.h" "$(includedir)/Ice/Format.h" "$(includedir)/Ice/StreamF.h" "$(includedir)/Ice/LocalObject.h" "$(includedir)/Ice/LocalObjectF.h" "$(includedir)/Ice/StreamHelpers.h" "$(includedir)/IceUtil/ScopedArray.h" "$(includedir)/IceUtil/Iterator.h" "$(includedir)/IceUtil/Optional.h" "$(includedir)/Ice/Version.h" "$(includedir)/IceUtil/UndefSysMacros.h" "$(includedir)/Ice/BuiltinSequences.h" "$(includedir)/Ice/EndpointF.h" "$(includedir)/Ice/EndpointTypes.h" ../Ice/TransceiverF.h ../Ice/ConnectorF.h ../Ice/AcceptorF.h ../Ice/Network.h ../Ice/NetworkF.h "$(includedir)/Ice/PropertiesF.h" "$(includedir)/Ice/Proxy.h" "$(includedir)/Ice/ProxyFactoryF.h" "$(includedir)/Ice/ConnectionIF.h" "$(includedir)/Ice/RequestHandlerF.h" "$(includedir)/Ice/ObjectAdapterF.h" "$(includedir)/Ice/ReferenceF.h" "$(includedir)/Ice/OutgoingAsync.h" "$(includedir)/IceUtil/Timer.h" "$(includedir)/IceUtil/UniquePtr.h" "$(includedir)/Ice/OutgoingAsyncF.h" "$(includedir)/Ice/InstanceF.h" "$(includedir)/Ice/CommunicatorF.h" "$(includedir)/Ice/Current.h" "$(includedir)/Ice/ConnectionF.h" "$(includedir)/Ice/Identity.h" "$(includedir)/Ice/BasicStream.h" "$(includedir)/IceUtil/StringConverter.h" "$(includedir)/Ice/Object.h" "$(includedir)/Ice/IncomingAsyncF.h" "$(includedir)/Ice/ObjectFactoryF.h" "$(includedir)/Ice/ObjectFactoryManagerF.h" "$(includedir)/Ice/Buffer.h" "$(includedir)/Ice/Protocol.h" "$(includedir)/Ice/SlicedDataF.h" "$(includedir)/Ice/UserExceptionFactory.h" "$(includedir)/Ice/FactoryTable.h" "$(includedir)/Ice/ObserverHelper.h" "$(includedir)/Ice/Instrumentation.h" "$(includedir)/Ice/ThreadPoolF.h" "$(includedir)/Ice/LoggerF.h" ../Ice/ProtocolInstanceF.h ../Ice/EndpointFactory.h ../Ice/EndpointFactoryF.h ../IceSSL/InstanceF.h "$(includedir)/IceSSL/EndpointInfo.h" ../IceSSL/AcceptorI.h ../Ice/Acceptor.h ../IceSSL/ConnectorI.h ../Ice/Connector.h ../IceSSL/TransceiverI.h "$(includedir)/IceSSL/Config.h" "$(includedir)/IceSSL/Plugin.h" "$(includedir)/Ice/Plugin.h" "$(includedir)/IceSSL/ConnectionInfo.h" "$(includedir)/Ice/Connection.h" ../IceSSL/SSLEngineF.h ../Ice/Transceiver.h ../IceSSL/Instance.h ../Ice/ProtocolInstance.h "$(includedir)/Ice/LocalException.h" ../Ice/DefaultsAndOverrides.h ../Ice/DefaultsAndOverridesF.h ../Ice/HashUtil.h
-Instance$(OBJEXT): Instance.cpp "$(includedir)/IceUtil/Config.h" ../IceSSL/Instance.h ../IceSSL/InstanceF.h "$(includedir)/IceUtil/Shared.h" "$(includedir)/Ice/Handle.h" "$(includedir)/IceUtil/Handle.h" "$(includedir)/IceUtil/Exception.h" "$(includedir)/Ice/Config.h" ../Ice/ProtocolInstance.h ../Ice/ProtocolInstanceF.h "$(includedir)/Ice/CommunicatorF.h" "$(includedir)/Ice/ProxyF.h" "$(includedir)/Ice/ProxyHandle.h" "$(includedir)/Ice/ObjectF.h" "$(includedir)/Ice/Exception.h" "$(includedir)/Ice/Format.h" "$(includedir)/Ice/StreamF.h" "$(includedir)/Ice/LocalObject.h" "$(includedir)/Ice/LocalObjectF.h" "$(includedir)/Ice/StreamHelpers.h" "$(includedir)/IceUtil/ScopedArray.h" "$(includedir)/IceUtil/Iterator.h" "$(includedir)/IceUtil/Optional.h" "$(includedir)/IceUtil/UndefSysMacros.h" "$(includedir)/Ice/PropertiesF.h" "$(includedir)/Ice/Proxy.h" "$(includedir)/IceUtil/Mutex.h" "$(includedir)/IceUtil/Lock.h" "$(includedir)/IceUtil/ThreadException.h" "$(includedir)/IceUtil/Time.h" "$(includedir)/IceUtil/MutexProtocol.h" "$(includedir)/Ice/ProxyFactoryF.h" "$(includedir)/Ice/ConnectionIF.h" "$(includedir)/Ice/RequestHandlerF.h" "$(includedir)/Ice/EndpointF.h" "$(includedir)/Ice/EndpointTypes.h" "$(includedir)/Ice/ObjectAdapterF.h" "$(includedir)/Ice/ReferenceF.h" "$(includedir)/Ice/OutgoingAsync.h" "$(includedir)/IceUtil/Monitor.h" "$(includedir)/IceUtil/Cond.h" "$(includedir)/IceUtil/Timer.h" "$(includedir)/IceUtil/Thread.h" "$(includedir)/IceUtil/UniquePtr.h" "$(includedir)/Ice/OutgoingAsyncF.h" "$(includedir)/Ice/InstanceF.h" "$(includedir)/Ice/Current.h" "$(includedir)/Ice/ConnectionF.h" "$(includedir)/Ice/Identity.h" "$(includedir)/Ice/Version.h" "$(includedir)/Ice/BasicStream.h" "$(includedir)/IceUtil/StringConverter.h" "$(includedir)/Ice/Object.h" "$(includedir)/Ice/IncomingAsyncF.h" "$(includedir)/Ice/ObjectFactoryF.h" "$(includedir)/Ice/ObjectFactoryManagerF.h" "$(includedir)/Ice/Buffer.h" "$(includedir)/Ice/Protocol.h" "$(includedir)/Ice/SlicedDataF.h" "$(includedir)/Ice/UserExceptionFactory.h" "$(includedir)/Ice/FactoryTable.h" "$(includedir)/Ice/ObserverHelper.h" "$(includedir)/Ice/Instrumentation.h" "$(includedir)/Ice/ThreadPoolF.h" "$(includedir)/Ice/LoggerF.h" ../Ice/EndpointIF.h ../Ice/ConnectorF.h ../Ice/IPEndpointIF.h ../Ice/NetworkF.h ../IceSSL/SSLEngineF.h "$(includedir)/IceSSL/Plugin.h" "$(includedir)/Ice/Plugin.h" "$(includedir)/Ice/BuiltinSequences.h" "$(includedir)/IceSSL/Config.h" "$(includedir)/IceSSL/ConnectionInfo.h" "$(includedir)/Ice/Connection.h" "$(includedir)/Ice/Endpoint.h" ../IceSSL/SSLEngine.h ../IceSSL/Util.h ../IceSSL/UtilF.h ../Ice/Network.h ../IceSSL/TrustManagerF.h "$(includedir)/Ice/Properties.h" "$(includedir)/Ice/GCObject.h" "$(includedir)/IceUtil/MutexPtrLock.h" "$(includedir)/Ice/Outgoing.h" "$(includedir)/Ice/Incoming.h" "$(includedir)/Ice/ServantLocatorF.h" "$(includedir)/Ice/ServantManagerF.h" "$(includedir)/Ice/ResponseHandlerF.h" "$(includedir)/Ice/IncomingAsync.h" "$(includedir)/Ice/PropertiesAdmin.h"
-PluginI$(OBJEXT): PluginI.cpp ../IceSSL/PluginI.h "$(includedir)/IceSSL/Plugin.h" "$(includedir)/IceUtil/Time.h" "$(includedir)/IceUtil/Config.h" "$(includedir)/Ice/Plugin.h" "$(includedir)/Ice/ProxyF.h" "$(includedir)/IceUtil/Shared.h" "$(includedir)/Ice/Config.h" "$(includedir)/Ice/ProxyHandle.h" "$(includedir)/IceUtil/Handle.h" "$(includedir)/IceUtil/Exception.h" "$(includedir)/Ice/ObjectF.h" "$(includedir)/Ice/Handle.h" "$(includedir)/Ice/Exception.h" "$(includedir)/Ice/Format.h" "$(includedir)/Ice/StreamF.h" "$(includedir)/Ice/LocalObject.h" "$(includedir)/Ice/LocalObjectF.h" "$(includedir)/Ice/StreamHelpers.h" "$(includedir)/IceUtil/ScopedArray.h" "$(includedir)/IceUtil/Iterator.h" "$(includedir)/IceUtil/Optional.h" "$(includedir)/Ice/LoggerF.h" "$(includedir)/IceUtil/UndefSysMacros.h" "$(includedir)/Ice/BuiltinSequences.h" "$(includedir)/IceSSL/Config.h" "$(includedir)/IceSSL/ConnectionInfo.h" "$(includedir)/Ice/Proxy.h" "$(includedir)/IceUtil/Mutex.h" "$(includedir)/IceUtil/Lock.h" "$(includedir)/IceUtil/ThreadException.h" "$(includedir)/IceUtil/MutexProtocol.h" "$(includedir)/Ice/ProxyFactoryF.h" "$(includedir)/Ice/ConnectionIF.h" "$(includedir)/Ice/RequestHandlerF.h" "$(includedir)/Ice/EndpointF.h" "$(includedir)/Ice/EndpointTypes.h" "$(includedir)/Ice/ObjectAdapterF.h" "$(includedir)/Ice/ReferenceF.h" "$(includedir)/Ice/OutgoingAsync.h" "$(includedir)/IceUtil/Monitor.h" "$(includedir)/IceUtil/Cond.h" "$(includedir)/IceUtil/Timer.h" "$(includedir)/IceUtil/Thread.h" "$(includedir)/IceUtil/UniquePtr.h" "$(includedir)/Ice/OutgoingAsyncF.h" "$(includedir)/Ice/InstanceF.h" "$(includedir)/Ice/CommunicatorF.h" "$(includedir)/Ice/Current.h" "$(includedir)/Ice/ConnectionF.h" "$(includedir)/Ice/Identity.h" "$(includedir)/Ice/Version.h" "$(includedir)/Ice/BasicStream.h" "$(includedir)/IceUtil/StringConverter.h" "$(includedir)/Ice/Object.h" "$(includedir)/Ice/IncomingAsyncF.h" "$(includedir)/Ice/ObjectFactoryF.h" "$(includedir)/Ice/ObjectFactoryManagerF.h" "$(includedir)/Ice/Buffer.h" "$(includedir)/Ice/Protocol.h" "$(includedir)/Ice/SlicedDataF.h" "$(includedir)/Ice/UserExceptionFactory.h" "$(includedir)/Ice/FactoryTable.h" "$(includedir)/Ice/ObserverHelper.h" "$(includedir)/Ice/Instrumentation.h" "$(includedir)/Ice/ThreadPoolF.h" "$(includedir)/Ice/Connection.h" "$(includedir)/Ice/Endpoint.h" ../IceSSL/SSLEngineF.h ../IceSSL/Instance.h ../IceSSL/InstanceF.h ../Ice/ProtocolInstance.h ../Ice/ProtocolInstanceF.h "$(includedir)/Ice/PropertiesF.h" ../Ice/EndpointIF.h ../Ice/ConnectorF.h ../Ice/IPEndpointIF.h ../Ice/NetworkF.h ../IceSSL/TransceiverI.h ../Ice/Transceiver.h ../Ice/TransceiverF.h ../Ice/Network.h ../IceSSL/SSLEngine.h ../IceSSL/Util.h ../IceSSL/UtilF.h ../IceSSL/TrustManagerF.h ../IceSSL/EndpointI.h ../Ice/IPEndpointI.h ../Ice/EndpointI.h ../Ice/AcceptorF.h ../Ice/EndpointFactory.h ../Ice/EndpointFactoryF.h "$(includedir)/IceSSL/EndpointInfo.h" ../Ice/ProtocolPluginFacade.h ../Ice/ProtocolPluginFacadeF.h "$(includedir)/Ice/LocalException.h"
-TransceiverI$(OBJEXT): TransceiverI.cpp ../IceSSL/TransceiverI.h "$(includedir)/IceSSL/Config.h" "$(includedir)/Ice/Config.h" "$(includedir)/IceUtil/Config.h" ../IceSSL/InstanceF.h "$(includedir)/IceUtil/Shared.h" "$(includedir)/Ice/Handle.h" "$(includedir)/IceUtil/Handle.h" "$(includedir)/IceUtil/Exception.h" "$(includedir)/IceSSL/Plugin.h" "$(includedir)/IceUtil/Time.h" "$(includedir)/Ice/Plugin.h" "$(includedir)/Ice/ProxyF.h" "$(includedir)/Ice/ProxyHandle.h" "$(includedir)/Ice/ObjectF.h" "$(includedir)/Ice/Exception.h" "$(includedir)/Ice/Format.h" "$(includedir)/Ice/StreamF.h" "$(includedir)/Ice/LocalObject.h" "$(includedir)/Ice/LocalObjectF.h" "$(includedir)/Ice/StreamHelpers.h" "$(includedir)/IceUtil/ScopedArray.h" "$(includedir)/IceUtil/Iterator.h" "$(includedir)/IceUtil/Optional.h" "$(includedir)/Ice/LoggerF.h" "$(includedir)/IceUtil/UndefSysMacros.h" "$(includedir)/Ice/BuiltinSequences.h" "$(includedir)/IceSSL/ConnectionInfo.h" "$(includedir)/Ice/Proxy.h" "$(includedir)/IceUtil/Mutex.h" "$(includedir)/IceUtil/Lock.h" "$(includedir)/IceUtil/ThreadException.h" "$(includedir)/IceUtil/MutexProtocol.h" "$(includedir)/Ice/ProxyFactoryF.h" "$(includedir)/Ice/ConnectionIF.h" "$(includedir)/Ice/RequestHandlerF.h" "$(includedir)/Ice/EndpointF.h" "$(includedir)/Ice/EndpointTypes.h" "$(includedir)/Ice/ObjectAdapterF.h" "$(includedir)/Ice/ReferenceF.h" "$(includedir)/Ice/OutgoingAsync.h" "$(includedir)/IceUtil/Monitor.h" "$(includedir)/IceUtil/Cond.h" "$(includedir)/IceUtil/Timer.h" "$(includedir)/IceUtil/Thread.h" "$(includedir)/IceUtil/UniquePtr.h" "$(includedir)/Ice/OutgoingAsyncF.h" "$(includedir)/Ice/InstanceF.h" "$(includedir)/Ice/CommunicatorF.h" "$(includedir)/Ice/Current.h" "$(includedir)/Ice/ConnectionF.h" "$(includedir)/Ice/Identity.h" "$(includedir)/Ice/Version.h" "$(includedir)/Ice/BasicStream.h" "$(includedir)/IceUtil/StringConverter.h" "$(includedir)/Ice/Object.h" "$(includedir)/Ice/IncomingAsyncF.h" "$(includedir)/Ice/ObjectFactoryF.h" "$(includedir)/Ice/ObjectFactoryManagerF.h" "$(includedir)/Ice/Buffer.h" "$(includedir)/Ice/Protocol.h" "$(includedir)/Ice/SlicedDataF.h" "$(includedir)/Ice/UserExceptionFactory.h" "$(includedir)/Ice/FactoryTable.h" "$(includedir)/Ice/ObserverHelper.h" "$(includedir)/Ice/Instrumentation.h" "$(includedir)/Ice/ThreadPoolF.h" "$(includedir)/Ice/Connection.h" "$(includedir)/Ice/Endpoint.h" ../IceSSL/SSLEngineF.h ../Ice/Transceiver.h ../Ice/TransceiverF.h ../Ice/Network.h ../Ice/NetworkF.h "$(includedir)/Ice/PropertiesF.h" "$(includedir)/IceUtil/MutexPtrLock.h" ../IceSSL/Instance.h ../Ice/ProtocolInstance.h ../Ice/ProtocolInstanceF.h ../Ice/EndpointIF.h ../Ice/ConnectorF.h ../Ice/IPEndpointIF.h ../IceSSL/SSLEngine.h ../IceSSL/Util.h ../IceSSL/UtilF.h ../IceSSL/TrustManagerF.h "$(includedir)/Ice/Communicator.h" "$(includedir)/Ice/GCObject.h" "$(includedir)/Ice/Outgoing.h" "$(includedir)/Ice/Incoming.h" "$(includedir)/Ice/ServantLocatorF.h" "$(includedir)/Ice/ServantManagerF.h" "$(includedir)/Ice/ResponseHandlerF.h" "$(includedir)/Ice/IncomingAsync.h" "$(includedir)/Ice/InstrumentationF.h" "$(includedir)/Ice/RouterF.h" "$(includedir)/Ice/LocatorF.h" "$(includedir)/Ice/PluginF.h" "$(includedir)/Ice/ImplicitContextF.h" "$(includedir)/Ice/Properties.h" "$(includedir)/Ice/PropertiesAdmin.h" "$(includedir)/Ice/LoggerUtil.h" "$(includedir)/Ice/Logger.h" "$(includedir)/Ice/LocalException.h" "$(includedir)/IceUtil/DisableWarnings.h"
-SecureTransportTransceiverI$(OBJEXT): SecureTransportTransceiverI.cpp ../IceSSL/SecureTransportTransceiverI.h "$(includedir)/IceSSL/Config.h" "$(includedir)/Ice/Config.h" "$(includedir)/IceUtil/Config.h" ../IceSSL/InstanceF.h "$(includedir)/IceUtil/Shared.h" "$(includedir)/Ice/Handle.h" "$(includedir)/IceUtil/Handle.h" "$(includedir)/IceUtil/Exception.h" ../IceSSL/SSLEngineF.h "$(includedir)/IceSSL/Plugin.h" "$(includedir)/IceUtil/Time.h" "$(includedir)/Ice/Plugin.h" "$(includedir)/Ice/ProxyF.h" "$(includedir)/Ice/ProxyHandle.h" "$(includedir)/Ice/ObjectF.h" "$(includedir)/Ice/Exception.h" "$(includedir)/Ice/Format.h" "$(includedir)/Ice/StreamF.h" "$(includedir)/Ice/LocalObject.h" "$(includedir)/Ice/LocalObjectF.h" "$(includedir)/Ice/StreamHelpers.h" "$(includedir)/IceUtil/ScopedArray.h" "$(includedir)/IceUtil/Iterator.h" "$(includedir)/IceUtil/Optional.h" "$(includedir)/Ice/LoggerF.h" "$(includedir)/IceUtil/UndefSysMacros.h" "$(includedir)/Ice/BuiltinSequences.h" "$(includedir)/IceSSL/ConnectionInfo.h" "$(includedir)/Ice/Proxy.h" "$(includedir)/IceUtil/Mutex.h" "$(includedir)/IceUtil/Lock.h" "$(includedir)/IceUtil/ThreadException.h" "$(includedir)/IceUtil/MutexProtocol.h" "$(includedir)/Ice/ProxyFactoryF.h" "$(includedir)/Ice/ConnectionIF.h" "$(includedir)/Ice/RequestHandlerF.h" "$(includedir)/Ice/EndpointF.h" "$(includedir)/Ice/EndpointTypes.h" "$(includedir)/Ice/ObjectAdapterF.h" "$(includedir)/Ice/ReferenceF.h" "$(includedir)/Ice/OutgoingAsync.h" "$(includedir)/IceUtil/Monitor.h" "$(includedir)/IceUtil/Cond.h" "$(includedir)/IceUtil/Timer.h" "$(includedir)/IceUtil/Thread.h" "$(includedir)/IceUtil/UniquePtr.h" "$(includedir)/Ice/OutgoingAsyncF.h" "$(includedir)/Ice/InstanceF.h" "$(includedir)/Ice/CommunicatorF.h" "$(includedir)/Ice/Current.h" "$(includedir)/Ice/ConnectionF.h" "$(includedir)/Ice/Identity.h" "$(includedir)/Ice/Version.h" "$(includedir)/Ice/BasicStream.h" "$(includedir)/IceUtil/StringConverter.h" "$(includedir)/Ice/Object.h" "$(includedir)/Ice/IncomingAsyncF.h" "$(includedir)/Ice/ObjectFactoryF.h" "$(includedir)/Ice/ObjectFactoryManagerF.h" "$(includedir)/Ice/Buffer.h" "$(includedir)/Ice/Protocol.h" "$(includedir)/Ice/SlicedDataF.h" "$(includedir)/Ice/UserExceptionFactory.h" "$(includedir)/Ice/FactoryTable.h" "$(includedir)/Ice/ObserverHelper.h" "$(includedir)/Ice/Instrumentation.h" "$(includedir)/Ice/ThreadPoolF.h" "$(includedir)/Ice/Connection.h" "$(includedir)/Ice/Endpoint.h" ../Ice/Transceiver.h ../Ice/TransceiverF.h ../Ice/Network.h ../Ice/NetworkF.h "$(includedir)/Ice/PropertiesF.h" "$(includedir)/IceUtil/FileUtil.h" "$(includedir)/IceUtil/MutexPtrLock.h" ../IceSSL/Instance.h ../Ice/ProtocolInstance.h ../Ice/ProtocolInstanceF.h ../Ice/EndpointIF.h ../Ice/ConnectorF.h ../Ice/IPEndpointIF.h ../IceSSL/SSLEngine.h ../IceSSL/Util.h ../IceSSL/UtilF.h ../IceSSL/TrustManagerF.h "$(includedir)/Ice/Communicator.h" "$(includedir)/Ice/GCObject.h" "$(includedir)/Ice/Outgoing.h" "$(includedir)/Ice/Incoming.h" "$(includedir)/Ice/ServantLocatorF.h" "$(includedir)/Ice/ServantManagerF.h" "$(includedir)/Ice/ResponseHandlerF.h" "$(includedir)/Ice/IncomingAsync.h" "$(includedir)/Ice/InstrumentationF.h" "$(includedir)/Ice/RouterF.h" "$(includedir)/Ice/LocatorF.h" "$(includedir)/Ice/PluginF.h" "$(includedir)/Ice/ImplicitContextF.h" "$(includedir)/Ice/Properties.h" "$(includedir)/Ice/PropertiesAdmin.h" "$(includedir)/Ice/LoggerUtil.h" "$(includedir)/Ice/Logger.h" "$(includedir)/Ice/LocalException.h"
-Util$(OBJEXT): Util.cpp "$(includedir)/IceUtil/Config.h" ../IceSSL/Util.h "$(includedir)/IceSSL/Config.h" "$(includedir)/Ice/Config.h" ../IceSSL/UtilF.h "$(includedir)/IceUtil/Shared.h" "$(includedir)/Ice/Handle.h" "$(includedir)/IceUtil/Handle.h" "$(includedir)/IceUtil/Exception.h" ../Ice/Network.h ../Ice/NetworkF.h "$(includedir)/Ice/PropertiesF.h" "$(includedir)/Ice/ProxyF.h" "$(includedir)/Ice/ProxyHandle.h" "$(includedir)/Ice/ObjectF.h" "$(includedir)/Ice/Exception.h" "$(includedir)/Ice/Format.h" "$(includedir)/Ice/StreamF.h" "$(includedir)/Ice/LocalObject.h" "$(includedir)/Ice/LocalObjectF.h" "$(includedir)/Ice/StreamHelpers.h" "$(includedir)/IceUtil/ScopedArray.h" "$(includedir)/IceUtil/Iterator.h" "$(includedir)/Ice/Proxy.h" "$(includedir)/IceUtil/Mutex.h" "$(includedir)/IceUtil/Lock.h" "$(includedir)/IceUtil/ThreadException.h" "$(includedir)/IceUtil/Time.h" "$(includedir)/IceUtil/MutexProtocol.h" "$(includedir)/Ice/ProxyFactoryF.h" "$(includedir)/Ice/ConnectionIF.h" "$(includedir)/Ice/RequestHandlerF.h" "$(includedir)/Ice/EndpointF.h" "$(includedir)/IceUtil/Optional.h" "$(includedir)/IceUtil/UndefSysMacros.h" "$(includedir)/Ice/EndpointTypes.h" "$(includedir)/Ice/ObjectAdapterF.h" "$(includedir)/Ice/ReferenceF.h" "$(includedir)/Ice/OutgoingAsync.h" "$(includedir)/IceUtil/Monitor.h" "$(includedir)/IceUtil/Cond.h" "$(includedir)/IceUtil/Timer.h" "$(includedir)/IceUtil/Thread.h" "$(includedir)/IceUtil/UniquePtr.h" "$(includedir)/Ice/OutgoingAsyncF.h" "$(includedir)/Ice/InstanceF.h" "$(includedir)/Ice/CommunicatorF.h" "$(includedir)/Ice/Current.h" "$(includedir)/Ice/ConnectionF.h" "$(includedir)/Ice/Identity.h" "$(includedir)/Ice/Version.h" "$(includedir)/Ice/BasicStream.h" "$(includedir)/IceUtil/StringConverter.h" "$(includedir)/Ice/Object.h" "$(includedir)/Ice/IncomingAsyncF.h" "$(includedir)/Ice/ObjectFactoryF.h" "$(includedir)/Ice/ObjectFactoryManagerF.h" "$(includedir)/Ice/Buffer.h" "$(includedir)/Ice/Protocol.h" "$(includedir)/Ice/SlicedDataF.h" "$(includedir)/Ice/UserExceptionFactory.h" "$(includedir)/Ice/FactoryTable.h" "$(includedir)/Ice/ObserverHelper.h" "$(includedir)/Ice/Instrumentation.h" "$(includedir)/Ice/ThreadPoolF.h" "$(includedir)/Ice/LoggerF.h" "$(includedir)/IceSSL/Plugin.h" "$(includedir)/Ice/Plugin.h" "$(includedir)/Ice/BuiltinSequences.h" "$(includedir)/IceSSL/ConnectionInfo.h" "$(includedir)/Ice/Connection.h" "$(includedir)/Ice/Endpoint.h" "$(includedir)/IceUtil/FileUtil.h" "$(includedir)/Ice/LocalException.h"
+EndpointI$(OBJEXT): EndpointI.cpp ../IceSSL/EndpointI.h ../Ice/IPEndpointI.h "$(includedir)/IceUtil/Config.h" "$(includedir)/IceUtil/Shared.h" "$(includedir)/IceUtil/Thread.h" "$(includedir)/IceUtil/Handle.h" "$(includedir)/IceUtil/Exception.h" "$(includedir)/IceUtil/Mutex.h" "$(includedir)/IceUtil/Lock.h" "$(includedir)/IceUtil/ThreadException.h" "$(includedir)/IceUtil/Time.h" "$(includedir)/IceUtil/MutexProtocol.h" "$(includedir)/IceUtil/Monitor.h" "$(includedir)/IceUtil/Cond.h" ../Ice/IPEndpointIF.h "$(includedir)/Ice/Handle.h" "$(includedir)/Ice/Config.h" ../Ice/EndpointI.h ../Ice/EndpointIF.h "$(includedir)/Ice/Endpoint.h" "$(includedir)/Ice/ProxyF.h" "$(includedir)/Ice/ProxyHandle.h" "$(includedir)/Ice/ObjectF.h" "$(includedir)/Ice/Exception.h" "$(includedir)/Ice/Format.h" "$(includedir)/Ice/StreamF.h" "$(includedir)/Ice/LocalObject.h" "$(includedir)/Ice/LocalObjectF.h" "$(includedir)/Ice/StreamHelpers.h" "$(includedir)/IceUtil/ScopedArray.h" "$(includedir)/IceUtil/Iterator.h" "$(includedir)/IceUtil/Optional.h" "$(includedir)/Ice/Version.h" "$(includedir)/IceUtil/UndefSysMacros.h" "$(includedir)/Ice/BuiltinSequences.h" "$(includedir)/Ice/EndpointF.h" "$(includedir)/Ice/EndpointTypes.h" ../Ice/TransceiverF.h ../Ice/ConnectorF.h ../Ice/AcceptorF.h ../Ice/Network.h ../Ice/NetworkF.h "$(includedir)/Ice/PropertiesF.h" "$(includedir)/Ice/Proxy.h" "$(includedir)/Ice/ProxyFactoryF.h" "$(includedir)/Ice/ConnectionIF.h" "$(includedir)/Ice/RequestHandlerF.h" "$(includedir)/Ice/ObjectAdapterF.h" "$(includedir)/Ice/ReferenceF.h" "$(includedir)/Ice/OutgoingAsync.h" "$(includedir)/IceUtil/Timer.h" "$(includedir)/IceUtil/UniquePtr.h" "$(includedir)/Ice/OutgoingAsyncF.h" "$(includedir)/Ice/InstanceF.h" "$(includedir)/Ice/CommunicatorF.h" "$(includedir)/Ice/Current.h" "$(includedir)/Ice/ConnectionF.h" "$(includedir)/Ice/Identity.h" "$(includedir)/Ice/BasicStream.h" "$(includedir)/IceUtil/StringConverter.h" "$(includedir)/Ice/Object.h" "$(includedir)/Ice/IncomingAsyncF.h" "$(includedir)/Ice/ObjectFactoryF.h" "$(includedir)/Ice/ObjectFactoryManagerF.h" "$(includedir)/Ice/Buffer.h" "$(includedir)/Ice/Protocol.h" "$(includedir)/Ice/SlicedDataF.h" "$(includedir)/Ice/UserExceptionFactory.h" "$(includedir)/Ice/FactoryTable.h" "$(includedir)/Ice/ObserverHelper.h" "$(includedir)/Ice/Instrumentation.h" "$(includedir)/Ice/ThreadPoolF.h" "$(includedir)/Ice/LoggerF.h" ../Ice/ProtocolInstanceF.h ../Ice/EndpointFactory.h ../Ice/EndpointFactoryF.h ../IceSSL/InstanceF.h "$(includedir)/IceSSL/EndpointInfo.h" ../IceSSL/AcceptorI.h ../Ice/Acceptor.h ../IceSSL/ConnectorI.h ../Ice/Connector.h ../IceSSL/Instance.h ../Ice/ProtocolInstance.h ../IceSSL/SSLEngineF.h "$(includedir)/IceSSL/Plugin.h" "$(includedir)/Ice/Plugin.h" "$(includedir)/IceSSL/Config.h" "$(includedir)/IceSSL/ConnectionInfo.h" "$(includedir)/Ice/Connection.h" "$(includedir)/Ice/LocalException.h" ../Ice/DefaultsAndOverrides.h ../Ice/DefaultsAndOverridesF.h ../Ice/HashUtil.h
+Instance$(OBJEXT): Instance.cpp "$(includedir)/IceUtil/Config.h" ../IceSSL/Instance.h ../IceSSL/InstanceF.h "$(includedir)/IceUtil/Shared.h" "$(includedir)/Ice/Handle.h" "$(includedir)/IceUtil/Handle.h" "$(includedir)/IceUtil/Exception.h" "$(includedir)/Ice/Config.h" ../Ice/ProtocolInstance.h ../Ice/ProtocolInstanceF.h "$(includedir)/Ice/CommunicatorF.h" "$(includedir)/Ice/ProxyF.h" "$(includedir)/Ice/ProxyHandle.h" "$(includedir)/Ice/ObjectF.h" "$(includedir)/Ice/Exception.h" "$(includedir)/Ice/Format.h" "$(includedir)/Ice/StreamF.h" "$(includedir)/Ice/LocalObject.h" "$(includedir)/Ice/LocalObjectF.h" "$(includedir)/Ice/StreamHelpers.h" "$(includedir)/IceUtil/ScopedArray.h" "$(includedir)/IceUtil/Iterator.h" "$(includedir)/IceUtil/Optional.h" "$(includedir)/IceUtil/UndefSysMacros.h" "$(includedir)/Ice/PropertiesF.h" "$(includedir)/Ice/Proxy.h" "$(includedir)/IceUtil/Mutex.h" "$(includedir)/IceUtil/Lock.h" "$(includedir)/IceUtil/ThreadException.h" "$(includedir)/IceUtil/Time.h" "$(includedir)/IceUtil/MutexProtocol.h" "$(includedir)/Ice/ProxyFactoryF.h" "$(includedir)/Ice/ConnectionIF.h" "$(includedir)/Ice/RequestHandlerF.h" "$(includedir)/Ice/EndpointF.h" "$(includedir)/Ice/EndpointTypes.h" "$(includedir)/Ice/ObjectAdapterF.h" "$(includedir)/Ice/ReferenceF.h" "$(includedir)/Ice/OutgoingAsync.h" "$(includedir)/IceUtil/Monitor.h" "$(includedir)/IceUtil/Cond.h" "$(includedir)/IceUtil/Timer.h" "$(includedir)/IceUtil/Thread.h" "$(includedir)/IceUtil/UniquePtr.h" "$(includedir)/Ice/OutgoingAsyncF.h" "$(includedir)/Ice/InstanceF.h" "$(includedir)/Ice/Current.h" "$(includedir)/Ice/ConnectionF.h" "$(includedir)/Ice/Identity.h" "$(includedir)/Ice/Version.h" "$(includedir)/Ice/BasicStream.h" "$(includedir)/IceUtil/StringConverter.h" "$(includedir)/Ice/Object.h" "$(includedir)/Ice/IncomingAsyncF.h" "$(includedir)/Ice/ObjectFactoryF.h" "$(includedir)/Ice/ObjectFactoryManagerF.h" "$(includedir)/Ice/Buffer.h" "$(includedir)/Ice/Protocol.h" "$(includedir)/Ice/SlicedDataF.h" "$(includedir)/Ice/UserExceptionFactory.h" "$(includedir)/Ice/FactoryTable.h" "$(includedir)/Ice/ObserverHelper.h" "$(includedir)/Ice/Instrumentation.h" "$(includedir)/Ice/ThreadPoolF.h" "$(includedir)/Ice/LoggerF.h" ../Ice/EndpointIF.h ../Ice/ConnectorF.h ../Ice/IPEndpointIF.h ../Ice/NetworkF.h ../IceSSL/SSLEngineF.h "$(includedir)/IceSSL/Plugin.h" "$(includedir)/Ice/Plugin.h" "$(includedir)/Ice/BuiltinSequences.h" "$(includedir)/IceSSL/Config.h" "$(includedir)/IceSSL/ConnectionInfo.h" "$(includedir)/Ice/Connection.h" "$(includedir)/Ice/Endpoint.h" ../IceSSL/SSLEngine.h ../IceSSL/Util.h ../IceSSL/TrustManagerF.h ../Ice/Network.h "$(includedir)/Ice/Properties.h" "$(includedir)/Ice/GCObject.h" "$(includedir)/IceUtil/MutexPtrLock.h" "$(includedir)/Ice/Outgoing.h" "$(includedir)/Ice/Incoming.h" "$(includedir)/Ice/ServantLocatorF.h" "$(includedir)/Ice/ServantManagerF.h" "$(includedir)/Ice/ResponseHandlerF.h" "$(includedir)/Ice/IncomingAsync.h" "$(includedir)/Ice/PropertiesAdmin.h"
+PluginI$(OBJEXT): PluginI.cpp ../IceSSL/PluginI.h "$(includedir)/IceSSL/Plugin.h" "$(includedir)/IceUtil/Time.h" "$(includedir)/IceUtil/Config.h" "$(includedir)/Ice/Plugin.h" "$(includedir)/Ice/ProxyF.h" "$(includedir)/IceUtil/Shared.h" "$(includedir)/Ice/Config.h" "$(includedir)/Ice/ProxyHandle.h" "$(includedir)/IceUtil/Handle.h" "$(includedir)/IceUtil/Exception.h" "$(includedir)/Ice/ObjectF.h" "$(includedir)/Ice/Handle.h" "$(includedir)/Ice/Exception.h" "$(includedir)/Ice/Format.h" "$(includedir)/Ice/StreamF.h" "$(includedir)/Ice/LocalObject.h" "$(includedir)/Ice/LocalObjectF.h" "$(includedir)/Ice/StreamHelpers.h" "$(includedir)/IceUtil/ScopedArray.h" "$(includedir)/IceUtil/Iterator.h" "$(includedir)/IceUtil/Optional.h" "$(includedir)/Ice/LoggerF.h" "$(includedir)/IceUtil/UndefSysMacros.h" "$(includedir)/Ice/BuiltinSequences.h" "$(includedir)/IceSSL/Config.h" "$(includedir)/IceSSL/ConnectionInfo.h" "$(includedir)/Ice/Proxy.h" "$(includedir)/IceUtil/Mutex.h" "$(includedir)/IceUtil/Lock.h" "$(includedir)/IceUtil/ThreadException.h" "$(includedir)/IceUtil/MutexProtocol.h" "$(includedir)/Ice/ProxyFactoryF.h" "$(includedir)/Ice/ConnectionIF.h" "$(includedir)/Ice/RequestHandlerF.h" "$(includedir)/Ice/EndpointF.h" "$(includedir)/Ice/EndpointTypes.h" "$(includedir)/Ice/ObjectAdapterF.h" "$(includedir)/Ice/ReferenceF.h" "$(includedir)/Ice/OutgoingAsync.h" "$(includedir)/IceUtil/Monitor.h" "$(includedir)/IceUtil/Cond.h" "$(includedir)/IceUtil/Timer.h" "$(includedir)/IceUtil/Thread.h" "$(includedir)/IceUtil/UniquePtr.h" "$(includedir)/Ice/OutgoingAsyncF.h" "$(includedir)/Ice/InstanceF.h" "$(includedir)/Ice/CommunicatorF.h" "$(includedir)/Ice/Current.h" "$(includedir)/Ice/ConnectionF.h" "$(includedir)/Ice/Identity.h" "$(includedir)/Ice/Version.h" "$(includedir)/Ice/BasicStream.h" "$(includedir)/IceUtil/StringConverter.h" "$(includedir)/Ice/Object.h" "$(includedir)/Ice/IncomingAsyncF.h" "$(includedir)/Ice/ObjectFactoryF.h" "$(includedir)/Ice/ObjectFactoryManagerF.h" "$(includedir)/Ice/Buffer.h" "$(includedir)/Ice/Protocol.h" "$(includedir)/Ice/SlicedDataF.h" "$(includedir)/Ice/UserExceptionFactory.h" "$(includedir)/Ice/FactoryTable.h" "$(includedir)/Ice/ObserverHelper.h" "$(includedir)/Ice/Instrumentation.h" "$(includedir)/Ice/ThreadPoolF.h" "$(includedir)/Ice/Connection.h" "$(includedir)/Ice/Endpoint.h" ../IceSSL/SSLEngineF.h ../IceSSL/Instance.h ../IceSSL/InstanceF.h ../Ice/ProtocolInstance.h ../Ice/ProtocolInstanceF.h "$(includedir)/Ice/PropertiesF.h" ../Ice/EndpointIF.h ../Ice/ConnectorF.h ../Ice/IPEndpointIF.h ../Ice/NetworkF.h ../IceSSL/SSLEngine.h ../IceSSL/Util.h ../IceSSL/TrustManagerF.h ../Ice/Network.h ../IceSSL/EndpointI.h ../Ice/IPEndpointI.h ../Ice/EndpointI.h ../Ice/TransceiverF.h ../Ice/AcceptorF.h ../Ice/EndpointFactory.h ../Ice/EndpointFactoryF.h "$(includedir)/IceSSL/EndpointInfo.h" ../Ice/ProtocolPluginFacade.h ../Ice/ProtocolPluginFacadeF.h "$(includedir)/Ice/LocalException.h"
+OpenSSLTransceiverI$(OBJEXT): OpenSSLTransceiverI.cpp ../IceSSL/OpenSSLTransceiverI.h "$(includedir)/IceSSL/Config.h" "$(includedir)/Ice/Config.h" "$(includedir)/IceUtil/Config.h" ../IceSSL/InstanceF.h "$(includedir)/IceUtil/Shared.h" "$(includedir)/Ice/Handle.h" "$(includedir)/IceUtil/Handle.h" "$(includedir)/IceUtil/Exception.h" "$(includedir)/IceSSL/Plugin.h" "$(includedir)/IceUtil/Time.h" "$(includedir)/Ice/Plugin.h" "$(includedir)/Ice/ProxyF.h" "$(includedir)/Ice/ProxyHandle.h" "$(includedir)/Ice/ObjectF.h" "$(includedir)/Ice/Exception.h" "$(includedir)/Ice/Format.h" "$(includedir)/Ice/StreamF.h" "$(includedir)/Ice/LocalObject.h" "$(includedir)/Ice/LocalObjectF.h" "$(includedir)/Ice/StreamHelpers.h" "$(includedir)/IceUtil/ScopedArray.h" "$(includedir)/IceUtil/Iterator.h" "$(includedir)/IceUtil/Optional.h" "$(includedir)/Ice/LoggerF.h" "$(includedir)/IceUtil/UndefSysMacros.h" "$(includedir)/Ice/BuiltinSequences.h" "$(includedir)/IceSSL/ConnectionInfo.h" "$(includedir)/Ice/Proxy.h" "$(includedir)/IceUtil/Mutex.h" "$(includedir)/IceUtil/Lock.h" "$(includedir)/IceUtil/ThreadException.h" "$(includedir)/IceUtil/MutexProtocol.h" "$(includedir)/Ice/ProxyFactoryF.h" "$(includedir)/Ice/ConnectionIF.h" "$(includedir)/Ice/RequestHandlerF.h" "$(includedir)/Ice/EndpointF.h" "$(includedir)/Ice/EndpointTypes.h" "$(includedir)/Ice/ObjectAdapterF.h" "$(includedir)/Ice/ReferenceF.h" "$(includedir)/Ice/OutgoingAsync.h" "$(includedir)/IceUtil/Monitor.h" "$(includedir)/IceUtil/Cond.h" "$(includedir)/IceUtil/Timer.h" "$(includedir)/IceUtil/Thread.h" "$(includedir)/IceUtil/UniquePtr.h" "$(includedir)/Ice/OutgoingAsyncF.h" "$(includedir)/Ice/InstanceF.h" "$(includedir)/Ice/CommunicatorF.h" "$(includedir)/Ice/Current.h" "$(includedir)/Ice/ConnectionF.h" "$(includedir)/Ice/Identity.h" "$(includedir)/Ice/Version.h" "$(includedir)/Ice/BasicStream.h" "$(includedir)/IceUtil/StringConverter.h" "$(includedir)/Ice/Object.h" "$(includedir)/Ice/IncomingAsyncF.h" "$(includedir)/Ice/ObjectFactoryF.h" "$(includedir)/Ice/ObjectFactoryManagerF.h" "$(includedir)/Ice/Buffer.h" "$(includedir)/Ice/Protocol.h" "$(includedir)/Ice/SlicedDataF.h" "$(includedir)/Ice/UserExceptionFactory.h" "$(includedir)/Ice/FactoryTable.h" "$(includedir)/Ice/ObserverHelper.h" "$(includedir)/Ice/Instrumentation.h" "$(includedir)/Ice/ThreadPoolF.h" "$(includedir)/Ice/Connection.h" "$(includedir)/Ice/Endpoint.h" ../IceSSL/SSLEngineF.h ../Ice/Transceiver.h ../Ice/TransceiverF.h ../Ice/Network.h ../Ice/NetworkF.h "$(includedir)/Ice/PropertiesF.h" "$(includedir)/IceUtil/MutexPtrLock.h" ../IceSSL/Instance.h ../Ice/ProtocolInstance.h ../Ice/ProtocolInstanceF.h ../Ice/EndpointIF.h ../Ice/ConnectorF.h ../Ice/IPEndpointIF.h ../IceSSL/SSLEngine.h ../IceSSL/Util.h ../IceSSL/TrustManagerF.h "$(includedir)/Ice/Communicator.h" "$(includedir)/Ice/GCObject.h" "$(includedir)/Ice/Outgoing.h" "$(includedir)/Ice/Incoming.h" "$(includedir)/Ice/ServantLocatorF.h" "$(includedir)/Ice/ServantManagerF.h" "$(includedir)/Ice/ResponseHandlerF.h" "$(includedir)/Ice/IncomingAsync.h" "$(includedir)/Ice/InstrumentationF.h" "$(includedir)/Ice/RouterF.h" "$(includedir)/Ice/LocatorF.h" "$(includedir)/Ice/PluginF.h" "$(includedir)/Ice/ImplicitContextF.h" "$(includedir)/Ice/Properties.h" "$(includedir)/Ice/PropertiesAdmin.h" "$(includedir)/Ice/LoggerUtil.h" "$(includedir)/Ice/Logger.h" "$(includedir)/Ice/LocalException.h" "$(includedir)/IceUtil/DisableWarnings.h"
+SecureTransportTransceiverI$(OBJEXT): SecureTransportTransceiverI.cpp ../IceSSL/SecureTransportTransceiverI.h "$(includedir)/IceSSL/Config.h" "$(includedir)/Ice/Config.h" "$(includedir)/IceUtil/Config.h" ../IceSSL/InstanceF.h "$(includedir)/IceUtil/Shared.h" "$(includedir)/Ice/Handle.h" "$(includedir)/IceUtil/Handle.h" "$(includedir)/IceUtil/Exception.h" ../IceSSL/SSLEngineF.h "$(includedir)/IceSSL/Plugin.h" "$(includedir)/IceUtil/Time.h" "$(includedir)/Ice/Plugin.h" "$(includedir)/Ice/ProxyF.h" "$(includedir)/Ice/ProxyHandle.h" "$(includedir)/Ice/ObjectF.h" "$(includedir)/Ice/Exception.h" "$(includedir)/Ice/Format.h" "$(includedir)/Ice/StreamF.h" "$(includedir)/Ice/LocalObject.h" "$(includedir)/Ice/LocalObjectF.h" "$(includedir)/Ice/StreamHelpers.h" "$(includedir)/IceUtil/ScopedArray.h" "$(includedir)/IceUtil/Iterator.h" "$(includedir)/IceUtil/Optional.h" "$(includedir)/Ice/LoggerF.h" "$(includedir)/IceUtil/UndefSysMacros.h" "$(includedir)/Ice/BuiltinSequences.h" "$(includedir)/IceSSL/ConnectionInfo.h" "$(includedir)/Ice/Proxy.h" "$(includedir)/IceUtil/Mutex.h" "$(includedir)/IceUtil/Lock.h" "$(includedir)/IceUtil/ThreadException.h" "$(includedir)/IceUtil/MutexProtocol.h" "$(includedir)/Ice/ProxyFactoryF.h" "$(includedir)/Ice/ConnectionIF.h" "$(includedir)/Ice/RequestHandlerF.h" "$(includedir)/Ice/EndpointF.h" "$(includedir)/Ice/EndpointTypes.h" "$(includedir)/Ice/ObjectAdapterF.h" "$(includedir)/Ice/ReferenceF.h" "$(includedir)/Ice/OutgoingAsync.h" "$(includedir)/IceUtil/Monitor.h" "$(includedir)/IceUtil/Cond.h" "$(includedir)/IceUtil/Timer.h" "$(includedir)/IceUtil/Thread.h" "$(includedir)/IceUtil/UniquePtr.h" "$(includedir)/Ice/OutgoingAsyncF.h" "$(includedir)/Ice/InstanceF.h" "$(includedir)/Ice/CommunicatorF.h" "$(includedir)/Ice/Current.h" "$(includedir)/Ice/ConnectionF.h" "$(includedir)/Ice/Identity.h" "$(includedir)/Ice/Version.h" "$(includedir)/Ice/BasicStream.h" "$(includedir)/IceUtil/StringConverter.h" "$(includedir)/Ice/Object.h" "$(includedir)/Ice/IncomingAsyncF.h" "$(includedir)/Ice/ObjectFactoryF.h" "$(includedir)/Ice/ObjectFactoryManagerF.h" "$(includedir)/Ice/Buffer.h" "$(includedir)/Ice/Protocol.h" "$(includedir)/Ice/SlicedDataF.h" "$(includedir)/Ice/UserExceptionFactory.h" "$(includedir)/Ice/FactoryTable.h" "$(includedir)/Ice/ObserverHelper.h" "$(includedir)/Ice/Instrumentation.h" "$(includedir)/Ice/ThreadPoolF.h" "$(includedir)/Ice/Connection.h" "$(includedir)/Ice/Endpoint.h" ../Ice/Transceiver.h ../Ice/TransceiverF.h ../Ice/Network.h ../Ice/NetworkF.h "$(includedir)/Ice/PropertiesF.h" ../IceSSL/Instance.h ../Ice/ProtocolInstance.h ../Ice/ProtocolInstanceF.h ../Ice/EndpointIF.h ../Ice/ConnectorF.h ../Ice/IPEndpointIF.h ../IceSSL/SSLEngine.h ../IceSSL/Util.h ../IceSSL/TrustManagerF.h "$(includedir)/Ice/LoggerUtil.h" "$(includedir)/Ice/Logger.h" "$(includedir)/Ice/LocalException.h"
+Util$(OBJEXT): Util.cpp "$(includedir)/IceUtil/Config.h" ../IceSSL/Util.h "$(includedir)/IceUtil/Mutex.h" "$(includedir)/IceUtil/Lock.h" "$(includedir)/IceUtil/ThreadException.h" "$(includedir)/IceUtil/Exception.h" "$(includedir)/IceUtil/Time.h" "$(includedir)/IceUtil/MutexProtocol.h" "$(includedir)/IceUtil/Shared.h" "$(includedir)/IceUtil/Handle.h" "$(includedir)/IceSSL/Plugin.h" "$(includedir)/Ice/Plugin.h" "$(includedir)/Ice/ProxyF.h" "$(includedir)/Ice/Config.h" "$(includedir)/Ice/ProxyHandle.h" "$(includedir)/Ice/ObjectF.h" "$(includedir)/Ice/Handle.h" "$(includedir)/Ice/Exception.h" "$(includedir)/Ice/Format.h" "$(includedir)/Ice/StreamF.h" "$(includedir)/Ice/LocalObject.h" "$(includedir)/Ice/LocalObjectF.h" "$(includedir)/Ice/StreamHelpers.h" "$(includedir)/IceUtil/ScopedArray.h" "$(includedir)/IceUtil/Iterator.h" "$(includedir)/IceUtil/Optional.h" "$(includedir)/Ice/LoggerF.h" "$(includedir)/IceUtil/UndefSysMacros.h" "$(includedir)/Ice/BuiltinSequences.h" "$(includedir)/IceSSL/Config.h" "$(includedir)/IceSSL/ConnectionInfo.h" "$(includedir)/Ice/Proxy.h" "$(includedir)/Ice/ProxyFactoryF.h" "$(includedir)/Ice/ConnectionIF.h" "$(includedir)/Ice/RequestHandlerF.h" "$(includedir)/Ice/EndpointF.h" "$(includedir)/Ice/EndpointTypes.h" "$(includedir)/Ice/ObjectAdapterF.h" "$(includedir)/Ice/ReferenceF.h" "$(includedir)/Ice/OutgoingAsync.h" "$(includedir)/IceUtil/Monitor.h" "$(includedir)/IceUtil/Cond.h" "$(includedir)/IceUtil/Timer.h" "$(includedir)/IceUtil/Thread.h" "$(includedir)/IceUtil/UniquePtr.h" "$(includedir)/Ice/OutgoingAsyncF.h" "$(includedir)/Ice/InstanceF.h" "$(includedir)/Ice/CommunicatorF.h" "$(includedir)/Ice/Current.h" "$(includedir)/Ice/ConnectionF.h" "$(includedir)/Ice/Identity.h" "$(includedir)/Ice/Version.h" "$(includedir)/Ice/BasicStream.h" "$(includedir)/IceUtil/StringConverter.h" "$(includedir)/Ice/Object.h" "$(includedir)/Ice/IncomingAsyncF.h" "$(includedir)/Ice/ObjectFactoryF.h" "$(includedir)/Ice/ObjectFactoryManagerF.h" "$(includedir)/Ice/Buffer.h" "$(includedir)/Ice/Protocol.h" "$(includedir)/Ice/SlicedDataF.h" "$(includedir)/Ice/UserExceptionFactory.h" "$(includedir)/Ice/FactoryTable.h" "$(includedir)/Ice/ObserverHelper.h" "$(includedir)/Ice/Instrumentation.h" "$(includedir)/Ice/ThreadPoolF.h" "$(includedir)/Ice/Connection.h" "$(includedir)/Ice/Endpoint.h" "$(includedir)/IceUtil/FileUtil.h" "$(includedir)/IceUtil/StringUtil.h" "$(includedir)/Ice/LocalException.h" ../Ice/Network.h ../Ice/NetworkF.h "$(includedir)/Ice/PropertiesF.h"
RFC2253$(OBJEXT): RFC2253.cpp "$(includedir)/IceUtil/StringUtil.h" "$(includedir)/IceUtil/Config.h" "$(includedir)/IceSSL/Plugin.h" "$(includedir)/IceUtil/Time.h" "$(includedir)/Ice/Plugin.h" "$(includedir)/Ice/ProxyF.h" "$(includedir)/IceUtil/Shared.h" "$(includedir)/Ice/Config.h" "$(includedir)/Ice/ProxyHandle.h" "$(includedir)/IceUtil/Handle.h" "$(includedir)/IceUtil/Exception.h" "$(includedir)/Ice/ObjectF.h" "$(includedir)/Ice/Handle.h" "$(includedir)/Ice/Exception.h" "$(includedir)/Ice/Format.h" "$(includedir)/Ice/StreamF.h" "$(includedir)/Ice/LocalObject.h" "$(includedir)/Ice/LocalObjectF.h" "$(includedir)/Ice/StreamHelpers.h" "$(includedir)/IceUtil/ScopedArray.h" "$(includedir)/IceUtil/Iterator.h" "$(includedir)/IceUtil/Optional.h" "$(includedir)/Ice/LoggerF.h" "$(includedir)/IceUtil/UndefSysMacros.h" "$(includedir)/Ice/BuiltinSequences.h" "$(includedir)/IceSSL/Config.h" "$(includedir)/IceSSL/ConnectionInfo.h" "$(includedir)/Ice/Proxy.h" "$(includedir)/IceUtil/Mutex.h" "$(includedir)/IceUtil/Lock.h" "$(includedir)/IceUtil/ThreadException.h" "$(includedir)/IceUtil/MutexProtocol.h" "$(includedir)/Ice/ProxyFactoryF.h" "$(includedir)/Ice/ConnectionIF.h" "$(includedir)/Ice/RequestHandlerF.h" "$(includedir)/Ice/EndpointF.h" "$(includedir)/Ice/EndpointTypes.h" "$(includedir)/Ice/ObjectAdapterF.h" "$(includedir)/Ice/ReferenceF.h" "$(includedir)/Ice/OutgoingAsync.h" "$(includedir)/IceUtil/Monitor.h" "$(includedir)/IceUtil/Cond.h" "$(includedir)/IceUtil/Timer.h" "$(includedir)/IceUtil/Thread.h" "$(includedir)/IceUtil/UniquePtr.h" "$(includedir)/Ice/OutgoingAsyncF.h" "$(includedir)/Ice/InstanceF.h" "$(includedir)/Ice/CommunicatorF.h" "$(includedir)/Ice/Current.h" "$(includedir)/Ice/ConnectionF.h" "$(includedir)/Ice/Identity.h" "$(includedir)/Ice/Version.h" "$(includedir)/Ice/BasicStream.h" "$(includedir)/IceUtil/StringConverter.h" "$(includedir)/Ice/Object.h" "$(includedir)/Ice/IncomingAsyncF.h" "$(includedir)/Ice/ObjectFactoryF.h" "$(includedir)/Ice/ObjectFactoryManagerF.h" "$(includedir)/Ice/Buffer.h" "$(includedir)/Ice/Protocol.h" "$(includedir)/Ice/SlicedDataF.h" "$(includedir)/Ice/UserExceptionFactory.h" "$(includedir)/Ice/FactoryTable.h" "$(includedir)/Ice/ObserverHelper.h" "$(includedir)/Ice/Instrumentation.h" "$(includedir)/Ice/ThreadPoolF.h" "$(includedir)/Ice/Connection.h" "$(includedir)/Ice/Endpoint.h" ../IceSSL/RFC2253.h
TrustManager$(OBJEXT): TrustManager.cpp ../IceSSL/TrustManager.h "$(includedir)/Ice/CommunicatorF.h" "$(includedir)/Ice/ProxyF.h" "$(includedir)/IceUtil/Shared.h" "$(includedir)/IceUtil/Config.h" "$(includedir)/Ice/Config.h" "$(includedir)/Ice/ProxyHandle.h" "$(includedir)/IceUtil/Handle.h" "$(includedir)/IceUtil/Exception.h" "$(includedir)/Ice/ObjectF.h" "$(includedir)/Ice/Handle.h" "$(includedir)/Ice/Exception.h" "$(includedir)/Ice/Format.h" "$(includedir)/Ice/StreamF.h" "$(includedir)/Ice/LocalObject.h" "$(includedir)/Ice/LocalObjectF.h" "$(includedir)/Ice/StreamHelpers.h" "$(includedir)/IceUtil/ScopedArray.h" "$(includedir)/IceUtil/Iterator.h" "$(includedir)/IceUtil/Optional.h" "$(includedir)/IceUtil/UndefSysMacros.h" ../IceSSL/TrustManagerF.h "$(includedir)/IceSSL/Plugin.h" "$(includedir)/IceUtil/Time.h" "$(includedir)/Ice/Plugin.h" "$(includedir)/Ice/LoggerF.h" "$(includedir)/Ice/BuiltinSequences.h" "$(includedir)/IceSSL/Config.h" "$(includedir)/IceSSL/ConnectionInfo.h" "$(includedir)/Ice/Proxy.h" "$(includedir)/IceUtil/Mutex.h" "$(includedir)/IceUtil/Lock.h" "$(includedir)/IceUtil/ThreadException.h" "$(includedir)/IceUtil/MutexProtocol.h" "$(includedir)/Ice/ProxyFactoryF.h" "$(includedir)/Ice/ConnectionIF.h" "$(includedir)/Ice/RequestHandlerF.h" "$(includedir)/Ice/EndpointF.h" "$(includedir)/Ice/EndpointTypes.h" "$(includedir)/Ice/ObjectAdapterF.h" "$(includedir)/Ice/ReferenceF.h" "$(includedir)/Ice/OutgoingAsync.h" "$(includedir)/IceUtil/Monitor.h" "$(includedir)/IceUtil/Cond.h" "$(includedir)/IceUtil/Timer.h" "$(includedir)/IceUtil/Thread.h" "$(includedir)/IceUtil/UniquePtr.h" "$(includedir)/Ice/OutgoingAsyncF.h" "$(includedir)/Ice/InstanceF.h" "$(includedir)/Ice/Current.h" "$(includedir)/Ice/ConnectionF.h" "$(includedir)/Ice/Identity.h" "$(includedir)/Ice/Version.h" "$(includedir)/Ice/BasicStream.h" "$(includedir)/IceUtil/StringConverter.h" "$(includedir)/Ice/Object.h" "$(includedir)/Ice/IncomingAsyncF.h" "$(includedir)/Ice/ObjectFactoryF.h" "$(includedir)/Ice/ObjectFactoryManagerF.h" "$(includedir)/Ice/Buffer.h" "$(includedir)/Ice/Protocol.h" "$(includedir)/Ice/SlicedDataF.h" "$(includedir)/Ice/UserExceptionFactory.h" "$(includedir)/Ice/FactoryTable.h" "$(includedir)/Ice/ObserverHelper.h" "$(includedir)/Ice/Instrumentation.h" "$(includedir)/Ice/ThreadPoolF.h" "$(includedir)/Ice/Connection.h" "$(includedir)/Ice/Endpoint.h" ../IceSSL/RFC2253.h "$(includedir)/Ice/Properties.h" "$(includedir)/Ice/GCObject.h" "$(includedir)/IceUtil/MutexPtrLock.h" "$(includedir)/Ice/Outgoing.h" "$(includedir)/Ice/Incoming.h" "$(includedir)/Ice/ServantLocatorF.h" "$(includedir)/Ice/ServantManagerF.h" "$(includedir)/Ice/ResponseHandlerF.h" "$(includedir)/Ice/IncomingAsync.h" "$(includedir)/Ice/PropertiesAdmin.h" "$(includedir)/Ice/Communicator.h" "$(includedir)/Ice/InstrumentationF.h" "$(includedir)/Ice/RouterF.h" "$(includedir)/Ice/LocatorF.h" "$(includedir)/Ice/PluginF.h" "$(includedir)/Ice/ImplicitContextF.h" "$(includedir)/Ice/LocalException.h" "$(includedir)/Ice/Logger.h" "$(includedir)/Ice/LoggerUtil.h" ../Ice/Network.h ../Ice/NetworkF.h "$(includedir)/Ice/PropertiesF.h"
-SSLEngine$(OBJEXT): SSLEngine.cpp ../IceSSL/SSLEngine.h "$(includedir)/IceSSL/Plugin.h" "$(includedir)/IceUtil/Time.h" "$(includedir)/IceUtil/Config.h" "$(includedir)/Ice/Plugin.h" "$(includedir)/Ice/ProxyF.h" "$(includedir)/IceUtil/Shared.h" "$(includedir)/Ice/Config.h" "$(includedir)/Ice/ProxyHandle.h" "$(includedir)/IceUtil/Handle.h" "$(includedir)/IceUtil/Exception.h" "$(includedir)/Ice/ObjectF.h" "$(includedir)/Ice/Handle.h" "$(includedir)/Ice/Exception.h" "$(includedir)/Ice/Format.h" "$(includedir)/Ice/StreamF.h" "$(includedir)/Ice/LocalObject.h" "$(includedir)/Ice/LocalObjectF.h" "$(includedir)/Ice/StreamHelpers.h" "$(includedir)/IceUtil/ScopedArray.h" "$(includedir)/IceUtil/Iterator.h" "$(includedir)/IceUtil/Optional.h" "$(includedir)/Ice/LoggerF.h" "$(includedir)/IceUtil/UndefSysMacros.h" "$(includedir)/Ice/BuiltinSequences.h" "$(includedir)/IceSSL/Config.h" "$(includedir)/IceSSL/ConnectionInfo.h" "$(includedir)/Ice/Proxy.h" "$(includedir)/IceUtil/Mutex.h" "$(includedir)/IceUtil/Lock.h" "$(includedir)/IceUtil/ThreadException.h" "$(includedir)/IceUtil/MutexProtocol.h" "$(includedir)/Ice/ProxyFactoryF.h" "$(includedir)/Ice/ConnectionIF.h" "$(includedir)/Ice/RequestHandlerF.h" "$(includedir)/Ice/EndpointF.h" "$(includedir)/Ice/EndpointTypes.h" "$(includedir)/Ice/ObjectAdapterF.h" "$(includedir)/Ice/ReferenceF.h" "$(includedir)/Ice/OutgoingAsync.h" "$(includedir)/IceUtil/Monitor.h" "$(includedir)/IceUtil/Cond.h" "$(includedir)/IceUtil/Timer.h" "$(includedir)/IceUtil/Thread.h" "$(includedir)/IceUtil/UniquePtr.h" "$(includedir)/Ice/OutgoingAsyncF.h" "$(includedir)/Ice/InstanceF.h" "$(includedir)/Ice/CommunicatorF.h" "$(includedir)/Ice/Current.h" "$(includedir)/Ice/ConnectionF.h" "$(includedir)/Ice/Identity.h" "$(includedir)/Ice/Version.h" "$(includedir)/Ice/BasicStream.h" "$(includedir)/IceUtil/StringConverter.h" "$(includedir)/Ice/Object.h" "$(includedir)/Ice/IncomingAsyncF.h" "$(includedir)/Ice/ObjectFactoryF.h" "$(includedir)/Ice/ObjectFactoryManagerF.h" "$(includedir)/Ice/Buffer.h" "$(includedir)/Ice/Protocol.h" "$(includedir)/Ice/SlicedDataF.h" "$(includedir)/Ice/UserExceptionFactory.h" "$(includedir)/Ice/FactoryTable.h" "$(includedir)/Ice/ObserverHelper.h" "$(includedir)/Ice/Instrumentation.h" "$(includedir)/Ice/ThreadPoolF.h" "$(includedir)/Ice/Connection.h" "$(includedir)/Ice/Endpoint.h" ../IceSSL/Util.h ../IceSSL/UtilF.h ../Ice/Network.h ../Ice/NetworkF.h "$(includedir)/Ice/PropertiesF.h" ../IceSSL/SSLEngineF.h ../IceSSL/TrustManagerF.h ../IceSSL/TrustManager.h ../IceSSL/RFC2253.h "$(includedir)/IceUtil/StringUtil.h" "$(includedir)/Ice/Communicator.h" "$(includedir)/Ice/GCObject.h" "$(includedir)/IceUtil/MutexPtrLock.h" "$(includedir)/Ice/Outgoing.h" "$(includedir)/Ice/Incoming.h" "$(includedir)/Ice/ServantLocatorF.h" "$(includedir)/Ice/ServantManagerF.h" "$(includedir)/Ice/ResponseHandlerF.h" "$(includedir)/Ice/IncomingAsync.h" "$(includedir)/Ice/InstrumentationF.h" "$(includedir)/Ice/RouterF.h" "$(includedir)/Ice/LocatorF.h" "$(includedir)/Ice/PluginF.h" "$(includedir)/Ice/ImplicitContextF.h" "$(includedir)/Ice/Properties.h" "$(includedir)/Ice/PropertiesAdmin.h" "$(includedir)/Ice/Logger.h" "$(includedir)/Ice/LoggerUtil.h" "$(includedir)/Ice/LocalException.h"
-OpenSSLEngine$(OBJEXT): OpenSSLEngine.cpp "$(includedir)/IceSSL/Config.h" "$(includedir)/Ice/Config.h" "$(includedir)/IceUtil/Config.h" ../IceSSL/SSLEngine.h "$(includedir)/IceSSL/Plugin.h" "$(includedir)/IceUtil/Time.h" "$(includedir)/Ice/Plugin.h" "$(includedir)/Ice/ProxyF.h" "$(includedir)/IceUtil/Shared.h" "$(includedir)/Ice/ProxyHandle.h" "$(includedir)/IceUtil/Handle.h" "$(includedir)/IceUtil/Exception.h" "$(includedir)/Ice/ObjectF.h" "$(includedir)/Ice/Handle.h" "$(includedir)/Ice/Exception.h" "$(includedir)/Ice/Format.h" "$(includedir)/Ice/StreamF.h" "$(includedir)/Ice/LocalObject.h" "$(includedir)/Ice/LocalObjectF.h" "$(includedir)/Ice/StreamHelpers.h" "$(includedir)/IceUtil/ScopedArray.h" "$(includedir)/IceUtil/Iterator.h" "$(includedir)/IceUtil/Optional.h" "$(includedir)/Ice/LoggerF.h" "$(includedir)/IceUtil/UndefSysMacros.h" "$(includedir)/Ice/BuiltinSequences.h" "$(includedir)/IceSSL/ConnectionInfo.h" "$(includedir)/Ice/Proxy.h" "$(includedir)/IceUtil/Mutex.h" "$(includedir)/IceUtil/Lock.h" "$(includedir)/IceUtil/ThreadException.h" "$(includedir)/IceUtil/MutexProtocol.h" "$(includedir)/Ice/ProxyFactoryF.h" "$(includedir)/Ice/ConnectionIF.h" "$(includedir)/Ice/RequestHandlerF.h" "$(includedir)/Ice/EndpointF.h" "$(includedir)/Ice/EndpointTypes.h" "$(includedir)/Ice/ObjectAdapterF.h" "$(includedir)/Ice/ReferenceF.h" "$(includedir)/Ice/OutgoingAsync.h" "$(includedir)/IceUtil/Monitor.h" "$(includedir)/IceUtil/Cond.h" "$(includedir)/IceUtil/Timer.h" "$(includedir)/IceUtil/Thread.h" "$(includedir)/IceUtil/UniquePtr.h" "$(includedir)/Ice/OutgoingAsyncF.h" "$(includedir)/Ice/InstanceF.h" "$(includedir)/Ice/CommunicatorF.h" "$(includedir)/Ice/Current.h" "$(includedir)/Ice/ConnectionF.h" "$(includedir)/Ice/Identity.h" "$(includedir)/Ice/Version.h" "$(includedir)/Ice/BasicStream.h" "$(includedir)/IceUtil/StringConverter.h" "$(includedir)/Ice/Object.h" "$(includedir)/Ice/IncomingAsyncF.h" "$(includedir)/Ice/ObjectFactoryF.h" "$(includedir)/Ice/ObjectFactoryManagerF.h" "$(includedir)/Ice/Buffer.h" "$(includedir)/Ice/Protocol.h" "$(includedir)/Ice/SlicedDataF.h" "$(includedir)/Ice/UserExceptionFactory.h" "$(includedir)/Ice/FactoryTable.h" "$(includedir)/Ice/ObserverHelper.h" "$(includedir)/Ice/Instrumentation.h" "$(includedir)/Ice/ThreadPoolF.h" "$(includedir)/Ice/Connection.h" "$(includedir)/Ice/Endpoint.h" ../IceSSL/Util.h ../IceSSL/UtilF.h ../Ice/Network.h ../Ice/NetworkF.h "$(includedir)/Ice/PropertiesF.h" ../IceSSL/SSLEngineF.h ../IceSSL/TrustManagerF.h ../IceSSL/TrustManager.h ../IceSSL/RFC2253.h "$(includedir)/Ice/Communicator.h" "$(includedir)/Ice/GCObject.h" "$(includedir)/IceUtil/MutexPtrLock.h" "$(includedir)/Ice/Outgoing.h" "$(includedir)/Ice/Incoming.h" "$(includedir)/Ice/ServantLocatorF.h" "$(includedir)/Ice/ServantManagerF.h" "$(includedir)/Ice/ResponseHandlerF.h" "$(includedir)/Ice/IncomingAsync.h" "$(includedir)/Ice/InstrumentationF.h" "$(includedir)/Ice/RouterF.h" "$(includedir)/Ice/LocatorF.h" "$(includedir)/Ice/PluginF.h" "$(includedir)/Ice/ImplicitContextF.h" "$(includedir)/Ice/Properties.h" "$(includedir)/Ice/PropertiesAdmin.h" "$(includedir)/Ice/LocalException.h" "$(includedir)/Ice/Logger.h" "$(includedir)/Ice/LoggerUtil.h" "$(includedir)/IceUtil/StringUtil.h" "$(includedir)/IceUtil/FileUtil.h"
-SecureTransportEngine$(OBJEXT): SecureTransportEngine.cpp "$(includedir)/IceSSL/Config.h" "$(includedir)/Ice/Config.h" "$(includedir)/IceUtil/Config.h" "$(includedir)/IceUtil/FileUtil.h" "$(includedir)/IceUtil/Shared.h" "$(includedir)/IceUtil/Handle.h" "$(includedir)/IceUtil/Exception.h" "$(includedir)/IceUtil/StringUtil.h" "$(includedir)/Ice/LocalException.h" "$(includedir)/Ice/ProxyF.h" "$(includedir)/Ice/ProxyHandle.h" "$(includedir)/Ice/ObjectF.h" "$(includedir)/Ice/Handle.h" "$(includedir)/Ice/Exception.h" "$(includedir)/Ice/Format.h" "$(includedir)/Ice/StreamF.h" "$(includedir)/Ice/LocalObject.h" "$(includedir)/Ice/LocalObjectF.h" "$(includedir)/Ice/StreamHelpers.h" "$(includedir)/IceUtil/ScopedArray.h" "$(includedir)/IceUtil/Iterator.h" "$(includedir)/IceUtil/Optional.h" "$(includedir)/Ice/Identity.h" "$(includedir)/IceUtil/UndefSysMacros.h" "$(includedir)/Ice/Version.h" "$(includedir)/Ice/BuiltinSequences.h" "$(includedir)/Ice/Properties.h" "$(includedir)/Ice/Proxy.h" "$(includedir)/IceUtil/Mutex.h" "$(includedir)/IceUtil/Lock.h" "$(includedir)/IceUtil/ThreadException.h" "$(includedir)/IceUtil/Time.h" "$(includedir)/IceUtil/MutexProtocol.h" "$(includedir)/Ice/ProxyFactoryF.h" "$(includedir)/Ice/ConnectionIF.h" "$(includedir)/Ice/RequestHandlerF.h" "$(includedir)/Ice/EndpointF.h" "$(includedir)/Ice/EndpointTypes.h" "$(includedir)/Ice/ObjectAdapterF.h" "$(includedir)/Ice/ReferenceF.h" "$(includedir)/Ice/OutgoingAsync.h" "$(includedir)/IceUtil/Monitor.h" "$(includedir)/IceUtil/Cond.h" "$(includedir)/IceUtil/Timer.h" "$(includedir)/IceUtil/Thread.h" "$(includedir)/IceUtil/UniquePtr.h" "$(includedir)/Ice/OutgoingAsyncF.h" "$(includedir)/Ice/InstanceF.h" "$(includedir)/Ice/CommunicatorF.h" "$(includedir)/Ice/Current.h" "$(includedir)/Ice/ConnectionF.h" "$(includedir)/Ice/BasicStream.h" "$(includedir)/IceUtil/StringConverter.h" "$(includedir)/Ice/Object.h" "$(includedir)/Ice/IncomingAsyncF.h" "$(includedir)/Ice/ObjectFactoryF.h" "$(includedir)/Ice/ObjectFactoryManagerF.h" "$(includedir)/Ice/Buffer.h" "$(includedir)/Ice/Protocol.h" "$(includedir)/Ice/SlicedDataF.h" "$(includedir)/Ice/UserExceptionFactory.h" "$(includedir)/Ice/FactoryTable.h" "$(includedir)/Ice/ObserverHelper.h" "$(includedir)/Ice/Instrumentation.h" "$(includedir)/Ice/ThreadPoolF.h" "$(includedir)/Ice/GCObject.h" "$(includedir)/IceUtil/MutexPtrLock.h" "$(includedir)/Ice/Outgoing.h" "$(includedir)/Ice/Incoming.h" "$(includedir)/Ice/ServantLocatorF.h" "$(includedir)/Ice/ServantManagerF.h" "$(includedir)/Ice/ResponseHandlerF.h" "$(includedir)/Ice/IncomingAsync.h" "$(includedir)/Ice/PropertiesAdmin.h" "$(includedir)/Ice/Communicator.h" "$(includedir)/Ice/LoggerF.h" "$(includedir)/Ice/InstrumentationF.h" "$(includedir)/Ice/RouterF.h" "$(includedir)/Ice/LocatorF.h" "$(includedir)/Ice/PluginF.h" "$(includedir)/Ice/ImplicitContextF.h" "$(includedir)/Ice/Logger.h" "$(includedir)/Ice/LoggerUtil.h" "$(includedir)/Ice/Plugin.h" ../IceSSL/SecureTransportTransceiverI.h ../IceSSL/InstanceF.h ../IceSSL/SSLEngineF.h "$(includedir)/IceSSL/Plugin.h" "$(includedir)/IceSSL/ConnectionInfo.h" "$(includedir)/Ice/Connection.h" "$(includedir)/Ice/Endpoint.h" ../Ice/Transceiver.h ../Ice/TransceiverF.h ../Ice/Network.h ../Ice/NetworkF.h "$(includedir)/Ice/PropertiesF.h" ../IceSSL/SSLEngine.h ../IceSSL/Util.h ../IceSSL/UtilF.h ../IceSSL/TrustManagerF.h
+SSLEngine$(OBJEXT): SSLEngine.cpp ../IceSSL/SSLEngine.h "$(includedir)/IceSSL/Plugin.h" "$(includedir)/IceUtil/Time.h" "$(includedir)/IceUtil/Config.h" "$(includedir)/Ice/Plugin.h" "$(includedir)/Ice/ProxyF.h" "$(includedir)/IceUtil/Shared.h" "$(includedir)/Ice/Config.h" "$(includedir)/Ice/ProxyHandle.h" "$(includedir)/IceUtil/Handle.h" "$(includedir)/IceUtil/Exception.h" "$(includedir)/Ice/ObjectF.h" "$(includedir)/Ice/Handle.h" "$(includedir)/Ice/Exception.h" "$(includedir)/Ice/Format.h" "$(includedir)/Ice/StreamF.h" "$(includedir)/Ice/LocalObject.h" "$(includedir)/Ice/LocalObjectF.h" "$(includedir)/Ice/StreamHelpers.h" "$(includedir)/IceUtil/ScopedArray.h" "$(includedir)/IceUtil/Iterator.h" "$(includedir)/IceUtil/Optional.h" "$(includedir)/Ice/LoggerF.h" "$(includedir)/IceUtil/UndefSysMacros.h" "$(includedir)/Ice/BuiltinSequences.h" "$(includedir)/IceSSL/Config.h" "$(includedir)/IceSSL/ConnectionInfo.h" "$(includedir)/Ice/Proxy.h" "$(includedir)/IceUtil/Mutex.h" "$(includedir)/IceUtil/Lock.h" "$(includedir)/IceUtil/ThreadException.h" "$(includedir)/IceUtil/MutexProtocol.h" "$(includedir)/Ice/ProxyFactoryF.h" "$(includedir)/Ice/ConnectionIF.h" "$(includedir)/Ice/RequestHandlerF.h" "$(includedir)/Ice/EndpointF.h" "$(includedir)/Ice/EndpointTypes.h" "$(includedir)/Ice/ObjectAdapterF.h" "$(includedir)/Ice/ReferenceF.h" "$(includedir)/Ice/OutgoingAsync.h" "$(includedir)/IceUtil/Monitor.h" "$(includedir)/IceUtil/Cond.h" "$(includedir)/IceUtil/Timer.h" "$(includedir)/IceUtil/Thread.h" "$(includedir)/IceUtil/UniquePtr.h" "$(includedir)/Ice/OutgoingAsyncF.h" "$(includedir)/Ice/InstanceF.h" "$(includedir)/Ice/CommunicatorF.h" "$(includedir)/Ice/Current.h" "$(includedir)/Ice/ConnectionF.h" "$(includedir)/Ice/Identity.h" "$(includedir)/Ice/Version.h" "$(includedir)/Ice/BasicStream.h" "$(includedir)/IceUtil/StringConverter.h" "$(includedir)/Ice/Object.h" "$(includedir)/Ice/IncomingAsyncF.h" "$(includedir)/Ice/ObjectFactoryF.h" "$(includedir)/Ice/ObjectFactoryManagerF.h" "$(includedir)/Ice/Buffer.h" "$(includedir)/Ice/Protocol.h" "$(includedir)/Ice/SlicedDataF.h" "$(includedir)/Ice/UserExceptionFactory.h" "$(includedir)/Ice/FactoryTable.h" "$(includedir)/Ice/ObserverHelper.h" "$(includedir)/Ice/Instrumentation.h" "$(includedir)/Ice/ThreadPoolF.h" "$(includedir)/Ice/Connection.h" "$(includedir)/Ice/Endpoint.h" ../IceSSL/Util.h ../IceSSL/SSLEngineF.h ../IceSSL/TrustManagerF.h ../Ice/Network.h ../Ice/NetworkF.h "$(includedir)/Ice/PropertiesF.h" ../IceSSL/TrustManager.h ../IceSSL/RFC2253.h "$(includedir)/IceUtil/StringUtil.h" "$(includedir)/Ice/Communicator.h" "$(includedir)/Ice/GCObject.h" "$(includedir)/IceUtil/MutexPtrLock.h" "$(includedir)/Ice/Outgoing.h" "$(includedir)/Ice/Incoming.h" "$(includedir)/Ice/ServantLocatorF.h" "$(includedir)/Ice/ServantManagerF.h" "$(includedir)/Ice/ResponseHandlerF.h" "$(includedir)/Ice/IncomingAsync.h" "$(includedir)/Ice/InstrumentationF.h" "$(includedir)/Ice/RouterF.h" "$(includedir)/Ice/LocatorF.h" "$(includedir)/Ice/PluginF.h" "$(includedir)/Ice/ImplicitContextF.h" "$(includedir)/Ice/Properties.h" "$(includedir)/Ice/PropertiesAdmin.h" "$(includedir)/Ice/Logger.h" "$(includedir)/Ice/LoggerUtil.h" "$(includedir)/Ice/LocalException.h"
+OpenSSLEngine$(OBJEXT): OpenSSLEngine.cpp "$(includedir)/IceSSL/Config.h" "$(includedir)/Ice/Config.h" "$(includedir)/IceUtil/Config.h" ../IceSSL/SSLEngine.h "$(includedir)/IceSSL/Plugin.h" "$(includedir)/IceUtil/Time.h" "$(includedir)/Ice/Plugin.h" "$(includedir)/Ice/ProxyF.h" "$(includedir)/IceUtil/Shared.h" "$(includedir)/Ice/ProxyHandle.h" "$(includedir)/IceUtil/Handle.h" "$(includedir)/IceUtil/Exception.h" "$(includedir)/Ice/ObjectF.h" "$(includedir)/Ice/Handle.h" "$(includedir)/Ice/Exception.h" "$(includedir)/Ice/Format.h" "$(includedir)/Ice/StreamF.h" "$(includedir)/Ice/LocalObject.h" "$(includedir)/Ice/LocalObjectF.h" "$(includedir)/Ice/StreamHelpers.h" "$(includedir)/IceUtil/ScopedArray.h" "$(includedir)/IceUtil/Iterator.h" "$(includedir)/IceUtil/Optional.h" "$(includedir)/Ice/LoggerF.h" "$(includedir)/IceUtil/UndefSysMacros.h" "$(includedir)/Ice/BuiltinSequences.h" "$(includedir)/IceSSL/ConnectionInfo.h" "$(includedir)/Ice/Proxy.h" "$(includedir)/IceUtil/Mutex.h" "$(includedir)/IceUtil/Lock.h" "$(includedir)/IceUtil/ThreadException.h" "$(includedir)/IceUtil/MutexProtocol.h" "$(includedir)/Ice/ProxyFactoryF.h" "$(includedir)/Ice/ConnectionIF.h" "$(includedir)/Ice/RequestHandlerF.h" "$(includedir)/Ice/EndpointF.h" "$(includedir)/Ice/EndpointTypes.h" "$(includedir)/Ice/ObjectAdapterF.h" "$(includedir)/Ice/ReferenceF.h" "$(includedir)/Ice/OutgoingAsync.h" "$(includedir)/IceUtil/Monitor.h" "$(includedir)/IceUtil/Cond.h" "$(includedir)/IceUtil/Timer.h" "$(includedir)/IceUtil/Thread.h" "$(includedir)/IceUtil/UniquePtr.h" "$(includedir)/Ice/OutgoingAsyncF.h" "$(includedir)/Ice/InstanceF.h" "$(includedir)/Ice/CommunicatorF.h" "$(includedir)/Ice/Current.h" "$(includedir)/Ice/ConnectionF.h" "$(includedir)/Ice/Identity.h" "$(includedir)/Ice/Version.h" "$(includedir)/Ice/BasicStream.h" "$(includedir)/IceUtil/StringConverter.h" "$(includedir)/Ice/Object.h" "$(includedir)/Ice/IncomingAsyncF.h" "$(includedir)/Ice/ObjectFactoryF.h" "$(includedir)/Ice/ObjectFactoryManagerF.h" "$(includedir)/Ice/Buffer.h" "$(includedir)/Ice/Protocol.h" "$(includedir)/Ice/SlicedDataF.h" "$(includedir)/Ice/UserExceptionFactory.h" "$(includedir)/Ice/FactoryTable.h" "$(includedir)/Ice/ObserverHelper.h" "$(includedir)/Ice/Instrumentation.h" "$(includedir)/Ice/ThreadPoolF.h" "$(includedir)/Ice/Connection.h" "$(includedir)/Ice/Endpoint.h" ../IceSSL/Util.h ../IceSSL/SSLEngineF.h ../IceSSL/TrustManagerF.h ../Ice/Network.h ../Ice/NetworkF.h "$(includedir)/Ice/PropertiesF.h" ../IceSSL/TrustManager.h ../IceSSL/RFC2253.h "$(includedir)/Ice/Communicator.h" "$(includedir)/Ice/GCObject.h" "$(includedir)/IceUtil/MutexPtrLock.h" "$(includedir)/Ice/Outgoing.h" "$(includedir)/Ice/Incoming.h" "$(includedir)/Ice/ServantLocatorF.h" "$(includedir)/Ice/ServantManagerF.h" "$(includedir)/Ice/ResponseHandlerF.h" "$(includedir)/Ice/IncomingAsync.h" "$(includedir)/Ice/InstrumentationF.h" "$(includedir)/Ice/RouterF.h" "$(includedir)/Ice/LocatorF.h" "$(includedir)/Ice/PluginF.h" "$(includedir)/Ice/ImplicitContextF.h" "$(includedir)/Ice/Properties.h" "$(includedir)/Ice/PropertiesAdmin.h" "$(includedir)/Ice/LocalException.h" "$(includedir)/Ice/Logger.h" "$(includedir)/Ice/LoggerUtil.h" "$(includedir)/IceUtil/StringUtil.h" "$(includedir)/IceUtil/FileUtil.h"
+SecureTransportEngine$(OBJEXT): SecureTransportEngine.cpp "$(includedir)/IceSSL/Config.h" "$(includedir)/Ice/Config.h" "$(includedir)/IceUtil/Config.h" "$(includedir)/IceUtil/FileUtil.h" "$(includedir)/IceUtil/Shared.h" "$(includedir)/IceUtil/Handle.h" "$(includedir)/IceUtil/Exception.h" "$(includedir)/IceUtil/StringUtil.h" "$(includedir)/Ice/LocalException.h" "$(includedir)/Ice/ProxyF.h" "$(includedir)/Ice/ProxyHandle.h" "$(includedir)/Ice/ObjectF.h" "$(includedir)/Ice/Handle.h" "$(includedir)/Ice/Exception.h" "$(includedir)/Ice/Format.h" "$(includedir)/Ice/StreamF.h" "$(includedir)/Ice/LocalObject.h" "$(includedir)/Ice/LocalObjectF.h" "$(includedir)/Ice/StreamHelpers.h" "$(includedir)/IceUtil/ScopedArray.h" "$(includedir)/IceUtil/Iterator.h" "$(includedir)/IceUtil/Optional.h" "$(includedir)/Ice/Identity.h" "$(includedir)/IceUtil/UndefSysMacros.h" "$(includedir)/Ice/Version.h" "$(includedir)/Ice/BuiltinSequences.h" "$(includedir)/Ice/Properties.h" "$(includedir)/Ice/Proxy.h" "$(includedir)/IceUtil/Mutex.h" "$(includedir)/IceUtil/Lock.h" "$(includedir)/IceUtil/ThreadException.h" "$(includedir)/IceUtil/Time.h" "$(includedir)/IceUtil/MutexProtocol.h" "$(includedir)/Ice/ProxyFactoryF.h" "$(includedir)/Ice/ConnectionIF.h" "$(includedir)/Ice/RequestHandlerF.h" "$(includedir)/Ice/EndpointF.h" "$(includedir)/Ice/EndpointTypes.h" "$(includedir)/Ice/ObjectAdapterF.h" "$(includedir)/Ice/ReferenceF.h" "$(includedir)/Ice/OutgoingAsync.h" "$(includedir)/IceUtil/Monitor.h" "$(includedir)/IceUtil/Cond.h" "$(includedir)/IceUtil/Timer.h" "$(includedir)/IceUtil/Thread.h" "$(includedir)/IceUtil/UniquePtr.h" "$(includedir)/Ice/OutgoingAsyncF.h" "$(includedir)/Ice/InstanceF.h" "$(includedir)/Ice/CommunicatorF.h" "$(includedir)/Ice/Current.h" "$(includedir)/Ice/ConnectionF.h" "$(includedir)/Ice/BasicStream.h" "$(includedir)/IceUtil/StringConverter.h" "$(includedir)/Ice/Object.h" "$(includedir)/Ice/IncomingAsyncF.h" "$(includedir)/Ice/ObjectFactoryF.h" "$(includedir)/Ice/ObjectFactoryManagerF.h" "$(includedir)/Ice/Buffer.h" "$(includedir)/Ice/Protocol.h" "$(includedir)/Ice/SlicedDataF.h" "$(includedir)/Ice/UserExceptionFactory.h" "$(includedir)/Ice/FactoryTable.h" "$(includedir)/Ice/ObserverHelper.h" "$(includedir)/Ice/Instrumentation.h" "$(includedir)/Ice/ThreadPoolF.h" "$(includedir)/Ice/GCObject.h" "$(includedir)/IceUtil/MutexPtrLock.h" "$(includedir)/Ice/Outgoing.h" "$(includedir)/Ice/Incoming.h" "$(includedir)/Ice/ServantLocatorF.h" "$(includedir)/Ice/ServantManagerF.h" "$(includedir)/Ice/ResponseHandlerF.h" "$(includedir)/Ice/IncomingAsync.h" "$(includedir)/Ice/PropertiesAdmin.h" "$(includedir)/Ice/Communicator.h" "$(includedir)/Ice/LoggerF.h" "$(includedir)/Ice/InstrumentationF.h" "$(includedir)/Ice/RouterF.h" "$(includedir)/Ice/LocatorF.h" "$(includedir)/Ice/PluginF.h" "$(includedir)/Ice/ImplicitContextF.h" "$(includedir)/Ice/Logger.h" "$(includedir)/Ice/LoggerUtil.h" "$(includedir)/Ice/Plugin.h" ../IceSSL/SecureTransportTransceiverI.h ../IceSSL/InstanceF.h ../IceSSL/SSLEngineF.h "$(includedir)/IceSSL/Plugin.h" "$(includedir)/IceSSL/ConnectionInfo.h" "$(includedir)/Ice/Connection.h" "$(includedir)/Ice/Endpoint.h" ../Ice/Transceiver.h ../Ice/TransceiverF.h ../Ice/Network.h ../Ice/NetworkF.h "$(includedir)/Ice/PropertiesF.h" ../IceSSL/SSLEngine.h ../IceSSL/Util.h ../IceSSL/TrustManagerF.h
+SChannelEngine$(OBJEXT): SChannelEngine.cpp ../IceSSL/SSLEngine.h "$(includedir)/IceSSL/Plugin.h" "$(includedir)/IceUtil/Time.h" "$(includedir)/IceUtil/Config.h" "$(includedir)/Ice/Plugin.h" "$(includedir)/Ice/ProxyF.h" "$(includedir)/IceUtil/Shared.h" "$(includedir)/Ice/Config.h" "$(includedir)/Ice/ProxyHandle.h" "$(includedir)/IceUtil/Handle.h" "$(includedir)/IceUtil/Exception.h" "$(includedir)/Ice/ObjectF.h" "$(includedir)/Ice/Handle.h" "$(includedir)/Ice/Exception.h" "$(includedir)/Ice/Format.h" "$(includedir)/Ice/StreamF.h" "$(includedir)/Ice/LocalObject.h" "$(includedir)/Ice/LocalObjectF.h" "$(includedir)/Ice/StreamHelpers.h" "$(includedir)/IceUtil/ScopedArray.h" "$(includedir)/IceUtil/Iterator.h" "$(includedir)/IceUtil/Optional.h" "$(includedir)/Ice/LoggerF.h" "$(includedir)/IceUtil/UndefSysMacros.h" "$(includedir)/Ice/BuiltinSequences.h" "$(includedir)/IceSSL/Config.h" "$(includedir)/IceSSL/ConnectionInfo.h" "$(includedir)/Ice/Proxy.h" "$(includedir)/IceUtil/Mutex.h" "$(includedir)/IceUtil/Lock.h" "$(includedir)/IceUtil/ThreadException.h" "$(includedir)/IceUtil/MutexProtocol.h" "$(includedir)/Ice/ProxyFactoryF.h" "$(includedir)/Ice/ConnectionIF.h" "$(includedir)/Ice/RequestHandlerF.h" "$(includedir)/Ice/EndpointF.h" "$(includedir)/Ice/EndpointTypes.h" "$(includedir)/Ice/ObjectAdapterF.h" "$(includedir)/Ice/ReferenceF.h" "$(includedir)/Ice/OutgoingAsync.h" "$(includedir)/IceUtil/Monitor.h" "$(includedir)/IceUtil/Cond.h" "$(includedir)/IceUtil/Timer.h" "$(includedir)/IceUtil/Thread.h" "$(includedir)/IceUtil/UniquePtr.h" "$(includedir)/Ice/OutgoingAsyncF.h" "$(includedir)/Ice/InstanceF.h" "$(includedir)/Ice/CommunicatorF.h" "$(includedir)/Ice/Current.h" "$(includedir)/Ice/ConnectionF.h" "$(includedir)/Ice/Identity.h" "$(includedir)/Ice/Version.h" "$(includedir)/Ice/BasicStream.h" "$(includedir)/IceUtil/StringConverter.h" "$(includedir)/Ice/Object.h" "$(includedir)/Ice/IncomingAsyncF.h" "$(includedir)/Ice/ObjectFactoryF.h" "$(includedir)/Ice/ObjectFactoryManagerF.h" "$(includedir)/Ice/Buffer.h" "$(includedir)/Ice/Protocol.h" "$(includedir)/Ice/SlicedDataF.h" "$(includedir)/Ice/UserExceptionFactory.h" "$(includedir)/Ice/FactoryTable.h" "$(includedir)/Ice/ObserverHelper.h" "$(includedir)/Ice/Instrumentation.h" "$(includedir)/Ice/ThreadPoolF.h" "$(includedir)/Ice/Connection.h" "$(includedir)/Ice/Endpoint.h" ../IceSSL/Util.h ../IceSSL/SSLEngineF.h ../IceSSL/TrustManagerF.h ../Ice/Network.h ../Ice/NetworkF.h "$(includedir)/Ice/PropertiesF.h" "$(includedir)/Ice/LocalException.h" "$(includedir)/Ice/Logger.h" "$(includedir)/Ice/Communicator.h" "$(includedir)/Ice/GCObject.h" "$(includedir)/IceUtil/MutexPtrLock.h" "$(includedir)/Ice/Outgoing.h" "$(includedir)/Ice/Incoming.h" "$(includedir)/Ice/ServantLocatorF.h" "$(includedir)/Ice/ServantManagerF.h" "$(includedir)/Ice/ResponseHandlerF.h" "$(includedir)/Ice/IncomingAsync.h" "$(includedir)/Ice/InstrumentationF.h" "$(includedir)/Ice/RouterF.h" "$(includedir)/Ice/LocatorF.h" "$(includedir)/Ice/PluginF.h" "$(includedir)/Ice/ImplicitContextF.h" "$(includedir)/Ice/Properties.h" "$(includedir)/Ice/PropertiesAdmin.h" "$(includedir)/IceUtil/StringUtil.h" "$(includedir)/IceUtil/FileUtil.h" "$(includedir)/IceUtil/UUID.h"
+SChannelTransceiverI$(OBJEXT): SChannelTransceiverI.cpp ../IceSSL/SChannelTransceiverI.h "$(includedir)/IceSSL/Config.h" "$(includedir)/Ice/Config.h" "$(includedir)/IceUtil/Config.h" ../IceSSL/InstanceF.h "$(includedir)/IceUtil/Shared.h" "$(includedir)/Ice/Handle.h" "$(includedir)/IceUtil/Handle.h" "$(includedir)/IceUtil/Exception.h" "$(includedir)/IceSSL/Plugin.h" "$(includedir)/IceUtil/Time.h" "$(includedir)/Ice/Plugin.h" "$(includedir)/Ice/ProxyF.h" "$(includedir)/Ice/ProxyHandle.h" "$(includedir)/Ice/ObjectF.h" "$(includedir)/Ice/Exception.h" "$(includedir)/Ice/Format.h" "$(includedir)/Ice/StreamF.h" "$(includedir)/Ice/LocalObject.h" "$(includedir)/Ice/LocalObjectF.h" "$(includedir)/Ice/StreamHelpers.h" "$(includedir)/IceUtil/ScopedArray.h" "$(includedir)/IceUtil/Iterator.h" "$(includedir)/IceUtil/Optional.h" "$(includedir)/Ice/LoggerF.h" "$(includedir)/IceUtil/UndefSysMacros.h" "$(includedir)/Ice/BuiltinSequences.h" "$(includedir)/IceSSL/ConnectionInfo.h" "$(includedir)/Ice/Proxy.h" "$(includedir)/IceUtil/Mutex.h" "$(includedir)/IceUtil/Lock.h" "$(includedir)/IceUtil/ThreadException.h" "$(includedir)/IceUtil/MutexProtocol.h" "$(includedir)/Ice/ProxyFactoryF.h" "$(includedir)/Ice/ConnectionIF.h" "$(includedir)/Ice/RequestHandlerF.h" "$(includedir)/Ice/EndpointF.h" "$(includedir)/Ice/EndpointTypes.h" "$(includedir)/Ice/ObjectAdapterF.h" "$(includedir)/Ice/ReferenceF.h" "$(includedir)/Ice/OutgoingAsync.h" "$(includedir)/IceUtil/Monitor.h" "$(includedir)/IceUtil/Cond.h" "$(includedir)/IceUtil/Timer.h" "$(includedir)/IceUtil/Thread.h" "$(includedir)/IceUtil/UniquePtr.h" "$(includedir)/Ice/OutgoingAsyncF.h" "$(includedir)/Ice/InstanceF.h" "$(includedir)/Ice/CommunicatorF.h" "$(includedir)/Ice/Current.h" "$(includedir)/Ice/ConnectionF.h" "$(includedir)/Ice/Identity.h" "$(includedir)/Ice/Version.h" "$(includedir)/Ice/BasicStream.h" "$(includedir)/IceUtil/StringConverter.h" "$(includedir)/Ice/Object.h" "$(includedir)/Ice/IncomingAsyncF.h" "$(includedir)/Ice/ObjectFactoryF.h" "$(includedir)/Ice/ObjectFactoryManagerF.h" "$(includedir)/Ice/Buffer.h" "$(includedir)/Ice/Protocol.h" "$(includedir)/Ice/SlicedDataF.h" "$(includedir)/Ice/UserExceptionFactory.h" "$(includedir)/Ice/FactoryTable.h" "$(includedir)/Ice/ObserverHelper.h" "$(includedir)/Ice/Instrumentation.h" "$(includedir)/Ice/ThreadPoolF.h" "$(includedir)/Ice/Connection.h" "$(includedir)/Ice/Endpoint.h" ../IceSSL/SSLEngineF.h ../Ice/Transceiver.h ../Ice/TransceiverF.h ../Ice/Network.h ../Ice/NetworkF.h "$(includedir)/Ice/PropertiesF.h" "$(includedir)/IceUtil/StringUtil.h" ../IceSSL/Instance.h ../Ice/ProtocolInstance.h ../Ice/ProtocolInstanceF.h ../Ice/EndpointIF.h ../Ice/ConnectorF.h ../Ice/IPEndpointIF.h ../IceSSL/SSLEngine.h ../IceSSL/Util.h ../IceSSL/TrustManagerF.h "$(includedir)/Ice/Communicator.h" "$(includedir)/Ice/GCObject.h" "$(includedir)/IceUtil/MutexPtrLock.h" "$(includedir)/Ice/Outgoing.h" "$(includedir)/Ice/Incoming.h" "$(includedir)/Ice/ServantLocatorF.h" "$(includedir)/Ice/ServantManagerF.h" "$(includedir)/Ice/ResponseHandlerF.h" "$(includedir)/Ice/IncomingAsync.h" "$(includedir)/Ice/InstrumentationF.h" "$(includedir)/Ice/RouterF.h" "$(includedir)/Ice/LocatorF.h" "$(includedir)/Ice/PluginF.h" "$(includedir)/Ice/ImplicitContextF.h" "$(includedir)/Ice/Properties.h" "$(includedir)/Ice/PropertiesAdmin.h" "$(includedir)/Ice/LoggerUtil.h" "$(includedir)/Ice/Logger.h" "$(includedir)/Ice/LocalException.h"
$(HDIR)\EndpointInfo.h EndpointInfo.cpp: "$(slicedir)/IceSSL/EndpointInfo.ice" "$(slicedir)/Ice/Endpoint.ice" "$(slicedir)/Ice/Version.ice" "$(slicedir)/Ice/BuiltinSequences.ice" "$(slicedir)/Ice/EndpointF.ice" "$(SLICE2CPP)" "$(SLICEPARSERLIB)"
$(HDIR)\ConnectionInfo.h ConnectionInfo.cpp: "$(slicedir)/IceSSL/ConnectionInfo.ice" "$(slicedir)/Ice/Connection.ice" "$(slicedir)/Ice/ObjectAdapterF.ice" "$(slicedir)/Ice/Identity.ice" "$(slicedir)/Ice/Endpoint.ice" "$(slicedir)/Ice/Version.ice" "$(slicedir)/Ice/BuiltinSequences.ice" "$(slicedir)/Ice/EndpointF.ice" "$(SLICE2CPP)" "$(SLICEPARSERLIB)"
diff --git a/cpp/src/IceSSL/AcceptorI.cpp b/cpp/src/IceSSL/AcceptorI.cpp
index f835f6b8044..8a7fb3ca187 100644
--- a/cpp/src/IceSSL/AcceptorI.cpp
+++ b/cpp/src/IceSSL/AcceptorI.cpp
@@ -9,8 +9,10 @@
#include <IceSSL/AcceptorI.h>
#include <IceSSL/Instance.h>
+
+#include <IceSSL/OpenSSLTransceiverI.h>
#include <IceSSL/SecureTransportTransceiverI.h>
-#include <IceSSL/TransceiverI.h>
+#include <IceSSL/SChannelTransceiverI.h>
#include <IceSSL/Util.h>
diff --git a/cpp/src/IceSSL/Certificate.cpp b/cpp/src/IceSSL/Certificate.cpp
index ba5fa9619f3..197a6ee3c36 100644
--- a/cpp/src/IceSSL/Certificate.cpp
+++ b/cpp/src/IceSSL/Certificate.cpp
@@ -45,7 +45,7 @@ using namespace IceSSL;
const char* IceSSL::CertificateReadException::_name = "IceSSL::CertificateReadException";
-#ifdef ICE_USE_SECURE_TRANSPORT
+#if defined(ICE_USE_SECURE_TRANSPORT) || defined(ICE_USE_SCHANNEL)
//
// Map a certificate OID to its alias
//
@@ -74,17 +74,23 @@ const CertificateOID certificateOIDS[] =
{"1.2.840.113549.1.9.1", "emailAddress"},
{"0.9.2342.19200300.100.1.25", "DC"}
};
-
const int certificateOIDSSize = sizeof(certificateOIDS) / sizeof(CertificateOID);
+#endif
+
+
+#if defined(ICE_USE_SECURE_TRANSPORT)
+
string
certificateOIDAlias(const string& name)
{
for(int i = 0; i < certificateOIDSSize; ++i)
{
- if(name == certificateOIDS[i].name)
+ const CertificateOID* certificateOID = &certificateOIDS[i];
+ assert(certificateOID);
+ if(name == certificateOID->name)
{
- return certificateOIDS[i].alias;
+ return certificateOID->alias;
}
}
return name;
@@ -247,6 +253,166 @@ getX509String(SecCertificateRef cert, CFTypeRef key)
}
return value;
}
+
+#elif defined(ICE_USE_SCHANNEL)
+
+void
+loadCertificate(PCERT_SIGNED_CONTENT_INFO* cert, const char* buffer, DWORD length)
+{
+ DWORD outLength = length;
+ vector<BYTE> outBuffer;
+ outBuffer.resize(outLength);
+
+ if(!CryptStringToBinary(buffer, length, CRYPT_STRING_BASE64HEADER, &outBuffer[0], &outLength, 0, 0))
+ {
+ //
+ // Base64 data should always be bigger than binary
+ //
+ assert(GetLastError() != ERROR_MORE_DATA);
+ throw CertificateEncodingException(__FILE__, __LINE__, IceUtilInternal::lastErrorToString());
+ }
+
+ DWORD decodedLeng = 0;
+ if(!CryptDecodeObjectEx(X509_ASN_ENCODING, X509_CERT, &outBuffer[0], outLength, CRYPT_DECODE_ALLOC_FLAG, 0,
+ cert, &decodedLeng))
+ {
+ throw CertificateEncodingException(__FILE__, __LINE__, IceUtilInternal::lastErrorToString());
+ }
+}
+
+void
+loadCertificate(PCERT_SIGNED_CONTENT_INFO* cert, const string& file)
+{
+ vector<char> buffer;
+ readFile(file, buffer);
+ loadCertificate(cert, &buffer[0], static_cast<DWORD>(buffer.size()));
+}
+
+const Ice::Long TICKS_PER_MSECOND = 10000LL;
+const Ice::Long MSECS_TO_EPOCH = 11644473600000LL;
+
+IceUtil::Time
+filetimeToTime(FILETIME ftime)
+{
+ Ice::Long value = 0;
+ DWORD* dest = reinterpret_cast<DWORD*>(&value);
+ *dest++ = ftime.dwLowDateTime;
+ *dest = ftime.dwHighDateTime;
+ return IceUtil::Time::milliSeconds((value / TICKS_PER_MSECOND) - MSECS_TO_EPOCH);
+}
+
+string
+certNameToString(CERT_NAME_BLOB* name)
+{
+ assert(name);
+ DWORD length = 0;
+ if(!(length = CertNameToStr(X509_ASN_ENCODING, name, CERT_OID_NAME_STR|CERT_NAME_STR_REVERSE_FLAG, 0, 0)))
+ {
+ throw CertificateEncodingException(__FILE__, __LINE__, IceUtilInternal::lastErrorToString());
+ }
+
+ vector<char> buffer(length);
+ if(!CertNameToStr(X509_ASN_ENCODING, name, CERT_OID_NAME_STR|CERT_NAME_STR_REVERSE_FLAG, &buffer[0], length))
+ {
+ throw CertificateEncodingException(__FILE__, __LINE__, IceUtilInternal::lastErrorToString());
+ }
+
+ string s(&buffer[0]);
+ for(int i = 0; i < certificateOIDSSize; ++i)
+ {
+ const CertificateOID* certificateOID = &certificateOIDS[i];
+ assert(certificateOID);
+ const string name = string(certificateOID->name) + "=";
+ const string alias = string(certificateOID->alias) + "=";
+ size_t pos = 0;
+ while((pos = s.find(name, pos)) != string::npos)
+ {
+ s.replace(pos, name.size(), alias);
+ }
+ }
+ return s;
+}
+
+vector<pair<int, string> >
+certificateAltNames(CERT_INFO* certInfo, LPCSTR altNameOID)
+{
+ vector<pair<int, string> > altNames;
+
+ PCERT_EXTENSION extension = CertFindExtension(altNameOID, certInfo->cExtension, certInfo->rgExtension);
+ if(extension)
+ {
+ CERT_ALT_NAME_INFO* altName;
+ DWORD length = 0;
+ if(!CryptDecodeObjectEx(X509_ASN_ENCODING, X509_ALTERNATE_NAME, extension->Value.pbData,
+ extension->Value.cbData, CRYPT_DECODE_ALLOC_FLAG, 0, &altName, &length))
+ {
+ throw CertificateEncodingException(__FILE__, __LINE__, IceUtilInternal::lastErrorToString());
+ }
+
+ for(DWORD i = 0; i < altName->cAltEntry; ++i)
+ {
+ CERT_ALT_NAME_ENTRY* entry = &altName->rgAltEntry[i];
+
+ switch(entry->dwAltNameChoice)
+ {
+ case CERT_ALT_NAME_RFC822_NAME:
+ {
+ altNames.push_back(make_pair(AltNameEmail, IceUtil::wstringToString(entry->pwszRfc822Name)));
+ break;
+ }
+ case CERT_ALT_NAME_DNS_NAME:
+ {
+ altNames.push_back(make_pair(AltNameDNS, IceUtil::wstringToString(entry->pwszDNSName)));
+ break;
+ }
+ case CERT_ALT_NAME_DIRECTORY_NAME:
+ {
+ altNames.push_back(make_pair(AltNameDirectory, certNameToString(&entry->DirectoryName)));
+ break;
+ }
+ case CERT_ALT_NAME_URL:
+ {
+ altNames.push_back(make_pair(AltNameURL, IceUtil::wstringToString(entry->pwszURL)));
+ break;
+ }
+ case CERT_ALT_NAME_IP_ADDRESS:
+ {
+ if(entry->IPAddress.cbData == 4)
+ {
+ //
+ // IPv4 address
+ //
+ ostringstream os;
+ Byte* src = reinterpret_cast<Byte*>(entry->IPAddress.pbData);
+ for(int j = 0; j < 4;)
+ {
+ int value = 0;
+ Byte* dest = reinterpret_cast<Byte*>(&value);
+ *dest = *src++;
+ os << value;
+ if(++j < 4)
+ {
+ os << ".";
+ }
+ }
+ altNames.push_back(make_pair(AltNAmeIP, os.str()));
+ }
+ //
+ // TODO IPv6 Address support.
+ //
+ break;
+ }
+ default:
+ {
+ // Not supported
+ break;
+ }
+ }
+ }
+ LocalFree(altName);
+ }
+ return altNames;
+}
#endif
CertificateReadException::CertificateReadException(const char* file, int line, const string& r) :
@@ -284,10 +450,8 @@ CertificateEncodingException::CertificateEncodingException(const char* file, int
Exception(file, line)
{
assert(err);
- ostringstream os;
- os << "certificate error:\n" << errorToString(err);
+ reason = "certificate error:\n" + errorToString(err);
CFRelease(err);
- reason = os.str();
}
#endif
@@ -615,17 +779,27 @@ DistinguishedName::unescape()
}
}
-PublicKey::PublicKey(KeyRef key) :
+PublicKey::PublicKey(const CertificatePtr& cert, KeyRef key) :
+ _cert(cert),
_key(key)
{
+ if(!_key)
+ {
+ throw IceUtil::IllegalArgumentException(__FILE__, __LINE__, "Invalid key reference");
+ }
}
PublicKey::~PublicKey()
{
-#ifdef ICE_USE_SECURE_TRANSPORT
- CFRelease(_key);
-#else
- EVP_PKEY_free(_key);
+#ifndef ICE_USE_SCHANNEL
+ if(_key)
+ {
+# if defined(ICE_USE_SECURE_TRANSPORT)
+ CFRelease(_key);
+# else
+ EVP_PKEY_free(_key);
+# endif
+ }
#endif
}
@@ -638,31 +812,67 @@ PublicKey::key() const
//
// The caller is responsible for incrementing the reference count.
//
-Certificate::Certificate(X509CertificateRef cert) :
- _cert(cert)
+Certificate::Certificate(X509CertificateRef cert) : _cert(cert)
+#ifdef ICE_USE_SCHANNEL
+ , _certInfo(0)
+#endif
{
if(!_cert)
{
throw IceUtil::IllegalArgumentException(__FILE__, __LINE__, "Invalid certificate reference");
}
+
+#ifdef ICE_USE_SCHANNEL
+ try
+ {
+ //
+ // Decode certificate info
+ //
+ DWORD length = 0;
+ if(!CryptDecodeObjectEx(X509_ASN_ENCODING, X509_CERT_TO_BE_SIGNED, _cert->ToBeSigned.pbData,
+ _cert->ToBeSigned.cbData, CRYPT_DECODE_ALLOC_FLAG, 0, &_certInfo, &length))
+ {
+ throw CertificateEncodingException(__FILE__, __LINE__, IceUtilInternal::lastErrorToString());
+ }
+ }
+ catch(...)
+ {
+ LocalFree(_cert);
+ _cert = 0;
+ throw;
+ }
+#endif
}
Certificate::~Certificate()
{
-#ifdef ICE_USE_SECURE_TRANSPORT
- CFRelease(_cert);
+ if(_cert)
+ {
+#if defined(ICE_USE_SECURE_TRANSPORT)
+ CFRelease(_cert);
+#elif defined(ICE_USE_SCHANNEL)
+ LocalFree(_cert);
+ if(_certInfo)
+ {
+ LocalFree(_certInfo);
+ }
#else
- X509_free(_cert);
+ X509_free(_cert);
#endif
+ }
}
CertificatePtr
Certificate::load(const string& file)
{
-#ifdef ICE_USE_SECURE_TRANSPORT
+#if defined(ICE_USE_SECURE_TRANSPORT)
SecCertificateRef cert = 0;
loadCertificate(&cert, 0, 0, 0, file);
return new Certificate(cert);
+#elif defined(ICE_USE_SCHANNEL)
+ CERT_SIGNED_CONTENT_INFO* cert;
+ loadCertificate(&cert, file);
+ return new Certificate(cert);
#else
BIO *cert = BIO_new(BIO_s_file());
if(BIO_read_filename(cert, file.c_str()) <= 0)
@@ -685,7 +895,7 @@ Certificate::load(const string& file)
CertificatePtr
Certificate::decode(const string& encoding)
{
-#ifdef ICE_USE_SECURE_TRANSPORT
+#if defined(ICE_USE_SECURE_TRANSPORT)
CFDataRef data = CFDataCreateWithBytesNoCopy(kCFAllocatorDefault, reinterpret_cast<const UInt8*>(encoding.c_str()),
encoding.size(), kCFAllocatorNull);
@@ -696,34 +906,31 @@ Certificate::decode(const string& encoding)
memset(&params, 0, sizeof(params));
params.version = SEC_KEY_IMPORT_EXPORT_PARAMS_VERSION;
- CFArrayRef items = 0;
-
+ CFArrayRef items = 0;
OSStatus err = SecItemImport(data, 0, &format, &type, 0, &params, 0, &items);
-
CFRelease(data);
-
- if(err != noErr)
+ if(err)
{
- ostringstream os;
- os << "error decoding certificate:\n" << errorToString(err);
- CertificateReadException ex(__FILE__, __LINE__, os.str());
- throw ex;
+ throw CertificateEncodingException(__FILE__, __LINE__, errorToString(err));
}
SecKeychainItemRef item = (SecKeychainItemRef)CFArrayGetValueAtIndex(items, 0);
-
CFRetain(item);
CFRelease(items);
assert(SecCertificateGetTypeID() == CFGetTypeID(item));
return new Certificate((SecCertificateRef)item);
+#elif defined(ICE_USE_SCHANNEL)
+ CERT_SIGNED_CONTENT_INFO* cert;
+ loadCertificate(&cert, encoding.c_str(), static_cast<DWORD>(encoding.size()));
+ return new Certificate(cert);
#else
BIO *cert = BIO_new_mem_buf(static_cast<void*>(const_cast<char*>(&encoding[0])), static_cast<int>(encoding.size()));
X509CertificateRef x = PEM_read_bio_X509_AUX(cert, NULL, NULL, NULL);
if(x == NULL)
{
BIO_free(cert);
- throw CertificateReadException(__FILE__, __LINE__, "error decoding certificate:\n" + getSslErrors(false));
+ throw CertificateEncodingException(__FILE__, __LINE__, getSslErrors(false));
}
BIO_free(cert);
return new Certificate(x);
@@ -733,8 +940,10 @@ Certificate::decode(const string& encoding)
bool
Certificate::operator==(const Certificate& other) const
{
-#ifdef ICE_USE_SECURE_TRANSPORT
+#if defined(ICE_USE_SECURE_TRANSPORT)
return CFEqual(_cert, other._cert);
+#elif defined(ICE_USE_SCHANNEL)
+ return CertCompareCertificate(X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, _certInfo, other._certInfo);
#else
return X509_cmp(_cert, other._cert) == 0;
#endif
@@ -743,8 +952,10 @@ Certificate::operator==(const Certificate& other) const
bool
Certificate::operator!=(const Certificate& other) const
{
-#ifdef ICE_USE_SECURE_TRANSPORT
+#if defined(ICE_USE_SECURE_TRANSPORT)
return !CFEqual(_cert, other._cert);
+#elif defined(ICE_USE_SCHANNEL)
+ return !CertCompareCertificate(X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, _certInfo, other._certInfo);
#else
return X509_cmp(_cert, other._cert) != 0;
#endif
@@ -753,26 +964,25 @@ Certificate::operator!=(const Certificate& other) const
PublicKeyPtr
Certificate::getPublicKey() const
{
-#ifdef ICE_USE_SECURE_TRANSPORT
+#if defined(ICE_USE_SECURE_TRANSPORT)
SecKeyRef key;
OSStatus err = SecCertificateCopyPublicKey(_cert, &key);
- if(err != noErr)
+ if(err)
{
- ostringstream os;
- os << "certificate error:\n" << errorToString(err);
- CertificateEncodingException ex(__FILE__, __LINE__, os.str());
- throw ex;
+ throw CertificateEncodingException(__FILE__, __LINE__, errorToString(err));
}
- return new PublicKey(key);
+ return new PublicKey(const_cast<Certificate*>(this), key);
+#elif defined(ICE_USE_SCHANNEL)
+ return new PublicKey(const_cast<Certificate*>(this), &_certInfo->SubjectPublicKeyInfo);
#else
- return new PublicKey(X509_get_pubkey(_cert));
+ return new PublicKey(const_cast<Certificate*>(this), X509_get_pubkey(_cert));
#endif
}
bool
Certificate::verify(const CertificatePtr& cert) const
{
-#ifdef ICE_USE_SECURE_TRANSPORT
+#if defined(ICE_USE_SECURE_TRANSPORT)
//
// We first check if the given certificate subject match
// our certificate issuer. Otherwhise when use SecTrustEvaluate
@@ -785,18 +995,32 @@ Certificate::verify(const CertificatePtr& cert) const
CFDataRef issuer = 0;
CFDataRef subject = 0;
- issuer = SecCertificateCopyNormalizedIssuerContent(_cert, &error);
- if(error)
+ try
{
- CertificateEncodingException ex(__FILE__, __LINE__, error);
- throw ex;
+ issuer = SecCertificateCopyNormalizedIssuerContent(_cert, &error);
+ if(error)
+ {
+ throw CertificateEncodingException(__FILE__, __LINE__, error);
+ }
+
+ subject = SecCertificateCopyNormalizedSubjectContent(cert->getCert(), &error);
+ if(error)
+ {
+ throw CertificateEncodingException(__FILE__, __LINE__, error);
+ }
}
-
- subject = SecCertificateCopyNormalizedSubjectContent(cert->getCert(), &error);
- if(error)
+ catch(...)
{
- CertificateEncodingException ex(__FILE__, __LINE__, error);
- throw ex;
+ if(issuer)
+ {
+ CFRelease(issuer);
+ }
+
+ if(subject)
+ {
+ CFRelease(subject);
+ }
+ throw;
}
//
@@ -816,37 +1040,28 @@ Certificate::verify(const CertificatePtr& cert) const
SecPolicyRef policy = SecPolicyCreateBasicX509();
SecTrustResultType trustResult = kSecTrustResultInvalid;
SecTrustRef trust;
- OSStatus err = SecTrustCreateWithCertificates(_cert, policy, &trust);
-
- if(err != noErr)
+ OSStatus err = 0;
+
+ if((err = SecTrustCreateWithCertificates(_cert, policy, &trust)))
{
- ostringstream os;
- os << "certificate error:\n" << errorToString(err);
- CertificateEncodingException ex(__FILE__, __LINE__, os.str());
- throw ex;
+ throw CertificateEncodingException(__FILE__, __LINE__, errorToString(err));
}
SecCertificateRef certs[1] = { cert->getCert() };
- CFArrayRef anchorCertificates = CFArrayCreate(kCFAllocatorDefault, (const void**)&certs, 1, &kCFTypeArrayCallBacks);
+ CFArrayRef anchorCertificates = CFArrayCreate(kCFAllocatorDefault, (const void**)&certs, 1,
+ &kCFTypeArrayCallBacks);
err = SecTrustSetAnchorCertificates(trust, anchorCertificates);
CFRelease(anchorCertificates);
- if(err != noErr)
+ if(err)
{
- ostringstream os;
- os << "certificate error:\n" << errorToString(err);
- CertificateEncodingException ex(__FILE__, __LINE__, os.str());
- throw ex;
+ throw CertificateEncodingException(__FILE__, __LINE__, errorToString(err));
}
- err = SecTrustEvaluate(trust, &trustResult);
- if(err != noErr)
+ if((err = SecTrustEvaluate(trust, &trustResult)))
{
- ostringstream os;
- os << "certificate error:\n" << errorToString(err);
- CertificateEncodingException ex(__FILE__, __LINE__, os.str());
- throw ex;
+ throw CertificateEncodingException(__FILE__, __LINE__, errorToString(err));
}
valid = trustResult == kSecTrustResultUnspecified;
@@ -869,12 +1084,23 @@ Certificate::verify(const CertificatePtr& cert) const
}
}
return valid;
+#elif defined(ICE_USE_SCHANNEL)
+ BYTE* buffer = 0;
+ DWORD length = 0;
+ if(!CryptEncodeObjectEx(X509_ASN_ENCODING, X509_CERT, _cert, CRYPT_ENCODE_ALLOC_FLAG , 0, &buffer, &length))
+ {
+ throw CertificateEncodingException(__FILE__, __LINE__, IceUtilInternal::lastErrorToString());
+ }
+
+ bool result = CryptVerifyCertificateSignature(0, X509_ASN_ENCODING, buffer, length, cert->getPublicKey()->key());
+ LocalFree(buffer);
+ return result;
#else
return X509_verify(_cert, cert->getPublicKey()->key()) > 0;
#endif
}
-#ifndef ICE_USE_SECURE_TRANSPORT
+#ifdef ICE_USE_OPENSSL
bool
Certificate::verify(const PublicKeyPtr& key) const
{
@@ -885,19 +1111,53 @@ Certificate::verify(const PublicKeyPtr& key) const
string
Certificate::encode() const
{
-#ifdef ICE_USE_SECURE_TRANSPORT
+#if defined(ICE_USE_SECURE_TRANSPORT)
CFDataRef exported;
OSStatus err = SecItemExport(_cert, kSecFormatPEMSequence, kSecItemPemArmour, 0, &exported);
if(err != noErr)
{
- ostringstream os;
- os << "error encoding certificate:\n" << errorToString(err);
- CertificateEncodingException ex(__FILE__, __LINE__, os.str());
- throw ex;
+ throw CertificateEncodingException(__FILE__, __LINE__, errorToString(err));
}
string data(reinterpret_cast<const char*>(CFDataGetBytePtr(exported)), CFDataGetLength(exported));
CFRelease(exported);
return data;
+#elif defined(ICE_USE_SCHANNEL)
+ string s;
+ DWORD length = 0;
+ BYTE* buffer = 0;
+ try
+ {
+ if(!CryptEncodeObjectEx(X509_ASN_ENCODING, X509_CERT, _cert, CRYPT_ENCODE_ALLOC_FLAG , 0, &buffer, &length))
+ {
+ throw CertificateEncodingException(__FILE__, __LINE__, IceUtilInternal::lastErrorToString());
+ }
+
+ DWORD encodedLength = 0;
+ if(!CryptBinaryToString(buffer, length, CRYPT_STRING_BASE64HEADER | CRYPT_STRING_NOCR, 0, &encodedLength))
+ {
+ throw CertificateEncodingException(__FILE__, __LINE__, IceUtilInternal::lastErrorToString());
+ }
+
+ std::vector<char> encoded;
+ encoded.resize(encodedLength);
+ if(!CryptBinaryToString(buffer, length, CRYPT_STRING_BASE64HEADER | CRYPT_STRING_NOCR, &encoded[0],
+ &encodedLength))
+ {
+ throw CertificateEncodingException(__FILE__, __LINE__, IceUtilInternal::lastErrorToString());
+ }
+ LocalFree(buffer);
+ buffer = 0;
+ s.assign(&encoded[0]);
+ }
+ catch(...)
+ {
+ if(buffer)
+ {
+ LocalFree(buffer);
+ }
+ throw;
+ }
+ return s;
#else
BIO* out = BIO_new(BIO_s_mem());
int i = PEM_write_bio_X509_AUX(out, _cert);
@@ -930,8 +1190,10 @@ Certificate::checkValidity(const IceUtil::Time& now) const
IceUtil::Time
Certificate::getNotAfter() const
{
-#ifdef ICE_USE_SECURE_TRANSPORT
+#if defined(ICE_USE_SECURE_TRANSPORT)
return getX509Date(_cert, kSecOIDX509V1ValidityNotAfter);
+#elif defined(ICE_USE_SCHANNEL)
+ return filetimeToTime(_certInfo->NotAfter);
#else
return ASMUtcTimeToIceUtilTime(X509_get_notAfter(_cert));
#endif
@@ -940,8 +1202,10 @@ Certificate::getNotAfter() const
IceUtil::Time
Certificate::getNotBefore() const
{
-#ifdef ICE_USE_SECURE_TRANSPORT
+#if defined(ICE_USE_SECURE_TRANSPORT)
return getX509Date(_cert, kSecOIDX509V1ValidityNotBefore);
+#elif defined(ICE_USE_SCHANNEL)
+ return filetimeToTime(_certInfo->NotBefore);
#else
return ASMUtcTimeToIceUtilTime(X509_get_notBefore(_cert));
#endif
@@ -950,8 +1214,22 @@ Certificate::getNotBefore() const
string
Certificate::getSerialNumber() const
{
-#ifdef ICE_USE_SECURE_TRANSPORT
+#if defined(ICE_USE_SECURE_TRANSPORT)
return getX509String(_cert, kSecOIDX509V1SerialNumber);
+#elif defined(ICE_USE_SCHANNEL)
+ ostringstream os;
+ for(int i = _certInfo->SerialNumber.cbData - 1; i >= 0; --i)
+ {
+ unsigned char c = _certInfo->SerialNumber.pbData[i];
+ os.fill('0');
+ os.width(2);
+ os << hex << (int)c;
+ if(i)
+ {
+ os << ' ';
+ }
+ }
+ return IceUtilInternal::toUpper(os.str());
#else
BIGNUM* bn = ASN1_INTEGER_to_BN(X509_get_serialNumber(_cert), 0);
char* dec = BN_bn2dec(bn);
@@ -976,8 +1254,10 @@ Certificate::getSerialNumber() const
DistinguishedName
Certificate::getIssuerDN() const
{
-#ifdef ICE_USE_SECURE_TRANSPORT
+#if defined(ICE_USE_SECURE_TRANSPORT)
return getX509Name(_cert, kSecOIDX509V1IssuerName);
+#elif defined(ICE_USE_SCHANNEL)
+ return DistinguishedName(certNameToString(&_certInfo->Issuer));
#else
return DistinguishedName(RFC2253::parseStrict(convertX509NameToString(X509_get_issuer_name(_cert))));
#endif
@@ -986,19 +1266,22 @@ Certificate::getIssuerDN() const
vector<pair<int, string> >
Certificate::getIssuerAlternativeNames()
{
-#ifdef ICE_USE_SECURE_TRANSPORT
+#if defined(ICE_USE_SECURE_TRANSPORT)
return getX509AltName(_cert, kSecOIDIssuerAltName);
+#elif defined(ICE_USE_SCHANNEL)
+ return certificateAltNames(_certInfo, szOID_ISSUER_ALT_NAME2);
#else
- return convertGeneralNames(reinterpret_cast<GENERAL_NAMES*>(
- X509_get_ext_d2i(_cert, NID_issuer_alt_name, 0, 0)));
+ return convertGeneralNames(reinterpret_cast<GENERAL_NAMES*>(X509_get_ext_d2i(_cert, NID_issuer_alt_name, 0, 0)));
#endif
}
DistinguishedName
Certificate::getSubjectDN() const
{
-#ifdef ICE_USE_SECURE_TRANSPORT
+#if defined(ICE_USE_SECURE_TRANSPORT)
return getX509Name(_cert, kSecOIDX509V1SubjectName);
+#elif defined(ICE_USE_SCHANNEL)
+ return DistinguishedName(certNameToString(&_certInfo->Subject));
#else
return DistinguishedName(RFC2253::parseStrict(convertX509NameToString(X509_get_subject_name(_cert))));
#endif
@@ -1007,19 +1290,22 @@ Certificate::getSubjectDN() const
vector<pair<int, string> >
Certificate::getSubjectAlternativeNames()
{
-#ifdef ICE_USE_SECURE_TRANSPORT
+#if defined(ICE_USE_SECURE_TRANSPORT)
return getX509AltName(_cert, kSecOIDSubjectAltName);
+#elif defined(ICE_USE_SCHANNEL)
+ return certificateAltNames(_certInfo, szOID_SUBJECT_ALT_NAME2);
#else
- return convertGeneralNames(
- reinterpret_cast<GENERAL_NAMES*>(X509_get_ext_d2i(_cert, NID_subject_alt_name, 0, 0)));
+ return convertGeneralNames(reinterpret_cast<GENERAL_NAMES*>(X509_get_ext_d2i(_cert, NID_subject_alt_name, 0, 0)));
#endif
}
int
Certificate::getVersion() const
{
-#ifdef ICE_USE_SECURE_TRANSPORT
- return atoi(getX509String(_cert, kSecOIDX509V1Version).c_str());
+#if defined(ICE_USE_SECURE_TRANSPORT)
+ return atoi(getX509String(_cert, kSecOIDX509V1Version).c_str()) - 1;
+#elif defined(ICE_USE_SCHANNEL)
+ return _certInfo->dwVersion;
#else
return static_cast<int>(X509_get_version(_cert));
#endif
diff --git a/cpp/src/IceSSL/ConnectorI.cpp b/cpp/src/IceSSL/ConnectorI.cpp
index 74db5e52cb6..f1640673ba7 100644
--- a/cpp/src/IceSSL/ConnectorI.cpp
+++ b/cpp/src/IceSSL/ConnectorI.cpp
@@ -9,8 +9,11 @@
#include <IceSSL/ConnectorI.h>
#include <IceSSL/Instance.h>
+
+#include <IceSSL/OpenSSLTransceiverI.h>
#include <IceSSL/SecureTransportTransceiverI.h>
-#include <IceSSL/TransceiverI.h>
+#include <IceSSL/SChannelTransceiverI.h>
+
#include <IceSSL/EndpointI.h>
#include <IceSSL/Util.h>
#include <Ice/Communicator.h>
diff --git a/cpp/src/IceSSL/EndpointI.cpp b/cpp/src/IceSSL/EndpointI.cpp
index 93994804783..d17b7e16cc8 100644
--- a/cpp/src/IceSSL/EndpointI.cpp
+++ b/cpp/src/IceSSL/EndpointI.cpp
@@ -10,7 +10,6 @@
#include <IceSSL/EndpointI.h>
#include <IceSSL/AcceptorI.h>
#include <IceSSL/ConnectorI.h>
-#include <IceSSL/TransceiverI.h>
#include <IceSSL/Instance.h>
#include <Ice/BasicStream.h>
#include <Ice/LocalException.h>
diff --git a/cpp/src/IceSSL/Makefile b/cpp/src/IceSSL/Makefile
index 0b77453d20e..c63570744ae 100644
--- a/cpp/src/IceSSL/Makefile
+++ b/cpp/src/IceSSL/Makefile
@@ -24,14 +24,16 @@ OBJS = AcceptorI.o \
EndpointI.o \
Instance.o \
PluginI.o \
- TransceiverI.o \
+ OpenSSLTransceiverI.o \
SecureTransportTransceiverI.o \
Util.o \
RFC2253.o \
TrustManager.o \
SSLEngine.o \
OpenSSLEngine.o \
- SecureTransportEngine.o
+ SecureTransportEngine.o \
+ SChannelEngine.o \
+ SChannelTransceiverI.o
SRCS = $(OBJS:.o=.cpp)
diff --git a/cpp/src/IceSSL/Makefile.mak b/cpp/src/IceSSL/Makefile.mak
index 33ea5d194b5..4e06d935fd0 100644
--- a/cpp/src/IceSSL/Makefile.mak
+++ b/cpp/src/IceSSL/Makefile.mak
@@ -9,25 +9,25 @@
top_srcdir = ..\..
-LIBNAME = $(top_srcdir)\lib\icessl$(LIBSUFFIX).lib
+LIBNAME = $(top_srcdir)\lib\icessl$(LIBSUFFIX).lib
DLLNAME = $(top_srcdir)\bin\icessl$(SOVERSION)$(LIBSUFFIX)$(COMPSUFFIX).dll
TARGETS = $(LIBNAME) $(DLLNAME)
OBJS = AcceptorI.obj \
Certificate.obj \
- ConnectorI.obj \
- ConnectionInfo.obj \
- EndpointInfo.obj \
- EndpointI.obj \
- Instance.obj \
- PluginI.obj \
- TransceiverI.obj \
- Util.obj \
- RFC2253.obj \
- TrustManager.obj \
SSLEngine.obj \
- OpenSSLEngine.obj
+ ConnectorI.obj \
+ ConnectionInfo.obj \
+ EndpointInfo.obj \
+ EndpointI.obj \
+ Instance.obj \
+ PluginI.obj \
+ SChannelEngine.obj \
+ SChannelTransceiverI.obj \
+ Util.obj \
+ RFC2253.obj \
+ TrustManager.obj
SRCS = $(OBJS:.obj=.cpp)
@@ -39,13 +39,13 @@ SDIR = $(slicedir)\IceSSL
CPPFLAGS = -I.. $(CPPFLAGS) -DICE_SSL_API_EXPORTS -DWIN32_LEAN_AND_MEAN
SLICE2CPPFLAGS = --ice --include-dir IceSSL --dll-export ICE_SSL_API $(SLICE2CPPFLAGS)
-LINKWITH = $(OPENSSL_LIBS) $(LIBS) ws2_32.lib
+LINKWITH = $(LIBS) $(SSL_OS_LIBS) ws2_32.lib
!if "$(GENERATE_PDB)" == "yes"
-PDBFLAGS = /pdb:$(DLLNAME:.dll=.pdb)
+PDBFLAGS = /pdb:$(DLLNAME:.dll=.pdb)
!endif
-RES_FILE = IceSSL.res
+RES_FILE = IceSSL.res
$(LIBNAME): $(DLLNAME)
diff --git a/cpp/src/IceSSL/OpenSSLEngine.cpp b/cpp/src/IceSSL/OpenSSLEngine.cpp
index f4e4d196efa..3c1f54a9bc1 100644
--- a/cpp/src/IceSSL/OpenSSLEngine.cpp
+++ b/cpp/src/IceSSL/OpenSSLEngine.cpp
@@ -30,6 +30,7 @@
#include <openssl/rand.h>
#include <openssl/err.h>
#include <openssl/ssl.h>
+#include <openssl/pkcs12.h>
using namespace std;
using namespace Ice;
@@ -163,7 +164,8 @@ passwordError()
return (reason == PEM_R_BAD_BASE64_DECODE ||
reason == PEM_R_BAD_DECRYPT ||
reason == PEM_R_BAD_PASSWORD_READ ||
- reason == PEM_R_PROBLEMS_GETTING_PASSWORD);
+ reason == PEM_R_PROBLEMS_GETTING_PASSWORD ||
+ reason == PKCS12_R_MAC_VERIFY_FAILURE);
}
}
@@ -245,24 +247,21 @@ OpenSSLEngine::OpenSSLEngine(const CommunicatorPtr& communicator) :
if(!IceUtilInternal::splitString(randFiles, IceUtilInternal::pathsep, files))
{
- PluginInitializationException ex(__FILE__, __LINE__);
- ex.reason = "IceSSL: invalid value for IceSSL.Random:\n" + randFiles;
- throw ex;
+ throw PluginInitializationException(__FILE__, __LINE__,
+ "IceSSL: invalid value for IceSSL.Random:\n" + randFiles);
}
for(vector<string>::iterator p = files.begin(); p != files.end(); ++p)
{
string file = *p;
if(!checkPath(file, defaultDir, false))
{
- PluginInitializationException ex(__FILE__, __LINE__);
- ex.reason = "IceSSL: entropy data file not found:\n" + file;
- throw ex;
+ throw PluginInitializationException(__FILE__, __LINE__,
+ "IceSSL: entropy data file not found:\n" + file);
}
if(!RAND_load_file(file.c_str(), 1024))
{
- PluginInitializationException ex(__FILE__, __LINE__);
- ex.reason = "IceSSL: unable to load entropy data from " + file;
- throw ex;
+ throw PluginInitializationException(__FILE__, __LINE__,
+ "IceSSL: unable to load entropy data from " + file);
}
}
}
@@ -276,9 +275,8 @@ OpenSSLEngine::OpenSSLEngine(const CommunicatorPtr& communicator) :
{
if(RAND_egd(entropyDaemon.c_str()) <= 0)
{
- PluginInitializationException ex(__FILE__, __LINE__);
- ex.reason = "IceSSL: EGD failure using file " + entropyDaemon;
- throw ex;
+ throw PluginInitializationException(__FILE__, __LINE__,
+ "IceSSL: EGD failure using file " + entropyDaemon);
}
}
# endif
@@ -366,9 +364,8 @@ OpenSSLEngine::initialize()
_ctx = SSL_CTX_new(getMethod(protocols));
if(!_ctx)
{
- PluginInitializationException ex(__FILE__, __LINE__);
- ex.reason = "IceSSL: unable to create SSL context:\n" + sslErrors();
- throw ex;
+ throw PluginInitializationException(__FILE__, __LINE__,
+ "IceSSL: unable to create SSL context:\n" + sslErrors());
}
//
@@ -407,9 +404,8 @@ OpenSSLEngine::initialize()
{
if(!checkPath(caFile, defaultDir, false))
{
- PluginInitializationException ex(__FILE__, __LINE__);
- ex.reason = "IceSSL: CA certificate file not found:\n" + caFile;
- throw ex;
+ throw PluginInitializationException(__FILE__, __LINE__,
+ "IceSSL: CA certificate file not found:\n" + caFile);
}
file = caFile.c_str();
}
@@ -417,9 +413,8 @@ OpenSSLEngine::initialize()
{
if(!checkPath(caDir, defaultDir, true))
{
- PluginInitializationException ex(__FILE__, __LINE__);
- ex.reason = "IceSSL: CA certificate directory not found:\n" + caDir;
- throw ex;
+ throw PluginInitializationException(__FILE__, __LINE__,
+ "IceSSL: CA certificate directory not found:\n" + caDir);
}
dir = caDir.c_str();
}
@@ -430,18 +425,17 @@ OpenSSLEngine::initialize()
// password retries.
//
int count = 0;
- int err = 0;
+ int success = 0;
while(count < passwordRetryMax)
{
ERR_clear_error();
- err = SSL_CTX_load_verify_locations(_ctx, file, dir);
- if(err)
+ if((success = SSL_CTX_load_verify_locations(_ctx, file, dir))|| !passwordError())
{
break;
}
++count;
}
- if(err == 0)
+ if(!success)
{
string msg = "IceSSL: unable to establish CA certificates";
if(passwordError())
@@ -456,9 +450,7 @@ OpenSSLEngine::initialize()
msg += ":\n" + err;
}
}
- PluginInitializationException ex(__FILE__, __LINE__);
- ex.reason = msg;
- throw ex;
+ throw PluginInitializationException(__FILE__, __LINE__, msg);
}
}
}
@@ -467,137 +459,232 @@ OpenSSLEngine::initialize()
// Establish the certificate chains and private keys. One RSA certificate and
// one DSA certificate are allowed.
//
+ string certFile = properties->getProperty(propPrefix + "CertFile");
+ string keyFile = properties->getProperty(propPrefix + "KeyFile");
+ bool keyLoaded = false;
+
+ vector<string>::size_type numCerts = 0;
+ if(!certFile.empty())
{
- string certFile = properties->getProperty(propPrefix + "CertFile");
- string keyFile = properties->getProperty(propPrefix + "KeyFile");
- vector<string>::size_type numCerts = 0;
- if(!certFile.empty())
+ vector<string> files;
+ if(!IceUtilInternal::splitString(certFile, IceUtilInternal::pathsep, files) || files.size() > 2)
{
- vector<string> files;
- if(!IceUtilInternal::splitString(certFile, IceUtilInternal::pathsep, files) || files.size() > 2)
+ PluginInitializationException ex(__FILE__, __LINE__,
+ "IceSSL: invalid value for " + propPrefix + "CertFile:\n" + certFile);
+ }
+ numCerts = files.size();
+ for(vector<string>::iterator p = files.begin(); p != files.end(); ++p)
+ {
+ string file = *p;
+ if(!checkPath(file, defaultDir, false))
{
- PluginInitializationException ex(__FILE__, __LINE__);
- ex.reason = "IceSSL: invalid value for " + propPrefix + "CertFile:\n" + certFile;
- throw ex;
+ PluginInitializationException ex(__FILE__, __LINE__,
+ "IceSSL: certificate file not found:\n" + file);
+ }
+ //
+ // First we try to load the certificate using PKCS12 format if that fails
+ // we fallback to PEM format.
+ //
+ FILE* f = fopen(file.c_str(), "rb");
+ if(!f)
+ {
+ throw PluginInitializationException(__FILE__, __LINE__,
+ "IceSSL: unable to load certificate chain from file " + file + "\n" +
+ IceUtilInternal::lastErrorToString());
}
- numCerts = files.size();
- for(vector<string>::iterator p = files.begin(); p != files.end(); ++p)
+
+ int success = 0;
+
+ PKCS12* p12 = d2i_PKCS12_fp(f, 0);
+ fclose(f);
+ if(p12)
{
- string file = *p;
- if(!checkPath(file, defaultDir, false))
+ X509* cert = 0;
+ EVP_PKEY* key = 0;
+ STACK_OF(X509)* chain = 0;
+
+ int count = 0;
+ try
{
- PluginInitializationException ex(__FILE__, __LINE__);
- ex.reason = "IceSSL: certificate file not found:\n" + file;
- throw ex;
+ while(count < passwordRetryMax)
+ {
+ ERR_clear_error();
+ if(!(success = PKCS12_parse(p12, password(false).c_str(), &key, &cert, &chain)))
+ {
+ if(passwordError())
+ {
+ count++;
+ continue;
+ }
+ break;
+ }
+
+ if(!cert || !SSL_CTX_use_certificate(_ctx, cert))
+ {
+ throw PluginInitializationException(__FILE__, __LINE__,
+ "IceSSL: unable to establish SSL certificate:\n" +
+ (cert ? sslErrors() : "certificate not found"));
+ }
+
+ if(!key || !SSL_CTX_use_PrivateKey(_ctx, key))
+ {
+ throw PluginInitializationException(__FILE__, __LINE__,
+ "IceSSL: unable to establish SSL private key:\n" +
+ (key ? sslErrors() : "key not found"));
+ }
+ keyLoaded = true;
+
+ if(chain && sk_X509_num(chain))
+ {
+ for(int i = 0; i < sk_X509_num(chain); i++)
+ {
+ if(!SSL_CTX_add_extra_chain_cert(_ctx, sk_X509_value(chain, i)))
+ {
+ throw PluginInitializationException(__FILE__, __LINE__,
+ "IceSSL: unable to add extra SSL certificate:\n" + sslErrors());
+ }
+ }
+ }
+
+ if(chain)
+ {
+ sk_X509_pop_free(chain, X509_free);
+ }
+ assert(key && cert);
+ EVP_PKEY_free(key);
+ X509_free(cert);
+ break;
+ }
+ PKCS12_free(p12);
+ }
+ catch(...)
+ {
+ PKCS12_free(p12);
+ if(chain)
+ {
+ sk_X509_pop_free(chain, X509_free);
+ }
+
+ if(key)
+ {
+ EVP_PKEY_free(key);
+ }
+
+ if(cert)
+ {
+ X509_free(cert);
+ }
+ throw;
}
+ }
+ else
+ {
//
// The certificate may be stored in an encrypted file, so handle
// password retries.
//
int count = 0;
- int err = 0;
while(count < passwordRetryMax)
{
ERR_clear_error();
- err = SSL_CTX_use_certificate_chain_file(_ctx, file.c_str());
- if(err)
+ if(!(success = SSL_CTX_use_certificate_chain_file(_ctx, file.c_str())))
{
- break;
+ if(passwordError())
+ {
+ count++;
+ continue;
+ }
}
- ++count;
+ count++;
}
- if(err == 0)
+ }
+
+ if(!success)
+ {
+ string msg = "IceSSL: unable to load certificate chain from file " + file;
+ if(passwordError())
{
- string msg = "IceSSL: unable to load certificate chain from file " + file;
- if(passwordError())
- {
- msg += ":\ninvalid password";
- }
- else
+ msg += ":\ninvalid password";
+ }
+ else
+ {
+ string err = sslErrors();
+ if(!err.empty())
{
- string err = sslErrors();
- if(!err.empty())
- {
- msg += ":\n" + err;
- }
+ msg += ":\n" + err;
}
- PluginInitializationException ex(__FILE__, __LINE__);
- ex.reason = msg;
- throw ex;
}
+ throw PluginInitializationException(__FILE__, __LINE__, msg);
}
}
- if(keyFile.empty())
+ }
+
+ if(keyFile.empty())
+ {
+ keyFile = certFile; // Assume the certificate file also contains the private key.
+ }
+ if(!keyLoaded && !keyFile.empty())
+ {
+ vector<string> files;
+ if(!IceUtilInternal::splitString(keyFile, IceUtilInternal::pathsep, files) || files.size() > 2)
+ {
+ throw PluginInitializationException(__FILE__, __LINE__,
+ "IceSSL: invalid value for " + propPrefix + "KeyFile:\n" + keyFile);
+ }
+ if(files.size() != numCerts)
{
- keyFile = certFile; // Assume the certificate file also contains the private key.
+ throw PluginInitializationException(__FILE__, __LINE__,
+ "IceSSL: " + propPrefix + "KeyFile does not agree with " + propPrefix + "CertFile");
}
- if(!keyFile.empty())
+ for(vector<string>::iterator p = files.begin(); p != files.end(); ++p)
{
- vector<string> files;
- if(!IceUtilInternal::splitString(keyFile, IceUtilInternal::pathsep, files) || files.size() > 2)
- {
- PluginInitializationException ex(__FILE__, __LINE__);
- ex.reason = "IceSSL: invalid value for " + propPrefix + "KeyFile:\n" + keyFile;
- throw ex;
- }
- if(files.size() != numCerts)
+ string file = *p;
+ if(!checkPath(file, defaultDir, false))
{
- PluginInitializationException ex(__FILE__, __LINE__);
- ex.reason = "IceSSL: " + propPrefix + "KeyFile does not agree with " + propPrefix + "CertFile";
- throw ex;
+ throw PluginInitializationException(__FILE__, __LINE__,
+ "IceSSL: key file not found:\n" + file);
}
- for(vector<string>::iterator p = files.begin(); p != files.end(); ++p)
+ //
+ // The private key may be stored in an encrypted file, so handle
+ // password retries.
+ //
+ int count = 0;
+ int err = 0;
+ while(count < passwordRetryMax)
{
- string file = *p;
- if(!checkPath(file, defaultDir, false))
+ ERR_clear_error();
+ err = SSL_CTX_use_PrivateKey_file(_ctx, file.c_str(), SSL_FILETYPE_PEM);
+ if(err)
{
- PluginInitializationException ex(__FILE__, __LINE__);
- ex.reason = "IceSSL: key file not found:\n" + file;
- throw ex;
+ break;
}
- //
- // The private key may be stored in an encrypted file, so handle
- // password retries.
- //
- int count = 0;
- int err = 0;
- while(count < passwordRetryMax)
+ ++count;
+ }
+ if(err == 0)
+ {
+ string msg = "IceSSL: unable to load private key from file " + file;
+ if(passwordError())
{
- ERR_clear_error();
- err = SSL_CTX_use_PrivateKey_file(_ctx, file.c_str(), SSL_FILETYPE_PEM);
- if(err)
- {
- break;
- }
- ++count;
+ msg += ":\ninvalid password";
}
- if(err == 0)
+ else
{
- string msg = "IceSSL: unable to load private key from file " + file;
- if(passwordError())
- {
- msg += ":\ninvalid password";
- }
- else
+ string err = sslErrors();
+ if(!err.empty())
{
- string err = sslErrors();
- if(!err.empty())
- {
- msg += ":\n" + err;
- }
+ msg += ":\n" + err;
}
- PluginInitializationException ex(__FILE__, __LINE__);
- ex.reason = msg;
- throw ex;
}
- }
- if(!SSL_CTX_check_private_key(_ctx))
- {
- PluginInitializationException ex(__FILE__, __LINE__);
- ex.reason = "IceSSL: unable to validate private key(s):\n" + sslErrors();
- throw ex;
+ throw PluginInitializationException(__FILE__, __LINE__, msg);
}
}
+ keyLoaded = true;
+ }
+
+ if(keyLoaded && !SSL_CTX_check_private_key(_ctx))
+ {
+ throw PluginInitializationException(__FILE__, __LINE__,
+ "IceSSL: unable to validate private key(s):\n" + sslErrors());
}
//
@@ -630,15 +717,13 @@ OpenSSLEngine::initialize()
string file = p->second;
if(!checkPath(file, defaultDir, false))
{
- PluginInitializationException ex(__FILE__, __LINE__);
- ex.reason = "IceSSL: DH parameter file not found:\n" + file;
- throw ex;
+ throw PluginInitializationException(__FILE__, __LINE__,
+ "IceSSL: DH parameter file not found:\n" + file);
}
if(!_dhParams->add(keyLength, file))
{
- PluginInitializationException ex(__FILE__, __LINE__);
- ex.reason = "IceSSL: unable to read DH parameter file " + file;
- throw ex;
+ throw PluginInitializationException(__FILE__, __LINE__,
+ "IceSSL: unable to read DH parameter file " + file);
}
}
}
@@ -684,9 +769,8 @@ OpenSSLEngine::initialize()
{
if(!SSL_CTX_set_cipher_list(_ctx, ciphers.c_str()))
{
- PluginInitializationException ex(__FILE__, __LINE__);
- ex.reason = "IceSSL: unable to set ciphers using `" + ciphers + "':\n" + sslErrors();
- throw ex;
+ throw PluginInitializationException(__FILE__, __LINE__,
+ "IceSSL: unable to set ciphers using `" + ciphers + "':\n" + sslErrors());
}
}
@@ -694,7 +778,7 @@ OpenSSLEngine::initialize()
// Determine whether a certificate is required from the peer.
//
{
- int sslVerifyMode = SSL_VERIFY_PEER|SSL_VERIFY_FAIL_IF_NO_PEER_CERT;
+ int sslVerifyMode = SSL_VERIFY_PEER | SSL_VERIFY_FAIL_IF_NO_PEER_CERT;;
switch(getVerifyPeer())
{
case 0:
@@ -704,7 +788,7 @@ OpenSSLEngine::initialize()
sslVerifyMode = SSL_VERIFY_PEER;
break;
case 2:
- sslVerifyMode = SSL_VERIFY_PEER|SSL_VERIFY_FAIL_IF_NO_PEER_CERT;
+ sslVerifyMode = SSL_VERIFY_PEER | SSL_VERIFY_FAIL_IF_NO_PEER_CERT;
break;
default:
{
@@ -733,9 +817,7 @@ OpenSSLEngine::context(SSL_CTX* context)
{
if(initialized())
{
- PluginInitializationException ex(__FILE__, __LINE__);
- ex.reason = "IceSSL: plug-in is already initialized";
- throw ex;
+ throw PluginInitializationException(__FILE__, __LINE__, "IceSSL: plug-in is already initialized");
}
assert(!_ctx);
@@ -748,38 +830,6 @@ OpenSSLEngine::context() const
return _ctx;
}
-void
-OpenSSLEngine::verifyPeer(SSL* ssl, SOCKET fd, const string& address, const NativeConnectionInfoPtr& info)
-{
- long result = SSL_get_verify_result(ssl);
- if(result != X509_V_OK)
- {
- if(getVerifyPeer() == 0)
- {
- if(securityTraceLevel() >= 1)
- {
- ostringstream ostr;
- ostr << "IceSSL: ignoring certificate verification failure:\n" << X509_verify_cert_error_string(result);
- getLogger()->trace(securityTraceCategory(), ostr.str());
- }
- }
- else
- {
- ostringstream ostr;
- ostr << "IceSSL: certificate verification failed:\n" << X509_verify_cert_error_string(result);
- string msg = ostr.str();
- if(securityTraceLevel() >= 1)
- {
- getLogger()->trace(securityTraceCategory(), msg);
- }
- SecurityException ex(__FILE__, __LINE__);
- ex.reason = msg;
- throw ex;
- }
- }
- SSLEngine::verifyPeer(fd, address, info);
-}
-
string
OpenSSLEngine::sslErrors() const
{
@@ -853,9 +903,7 @@ OpenSSLEngine::parseProtocols(const StringSeq& protocols) const
}
else
{
- PluginInitializationException ex(__FILE__, __LINE__);
- ex.reason = "IceSSL: unrecognized protocol `" + prot + "'";
- throw ex;
+ throw PluginInitializationException(__FILE__, __LINE__, "IceSSL: unrecognized protocol `" + prot + "'");
}
}
diff --git a/cpp/src/IceSSL/TransceiverI.cpp b/cpp/src/IceSSL/OpenSSLTransceiverI.cpp
index 3fde67ef906..14aad8b9163 100644
--- a/cpp/src/IceSSL/TransceiverI.cpp
+++ b/cpp/src/IceSSL/OpenSSLTransceiverI.cpp
@@ -7,7 +7,7 @@
//
// **********************************************************************
-#include <IceSSL/TransceiverI.h>
+#include <IceSSL/OpenSSLTransceiverI.h>
#include <IceUtil/Mutex.h>
#include <IceUtil/MutexPtrLock.h>
@@ -71,23 +71,6 @@ IceSSL::TransceiverI::getNativeInfo()
return this;
}
-#ifdef ICE_USE_IOCP
-IceInternal::AsyncInfo*
-IceSSL::TransceiverI::getAsyncInfo(IceInternal::SocketOperation status)
-{
- switch(status)
- {
- case IceInternal::SocketOperationRead:
- return &_read;
- case IceInternal::SocketOperationWrite:
- return &_write;
- default:
- assert(false);
- return 0;
- }
-}
-#endif
-
IceInternal::SocketOperation
IceSSL::TransceiverI::initialize(IceInternal::Buffer& readBuffer, IceInternal::Buffer& writeBuffer, bool&)
{
@@ -100,11 +83,7 @@ IceSSL::TransceiverI::initialize(IceInternal::Buffer& readBuffer, IceInternal::B
}
else if(_state <= StateConnectPending)
{
-#ifdef ICE_USE_IOCP
- IceInternal::doFinishConnectAsync(_fd, _write);
-#else
IceInternal::doFinishConnect(_fd);
-#endif
_desc = IceInternal::fdToString(_fd, _proxy, _addr, true);
@@ -116,13 +95,6 @@ IceSSL::TransceiverI::initialize(IceInternal::Buffer& readBuffer, IceInternal::B
_proxy->beginWriteConnectRequest(_addr, writeBuffer);
_proxy->beginReadConnectRequestResponse(readBuffer);
-#ifdef ICE_USE_IOCP
- //
- // Return SocketOperationWrite to indicate we need to start a write.
- //
- _state = StateProxyConnectRequest; // Send proxy connect request
- return IceInternal::SocketOperationWrite;
-#else
//
// Write the proxy connection message using TCP.
//
@@ -160,7 +132,6 @@ IceSSL::TransceiverI::initialize(IceInternal::Buffer& readBuffer, IceInternal::B
_state = StateProxyConnectRequest; // Send proxy connect request
return IceInternal::SocketOperationWrite;
}
-#endif
}
_state = StateConnected;
@@ -187,42 +158,10 @@ IceSSL::TransceiverI::initialize(IceInternal::Buffer& readBuffer, IceInternal::B
if(!_ssl)
{
-#ifdef ICE_USE_IOCP
- //
- // On Windows, limiting the buffer size is important to prevent
- // poor throughput performances when transfering large amount of
- // data. See Microsoft KB article KB823764.
- //
- _maxSendPacketSize = IceInternal::getSendBufferSize(_fd) / 2;
- if(_maxSendPacketSize < 512)
- {
- _maxSendPacketSize = 0;
- }
-
- _maxReceivePacketSize = IceInternal::getRecvBufferSize(_fd);
- if(_maxReceivePacketSize < 512)
- {
- _maxReceivePacketSize = 0;
- }
-
- _readI = _readBuffer.end();
- _writeI = _writeBuffer.end();
- _sentBytes = 0;
-#endif
-
-#ifdef ICE_USE_IOCP
- BIO* bio;
- if(!BIO_new_bio_pair(&bio, _maxSendPacketSize, &_iocpBio, _maxReceivePacketSize))
- {
- bio = 0;
- _iocpBio = 0;
- }
-#else
//
// This static_cast is necessary due to 64bit windows. There SOCKET is a non-int type.
//
BIO* bio = BIO_new_socket(static_cast<int>(_fd), 0);
-#endif
if(!bio)
{
SecurityException ex(__FILE__, __LINE__);
@@ -234,10 +173,6 @@ IceSSL::TransceiverI::initialize(IceInternal::Buffer& readBuffer, IceInternal::B
if(!_ssl)
{
BIO_free(bio);
-#ifdef ICE_USE_IOCP
- BIO_free(_iocpBio);
- _iocpBio = 0;
-#endif
SecurityException ex(__FILE__, __LINE__);
ex.reason = "openssl failure";
throw ex;
@@ -267,16 +202,6 @@ IceSSL::TransceiverI::initialize(IceInternal::Buffer& readBuffer, IceInternal::B
sync.release();
#endif
-#ifdef ICE_USE_IOCP
- if(BIO_ctrl_pending(_iocpBio))
- {
- if(!send())
- {
- return IceInternal::SocketOperationWrite;
- }
- continue;
- }
-#endif
if(ret <= 0)
{
switch(SSL_get_error(_ssl, ret))
@@ -292,22 +217,10 @@ IceSSL::TransceiverI::initialize(IceInternal::Buffer& readBuffer, IceInternal::B
}
case SSL_ERROR_WANT_READ:
{
-#ifdef ICE_USE_IOCP
- if(receive())
- {
- continue;
- }
-#endif
return IceInternal::SocketOperationRead;
}
case SSL_ERROR_WANT_WRITE:
{
-#ifdef ICE_USE_IOCP
- if(send())
- {
- continue;
- }
-#endif
return IceInternal::SocketOperationWrite;
}
case SSL_ERROR_SYSCALL:
@@ -319,7 +232,6 @@ IceSSL::TransceiverI::initialize(IceInternal::Buffer& readBuffer, IceInternal::B
throw ex;
}
-#ifndef ICE_USE_IOCP
if(ret == -1)
{
if(IceInternal::interrupted())
@@ -348,7 +260,6 @@ IceSSL::TransceiverI::initialize(IceInternal::Buffer& readBuffer, IceInternal::B
throw ex;
}
}
-#endif
SocketException ex(__FILE__, __LINE__);
ex.error = IceInternal::getSocketErrno();
throw ex;
@@ -372,7 +283,34 @@ IceSSL::TransceiverI::initialize(IceInternal::Buffer& readBuffer, IceInternal::B
}
}
- _engine->verifyPeer(_ssl, _fd, _host, getNativeConnectionInfo());
+ long result = SSL_get_verify_result(_ssl);
+ if(result != X509_V_OK)
+ {
+ if(_engine->getVerifyPeer() == 0)
+ {
+ if(_engine->securityTraceLevel() >= 1)
+ {
+ ostringstream ostr;
+ ostr << "IceSSL: ignoring certificate verification failure:\n"
+ << X509_verify_cert_error_string(result);
+ _instance->logger()->trace(_instance->traceCategory(), ostr.str());
+ }
+ }
+ else
+ {
+ ostringstream ostr;
+ ostr << "IceSSL: certificate verification failed:\n" << X509_verify_cert_error_string(result);
+ string msg = ostr.str();
+ if(_engine->securityTraceLevel() >= 1)
+ {
+ _instance->logger()->trace(_instance->traceCategory(), msg);
+ }
+ SecurityException ex(__FILE__, __LINE__);
+ ex.reason = msg;
+ throw ex;
+ }
+ }
+ _engine->verifyPeer(_fd, _host, getNativeConnectionInfo());
_state = StateHandshakeComplete;
}
catch(const Ice::LocalException& ex)
@@ -406,9 +344,27 @@ IceSSL::TransceiverI::initialize(IceInternal::Buffer& readBuffer, IceInternal::B
}
}
- if(_instance->engine()->securityTraceLevel() >= 1)
+ if(_engine->securityTraceLevel() >= 1)
{
- traceConnection();
+ Trace out(_instance->logger(), _instance->traceCategory());
+ out << "SSL summary for " << (_incoming ? "incoming" : "outgoing") << " connection\n";
+
+ //
+ // The const_cast is necesary because Solaris still uses OpenSSL 0.9.7.
+ //
+ //const SSL_CIPHER *cipher = SSL_get_current_cipher(ssl);
+ SSL_CIPHER *cipher = const_cast<SSL_CIPHER*>(SSL_get_current_cipher(_ssl));
+ if(!cipher)
+ {
+ out << "unknown cipher\n";
+ }
+ else
+ {
+ out << "cipher = " << SSL_CIPHER_get_name(cipher) << "\n";
+ out << "bits = " << SSL_CIPHER_get_bits(cipher, 0) << "\n";
+ out << "protocol = " << SSL_get_version(_ssl) << "\n";
+ }
+ out << IceInternal::fdToString(SSL_get_fd(_ssl));
}
return IceInternal::SocketOperationNone;
@@ -447,14 +403,6 @@ IceSSL::TransceiverI::close()
_ssl = 0;
}
-#ifdef ICE_USE_IOCP
- if(_iocpBio)
- {
- BIO_free(_iocpBio);
- _iocpBio = 0;
- }
-#endif
-
assert(_fd != INVALID_SOCKET);
try
{
@@ -484,16 +432,6 @@ IceSSL::TransceiverI::write(IceInternal::Buffer& buf)
return IceInternal::SocketOperationNone;
}
-#ifdef ICE_USE_IOCP
- if(_writeI != _writeBuffer.end())
- {
- if(!send())
- {
- return IceInternal::SocketOperationWrite;
- }
- }
-#endif
-
//
// It's impossible for packetSize to be more than an Int.
//
@@ -502,28 +440,7 @@ IceSSL::TransceiverI::write(IceInternal::Buffer& buf)
{
ERR_clear_error(); // Clear any spurious errors.
assert(_fd != INVALID_SOCKET);
-#ifdef ICE_USE_IOCP
- int ret;
- if(_sentBytes > 0)
- {
- ret = _sentBytes;
- _sentBytes = 0;
- }
- else
- {
- ret = SSL_write(_ssl, reinterpret_cast<const void*>(&*buf.i), packetSize);
- if(ret > 0)
- {
- if(!send())
- {
- _sentBytes = ret;
- return IceInternal::SocketOperationWrite;
- }
- }
- }
-#else
int ret = SSL_write(_ssl, reinterpret_cast<const void*>(&*buf.i), packetSize);
-#endif
if(ret <= 0)
{
switch(SSL_get_error(_ssl, ret))
@@ -544,17 +461,10 @@ IceSSL::TransceiverI::write(IceInternal::Buffer& buf)
}
case SSL_ERROR_WANT_WRITE:
{
-#ifdef ICE_USE_IOCP
- if(send())
- {
- continue;
- }
-#endif
return IceInternal::SocketOperationWrite;
}
case SSL_ERROR_SYSCALL:
{
-#ifndef ICE_USE_IOCP
if(ret == -1)
{
if(IceInternal::interrupted())
@@ -581,7 +491,6 @@ IceSSL::TransceiverI::write(IceInternal::Buffer& buf)
throw ex;
}
}
-#endif
if(ret == 0)
{
ConnectionLostException ex(__FILE__, __LINE__);
@@ -642,16 +551,6 @@ IceSSL::TransceiverI::read(IceInternal::Buffer& buf, bool&)
return IceInternal::SocketOperationNone;
}
-#ifdef ICE_USE_IOCP
- if(_readI != _readBuffer.end())
- {
- if(!receive())
- {
- return IceInternal::SocketOperationRead;
- }
- }
-#endif
-
//
// It's impossible for packetSize to be more than an Int.
//
@@ -666,8 +565,10 @@ IceSSL::TransceiverI::read(IceInternal::Buffer& buf, bool&)
switch(SSL_get_error(_ssl, ret))
{
case SSL_ERROR_NONE:
+ {
assert(false);
break;
+ }
case SSL_ERROR_ZERO_RETURN:
{
//
@@ -687,12 +588,6 @@ IceSSL::TransceiverI::read(IceInternal::Buffer& buf, bool&)
}
case SSL_ERROR_WANT_READ:
{
-#ifdef ICE_USE_IOCP
- if(receive())
- {
- continue;
- }
-#endif
return IceInternal::SocketOperationRead;
}
case SSL_ERROR_WANT_WRITE:
@@ -702,7 +597,6 @@ IceSSL::TransceiverI::read(IceInternal::Buffer& buf, bool&)
}
case SSL_ERROR_SYSCALL:
{
-#ifndef ICE_USE_IOCP
if(ret == -1)
{
if(IceInternal::interrupted())
@@ -737,7 +631,6 @@ IceSSL::TransceiverI::read(IceInternal::Buffer& buf, bool&)
throw ex;
}
}
-#endif
if(ret == 0)
{
@@ -800,222 +693,6 @@ IceSSL::TransceiverI::read(IceInternal::Buffer& buf, bool&)
return IceInternal::SocketOperationNone;
}
-#ifdef ICE_USE_IOCP
-
-bool
-IceSSL::TransceiverI::startWrite(IceInternal::Buffer& buf)
-{
- if(_state == StateConnectPending)
- {
- IceInternal::Address addr = _proxy ? _proxy->getAddress() : _addr;
- IceInternal::doConnectAsync(_fd, addr, _write);
- return false;
- }
- else if(_state == StateProxyConnectRequest)
- {
- //
- // We need to write the proxy message, but we have to use TCP and not SSL.
- //
- assert(!buf.b.empty() && buf.i != buf.b.end());
-
- const int packetSize = static_cast<int>(buf.b.end() - buf.i);
- const int actualSize = writeAsync(reinterpret_cast<char*>(&*buf.i), packetSize);
- return packetSize == actualSize;
- }
-
- if(_writeBuffer.empty() || _writeI == _writeBuffer.end())
- {
- assert(!buf.b.empty() && buf.i != buf.b.end());
- assert(!BIO_ctrl_pending(_iocpBio));
-
- ERR_clear_error(); // Clear any spurious errors.
- int ret = SSL_write(_ssl, reinterpret_cast<void*>(&*buf.i), static_cast<int>(buf.b.end() - buf.i));
- assert(ret > 0 || SSL_get_error(_ssl, ret) == SSL_ERROR_WANT_WRITE);
- if(ret > 0)
- {
- _sentBytes = ret;
- }
- assert(BIO_ctrl_pending(_iocpBio));
- _writeBuffer.resize(BIO_ctrl_pending(_iocpBio));
-#ifndef NDEBUG
- int n =
-#endif
- BIO_read(_iocpBio, &_writeBuffer[0], static_cast<int>(_writeBuffer.size()));
- assert(n == static_cast<int>(_writeBuffer.size()));
- _writeI = _writeBuffer.begin();
- }
-
- assert(!_writeBuffer.empty() && _writeI != _writeBuffer.end());
-
- const int packetSize = static_cast<int>(_writeBuffer.end() - _writeI);
- const int actualSize = writeAsync(reinterpret_cast<char*>(&*_writeI), packetSize);
-
- return packetSize == actualSize;
-}
-
-void
-IceSSL::TransceiverI::finishWrite(IceInternal::Buffer& buf)
-{
- if(_state < StateConnected && _state != StateProxyConnectRequest)
- {
- return;
- }
-
- if(static_cast<int>(_write.count) == SOCKET_ERROR)
- {
- WSASetLastError(_write.error);
- if(IceInternal::connectionLost())
- {
- ConnectionLostException ex(__FILE__, __LINE__);
- ex.error = IceInternal::getSocketErrno();
- throw ex;
- }
- else
- {
- SocketException ex(__FILE__, __LINE__);
- ex.error = IceInternal::getSocketErrno();
- throw ex;
- }
- }
-
- if(_state == StateProxyConnectRequest)
- {
- buf.i += _write.count;
- }
- else
- {
- _writeI += _write.count;
-
- if(_iocpBio && _writeI == _writeBuffer.end() && _sentBytes > 0)
- {
- int packetSize = static_cast<int>(buf.b.end() - buf.i);
- if(_instance->traceLevel() >= 3)
- {
- Trace out(_instance->logger(), _instance->traceCategory());
- out << "sent " << _sentBytes << " of " << packetSize << " bytes via " << protocol() << "\n" << toString();
- }
-
- buf.i += _sentBytes;
- _sentBytes = 0;
- }
- }
-}
-
-void
-IceSSL::TransceiverI::startRead(IceInternal::Buffer& buf)
-{
- if(_state == StateProxyConnectRequestPending)
- {
- //
- // We need to read the proxy reply, but we have to use TCP and not SSL.
- //
- assert(!buf.b.empty() && buf.i != buf.b.end());
- const int packetSize = static_cast<int>(buf.b.end() - buf.i);
- readAsync(reinterpret_cast<char*>(&*buf.i), packetSize);
- return;
- }
-
- if(_readI == _readBuffer.end())
- {
- assert(!buf.b.empty() && buf.i != buf.b.end());
- if(!BIO_ctrl_get_read_request(_iocpBio))
- {
- ERR_clear_error(); // Clear any spurious errors.
- int packetSize = static_cast<int>(buf.b.end() - buf.i);
- int ret = SSL_read(_ssl, reinterpret_cast<void*>(&*buf.i), packetSize);
- if(ret > 0)
- {
- if(_instance->traceLevel() >= 3)
- {
- Trace out(_instance->logger(), _instance->traceCategory());
- out << "received " << ret << " of " << packetSize << " bytes via " << protocol() << "\n" << toString();
- }
-
- buf.i += ret;
-
- _read.count = 0;
- completed(IceInternal::SocketOperationRead);
- return;
- }
- assert(ret <= 0 && SSL_get_error(_ssl, ret) == SSL_ERROR_WANT_READ);
- }
-
- assert(BIO_ctrl_get_read_request(_iocpBio));
- _readBuffer.resize(BIO_ctrl_get_read_request(_iocpBio));
- _readI = _readBuffer.begin();
- }
-
- assert(!_readBuffer.empty() && _readI != _readBuffer.end());
- readAsync(reinterpret_cast<char*>(&*_readI), static_cast<int>(_readBuffer.end() - _readI));
-}
-
-void
-IceSSL::TransceiverI::finishRead(IceInternal::Buffer& buf)
-{
- if(static_cast<int>(_read.count) == SOCKET_ERROR)
- {
- WSASetLastError(_read.error);
- if(IceInternal::connectionLost())
- {
- ConnectionLostException ex(__FILE__, __LINE__);
- ex.error = IceInternal::getSocketErrno();
- throw ex;
- }
- else
- {
- SocketException ex(__FILE__, __LINE__);
- ex.error = IceInternal::getSocketErrno();
- throw ex;
- }
- }
- else if(_read.count == 0 && _readI < _readBuffer.end())
- {
- ConnectionLostException ex(__FILE__, __LINE__);
- ex.error = 0;
- throw ex;
- }
-
- if(_state == StateProxyConnectRequestPending)
- {
- buf.i += _read.count;
- }
- else if(_read.count > 0)
- {
- _readI += _read.count;
-
- if(_iocpBio && _readI == _readBuffer.end())
- {
- int n = BIO_write(_iocpBio, &_readBuffer[0], static_cast<int>(_readBuffer.size()));
- if(n < 0) // Expected if the transceiver was closed.
- {
- SecurityException ex(__FILE__, __LINE__);
- ex.reason = "SSL bio write failed";
- throw ex;
- }
- assert(n == static_cast<int>(_readBuffer.size()));
-
- if(!buf.b.empty() && buf.i != buf.b.end())
- {
- ERR_clear_error(); // Clear any spurious errors.
- int packetSize = static_cast<int>(buf.b.end() - buf.i);
- int ret = SSL_read(_ssl, reinterpret_cast<void*>(&*buf.i), packetSize);
- if(ret > 0)
- {
- if(_instance->traceLevel() >= 3)
- {
- Trace out(_instance->logger(), _instance->traceCategory());
- out << "received " << ret << " of " << packetSize << " bytes via " << protocol() << "\n" << toString();
- }
-
- buf.i += ret;
- }
- }
- }
- }
-}
-
-#endif
-
string
IceSSL::TransceiverI::protocol() const
{
@@ -1054,16 +731,10 @@ IceSSL::TransceiverI::TransceiverI(const InstancePtr& instance, SOCKET fd, const
_incoming(false),
_ssl(0),
_state(StateNeedConnect)
-#ifdef ICE_USE_IOCP
- , _iocpBio(0),
- _read(IceInternal::SocketOperationRead),
- _write(IceInternal::SocketOperationWrite)
-#endif
{
IceInternal::setBlock(fd, false);
IceInternal::setTcpBufSize(fd, _instance->properties(), _instance->logger());
-#ifndef ICE_USE_IOCP
IceInternal::Address connectAddr = proxy ? proxy->getAddress() : addr;
if(IceInternal::doConnect(_fd, connectAddr))
{
@@ -1079,7 +750,6 @@ IceSSL::TransceiverI::TransceiverI(const InstancePtr& instance, SOCKET fd, const
{
_desc = IceInternal::fdToString(_fd, _proxy, _addr, true);
}
-#endif
}
IceSSL::TransceiverI::TransceiverI(const InstancePtr& instance, SOCKET fd, const string& adapterName) :
@@ -1092,11 +762,6 @@ IceSSL::TransceiverI::TransceiverI(const InstancePtr& instance, SOCKET fd, const
_ssl(0),
_state(StateConnected),
_desc(IceInternal::fdToString(fd))
-#ifdef ICE_USE_IOCP
- , _iocpBio(0),
- _read(IceInternal::SocketOperationRead),
- _write(IceInternal::SocketOperationWrite)
-#endif
{
IceInternal::setBlock(fd, false);
IceInternal::setTcpBufSize(fd, _instance->properties(), _instance->logger());
@@ -1157,247 +822,6 @@ IceSSL::TransceiverI::getNativeConnectionInfo() const
return info;
}
-#ifdef ICE_USE_IOCP
-
-bool
-IceSSL::TransceiverI::receive()
-{
- if(_readI == _readBuffer.end())
- {
- assert(BIO_ctrl_get_read_request(_iocpBio));
- _readBuffer.resize(BIO_ctrl_get_read_request(_iocpBio));
- _readI = _readBuffer.begin();
- }
-
- int packetSize = static_cast<int>(_readBuffer.end() - _readI);
- while(_readI != _readBuffer.end())
- {
- assert(_fd != INVALID_SOCKET);
- ssize_t ret = ::recv(_fd, reinterpret_cast<char*>(&*_readI), packetSize, 0);
- if(ret == 0)
- {
- ConnectionLostException ex(__FILE__, __LINE__);
- ex.error = 0;
- throw ex;
- }
-
- if(ret == SOCKET_ERROR)
- {
- if(IceInternal::interrupted())
- {
- continue;
- }
-
- if(IceInternal::noBuffers() && packetSize > 1024)
- {
- packetSize /= 2;
- continue;
- }
-
- if(IceInternal::wouldBlock())
- {
- return false;
- }
-
- if(IceInternal::connectionLost())
- {
- ConnectionLostException ex(__FILE__, __LINE__);
- ex.error = IceInternal::getSocketErrno();
- throw ex;
- }
- else
- {
- SocketException ex(__FILE__, __LINE__);
- ex.error = IceInternal::getSocketErrno();
- throw ex;
- }
- }
-
- _readI += ret;
- if(packetSize > _readBuffer.end() - _readI)
- {
- packetSize = static_cast<int>(_readBuffer.end() - _readI);
- }
- }
-
- assert(_readI == _readBuffer.end());
-#ifndef NDEBUG
- int n =
-#endif
- BIO_write(_iocpBio, &_readBuffer[0], static_cast<int>(_readBuffer.size()));
-
- assert(n == static_cast<int>(_readBuffer.size()));
- return true;
-}
-
-bool
-IceSSL::TransceiverI::send()
-{
- if(_writeI == _writeBuffer.end())
- {
- assert(BIO_ctrl_pending(_iocpBio));
- _writeBuffer.resize(BIO_ctrl_pending(_iocpBio));
-#ifndef NDEBUG
- int n =
-#endif
- BIO_read(_iocpBio, &_writeBuffer[0], static_cast<int>(_writeBuffer.size()));
- assert(n == static_cast<int>(_writeBuffer.size()));
- _writeI = _writeBuffer.begin();
- }
-
- int packetSize = static_cast<int>(_writeBuffer.end() - _writeI);
- if(_maxSendPacketSize > 0 && packetSize > _maxSendPacketSize)
- {
- packetSize = _maxSendPacketSize;
- }
-
- while(_writeI != _writeBuffer.end())
- {
- int ret = ::send(_fd, reinterpret_cast<const char*>(&*_writeI), packetSize, 0);
- if(ret == 0)
- {
- ConnectionLostException ex(__FILE__, __LINE__);
- ex.error = 0;
- throw ex;
- }
-
- if(ret == SOCKET_ERROR)
- {
- if(IceInternal::interrupted())
- {
- continue;
- }
-
- if(IceInternal::noBuffers() && packetSize > 1024)
- {
- packetSize /= 2;
- continue;
- }
-
- if(IceInternal::wouldBlock())
- {
- return false;
- }
-
- if(IceInternal::connectionLost())
- {
- ConnectionLostException ex(__FILE__, __LINE__);
- ex.error = IceInternal::getSocketErrno();
- throw ex;
- }
- else
- {
- SocketException ex(__FILE__, __LINE__);
- ex.error = IceInternal::getSocketErrno();
- throw ex;
- }
- }
-
- _writeI += ret;
- if(packetSize > _writeBuffer.end() - _writeI)
- {
- packetSize = static_cast<int>(_writeBuffer.end() - _writeI);
- }
- }
- return true;
-}
-
-int
-IceSSL::TransceiverI::writeAsync(char* buf, int packetSize)
-{
- if(_maxSendPacketSize > 0 && packetSize > _maxSendPacketSize)
- {
- packetSize = _maxSendPacketSize;
- }
-
- _write.buf.len = packetSize;
- _write.buf.buf = buf;
-
- int err = WSASend(_fd, &_write.buf, 1, &_write.count, 0, &_write, NULL);
-
- if(err == SOCKET_ERROR)
- {
- if(!IceInternal::wouldBlock())
- {
- if(IceInternal::connectionLost())
- {
- ConnectionLostException ex(__FILE__, __LINE__);
- ex.error = IceInternal::getSocketErrno();
- throw ex;
- }
- else
- {
- SocketException ex(__FILE__, __LINE__);
- ex.error = IceInternal::getSocketErrno();
- throw ex;
- }
- }
- }
-
- return packetSize;
-}
-
-int
-IceSSL::TransceiverI::readAsync(char* buf, int packetSize)
-{
- if(_maxReceivePacketSize > 0 && packetSize > _maxReceivePacketSize)
- {
- packetSize = _maxReceivePacketSize;
- }
-
- _read.buf.len = packetSize;
- _read.buf.buf = buf;
-
- int err = WSARecv(_fd, &_read.buf, 1, &_read.count, &_read.flags, &_read, NULL);
-
- if(err == SOCKET_ERROR)
- {
- if(!IceInternal::wouldBlock())
- {
- if(IceInternal::connectionLost())
- {
- ConnectionLostException ex(__FILE__, __LINE__);
- ex.error = IceInternal::getSocketErrno();
- throw ex;
- }
- else
- {
- SocketException ex(__FILE__, __LINE__);
- ex.error = IceInternal::getSocketErrno();
- throw ex;
- }
- }
- }
-
- return packetSize;
-}
-
-#endif
-
-void
-IceSSL::TransceiverI::traceConnection()
-{
- Trace out(_instance->logger(), _instance->traceCategory());
- out << "SSL summary for " << (_incoming ? "incoming" : "outgoing") << " connection\n";
-
- //
- // The const_cast is necesary because Solaris still uses OpenSSL 0.9.7.
- //
- //const SSL_CIPHER *cipher = SSL_get_current_cipher(ssl);
- SSL_CIPHER *cipher = const_cast<SSL_CIPHER*>(SSL_get_current_cipher(_ssl));
- if(!cipher)
- {
- out << "unknown cipher\n";
- }
- else
- {
- out << "cipher = " << SSL_CIPHER_get_name(cipher) << "\n";
- out << "bits = " << SSL_CIPHER_get_bits(cipher, 0) << "\n";
- out << "protocol = " << SSL_get_version(_ssl) << "\n";
- }
- out << IceInternal::fdToString(SSL_get_fd(_ssl));
-}
-
bool
IceSSL::TransceiverI::writeRaw(IceInternal::Buffer& buf)
{
diff --git a/cpp/src/IceSSL/TransceiverI.h b/cpp/src/IceSSL/OpenSSLTransceiverI.h
index b74da103485..8833dcb58b8 100644
--- a/cpp/src/IceSSL/TransceiverI.h
+++ b/cpp/src/IceSSL/OpenSSLTransceiverI.h
@@ -80,7 +80,6 @@ private:
int readAsync(char*, int);
#endif
- void traceConnection();
bool writeRaw(IceInternal::Buffer&);
bool readRaw(IceInternal::Buffer&);
diff --git a/cpp/src/IceSSL/PluginI.cpp b/cpp/src/IceSSL/PluginI.cpp
index 5a39e3ee93f..145089d026e 100644
--- a/cpp/src/IceSSL/PluginI.cpp
+++ b/cpp/src/IceSSL/PluginI.cpp
@@ -9,7 +9,6 @@
#include <IceSSL/PluginI.h>
#include <IceSSL/Instance.h>
-#include <IceSSL/TransceiverI.h>
#include <IceSSL/SSLEngine.h>
#include <IceSSL/EndpointI.h>
#include <IceSSL/EndpointInfo.h>
@@ -41,10 +40,12 @@ createIceSSL(const CommunicatorPtr& communicator, const string& /*name*/, const
//
IceSSL::PluginI::PluginI(const Ice::CommunicatorPtr& communicator)
{
-#ifdef ICE_USE_OPENSSL
- _engine = new OpenSSLEngine(communicator);
-#else
+#if defined(ICE_USE_SECURE_TRANSPORT)
_engine = new SecureTransportEngine(communicator);
+#elif defined(ICE_USE_SCHANNEL)
+ _engine = new SChannelEngine(communicator);
+#else
+ _engine = new OpenSSLEngine(communicator);
#endif
IceInternal::ProtocolPluginFacadePtr facade = IceInternal::getProtocolPluginFacade(communicator);
diff --git a/cpp/src/IceSSL/PluginI.h b/cpp/src/IceSSL/PluginI.h
index bd6447fe988..6b6979ea19f 100644
--- a/cpp/src/IceSSL/PluginI.h
+++ b/cpp/src/IceSSL/PluginI.h
@@ -42,10 +42,12 @@ public:
private:
-#ifdef ICE_USE_OPENSSL
- OpenSSLEnginePtr _engine;
-#else
+#if defined(ICE_USE_SECURE_TRANSPORT)
SecureTransportEnginePtr _engine;
+#elif defined(ICE_USE_SCHANNEL)
+ SChannelEnginePtr _engine;
+#else
+ OpenSSLEnginePtr _engine;
#endif
};
diff --git a/cpp/src/IceSSL/SChannelEngine.cpp b/cpp/src/IceSSL/SChannelEngine.cpp
new file mode 100644
index 00000000000..89254a433bb
--- /dev/null
+++ b/cpp/src/IceSSL/SChannelEngine.cpp
@@ -0,0 +1,664 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2014 ZeroC, Inc. All rights reserved.
+//
+// This copy of Ice is licensed to you under the terms described in the
+// ICE_LICENSE file included in this distribution.
+//
+// **********************************************************************
+
+#include <IceSSL/SSLEngine.h>
+#include <IceSSL/Plugin.h>
+
+#include <Ice/LocalException.h>
+#include <Ice/Logger.h>
+#include <Ice/Communicator.h>
+
+#include <IceUtil/StringUtil.h>
+#include <IceUtil/FileUtil.h>
+#include <IceUtil/UUID.h>
+
+using namespace std;
+using namespace Ice;
+using namespace IceUtil;
+using namespace IceSSL;
+
+#ifdef ICE_USE_SCHANNEL
+
+IceUtil::Shared* IceSSL::upCast(IceSSL::SChannelEngine* p) { return p; }
+
+namespace
+{
+
+void
+addCertificateToStore(const string& file, HCERTSTORE store, PCCERT_CONTEXT* cert = 0)
+{
+ vector<char> buffer;
+ readFile(file, buffer);
+ vector<BYTE> outBuffer;
+ outBuffer.resize(buffer.size());
+ DWORD outLength = static_cast<DWORD>(outBuffer.size());
+
+ if(!CryptStringToBinary(&buffer[0], static_cast<DWORD>(buffer.size()), CRYPT_STRING_BASE64HEADER,
+ &outBuffer[0], &outLength, 0, 0))
+ {
+ //
+ // Base64 data should always be bigger than binary
+ //
+ assert(GetLastError() != ERROR_MORE_DATA);
+ throw PluginInitializationException(__FILE__, __LINE__,
+ "IceSSL: error decoding certificate:\n" + IceUtilInternal::lastErrorToString());
+ }
+
+ if(!CertAddEncodedCertificateToStore(store, X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, &outBuffer[0],
+ outLength, CERT_STORE_ADD_NEW, cert))
+ {
+ if(GetLastError() != static_cast<DWORD>(CRYPT_E_EXISTS))
+ {
+ throw PluginInitializationException(__FILE__, __LINE__,
+ "IceSSL: error decoding certificate:\n" + IceUtilInternal::lastErrorToString());
+ }
+ }
+}
+
+DWORD
+parseProtocols(const StringSeq& protocols)
+{
+ DWORD v = 0;
+
+ for(Ice::StringSeq::const_iterator p = protocols.begin(); p != protocols.end(); ++p)
+ {
+ string prot = *p;
+
+ if(prot == "ssl3" || prot == "sslv3")
+ {
+ v |= SP_PROT_SSL3_SERVER;
+ v |= SP_PROT_SSL3_CLIENT;
+ }
+ else if(prot == "tls" || prot == "tls1" || prot == "tlsv1" || prot == "tls1_0" || prot == "tlsv1_0")
+ {
+ v |= SP_PROT_TLS1_SERVER;
+ v |= SP_PROT_TLS1_CLIENT;
+ }
+ else if(prot == "tls1_1" || prot == "tlsv1_1")
+ {
+ v |= SP_PROT_TLS1_1_SERVER;
+ v |= SP_PROT_TLS1_1_CLIENT;
+ }
+ else if(prot == "tls1_2" || prot == "tlsv1_2")
+ {
+ v |= SP_PROT_TLS1_2_SERVER;
+ v |= SP_PROT_TLS1_2_CLIENT;
+ }
+ else
+ {
+ throw PluginInitializationException(__FILE__, __LINE__, "IceSSL: unrecognized protocol `" + prot + "'");
+ }
+ }
+
+ return v;
+}
+
+const ALG_ID supportedChipers[] = {CALG_3DES, CALG_AES_128, CALG_AES_256, CALG_DES, CALG_RC2, CALG_RC4};
+const int supportedChipersSize = sizeof(supportedChipers)/sizeof(ALG_ID);
+
+ALG_ID
+algorithmId(const string& name)
+{
+ if(name == "3DES")
+ {
+ return CALG_3DES;
+ }
+ if(name == "AES_128")
+ {
+ return CALG_AES_128;
+ }
+ if(name == "AES_256")
+ {
+ return CALG_AES_256;
+ }
+ if(name == "DES")
+ {
+ return CALG_DES;
+ }
+ if(name == "RC2")
+ {
+ return CALG_RC2;
+ }
+ if(name == "RC4")
+ {
+ return CALG_RC4;
+ }
+ return 0;
+}
+
+}
+
+SChannelEngine::SChannelEngine(const CommunicatorPtr& communicator) :
+ SSLEngine(communicator),
+ _initialized(false),
+ _rootStore(0),
+ _chainEngine(0)
+{
+}
+
+void
+SChannelEngine::initialize()
+{
+ IceUtil::Mutex::Lock lock(_mutex);
+ if(_initialized)
+ {
+ return;
+ }
+
+ SSLEngine::initialize();
+
+ const string prefix = "IceSSL.";
+ const PropertiesPtr properties = communicator()->getProperties();
+
+ //
+ // Protocols selects which protocols to enable.
+ //
+ const_cast<DWORD&>(_protocols) = parseProtocols(properties->getPropertyAsList(prefix + "Protocols"));
+
+ //
+ // Check for a default directory. We look in this directory for
+ // files mentioned in the configuration.
+ //
+ string defaultDir = properties->getProperty(prefix + "DefaultDir");
+
+ int passwordRetryMax = properties->getPropertyAsIntWithDefault(prefix + "PasswordRetryMax", 3);
+ PasswordPromptPtr passwordPrompt = getPasswordPrompt();
+ setPassword(properties->getProperty(prefix + "Password"));
+
+ string ciphers = properties->getProperty(prefix + "Ciphers");
+ if(!ciphers.empty())
+ {
+ parseCiphers(ciphers);
+ }
+
+ if(securityTraceLevel() >= 1)
+ {
+ ostringstream os;
+ os << "enabling SSL ciphersuites:";
+ if(_ciphers.empty())
+ {
+ for(int i = 0; i < supportedChipersSize; ++i)
+ {
+ os << "\n " << getCipherName(supportedChipers[i]);
+ }
+ }
+ else
+ {
+ for(vector<ALG_ID>::const_iterator i = _ciphers.begin(); i != _ciphers.end(); ++i)
+ {
+ os << "\n " << getCipherName(*i);
+ }
+ }
+ getLogger()->trace(securityTraceCategory(), os.str());
+ }
+
+ string certStore = properties->getPropertyWithDefault(prefix + "CertStore", "CurrentUser");
+ if(certStore != "CurrentUser" && certStore != "LocalMachine")
+ {
+ getLogger()->warning("Invalid IceSSL.CertStore value `" + certStore + "' adjusted to `CurrentUser'");
+ certStore = "CurrentUser";
+ }
+
+ //
+ // Create trusted CA store with contents of CertAuthFile
+ //
+ string caFile = properties->getProperty(prefix + "CertAuthFile");
+ if(!caFile.empty())
+ {
+ _rootStore = CertOpenStore(CERT_STORE_PROV_MEMORY, 0, 0, 0, 0);
+ if(!_rootStore)
+ {
+ throw PluginInitializationException(__FILE__, __LINE__,
+ "IceSSL: error creating in memory certificate store:\n" + IceUtilInternal::lastErrorToString());
+ }
+
+ if(!checkPath(caFile, defaultDir, false))
+ {
+ throw PluginInitializationException(__FILE__, __LINE__,
+ "IceSSL: CA certificate file not found:\n" + caFile);
+ }
+
+ addCertificateToStore(caFile, _rootStore);
+
+ //
+ // Create a chain engine that uses our Trusted Root Store
+ //
+#ifdef __MINGW32__
+ CertChainEngineConfig config;
+ memset(&config, 0, sizeof(CertChainEngineConfig));
+ config.cbSize = sizeof(CertChainEngineConfig);
+#else
+ CERT_CHAIN_ENGINE_CONFIG config;
+ memset(&config, 0, sizeof(CERT_CHAIN_ENGINE_CONFIG));
+ config.cbSize = sizeof(CERT_CHAIN_ENGINE_CONFIG);
+#endif
+ config.hExclusiveRoot = _rootStore;
+
+ //
+ // Build the chain using the LocalMachine registry location as opposed
+ // to the CurrentUser location.
+ //
+ if(certStore == "LocalMachine")
+ {
+ config.dwFlags = CERT_CHAIN_USE_LOCAL_MACHINE_STORE;
+ }
+
+#ifdef __MINGW32__
+ if(!CertCreateCertificateChainEngine(reinterpret_cast<CERT_CHAIN_ENGINE_CONFIG*>(&config), &_chainEngine))
+#else
+ if(!CertCreateCertificateChainEngine(&config, &_chainEngine))
+#endif
+ {
+ throw PluginInitializationException(__FILE__, __LINE__,
+ "IceSSL: error creating certificate chain engine:\n" + IceUtilInternal::lastErrorToString());
+ }
+ }
+ else
+ {
+ _chainEngine = (certStore == "LocalMachine") ? HCCE_LOCAL_MACHINE : HCCE_CURRENT_USER;
+ }
+
+ //
+ // Import the application certificate and private keys.
+ //
+ string keySet = properties->getPropertyWithDefault(prefix + "KeySet", "DefaultKeySet");
+ if(keySet != "DefaultKeySet" && keySet != "UserKeySet" && keySet != "MachineKeySet")
+ {
+ getLogger()->warning("Invalid IceSSL.KeySet value `" + keySet + "' adjusted to `DefaultKeySet'");
+ keySet = "DefaultKeySet";
+ }
+
+ DWORD importFlags = (keySet == "MachineKeySet") ? CRYPT_MACHINE_KEYSET : CRYPT_USER_KEYSET;
+
+ string certFile = properties->getProperty(prefix + "CertFile");
+ string keyFile = properties->getPropertyWithDefault(prefix + "KeyFile", certFile);
+
+ if(!certFile.empty())
+ {
+ vector<string> certFiles;
+ if(!IceUtilInternal::splitString(certFile, IceUtilInternal::pathsep, certFiles) || certFiles.size() > 2)
+ {
+ throw PluginInitializationException(__FILE__, __LINE__,
+ "IceSSL: invalid value for " + prefix + "CertFile:\n" + certFile);
+ }
+
+ vector<string> keyFiles;
+ if(!IceUtilInternal::splitString(keyFile, IceUtilInternal::pathsep, keyFiles) || keyFiles.size() > 2)
+ {
+ throw PluginInitializationException(__FILE__, __LINE__,
+ "IceSSL: invalid value for " + prefix + "KeyFile:\n" + keyFile);
+ }
+
+ if(certFiles.size() != keyFiles.size())
+ {
+ throw PluginInitializationException(__FILE__, __LINE__,
+ "IceSSL: " + prefix + "KeyFile does not agree with " + prefix + "CertFile");
+ }
+
+ for(size_t i = 0; i < certFiles.size(); ++i)
+ {
+ string certFile = certFiles[i];
+ if(!checkPath(certFile, defaultDir, false))
+ {
+ throw PluginInitializationException(__FILE__, __LINE__,
+ "IceSSL: certificate file not found:\n" + certFile);
+ }
+
+ vector<char> buffer;
+ readFile(certFile, buffer);
+
+ CRYPT_DATA_BLOB pfxBlob;
+ pfxBlob.cbData = static_cast<DWORD>(buffer.size());
+ pfxBlob.pbData = reinterpret_cast<BYTE*>(&buffer[0]);
+
+ HCERTSTORE store = 0;
+ PCCERT_CONTEXT cert = 0;
+ int err = 0;
+ int count = 0;
+ do
+ {
+ string s = password(false);
+ store = PFXImportCertStore(&pfxBlob, stringToWstring(s).c_str(), importFlags);
+ err = store ? 0 : GetLastError();
+ }
+ while(err == ERROR_INVALID_PASSWORD && passwordPrompt && ++count < passwordRetryMax);
+
+ if(store)
+ {
+ _stores.push_back(store);
+ cert = CertFindCertificateInStore(store, X509_ASN_ENCODING, 0, CERT_FIND_ANY, 0, cert);
+ if(!cert)
+ {
+ throw PluginInitializationException(__FILE__, __LINE__,
+ "IceSSL: certificate error:\n" + IceUtilInternal::lastErrorToString());
+ }
+ _certs.push_back(cert);
+ continue;
+ }
+
+ assert(err);
+
+ if(err != CRYPT_E_BAD_ENCODE)
+ {
+ throw PluginInitializationException(__FILE__, __LINE__,
+ "IceSSL: error decoding certificate:\n" + IceUtilInternal::lastErrorToString());
+ }
+
+ //
+ // Try to load certificate & key as PEM files.
+ //
+ err = 0;
+ keyFile = keyFiles[i];
+ if(!checkPath(keyFile, defaultDir, false))
+ {
+ throw PluginInitializationException(__FILE__, __LINE__, "IceSSL: key file not found:\n" + keyFile);
+ }
+
+ readFile(keyFile, buffer);
+
+ vector<BYTE> outBuffer;
+ outBuffer.resize(buffer.size());
+ DWORD outLength = static_cast<DWORD>(buffer.size());
+
+ //
+ // Convert the PEM encoded buffer to DER binary format.
+ //
+ if(!CryptStringToBinary(&buffer[0], static_cast<DWORD>(buffer.size()), CRYPT_STRING_BASE64HEADER,
+ &outBuffer[0], &outLength, 0, 0))
+ {
+ throw PluginInitializationException(__FILE__, __LINE__,
+ "IceSSL: error decoding key:\n" + IceUtilInternal::lastErrorToString());
+ }
+
+ PCRYPT_PRIVATE_KEY_INFO keyInfo = 0;
+ BYTE* key = 0;
+ HCRYPTKEY hKey = 0;
+
+ try
+ {
+ DWORD decodedLength = 0;
+ if(!CryptDecodeObjectEx(X509_ASN_ENCODING, PKCS_PRIVATE_KEY_INFO, &outBuffer[0], outLength,
+ CRYPT_DECODE_ALLOC_FLAG, 0, &keyInfo, &decodedLength))
+ {
+ throw PluginInitializationException(__FILE__, __LINE__,
+ "IceSSL: error decoding key:\n" + IceUtilInternal::lastErrorToString());
+ }
+
+ //
+ // Check that we are using a RSA Key
+ //
+ if(strcmp(keyInfo->Algorithm.pszObjId, szOID_RSA_RSA))
+ {
+ throw PluginInitializationException(__FILE__, __LINE__,
+ string("IceSSL: error unknow key algorithm: `") + keyInfo->Algorithm.pszObjId + "'");
+ }
+
+ //
+ // Create a new RSA key set to store our key
+ //
+ const wstring keySetName = stringToWstring(IceUtil::generateUUID());
+ HCRYPTPROV cryptProv = 0;
+
+ DWORD contextFlags = (keySet == "MachineKeySet") ? CRYPT_MACHINE_KEYSET | CRYPT_NEWKEYSET :
+ CRYPT_NEWKEYSET;
+
+ if(!CryptAcquireContextW(&cryptProv, keySetName.c_str(), MS_DEF_PROV_W, PROV_RSA_FULL, contextFlags))
+ {
+ throw PluginInitializationException(__FILE__, __LINE__,
+ "IceSSL: error acquiring cryptographic context:\n" + IceUtilInternal::lastErrorToString());
+ }
+
+ //
+ // Decode the private key BLOB
+ //
+ if(!CryptDecodeObjectEx(X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, PKCS_RSA_PRIVATE_KEY,
+ keyInfo->PrivateKey.pbData, keyInfo->PrivateKey.cbData,
+ CRYPT_DECODE_ALLOC_FLAG, 0, &key, &outLength))
+ {
+ throw PluginInitializationException(__FILE__, __LINE__,
+ "IceSSL: error decoding key:\n" + IceUtilInternal::lastErrorToString());
+ }
+ LocalFree(keyInfo);
+ keyInfo = 0;
+
+ //
+ // Import the private key
+ //
+ if(!CryptImportKey(cryptProv, key, outLength, 0, 0, &hKey))
+ {
+ throw PluginInitializationException(__FILE__, __LINE__,
+ "IceSSL: error importing key:\n" + IceUtilInternal::lastErrorToString());
+ }
+ LocalFree(key);
+ key = 0;
+
+ CryptDestroyKey(hKey);
+ hKey = 0;
+
+ //
+ // Create a new memory store to place the certificate
+ //
+ store = CertOpenStore(CERT_STORE_PROV_MEMORY, 0, 0, 0, 0);
+ if(!store)
+ {
+ throw PluginInitializationException(__FILE__, __LINE__,
+ "IceSSL: error creating certificate store:\n" + IceUtilInternal::lastErrorToString());
+ }
+
+ addCertificateToStore(certFile, store, &cert);
+
+ //
+ // Associate key & certificate
+ //
+ CRYPT_KEY_PROV_INFO keyProvInfo;
+ memset(&keyProvInfo, 0, sizeof(keyProvInfo));
+ keyProvInfo.pwszContainerName = const_cast<wchar_t*>(keySetName.c_str());
+ keyProvInfo.pwszProvName = const_cast<wchar_t*>(MS_DEF_PROV_W);
+ keyProvInfo.dwProvType = PROV_RSA_FULL;
+ keyProvInfo.dwKeySpec = AT_KEYEXCHANGE;
+
+ if(!CertSetCertificateContextProperty(cert, CERT_KEY_PROV_INFO_PROP_ID, 0, &keyProvInfo))
+ {
+ throw PluginInitializationException(__FILE__, __LINE__,
+ "IceSSL: error seting certificate property:\n" + IceUtilInternal::lastErrorToString());
+ }
+
+ _certs.push_back(cert);
+ _stores.push_back(store);
+ }
+ catch(...)
+ {
+ if(keyInfo)
+ {
+ LocalFree(keyInfo);
+ }
+
+ if(key)
+ {
+ LocalFree(key);
+ }
+
+ if(hKey)
+ {
+ CryptDestroyKey(hKey);
+ }
+
+ if(cert)
+ {
+ CertFreeCertificateContext(cert);
+ }
+
+ if(store)
+ {
+ CertCloseStore(store, 0);
+ }
+ throw;
+ }
+ }
+ }
+ _initialized = true;
+}
+
+string
+SChannelEngine::getCipherName(ALG_ID cipher) const
+{
+ switch(cipher)
+ {
+ case CALG_RSA_KEYX:
+ return "RSA_KEYX";
+ case CALG_RSA_SIGN:
+ return "RSA_SIGN";
+ case CALG_DSS_SIGN:
+ return "DSS_SIGN";
+ case CALG_KEA_KEYX:
+ return "KEA_KEYX";
+ case CALG_DH_EPHEM:
+ return "DH_EPHEM";
+ case CALG_ECDH:
+ return "ECDH";
+ case CALG_ECDSA:
+ return "ECDSA";
+ case CALG_3DES:
+ return "3DES";
+ case CALG_AES_128:
+ return "AES_128";
+ case CALG_AES_256:
+ return "AES_256";
+ case CALG_DES:
+ return "DES";
+ case CALG_RC2:
+ return "RC2";
+ case CALG_RC4:
+ return "RC4";
+ default:
+ return "Unknown";
+ }
+}
+
+bool
+SChannelEngine::initialized() const
+{
+ IceUtil::Mutex::Lock lock(_mutex);
+ return _initialized;
+}
+
+CredHandle
+SChannelEngine::newCredentialsHandle(bool incoming)
+{
+ SCHANNEL_CRED cred;
+ memset(&cred, 0, sizeof(cred));
+ cred.dwVersion = SCHANNEL_CRED_VERSION;
+
+ if(!_certs.empty())
+ {
+ cred.cCreds = static_cast<DWORD>(_certs.size());
+ cred.paCred = &_certs[0];
+ }
+
+ cred.grbitEnabledProtocols = _protocols;
+
+ if(incoming)
+ {
+ cred.dwFlags = SCH_CRED_NO_SYSTEM_MAPPER | SCH_SEND_ROOT_CERT;
+ }
+ else
+ {
+ cred.dwFlags = SCH_CRED_MANUAL_CRED_VALIDATION | SCH_CRED_NO_SERVERNAME_CHECK | SCH_CRED_NO_DEFAULT_CREDS;
+ }
+
+ if(!_ciphers.empty())
+ {
+ cred.cSupportedAlgs = static_cast<DWORD>(_ciphers.size());
+ cred.palgSupportedAlgs = &_ciphers[0];
+ }
+
+ CredHandle credHandle;
+ memset(&credHandle, 0, sizeof(credHandle));
+
+ SECURITY_STATUS err =
+ AcquireCredentialsHandle(0, const_cast<char*>(UNISP_NAME), (incoming ? SECPKG_CRED_INBOUND : SECPKG_CRED_OUTBOUND), 0, &cred, 0,
+ 0, &credHandle, 0);
+
+ if(err != SEC_E_OK)
+ {
+ throw SecurityException(__FILE__, __LINE__,
+ "IceSSL: failed to acquire credentials handle:\n" + IceUtilInternal::lastErrorToString());
+ }
+ return credHandle;
+}
+
+HCERTCHAINENGINE
+SChannelEngine::chainEngine() const
+{
+ return _chainEngine;
+}
+
+void
+SChannelEngine::parseCiphers(const std::string& ciphers)
+{
+ vector<string> tokens;
+ IceUtilInternal::splitString(ciphers, " \t", tokens);
+ for(vector<string>::const_iterator i = tokens.begin(); i != tokens.end(); ++i)
+ {
+ ALG_ID id = algorithmId(*i);
+ if(id)
+ {
+ _ciphers.push_back(id);
+ }
+ }
+}
+
+void
+SChannelEngine::destroy()
+{
+ if(_chainEngine && _chainEngine != HCCE_CURRENT_USER && _chainEngine != HCCE_LOCAL_MACHINE)
+ {
+ CertFreeCertificateChainEngine(_chainEngine);
+ }
+
+ if(_rootStore)
+ {
+ CertCloseStore(_rootStore, 0);
+ }
+
+ for(vector<PCCERT_CONTEXT>::const_iterator i = _certs.begin(); i != _certs.end(); ++i)
+ {
+ PCCERT_CONTEXT cert = *i;
+
+ UniquePtr<CRYPT_KEY_PROV_INFO> keyProvInfo;
+ DWORD size = 0;
+
+ //
+ // Retrieve the certificate CERT_KEY_PROV_INFO_PROP_ID property, we use the CRYPT_KEY_PROV_INFO
+ // data to then remove the key set associated with the certificate.
+ //
+ if(CertGetCertificateContextProperty(cert, CERT_KEY_PROV_INFO_PROP_ID, 0, &size))
+ {
+ vector<char> buf(size);
+ if(CertGetCertificateContextProperty(cert, CERT_KEY_PROV_INFO_PROP_ID, &buf[0], &size))
+ {
+ CRYPT_KEY_PROV_INFO* keyProvInfo = reinterpret_cast<CRYPT_KEY_PROV_INFO*>(&buf[0]);
+ HCRYPTPROV cryptProv = 0;
+ if(CryptAcquireContextW(&cryptProv, keyProvInfo->pwszContainerName, keyProvInfo->pwszProvName,
+ keyProvInfo->dwProvType, 0))
+ {
+ CryptAcquireContextW(&cryptProv, keyProvInfo->pwszContainerName, keyProvInfo->pwszProvName,
+ keyProvInfo->dwProvType, CRYPT_DELETEKEYSET);
+ }
+ }
+ CertFreeCertificateContext(cert);
+ }
+ }
+
+ for(vector<HCERTSTORE>::const_iterator i = _stores.begin(); i != _stores.end(); ++i)
+ {
+ CertCloseStore(*i, 0);
+ }
+}
+#endif
diff --git a/cpp/src/IceSSL/SChannelTransceiverI.cpp b/cpp/src/IceSSL/SChannelTransceiverI.cpp
new file mode 100644
index 00000000000..ae36570991a
--- /dev/null
+++ b/cpp/src/IceSSL/SChannelTransceiverI.cpp
@@ -0,0 +1,1463 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2014 ZeroC, Inc. All rights reserved.
+//
+// This copy of Ice is licensed to you under the terms described in the
+// ICE_LICENSE file included in this distribution.
+//
+// **********************************************************************
+
+#include <IceSSL/SChannelTransceiverI.h>
+
+#include <IceUtil/StringUtil.h>
+
+#include <IceSSL/ConnectionInfo.h>
+#include <IceSSL/Instance.h>
+#include <IceSSL/SSLEngine.h>
+#include <IceSSL/Util.h>
+#include <Ice/Communicator.h>
+#include <Ice/LoggerUtil.h>
+#include <Ice/Buffer.h>
+#include <Ice/LocalException.h>
+
+#ifdef ICE_USE_SCHANNEL
+
+using namespace std;
+using namespace Ice;
+using namespace IceSSL;
+
+namespace
+{
+
+string
+protocolName(DWORD protocol)
+{
+ switch(protocol)
+ {
+ case SP_PROT_SSL2_CLIENT:
+ case SP_PROT_SSL2_SERVER:
+ return "SSL 2.0";
+ case SP_PROT_SSL3_CLIENT:
+ case SP_PROT_SSL3_SERVER:
+ return "SSL 3.0";
+ case SP_PROT_TLS1_CLIENT:
+ case SP_PROT_TLS1_SERVER:
+ return "TLS 1.0";
+ case SP_PROT_TLS1_1_CLIENT:
+ case SP_PROT_TLS1_1_SERVER:
+ return "TLS 1.1";
+ case SP_PROT_TLS1_2_CLIENT:
+ case SP_PROT_TLS1_2_SERVER:
+ return "TLS 1.2";
+ default:
+ return "Unknown";
+ }
+}
+
+string
+trustStatusToString(DWORD status)
+{
+ if(status & CERT_TRUST_NO_ERROR)
+ {
+ return "CERT_TRUST_NO_ERROR";
+ }
+
+ if(status & CERT_TRUST_IS_NOT_TIME_VALID)
+ {
+ return "CERT_TRUST_IS_NOT_TIME_VALID";
+ }
+
+ if(status & CERT_TRUST_IS_REVOKED)
+ {
+ return "CERT_TRUST_IS_REVOKED";
+ }
+
+ if(status & CERT_TRUST_IS_NOT_SIGNATURE_VALID)
+ {
+ return "CERT_TRUST_IS_NOT_SIGNATURE_VALID";
+ }
+
+ if(status & CERT_TRUST_IS_NOT_VALID_FOR_USAGE)
+ {
+ return "CERT_TRUST_IS_NOT_VALID_FOR_USAGE";
+ }
+
+ if(status & CERT_TRUST_IS_UNTRUSTED_ROOT)
+ {
+ return "CERT_TRUST_IS_UNTRUSTED_ROOT";
+ }
+
+ if(status & CERT_TRUST_REVOCATION_STATUS_UNKNOWN)
+ {
+ return "CERT_TRUST_REVOCATION_STATUS_UNKNOWN";
+ }
+
+ if(status & CERT_TRUST_IS_CYCLIC)
+ {
+ return "CERT_TRUST_IS_CYCLIC";
+ }
+
+ if(status & CERT_TRUST_INVALID_EXTENSION)
+ {
+ return "CERT_TRUST_INVALID_EXTENSION";
+ }
+
+ if(status & CERT_TRUST_INVALID_POLICY_CONSTRAINTS)
+ {
+ return "CERT_TRUST_INVALID_POLICY_CONSTRAINTS";
+ }
+
+ if(status & CERT_TRUST_INVALID_BASIC_CONSTRAINTS)
+ {
+ return "CERT_TRUST_INVALID_BASIC_CONSTRAINTS";
+ }
+
+ if(status & CERT_TRUST_INVALID_NAME_CONSTRAINTS)
+ {
+ return "CERT_TRUST_INVALID_NAME_CONSTRAINTS";
+ }
+
+ if(status & CERT_TRUST_HAS_NOT_SUPPORTED_NAME_CONSTRAINT)
+ {
+ return "CERT_TRUST_HAS_NOT_SUPPORTED_NAME_CONSTRAINT";
+ }
+
+ if(status & CERT_TRUST_HAS_NOT_DEFINED_NAME_CONSTRAINT)
+ {
+ return "CERT_TRUST_HAS_NOT_DEFINED_NAME_CONSTRAINT";
+ }
+
+ if(status & CERT_TRUST_HAS_NOT_PERMITTED_NAME_CONSTRAINT)
+ {
+ return "CERT_TRUST_HAS_NOT_PERMITTED_NAME_CONSTRAINT";
+ }
+
+ if(status & CERT_TRUST_HAS_EXCLUDED_NAME_CONSTRAINT)
+ {
+ return "CERT_TRUST_HAS_EXCLUDED_NAME_CONSTRAINT";
+ }
+
+ if(status & CERT_TRUST_IS_OFFLINE_REVOCATION)
+ {
+ return "CERT_TRUST_IS_OFFLINE_REVOCATION";
+ }
+
+ if(status & CERT_TRUST_NO_ISSUANCE_CHAIN_POLICY)
+ {
+ return "CERT_TRUST_NO_ISSUANCE_CHAIN_POLICY";
+ }
+
+ if(status & CERT_TRUST_IS_EXPLICIT_DISTRUST)
+ {
+ return "CERT_TRUST_IS_EXPLICIT_DISTRUST";
+ }
+
+ if(status & CERT_TRUST_HAS_NOT_SUPPORTED_CRITICAL_EXT)
+ {
+ return "CERT_TRUST_HAS_NOT_SUPPORTED_CRITICAL_EXT";
+ }
+
+ //
+ // New in Windows 8
+ //
+ //if(status & CERT_TRUST_HAS_WEAK_SIGNATURE)
+ //{
+ // return "CERT_TRUST_HAS_WEAK_SIGNATURE";
+ //}
+
+ if(status & CERT_TRUST_IS_PARTIAL_CHAIN)
+ {
+ return "CERT_TRUST_IS_PARTIAL_CHAIN";
+ }
+
+ if(status & CERT_TRUST_CTL_IS_NOT_TIME_VALID)
+ {
+ return "CERT_TRUST_CTL_IS_NOT_TIME_VALID";
+ }
+
+ if(status & CERT_TRUST_CTL_IS_NOT_SIGNATURE_VALID)
+ {
+ return "CERT_TRUST_CTL_IS_NOT_SIGNATURE_VALID";
+ }
+
+ if(status & CERT_TRUST_CTL_IS_NOT_VALID_FOR_USAGE)
+ {
+ return "CERT_TRUST_CTL_IS_NOT_VALID_FOR_USAGE";
+ }
+
+ ostringstream os;
+ os << "UNKNOWN TRUST FAILURE: " << status;
+ return os.str();
+}
+
+SecBuffer*
+getSecBufferWithType(const SecBufferDesc& desc, ULONG bufferType)
+{
+ for(ULONG i = 0; i < desc.cBuffers; ++i)
+ {
+ if(desc.pBuffers[i].BufferType == bufferType)
+ {
+ return &desc.pBuffers[i];
+ }
+ }
+ return 0;
+}
+
+}
+
+IceInternal::NativeInfoPtr
+IceSSL::TransceiverI::getNativeInfo()
+{
+ return this;
+}
+
+#ifdef ICE_USE_IOCP
+IceInternal::AsyncInfo*
+IceSSL::TransceiverI::getAsyncInfo(IceInternal::SocketOperation status)
+{
+ switch(status)
+ {
+ case IceInternal::SocketOperationRead:
+ return &_read;
+ case IceInternal::SocketOperationWrite:
+ return &_write;
+ default:
+ assert(false);
+ return 0;
+ }
+}
+#endif
+
+IceInternal::SocketOperation
+IceSSL::TransceiverI::sslHandshake()
+{
+ DWORD flags = ASC_REQ_SEQUENCE_DETECT | ASC_REQ_REPLAY_DETECT | ASC_REQ_CONFIDENTIALITY | ASC_REQ_ALLOCATE_MEMORY |
+ ASC_REQ_STREAM;
+ if(_incoming)
+ {
+ flags |= ASC_REQ_EXTENDED_ERROR;
+ if(_engine->getVerifyPeer() > 0)
+ {
+ flags |= ASC_REQ_MUTUAL_AUTH;
+ }
+ }
+ else
+ {
+ flags |= ISC_REQ_USE_SUPPLIED_CREDS | ISC_REQ_MANUAL_CRED_VALIDATION | ISC_RET_EXTENDED_ERROR;
+ }
+
+ SECURITY_STATUS err = SEC_E_OK;
+ DWORD ctxFlags = 0;
+
+ while(true)
+ {
+ if(_state == StateConnected)
+ {
+ assert(!_incoming);
+ SecBuffer outBuffer = { 0, SECBUFFER_TOKEN, 0 };
+ SecBufferDesc outBufferDesc = { SECBUFFER_VERSION, 1, &outBuffer };
+
+ err = InitializeSecurityContext(&_credentials, 0, const_cast<char *>(_host.c_str()), flags, 0, 0, 0, 0,
+ &_ssl, &outBufferDesc, &ctxFlags, 0);
+ _sslInitialized = true;
+ if(err != SEC_E_OK && err != SEC_I_CONTINUE_NEEDED)
+ {
+ throw SecurityException(__FILE__, __LINE__, "IceSSL: handshake failure:\n" +
+ IceUtilInternal::lastErrorToString());
+ }
+
+ //
+ // Copy the data to the write buffer
+ //
+ _writeBuffer.b.resize(outBuffer.cbBuffer);
+ _writeBuffer.i = _writeBuffer.b.begin();
+ memcpy(_writeBuffer.i, outBuffer.pvBuffer, outBuffer.cbBuffer);
+ FreeContextBuffer(outBuffer.pvBuffer);
+
+ _state = StateHandshakeWriteContinue;
+ }
+
+ if(_state == StateHandshakeReadContinue)
+ {
+ // If read buffer is empty, try to read some data.
+ if(_readBuffer.i == _readBuffer.b.begin() && !readRaw(_readBuffer))
+ {
+ return IceInternal::SocketOperationRead;
+ }
+
+ SecBuffer inBuffers[2] = {
+ { static_cast<DWORD>(_readBuffer.i - _readBuffer.b.begin()), SECBUFFER_TOKEN, _readBuffer.b.begin() },
+ { 0, SECBUFFER_EMPTY, 0 }
+ };
+ SecBufferDesc inBufferDesc = { SECBUFFER_VERSION, 2, inBuffers };
+
+ SecBuffer outBuffers[2] = {
+ { 0, SECBUFFER_TOKEN, 0 },
+ { 0, SECBUFFER_ALERT, 0 }
+ };
+ SecBufferDesc outBufferDesc = { SECBUFFER_VERSION, 2, outBuffers };
+
+ if(_incoming)
+ {
+ err = AcceptSecurityContext(&_credentials, (_sslInitialized ? &_ssl : 0), &inBufferDesc, flags, 0,
+ &_ssl, &outBufferDesc, &ctxFlags, 0);
+ _sslInitialized = true;
+ }
+ else
+ {
+ err = InitializeSecurityContext(&_credentials, &_ssl, const_cast<char*>(_host.c_str()), flags, 0, 0,
+ &inBufferDesc, 0, 0, &outBufferDesc, &ctxFlags, 0);
+ }
+
+ //
+ // If the message is incomplete we need to read more data.
+ //
+ if(err == SEC_E_INCOMPLETE_MESSAGE)
+ {
+ SecBuffer* missing = getSecBufferWithType(inBufferDesc, SECBUFFER_MISSING);
+ size_t pos = _readBuffer.i - _readBuffer.b.begin();
+ _readBuffer.b.resize(missing ? (pos + missing->cbBuffer) : (pos * 2));
+ _readBuffer.i = _readBuffer.b.begin() + pos;
+ return IceInternal::SocketOperationRead;
+ }
+ else if(err != SEC_I_CONTINUE_NEEDED && err != SEC_E_OK)
+ {
+ throw SecurityException(__FILE__, __LINE__, "SSL handshake failure:\n" +
+ IceUtilInternal::lastErrorToString());
+ }
+
+ //
+ // Copy out security tokens to the write buffer if any.
+ //
+ SecBuffer* token = getSecBufferWithType(outBufferDesc, SECBUFFER_TOKEN);
+ assert(token);
+ if(token->cbBuffer)
+ {
+ _writeBuffer.b.resize(static_cast<size_t>(token->cbBuffer));
+ _writeBuffer.i = _writeBuffer.b.begin();
+ memcpy(_writeBuffer.i, token->pvBuffer, token->cbBuffer);
+ FreeContextBuffer(token->pvBuffer);
+ }
+
+ //
+ // Check for remaining data in the input buffer.
+ //
+ SecBuffer* extra = getSecBufferWithType(inBufferDesc, SECBUFFER_EXTRA);
+ if(extra)
+ {
+ // Shift the extra data to the start of the input buffer
+ memmove(_readBuffer.b.begin(), _readBuffer.i - extra->cbBuffer, extra->cbBuffer);
+ _readBuffer.i = _readBuffer.b.begin() + extra->cbBuffer;
+ }
+ else
+ {
+ _readBuffer.i = _readBuffer.b.begin();
+ }
+
+ if(token->cbBuffer)
+ {
+ _state = StateHandshakeWriteContinue; // Continue writing if we have a token.
+ }
+ else if(err == SEC_E_OK)
+ {
+ break; // We're done.
+ }
+
+ // Otherwise continue either reading credentials
+ }
+
+ if(_state == StateHandshakeWriteContinue)
+ {
+ //
+ // Write any pending data.
+ //
+ if(!writeRaw(_writeBuffer))
+ {
+ return IceInternal::SocketOperationWrite;
+ }
+ if(err == SEC_E_OK)
+ {
+ break; // Token is written and we weren't told to continue, so we're done!
+ }
+ assert(err == SEC_I_CONTINUE_NEEDED);
+ _state = StateHandshakeReadContinue;
+ }
+ }
+
+ //
+ // Check if the requested capabilities are met
+ //
+ if(flags != ctxFlags)
+ {
+ if(_incoming)
+ {
+ if(!(ctxFlags & ASC_REQ_SEQUENCE_DETECT))
+ {
+ throw SecurityException(__FILE__, __LINE__, "IceSSL: SChannel failed to setup sequence detect");
+ }
+
+ if(!(ctxFlags & ASC_REQ_REPLAY_DETECT))
+ {
+ throw SecurityException(__FILE__, __LINE__, "IceSSL: SChannel failed to setup replay detect");
+ }
+
+ if(!(ctxFlags & ASC_REQ_CONFIDENTIALITY))
+ {
+ throw SecurityException(__FILE__, __LINE__, "IceSSL: SChannel failed to setup confidentiality");
+ }
+
+ if(!(ctxFlags & ASC_REQ_EXTENDED_ERROR))
+ {
+ throw SecurityException(__FILE__, __LINE__, "IceSSL: SChannel failed to setup extended error");
+ }
+
+ if(!(ctxFlags & ASC_REQ_ALLOCATE_MEMORY))
+ {
+ throw SecurityException(__FILE__, __LINE__, "IceSSL: SChannel failed to setup memory allocation");
+ }
+
+ if(!(ctxFlags & ASC_REQ_STREAM))
+ {
+ throw SecurityException(__FILE__, __LINE__, "IceSSL: SChannel failed to setup stream");
+ }
+ }
+ else
+ {
+ if(!(ctxFlags & ISC_REQ_SEQUENCE_DETECT))
+ {
+ throw SecurityException(__FILE__, __LINE__, "IceSSL: SChannel failed to setup sequence detect");
+ }
+
+ if(!(ctxFlags & ISC_REQ_REPLAY_DETECT))
+ {
+ throw SecurityException(__FILE__, __LINE__, "IceSSL: SChannel failed to setup replay detect");
+ }
+
+ if(!(ctxFlags & ISC_REQ_CONFIDENTIALITY))
+ {
+ throw SecurityException(__FILE__, __LINE__, "IceSSL: SChannel failed to setup confidentiality");
+ }
+
+ if(!(ctxFlags & ISC_REQ_EXTENDED_ERROR))
+ {
+ throw SecurityException(__FILE__, __LINE__, "IceSSL: SChannel failed to setup extended error");
+ }
+
+ if(!(ctxFlags & ISC_REQ_ALLOCATE_MEMORY))
+ {
+ throw SecurityException(__FILE__, __LINE__, "IceSSL: SChannel failed to setup memory allocation");
+ }
+
+ if(!(ctxFlags & ISC_REQ_STREAM))
+ {
+ throw SecurityException(__FILE__, __LINE__, "IceSSL: SChannel failed to setup stream");
+ }
+ }
+ }
+
+ err = QueryContextAttributes(&_ssl, SECPKG_ATTR_STREAM_SIZES, &_sizes);
+ if(err != SEC_E_OK)
+ {
+ throw SecurityException(__FILE__, __LINE__, "IceSSL: failure to query stream sizes attributes:\n" +
+ IceUtilInternal::lastErrorToString());
+ }
+
+ size_t pos = _readBuffer.i - _readBuffer.b.begin();
+ if(pos <= (_sizes.cbHeader + _sizes.cbMaximumMessage + _sizes.cbTrailer))
+ {
+ _readBuffer.b.resize(_sizes.cbHeader + _sizes.cbMaximumMessage + _sizes.cbTrailer);
+ _readBuffer.i = _readBuffer.b.begin() + pos;
+ }
+
+ _writeBuffer.b.reset();
+ _writeBuffer.i = _writeBuffer.b.begin();
+
+ return IceInternal::SocketOperationNone;
+}
+
+//
+// Try to decrypt a message and return the number of bytes decrypted, if the number of bytes
+// decrypted is less than the size requested it means that the application needs to read more
+// data before it can decrypt the complete message.
+//
+size_t
+IceSSL::TransceiverI::decryptMessage(IceInternal::Buffer& buffer)
+{
+ assert(_readBuffer.i != _readBuffer.b.begin() || !_readUnprocessed.b.empty());
+
+ //
+ // First check if there is data in the unprocessed buffer.
+ //
+ size_t length = std::min(static_cast<size_t>(buffer.b.end() - buffer.i), _readUnprocessed.b.size());
+ if(length > 0)
+ {
+ memcpy(buffer.i, _readUnprocessed.b.begin(), length);
+ memmove(_readUnprocessed.b.begin(), _readUnprocessed.b.begin() + length, _readUnprocessed.b.size() - length);
+ _readUnprocessed.b.resize(_readUnprocessed.b.size() - length);
+ }
+
+ while(true)
+ {
+ //
+ // If we have filled the buffer or if nothing left to read from
+ // the read buffer, we're done.
+ //
+ Byte* i = buffer.i + length;
+ if(i == buffer.b.end() || _readBuffer.i == _readBuffer.b.begin())
+ {
+ break;
+ }
+
+ //
+ // Try to decrypt the buffered data.
+ //
+ SecBuffer inBuffers[4] = {
+ { static_cast<DWORD>(_readBuffer.i - _readBuffer.b.begin()), SECBUFFER_DATA, _readBuffer.b.begin() },
+ { 0, SECBUFFER_EMPTY, 0 },
+ { 0, SECBUFFER_EMPTY, 0 },
+ { 0, SECBUFFER_EMPTY, 0 }
+ };
+ SecBufferDesc inBufferDesc = { SECBUFFER_VERSION, 4, inBuffers };
+
+ SECURITY_STATUS err = DecryptMessage(&_ssl, &inBufferDesc, 0, 0);
+ if(err == SEC_E_INCOMPLETE_MESSAGE)
+ {
+ //
+ // There isn't enough data to decrypt the message. The input
+ // buffer is resized to the SSL max message size after the SSL
+ // handshake completes so an incomplete message can only occur
+ // if the read buffer is not full.
+ //
+ assert(_readBuffer.i != _readBuffer.b.end());
+ return length;
+ }
+ else if(err == SEC_I_CONTEXT_EXPIRED || err == SEC_I_RENEGOTIATE)
+ {
+ //
+ // The message sender has finished using the connection and
+ // has initiated a shutdown.
+ //
+ throw ConnectionLostException(__FILE__, __LINE__, 0);
+ }
+ else if(err == SEC_E_MESSAGE_ALTERED || err == SEC_E_DECRYPT_FAILURE)
+ {
+ //
+ // Forcefully closing a connection can result in SSL_read
+ // reporting "decryption failed or bad record mac". We trap
+ // that error and treat it as the loss of a connection.
+ //
+ throw ConnectionLostException(__FILE__, __LINE__, 0);
+ }
+ else if(err != SEC_E_OK)
+ {
+ throw ProtocolException(__FILE__, __LINE__, "IceSSL: protocol error during read:\n" +
+ IceUtilInternal::lastErrorToString());
+ }
+
+ SecBuffer* dataBuffer = getSecBufferWithType(inBufferDesc, SECBUFFER_DATA);
+ assert(dataBuffer);
+ DWORD remaining = min(static_cast<DWORD>(buffer.b.end() - i), dataBuffer->cbBuffer);
+ length += remaining;
+ if(remaining)
+ {
+ memcpy(i, dataBuffer->pvBuffer, remaining);
+
+ //
+ // Copy remaining decrypted data to unprocessed buffer
+ //
+ if(dataBuffer->cbBuffer > remaining)
+ {
+ _readUnprocessed.b.resize(dataBuffer->cbBuffer - remaining);
+ memcpy(_readUnprocessed.b.begin(), reinterpret_cast<Byte*>(dataBuffer->pvBuffer) + remaining,
+ dataBuffer->cbBuffer - remaining);
+ }
+ }
+
+ //
+ // Move any remaining encrypted data to the begining of the input buffer
+ //
+ SecBuffer* extraBuffer = getSecBufferWithType(inBufferDesc, SECBUFFER_EXTRA);
+ if(extraBuffer && extraBuffer->cbBuffer > 0)
+ {
+ memmove(_readBuffer.b.begin(), _readBuffer.i - extraBuffer->cbBuffer, extraBuffer->cbBuffer);
+ _readBuffer.i = _readBuffer.b.begin() + extraBuffer->cbBuffer;
+ }
+ else
+ {
+ _readBuffer.i = _readBuffer.b.begin();
+ }
+ }
+ return length;
+}
+
+//
+// Encrypt a message and return the number of bytes that has been encrypted, if the
+// number of bytes is less than the message size, the function must be called again.
+//
+size_t
+IceSSL::TransceiverI::encryptMessage(IceInternal::Buffer& buffer)
+{
+ //
+ // Limit the message size to cbMaximumMessage which is the maximun size data that can be
+ // embeded in a SSL record.
+ //
+ DWORD length = std::min(static_cast<DWORD>(buffer.b.end() - buffer.i), _sizes.cbMaximumMessage);
+
+ //
+ // Resize the buffer to hold the encrypted data
+ //
+ _writeBuffer.b.resize(_sizes.cbHeader + length + _sizes.cbTrailer);
+ _writeBuffer.i = _writeBuffer.b.begin();
+
+ SecBuffer buffers[4] = {
+ { _sizes.cbHeader, SECBUFFER_STREAM_HEADER, _writeBuffer.i },
+ { length, SECBUFFER_DATA, _writeBuffer.i + _sizes.cbHeader },
+ { _sizes.cbTrailer, SECBUFFER_STREAM_TRAILER, _writeBuffer.i + _sizes.cbHeader + length },
+ { 0, SECBUFFER_EMPTY, 0 }
+ };
+ SecBufferDesc buffersDesc = { SECBUFFER_VERSION, 4, buffers };
+
+ // Data is encrypted in place, copy the data to be encrypted to the data buffer.
+ memcpy(buffers[1].pvBuffer, buffer.i, length);
+
+ SECURITY_STATUS err = EncryptMessage(&_ssl, 0, &buffersDesc, 0);
+ if(err != SEC_E_OK)
+ {
+ throw ProtocolException(__FILE__, __LINE__, "IceSSL: protocol error encrypting message:\n" +
+ IceUtilInternal::lastErrorToString());
+ }
+
+ // EncryptMessage resizes the buffers, so resize the write buffer as well to reflect this.
+ _writeBuffer.b.resize(buffers[0].cbBuffer + buffers[1].cbBuffer + buffers[2].cbBuffer);
+ _writeBuffer.i = _writeBuffer.b.begin();
+
+ return length;
+}
+
+IceInternal::SocketOperation
+IceSSL::TransceiverI::initialize(IceInternal::Buffer& readBuffer, IceInternal::Buffer& writeBuffer, bool& hasMoreData)
+{
+ try
+ {
+ if(_state == StateNeedConnect)
+ {
+ _state = StateConnectPending;
+ return IceInternal::SocketOperationConnect;
+ }
+ else if(_state <= StateConnectPending)
+ {
+ IceInternal::doFinishConnectAsync(_fd, _write);
+
+ _desc = IceInternal::fdToString(_fd, _proxy, _addr, true);
+
+ if(_proxy)
+ {
+ //
+ // Prepare the read & write buffers in advance.
+ //
+ _proxy->beginWriteConnectRequest(_addr, writeBuffer);
+ _proxy->beginReadConnectRequestResponse(readBuffer);
+
+ //
+ // Return SocketOperationWrite to indicate we need to start a write.
+ //
+ _state = StateProxyConnectRequest; // Send proxy connect request
+ return IceInternal::SocketOperationWrite;
+ }
+
+ _state = StateConnected;
+ }
+ else if(_state == StateProxyConnectRequest)
+ {
+ //
+ // Write completed.
+ //
+ _proxy->endWriteConnectRequest(writeBuffer);
+ _state = StateProxyConnectRequestPending; // Wait for proxy response
+ return IceInternal::SocketOperationRead;
+ }
+ else if(_state == StateProxyConnectRequestPending)
+ {
+ //
+ // Read completed.
+ //
+ _proxy->endReadConnectRequestResponse(readBuffer);
+ _state = StateConnected;
+ }
+
+ assert(_state >= StateConnected && _state <= StateHandshakeWriteContinue);
+
+ if(!_credentialsInitialized)
+ {
+ _readBuffer.b.resize(2048);
+ _readBuffer.i = _readBuffer.b.begin();
+
+ _credentials = _engine->newCredentialsHandle(_incoming);
+ _credentialsInitialized = true;
+ }
+
+ IceInternal::SocketOperation op = sslHandshake();
+ if(op != IceInternal::SocketOperationNone)
+ {
+ return op;
+ }
+
+ if(!_incoming || _engine->getVerifyPeer() > 0)
+ {
+ //
+ // Build the peer certificate chain and verify it.
+ //
+ PCCERT_CONTEXT cert = 0;
+ SECURITY_STATUS err = QueryContextAttributes(&_ssl, SECPKG_ATTR_REMOTE_CERT_CONTEXT, &cert);
+ if(err && err != SEC_E_NO_CREDENTIALS)
+ {
+ throw ProtocolException(__FILE__, __LINE__, "IceSSL: certificate verification failure:" +
+ IceUtilInternal::lastErrorToString());
+ }
+
+ if(!cert && (!_incoming || _engine->getVerifyPeer() == 2))
+ {
+ // Clients require server certificate if VerifyPeer>0
+ // and servers require client certificate if
+ // VerifyPeer=2
+ throw ProtocolException(__FILE__, __LINE__, "IceSSL: certificate required:" +
+ IceUtilInternal::lastErrorToString());
+ }
+ else if(cert) // Verify the remote certificate
+ {
+ try
+ {
+ CERT_CHAIN_PARA chainP;
+ memset(&chainP, 0, sizeof(chainP));
+ chainP.cbSize = sizeof(chainP);
+
+ PCCERT_CHAIN_CONTEXT certChain;
+ if(!CertGetCertificateChain(_engine->chainEngine(), cert, 0, 0, &chainP,
+ CERT_CHAIN_REVOCATION_CHECK_CACHE_ONLY, 0, &certChain))
+ {
+ CertFreeCertificateContext(cert);
+ throw IceUtilInternal::lastErrorToString();
+ }
+
+ CERT_SIMPLE_CHAIN* simpleChain = certChain->rgpChain[0];
+
+ string trustError;
+ if(simpleChain->TrustStatus.dwErrorStatus != CERT_TRUST_NO_ERROR)
+ {
+ trustError = trustStatusToString(certChain->TrustStatus.dwErrorStatus);
+ }
+
+ CertFreeCertificateChain(certChain);
+ CertFreeCertificateContext(cert);
+ if(!trustError.empty())
+ {
+ throw trustError;
+ }
+ }
+ catch(const string& reason)
+ {
+ if(_engine->getVerifyPeer() == 0)
+ {
+ if(_instance->traceLevel() >= 1)
+ {
+ _instance->logger()->trace(_instance->traceCategory(),
+ "IceSSL: ignoring certificate verification failure\n" + reason);
+ }
+ }
+ else
+ {
+ ostringstream os;
+ os << "IceSSL: certificate verification failure\n" << reason;
+ string msg = os.str();
+ if(_instance->traceLevel() >= 1)
+ {
+ _instance->logger()->trace(_instance->traceCategory(), msg);
+ }
+ throw ProtocolException(__FILE__, __LINE__, msg);
+ }
+ }
+ }
+ }
+ _engine->verifyPeer(_fd, _host, getNativeConnectionInfo());
+ _state = StateHandshakeComplete;
+ }
+ catch(const Ice::LocalException& ex)
+ {
+ if(_instance->traceLevel() >= 2)
+ {
+ Trace out(_instance->logger(), _instance->traceCategory());
+ out << "failed to establish " << _instance->protocol() << " connection\n";
+ if(_incoming)
+ {
+ out << IceInternal::fdToString(_fd) << "\n" << ex;
+ }
+ else
+ {
+ out << IceInternal::fdToString(_fd, _proxy, _addr, false) << "\n" << ex;
+ }
+ }
+ throw;
+ }
+
+ if(_instance->traceLevel() >= 1)
+ {
+ Trace out(_instance->logger(), _instance->traceCategory());
+ if(_incoming)
+ {
+ out << "accepted " << _instance->protocol() << " connection\n" << _desc;
+ }
+ else
+ {
+ out << _instance->protocol() << " connection established\n" << _desc;
+ }
+ }
+
+ if(_instance->engine()->securityTraceLevel() >= 1)
+ {
+ string sslCipherName;
+ string sslKeyExchangeAlgorithm;
+ string sslProtocolName;
+ SecPkgContext_ConnectionInfo info;
+ if(QueryContextAttributes(&_ssl, SECPKG_ATTR_CONNECTION_INFO, &info) == SEC_E_OK)
+ {
+ sslCipherName = _engine->getCipherName(info.aiCipher);
+ sslKeyExchangeAlgorithm = _engine->getCipherName(info.aiExch);
+ sslProtocolName = protocolName(info.dwProtocol);
+ }
+
+ Trace out(_instance->logger(), _instance->traceCategory());
+ out << "SSL summary for " << (_incoming ? "incoming" : "outgoing") << " connection\n";
+
+ if(sslCipherName.empty())
+ {
+ out << "unknown cipher\n";
+ }
+ else
+ {
+ out << "cipher = " << sslCipherName
+ << "\nkey exchange = " << sslKeyExchangeAlgorithm
+ << "\nprotocol = " << sslProtocolName << "\n";
+ }
+ out << IceInternal::fdToString(_fd);
+ }
+ hasMoreData = !_readUnprocessed.b.empty() || _readBuffer.i != _readBuffer.b.begin();
+ return IceInternal::SocketOperationNone;
+}
+
+IceInternal::SocketOperation
+IceSSL::TransceiverI::closing(bool initiator, const Ice::LocalException&)
+{
+ // If we are initiating the connection closure, wait for the peer
+ // to close the TCP/IP connection. Otherwise, close immediately.
+ return initiator ? IceInternal::SocketOperationRead : IceInternal::SocketOperationNone;
+}
+
+void
+IceSSL::TransceiverI::close()
+{
+ if(_state == StateHandshakeComplete && _instance->traceLevel() >= 1)
+ {
+ Trace out(_instance->logger(), _instance->traceCategory());
+ out << "closing " << _instance->protocol() << " connection\n" << toString();
+ }
+ if(_sslInitialized)
+ {
+ DeleteSecurityContext(&_ssl);
+ }
+
+ if(_credentialsInitialized)
+ {
+ FreeCredentialsHandle(&_credentials);
+ }
+
+ assert(_fd != INVALID_SOCKET);
+ try
+ {
+ IceInternal::closeSocket(_fd);
+ _fd = INVALID_SOCKET;
+ }
+ catch(const SocketException&)
+ {
+ _fd = INVALID_SOCKET;
+ throw;
+ }
+}
+
+IceInternal::SocketOperation
+IceSSL::TransceiverI::write(IceInternal::Buffer& buf)
+{
+ if(buf.i == buf.b.end())
+ {
+ return IceInternal::SocketOperationNone;
+ }
+ assert(_state == StateHandshakeComplete);
+
+ while(buf.i != buf.b.end())
+ {
+ if(_bufferedW == 0)
+ {
+ assert(_writeBuffer.i == _writeBuffer.b.end());
+ _bufferedW = encryptMessage(buf);
+ }
+
+ if(!writeRaw(_writeBuffer))
+ {
+ return IceInternal::SocketOperationWrite;
+ }
+
+ assert(_writeBuffer.i == _writeBuffer.b.end()); // Finished writing the encrypted data
+
+ if(_instance->traceLevel() >= 3)
+ {
+ Trace out(_instance->logger(), _instance->traceCategory());
+ out << "sent " << _bufferedW << " of " << (buf.b.end() - buf.i) << " bytes via " << _instance->protocol()
+ << '\n' << toString();
+ }
+
+ buf.i += _bufferedW;
+ _bufferedW = 0;
+ }
+ return IceInternal::SocketOperationNone;
+}
+
+IceInternal::SocketOperation
+IceSSL::TransceiverI::read(IceInternal::Buffer& buf, bool& hasMoreData)
+{
+ if(buf.i == buf.b.end())
+ {
+ return IceInternal::SocketOperationNone;
+ }
+ assert(_state == StateHandshakeComplete);
+
+ hasMoreData = false;
+ while(buf.i != buf.b.end())
+ {
+ if(_readUnprocessed.b.empty() && _readBuffer.i == _readBuffer.b.begin() && !readRaw(_readBuffer))
+ {
+ return IceInternal::SocketOperationRead;
+ }
+
+ size_t decrypted = decryptMessage(buf);
+ if(decrypted == 0)
+ {
+ if(!readRaw(_readBuffer))
+ {
+ return IceInternal::SocketOperationRead;
+ }
+ continue;
+ }
+
+ if(_instance->traceLevel() >= 3)
+ {
+ Trace out(_instance->logger(), _instance->traceCategory());
+ out << "received " << decrypted << " of " << buf.b.end() - buf.i << " bytes via " << _instance->protocol()
+ << '\n' << toString();
+ }
+ buf.i += decrypted;
+ }
+ hasMoreData = !_readUnprocessed.b.empty() || _readBuffer.i != _readBuffer.b.begin();
+ return IceInternal::SocketOperationNone;
+}
+
+#ifdef ICE_USE_IOCP
+
+bool
+IceSSL::TransceiverI::startWrite(IceInternal::Buffer& buffer)
+{
+ if(_state == StateConnectPending)
+ {
+ IceInternal::Address addr = _proxy ? _proxy->getAddress() : _addr;
+ doConnectAsync(_fd, addr, _write);
+ return false;
+ }
+
+ IceInternal::Buffer& buf = _state == StateProxyConnectRequest ? buffer : _writeBuffer;
+
+ if(_state == StateHandshakeComplete && _bufferedW == 0)
+ {
+ assert(_writeBuffer.i == _writeBuffer.b.end());
+ _bufferedW = encryptMessage(buf);
+ }
+
+ assert(buf.i != buf.b.end());
+ int packetSize = static_cast<int>(buf.b.end() - buf.i);
+ if(_maxSendPacketSize > 0 && packetSize > _maxSendPacketSize)
+ {
+ packetSize = _maxSendPacketSize;
+ }
+ assert(packetSize > 0);
+ _write.buf.len = static_cast<DWORD>(packetSize);
+ _write.buf.buf = reinterpret_cast<char*>(buf.i);
+ int err = WSASend(_fd, &_write.buf, 1, &_write.count, 0, &_write, NULL);
+ if(err == SOCKET_ERROR)
+ {
+ if(!IceInternal::wouldBlock())
+ {
+ if(IceInternal::connectionLost())
+ {
+ ConnectionLostException ex(__FILE__, __LINE__);
+ ex.error = IceInternal::getSocketErrno();
+ throw ex;
+ }
+ else
+ {
+ SocketException ex(__FILE__, __LINE__);
+ ex.error = IceInternal::getSocketErrno();
+ throw ex;
+ }
+ }
+ }
+ return packetSize == static_cast<int>(buf.b.end() - buf.i);
+}
+
+void
+IceSSL::TransceiverI::finishWrite(IceInternal::Buffer& buf)
+{
+ if(_state < StateConnected && _state != StateProxyConnectRequest)
+ {
+ return;
+ }
+
+ if(static_cast<int>(_write.count) == SOCKET_ERROR)
+ {
+ WSASetLastError(_write.error);
+ if(IceInternal::connectionLost())
+ {
+ ConnectionLostException ex(__FILE__, __LINE__);
+ ex.error = IceInternal::getSocketErrno();
+ throw ex;
+ }
+ else
+ {
+ SocketException ex(__FILE__, __LINE__);
+ ex.error = IceInternal::getSocketErrno();
+ throw ex;
+ }
+ }
+
+ if(_state == StateProxyConnectRequest)
+ {
+ buf.i += _write.count;
+ }
+ else
+ {
+ _writeBuffer.i += _write.count;
+ if(_writeBuffer.i == _writeBuffer.b.end())
+ {
+ if(_instance->traceLevel() >= 3)
+ {
+ Trace out(_instance->logger(), _instance->traceCategory());
+ out << "sent " << _bufferedW << " of " << (buf.b.end() - buf.i) << " bytes via "
+ << _instance->protocol() << '\n' << toString();
+ }
+ buf.i += _bufferedW;
+ _bufferedW = 0;
+ }
+ }
+}
+
+void
+IceSSL::TransceiverI::startRead(IceInternal::Buffer& buffer)
+{
+ IceInternal::Buffer& buf = _state == StateProxyConnectRequest ? buffer : _readBuffer;
+
+ int packetSize = static_cast<int>(buf.b.end() - buf.i);
+ if(_maxReceivePacketSize > 0 && packetSize > _maxReceivePacketSize)
+ {
+ packetSize = _maxReceivePacketSize;
+ }
+ assert(!buf.b.empty() && buf.i != buf.b.end());
+
+ _read.buf.len = static_cast<DWORD>(packetSize);
+ _read.buf.buf = reinterpret_cast<char*>(buf.i);
+
+ int err = WSARecv(_fd, &_read.buf, 1, &_read.count, &_read.flags, &_read, NULL);
+ if(err == SOCKET_ERROR)
+ {
+ if(!IceInternal::wouldBlock())
+ {
+ if(IceInternal::connectionLost())
+ {
+ ConnectionLostException ex(__FILE__, __LINE__);
+ ex.error = IceInternal::getSocketErrno();
+ throw ex;
+ }
+ else
+ {
+ SocketException ex(__FILE__, __LINE__);
+ ex.error = IceInternal::getSocketErrno();
+ throw ex;
+ }
+ }
+ }
+}
+
+void
+IceSSL::TransceiverI::finishRead(IceInternal::Buffer& buf, bool& hasMoreData)
+{
+ if(static_cast<int>(_read.count) == SOCKET_ERROR)
+ {
+ WSASetLastError(_read.error);
+ if(IceInternal::connectionLost())
+ {
+ ConnectionLostException ex(__FILE__, __LINE__);
+ ex.error = IceInternal::getSocketErrno();
+ throw ex;
+ }
+ else
+ {
+ SocketException ex(__FILE__, __LINE__);
+ ex.error = IceInternal::getSocketErrno();
+ throw ex;
+ }
+ }
+ else if(_read.count == 0)
+ {
+ ConnectionLostException ex(__FILE__, __LINE__);
+ ex.error = 0;
+ throw ex;
+ }
+
+ if(_state == StateProxyConnectRequest)
+ {
+ buf.i += _read.count;
+ }
+ else
+ {
+ _readBuffer.i += _read.count;
+ if(_state == StateHandshakeComplete)
+ {
+ size_t decrypted = decryptMessage(buf);
+ if(decrypted > 0)
+ {
+ if(_instance->traceLevel() >= 3)
+ {
+ Trace out(_instance->logger(), _instance->traceCategory());
+ out << "received " << decrypted << " of " << buf.b.end() - buf.i << " bytes via "
+ << _instance->protocol() << '\n' << toString();
+ }
+ buf.i += decrypted;
+ hasMoreData = !_readUnprocessed.b.empty() || _readBuffer.i != _readBuffer.b.begin();
+ }
+ else
+ {
+ hasMoreData = false;
+ }
+ }
+ }
+}
+#endif
+
+string
+IceSSL::TransceiverI::protocol() const
+{
+ return _instance->protocol();
+}
+
+string
+IceSSL::TransceiverI::toString() const
+{
+ return _desc;
+}
+
+Ice::ConnectionInfoPtr
+IceSSL::TransceiverI::getInfo() const
+{
+ return getNativeConnectionInfo();
+}
+
+void
+IceSSL::TransceiverI::checkSendSize(const IceInternal::Buffer& buf, size_t messageSizeMax)
+{
+ if(buf.b.size() > messageSizeMax)
+ {
+ IceInternal::Ex::throwMemoryLimitException(__FILE__, __LINE__, buf.b.size(), messageSizeMax);
+ }
+}
+
+IceSSL::TransceiverI::TransceiverI(const InstancePtr& instance, SOCKET fd, const IceInternal::NetworkProxyPtr& proxy,
+ const string& host, const IceInternal::Address& addr) :
+ IceInternal::NativeInfo(fd),
+ _instance(instance),
+ _engine(SChannelEnginePtr::dynamicCast(instance->engine())),
+ _proxy(proxy),
+ _host(host),
+ _addr(addr),
+ _incoming(false),
+ _state(StateNeedConnect),
+ _writeBuffer(0),
+ _bufferedW(0),
+ _readBuffer(0),
+ _readUnprocessed(0),
+ _sslInitialized(false),
+ _credentialsInitialized(false)
+#ifdef ICE_USE_IOCP
+ , _read(IceInternal::SocketOperationRead),
+ _write(IceInternal::SocketOperationWrite)
+#endif
+{
+ IceInternal::setBlock(fd, false);
+ IceInternal::setTcpBufSize(fd, _instance->properties(), _instance->logger());
+
+ //
+ // On Windows, limiting the buffer size is important to prevent
+ // poor throughput performances when transfering large amount of
+ // data. See Microsoft KB article KB823764.
+ //
+ _maxSendPacketSize = IceInternal::getSendBufferSize(_fd) / 2;
+ if(_maxSendPacketSize < 512)
+ {
+ _maxSendPacketSize = 0;
+ }
+
+ _maxReceivePacketSize = IceInternal::getRecvBufferSize(_fd);
+ if(_maxReceivePacketSize < 512)
+ {
+ _maxReceivePacketSize = 0;
+ }
+
+#ifndef ICE_USE_IOCP
+ IceInternal::Address connectAddr = proxy ? proxy->getAddress() : addr;
+ if(IceInternal::doConnect(_fd, connectAddr))
+ {
+ _state = StateConnected;
+ _desc = IceInternal::fdToString(_fd, _proxy, _addr, true);
+ if(_instance->traceLevel() >= 1)
+ {
+ Trace out(_instance->logger(), _instance->traceCategory());
+ out << _instance->protocol() << " connection established\n" << _desc;
+ }
+ }
+ else
+ {
+ _desc = IceInternal::fdToString(_fd, _proxy, _addr, true);
+ }
+#endif
+}
+
+IceSSL::TransceiverI::TransceiverI(const InstancePtr& instance, SOCKET fd, const string& adapterName) :
+ IceInternal::NativeInfo(fd),
+ _instance(instance),
+ _engine(SChannelEnginePtr::dynamicCast(instance->engine())),
+ _addr(IceInternal::Address()),
+ _adapterName(adapterName),
+ _incoming(true),
+ _state(StateHandshakeReadContinue),
+ _desc(IceInternal::fdToString(fd)),
+ _writeBuffer(0),
+ _bufferedW(0),
+ _readBuffer(0),
+ _readUnprocessed(0),
+ _sslInitialized(false),
+ _credentialsInitialized(false)
+#ifdef ICE_USE_IOCP
+ , _read(IceInternal::SocketOperationRead),
+ _write(IceInternal::SocketOperationWrite)
+#endif
+{
+ IceInternal::setBlock(fd, false);
+ IceInternal::setTcpBufSize(fd, _instance->properties(), _instance->logger());
+
+ //
+ // On Windows, limiting the buffer size is important to prevent
+ // poor throughput performances when transfering large amount of
+ // data. See Microsoft KB article KB823764.
+ //
+ _maxSendPacketSize = IceInternal::getSendBufferSize(_fd) / 2;
+ if(_maxSendPacketSize < 512)
+ {
+ _maxSendPacketSize = 0;
+ }
+
+ _maxReceivePacketSize = IceInternal::getRecvBufferSize(_fd);
+ if(_maxReceivePacketSize < 512)
+ {
+ _maxReceivePacketSize = 0;
+ }
+}
+
+IceSSL::TransceiverI::~TransceiverI()
+{
+ assert(_fd == INVALID_SOCKET);
+}
+
+NativeConnectionInfoPtr
+IceSSL::TransceiverI::getNativeConnectionInfo() const
+{
+ NativeConnectionInfoPtr info = new NativeConnectionInfo();
+ IceInternal::fdToAddressAndPort(_fd, info->localAddress, info->localPort, info->remoteAddress, info->remotePort);
+
+ if(_sslInitialized)
+ {
+ CtxtHandle* ssl = const_cast<CtxtHandle*>(&_ssl);
+ PCCERT_CONTEXT cert = 0;
+ PCCERT_CHAIN_CONTEXT certChain = 0;
+ SECURITY_STATUS err = QueryContextAttributes(ssl, SECPKG_ATTR_REMOTE_CERT_CONTEXT, &cert);
+ if(err == SEC_E_OK)
+ {
+ CERT_CHAIN_PARA chainP;
+ memset(&chainP, 0, sizeof(chainP));
+ chainP.cbSize = sizeof(chainP);
+
+ if(CertGetCertificateChain(_engine->chainEngine(), cert, 0, 0, &chainP,
+ CERT_CHAIN_REVOCATION_CHECK_CACHE_ONLY, 0, &certChain))
+ {
+ CERT_SIMPLE_CHAIN* simpleChain = certChain->rgpChain[0];
+ for(DWORD i = 0; i < simpleChain->cElement; ++i)
+ {
+ PCCERT_CONTEXT c = simpleChain->rgpElement[i]->pCertContext;
+ PCERT_SIGNED_CONTENT_INFO cc;
+
+ DWORD length = 0;
+ if(!CryptDecodeObjectEx(X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, X509_CERT, c->pbCertEncoded,
+ c->cbCertEncoded, CRYPT_DECODE_ALLOC_FLAG, 0, &cc, &length))
+ {
+ CertFreeCertificateChain(certChain);
+ CertFreeCertificateContext(cert);
+ throw SecurityException(__FILE__, __LINE__,
+ "IceSSL: error decoding peer certificate chain:\n" +
+ IceUtilInternal::lastErrorToString());
+ }
+
+ CertificatePtr certificate = new Certificate(cc);
+ info->nativeCerts.push_back(certificate);
+ info->certs.push_back(certificate->encode());
+ }
+ CertFreeCertificateChain(certChain);
+ }
+ }
+ CertFreeCertificateContext(cert);
+
+ SecPkgContext_ConnectionInfo connInfo;
+ if(QueryContextAttributes(ssl, SECPKG_ATTR_CONNECTION_INFO, &connInfo) == SEC_E_OK)
+ {
+ info->cipher = _engine->getCipherName(connInfo.aiCipher);
+ }
+ }
+
+ info->adapterName = _adapterName;
+ info->incoming = _incoming;
+ return info;
+}
+
+bool
+IceSSL::TransceiverI::writeRaw(IceInternal::Buffer& buf)
+{
+ int packetSize = static_cast<int>(buf.b.end() - buf.i);
+#ifdef ICE_USE_IOCP
+ //
+ // Limit packet size to avoid performance problems on WIN32
+ //
+ if(_maxSendPacketSize > 0 && packetSize > _maxSendPacketSize)
+ {
+ packetSize = _maxSendPacketSize;
+ }
+#endif
+
+ while(buf.i != buf.b.end())
+ {
+ assert(_fd != INVALID_SOCKET);
+
+ int ret = ::send(_fd, reinterpret_cast<const char*>(buf.i), packetSize, 0);
+ if(ret == 0)
+ {
+ ConnectionLostException ex(__FILE__, __LINE__);
+ ex.error = 0;
+ throw ex;
+ }
+
+ if(ret == SOCKET_ERROR)
+ {
+ if(IceInternal::interrupted())
+ {
+ continue;
+ }
+
+ if(IceInternal::noBuffers() && packetSize > 1024)
+ {
+ packetSize /= 2;
+ continue;
+ }
+
+ if(IceInternal::wouldBlock())
+ {
+ return false;
+ }
+
+ if(IceInternal::connectionLost())
+ {
+ ConnectionLostException ex(__FILE__, __LINE__);
+ ex.error = IceInternal::getSocketErrno();
+ throw ex;
+ }
+ else
+ {
+ SocketException ex(__FILE__, __LINE__);
+ ex.error = IceInternal::getSocketErrno();
+ throw ex;
+ }
+ }
+ buf.i += ret;
+ if(packetSize > static_cast<int>(buf.b.end() - buf.i))
+ {
+ packetSize = static_cast<int>(buf.b.end() - buf.i);
+ }
+ }
+ return true;
+}
+
+bool
+IceSSL::TransceiverI::readRaw(IceInternal::Buffer& buf)
+{
+ assert(buf.i != buf.b.end());
+ int packetSize = static_cast<int>(buf.b.end() - buf.i);
+ Byte* i = buf.i;
+ while(buf.i != buf.b.end())
+ {
+ assert(_fd != INVALID_SOCKET);
+ ssize_t ret = ::recv(_fd, reinterpret_cast<char*>(buf.i), packetSize, 0);
+
+ if(ret == 0)
+ {
+ ConnectionLostException ex(__FILE__, __LINE__);
+ ex.error = 0;
+ throw ex;
+ }
+
+ if(ret == SOCKET_ERROR)
+ {
+ if(IceInternal::interrupted())
+ {
+ continue;
+ }
+
+ if(IceInternal::noBuffers() && packetSize > 1024)
+ {
+ packetSize /= 2;
+ continue;
+ }
+
+ if(IceInternal::wouldBlock())
+ {
+ return buf.i != i;
+ }
+
+ if(IceInternal::connectionLost())
+ {
+ ConnectionLostException ex(__FILE__, __LINE__);
+ ex.error = IceInternal::getSocketErrno();
+ throw ex;
+ }
+ else
+ {
+ SocketException ex(__FILE__, __LINE__);
+ ex.error = IceInternal::getSocketErrno();
+ throw ex;
+ }
+ }
+ buf.i += ret;
+ packetSize = static_cast<int>(buf.b.end() - buf.i);
+ }
+ return buf.i != i;
+}
+#endif
diff --git a/cpp/src/IceSSL/SChannelTransceiverI.h b/cpp/src/IceSSL/SChannelTransceiverI.h
new file mode 100644
index 00000000000..7bf2fcb2137
--- /dev/null
+++ b/cpp/src/IceSSL/SChannelTransceiverI.h
@@ -0,0 +1,145 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2014 ZeroC, Inc. All rights reserved.
+//
+// This copy of Ice is licensed to you under the terms described in the
+// ICE_LICENSE file included in this distribution.
+//
+// **********************************************************************
+
+#ifndef ICE_SSL_SCHANNELTRANSCEIVER_I_H
+#define ICE_SSL_SCHANNELTRANSCEIVER_I_H
+
+#include <IceSSL/Config.h>
+#include <IceSSL/InstanceF.h>
+#include <IceSSL/Plugin.h>
+#include <IceSSL/SSLEngineF.h>
+
+#include <Ice/Transceiver.h>
+#include <Ice/Network.h>
+#include <Ice/Buffer.h>
+
+#ifdef ICE_USE_SCHANNEL
+
+#ifdef SECURITY_WIN32
+# undef SECURITY_WIN32
+#endif
+
+#ifdef SECURITY_KERNEL
+# undef SECURITY_KERNEL
+#endif
+
+#define SECURITY_WIN32 1
+#include <security.h>
+#include <sspi.h>
+#include <schannel.h>
+#undef SECURITY_WIN32
+
+namespace IceSSL
+{
+
+class ConnectorI;
+class AcceptorI;
+
+class TransceiverI : public IceInternal::Transceiver, public IceInternal::NativeInfo
+{
+ enum State
+ {
+ StateNeedConnect,
+ StateConnectPending,
+ StateProxyConnectRequest,
+ StateProxyConnectRequestPending,
+ StateConnected,
+ StateHandshakeReadContinue,
+ StateHandshakeWriteContinue,
+ StateHandshakeComplete
+ };
+
+public:
+
+ virtual IceInternal::NativeInfoPtr getNativeInfo();
+ virtual IceInternal::AsyncInfo* getAsyncInfo(IceInternal::SocketOperation);
+
+ virtual IceInternal::SocketOperation initialize(IceInternal::Buffer&, IceInternal::Buffer&, bool&);
+ virtual IceInternal::SocketOperation closing(bool, const Ice::LocalException&);
+ virtual void close();
+ virtual IceInternal::SocketOperation write(IceInternal::Buffer&);
+ virtual IceInternal::SocketOperation read(IceInternal::Buffer&, bool&);
+ virtual bool startWrite(IceInternal::Buffer&);
+ virtual void finishWrite(IceInternal::Buffer&);
+ virtual void startRead(IceInternal::Buffer&);
+ virtual void finishRead(IceInternal::Buffer&, bool&);
+ virtual std::string protocol() const;
+ virtual std::string toString() const;
+ virtual Ice::ConnectionInfoPtr getInfo() const;
+ virtual void checkSendSize(const IceInternal::Buffer&, size_t);
+
+private:
+
+ TransceiverI(const InstancePtr&, SOCKET, const IceInternal::NetworkProxyPtr&, const std::string&,
+ const IceInternal::Address&);
+ TransceiverI(const InstancePtr&, SOCKET, const std::string&);
+ virtual ~TransceiverI();
+
+ virtual NativeConnectionInfoPtr getNativeConnectionInfo() const;
+
+ IceInternal::SocketOperation sslHandshake();
+
+ size_t decryptMessage(IceInternal::Buffer&);
+ size_t encryptMessage(IceInternal::Buffer&);
+
+ bool writeRaw(IceInternal::Buffer&);
+ bool readRaw(IceInternal::Buffer&);
+
+ friend class ConnectorI;
+ friend class AcceptorI;
+
+ const InstancePtr _instance;
+ const SChannelEnginePtr _engine;
+
+ const IceInternal::NetworkProxyPtr _proxy;
+ const std::string _host;
+ const IceInternal::Address _addr;
+
+ const std::string _adapterName;
+ const bool _incoming;
+
+ State _state;
+ std::string _desc;
+
+ //
+ // Buffered encrypted data that has not been written.
+ //
+ IceInternal::Buffer _writeBuffer;
+ size_t _bufferedW;
+
+ //
+ // Buffered data that has not been decrypted.
+ //
+ IceInternal::Buffer _readBuffer;
+
+ //
+ // Buffered data that was decrypted but not yet processed.
+ //
+ IceInternal::Buffer _readUnprocessed;
+
+ CtxtHandle _ssl;
+ bool _sslInitialized;
+ CredHandle _credentials;
+ bool _credentialsInitialized;
+
+#ifdef ICE_USE_IOCP
+ IceInternal::AsyncInfo _read;
+ IceInternal::AsyncInfo _write;
+ int _maxSendPacketSize;
+ int _maxReceivePacketSize;
+#endif
+ SecPkgContext_StreamSizes _sizes;
+};
+typedef IceUtil::Handle<TransceiverI> TransceiverIPtr;
+
+}
+
+#endif
+
+#endif
diff --git a/cpp/src/IceSSL/SSLEngine.cpp b/cpp/src/IceSSL/SSLEngine.cpp
index adbfb439bc0..cd5c77e4597 100644
--- a/cpp/src/IceSSL/SSLEngine.cpp
+++ b/cpp/src/IceSSL/SSLEngine.cpp
@@ -148,11 +148,11 @@ IceSSL::SSLEngine::verifyPeer(SOCKET fd, const string& address, const NativeConn
vector<string> dnsNames;
for(vector<pair<int, string> >::const_iterator p = subjectAltNames.begin(); p != subjectAltNames.end(); ++p)
{
- if(p->first == 7)
+ if(p->first == AltNAmeIP)
{
ipAddresses.push_back(IceUtilInternal::toLower(p->second));
}
- else if(p->first == 2)
+ else if(p->first == AltNameDNS)
{
dnsNames.push_back(IceUtilInternal::toLower(p->second));
}
@@ -237,7 +237,7 @@ IceSSL::SSLEngine::verifyPeer(SOCKET fd, const string& address, const NativeConn
string msg = ostr.str();
if(_securityTraceLevel >= 1)
{
- Trace out(getLogger(), _securityTraceCategory);
+ Trace out(_logger, _securityTraceCategory);
out << msg;
}
if(_checkCertName)
@@ -258,7 +258,7 @@ IceSSL::SSLEngine::verifyPeer(SOCKET fd, const string& address, const NativeConn
string msg = ostr.str();
if(_securityTraceLevel >= 1)
{
- getLogger()->trace(_securityTraceCategory, msg + "\n" + IceInternal::fdToString(fd));
+ _logger->trace(_securityTraceCategory, msg + "\n" + IceInternal::fdToString(fd));
}
SecurityException ex(__FILE__, __LINE__);
ex.reason = msg;
@@ -270,7 +270,7 @@ IceSSL::SSLEngine::verifyPeer(SOCKET fd, const string& address, const NativeConn
string msg = string(info->incoming ? "incoming" : "outgoing") + " connection rejected by trust manager";
if(_securityTraceLevel >= 1)
{
- getLogger()->trace(_securityTraceCategory, msg + "\n" + IceInternal::fdToString(fd));
+ _logger->trace(_securityTraceCategory, msg + "\n" + IceInternal::fdToString(fd));
}
SecurityException ex(__FILE__, __LINE__);
ex.reason = msg;
@@ -282,7 +282,7 @@ IceSSL::SSLEngine::verifyPeer(SOCKET fd, const string& address, const NativeConn
string msg = string(info->incoming ? "incoming" : "outgoing") + " connection rejected by certificate verifier";
if(_securityTraceLevel >= 1)
{
- getLogger()->trace(_securityTraceCategory, msg + "\n" + IceInternal::fdToString(fd));
+ _logger->trace(_securityTraceCategory, msg + "\n" + IceInternal::fdToString(fd));
}
SecurityException ex(__FILE__, __LINE__);
ex.reason = msg;
diff --git a/cpp/src/IceSSL/SSLEngine.h b/cpp/src/IceSSL/SSLEngine.h
index 645f23151e8..f8bd39d9447 100644
--- a/cpp/src/IceSSL/SSLEngine.h
+++ b/cpp/src/IceSSL/SSLEngine.h
@@ -15,15 +15,30 @@
#include <IceSSL/SSLEngineF.h>
#include <IceSSL/TrustManagerF.h>
-#include <IceUtil/ScopedArray.h>
-#include <IceUtil/UniquePtr.h>
#include <IceUtil/Shared.h>
#include <IceUtil/Mutex.h>
#include <Ice/CommunicatorF.h>
#include <Ice/Network.h>
-#ifdef ICE_USE_SECURE_TRANSPORT
+#if defined(ICE_USE_SECURE_TRANSPORT)
# include <Security/Security.h>
+#elif defined(ICE_USE_SCHANNEL)
+
+//
+// SECURITY_WIN32 or SECURITY_KERNEL, must be defined before including security.h
+// indicating who is compiling the code.
+//
+# ifdef SECURITY_WIN32
+# undef SECURITY_WIN32
+# endif
+# ifdef SECURITY_KERNEL
+# undef SECURITY_KERNEL
+# endif
+# define SECURITY_WIN32 1
+# include <security.h>
+# include <sspi.h>
+# include <schannel.h>
+# undef SECURITY_WIN32
#endif
namespace IceSSL
@@ -57,8 +72,7 @@ public:
//
// Verify peer certificate
//
- virtual void verifyPeer(SOCKET, const std::string&, const NativeConnectionInfoPtr&);
-
+ void verifyPeer(SOCKET, const std::string&, const NativeConnectionInfoPtr&);
CertificateVerifierPtr getCertificateVerifier() const;
PasswordPromptPtr getPasswordPrompt() const;
@@ -87,7 +101,7 @@ private:
std::string _securityTraceCategory;
};
-#ifdef ICE_USE_SECURE_TRANSPORT
+#if defined(ICE_USE_SECURE_TRANSPORT)
class SecureTransportEngine : public SSLEngine
{
@@ -102,36 +116,131 @@ public:
SSLContextRef newContext(bool);
CFArrayRef getCertificateAuthorities() const;
std::string getCipherName(SSLCipherSuite) const;
- SecCertificateRef getCertificate() const;
- SecKeychainRef getKeychain() const;
private:
- void parseCiphers(const std::string& ciphers);
+ void parseCiphers(const std::string&);
bool _initialized;
- SSLContextRef _ctx;
- CFArrayRef _certificateAuthorities;
- SecCertificateRef _cert;
- SecKeyRef _key;
- SecIdentityRef _identity;
- SecKeychainRef _keychain;
+ CFArrayRef _certificateAuthorities;
+ CFMutableArrayRef _chain;
SSLProtocol _protocolVersionMax;
SSLProtocol _protocolVersionMin;
std::string _defaultDir;
-
-
- IceUtil::UniquePtr< IceUtil::ScopedArray<char> > _dhParams;
- size_t _dhParamsLength;
+
+ std::vector<char> _dhParams;
std::vector<SSLCipherSuite> _ciphers;
- bool _allCiphers;
IceUtil::Mutex _mutex;
};
-#else
+#elif defined(ICE_USE_SCHANNEL)
+
+
+#ifdef __MINGW32__
+
+//
+// Add some definitions missing from MinGW headers.
+//
+
+# ifndef CERT_TRUST_IS_EXPLICIT_DISTRUST
+# define CERT_TRUST_IS_EXPLICIT_DISTRUST 0x04000000
+# endif
+
+# ifndef CERT_TRUST_HAS_NOT_SUPPORTED_CRITICAL_EXT
+# define CERT_TRUST_HAS_NOT_SUPPORTED_CRITICAL_EXT 0x08000000
+# endif
+
+# ifndef SECBUFFER_ALERT
+# define SECBUFFER_ALERT 17
+# endif
+
+# ifndef SCH_SEND_ROOT_CERT
+# define SCH_SEND_ROOT_CERT 0x00040000
+# endif
+
+# ifndef SP_PROT_TLS1_1_SERVER
+# define SP_PROT_TLS1_1_SERVER 0x00000100
+# endif
+
+# ifndef SP_PROT_TLS1_1_CLIENT
+# define SP_PROT_TLS1_1_CLIENT 0x00000200
+# endif
+
+# ifndef SP_PROT_TLS1_2_SERVER
+# define SP_PROT_TLS1_2_SERVER 0x00000400
+# endif
+
+# ifndef SP_PROT_TLS1_2_CLIENT
+# define SP_PROT_TLS1_2_CLIENT 0x00000800
+# endif
+
+//
+// CERT_CHAIN_ENGINE_CONFIG struct in mingw headers doesn't include
+// new members added in Windows 7, we add our ouwn definition and
+// then cast it to CERT_CHAIN_ENGINE_CONFIG this works because the
+// linked libraries include the new version.
+//
+struct CertChainEngineConfig
+{
+ DWORD cbSize;
+ HCERTSTORE hRestrictedRoot;
+ HCERTSTORE hRestrictedTrust;
+ HCERTSTORE hRestrictedOther;
+ DWORD cAdditionalStore;
+ HCERTSTORE *rghAdditionalStore;
+ DWORD dwFlags;
+ DWORD dwUrlRetrievalTimeout;
+ DWORD MaximumCachedCertificates;
+ DWORD CycleDetectionModulus;
+ HCERTSTORE hExclusiveRoot;
+ HCERTSTORE hExclusiveTrustedPeople;
+};
+
+#endif
+class SChannelEngine : public SSLEngine
+{
+public:
+
+ SChannelEngine(const Ice::CommunicatorPtr&);
+
+ //
+ // Setup the engine.
+ //
+ virtual void initialize();
+
+ virtual bool initialized() const;
+
+ //
+ // Destroy the engine.
+ //
+ virtual void destroy();
+
+ std::string getCipherName(ALG_ID) const;
+
+ CredHandle newCredentialsHandle(bool);
+
+ HCERTCHAINENGINE chainEngine() const;
+
+private:
+
+ void parseCiphers(const std::string&);
+
+ bool _initialized;
+ std::vector<PCCERT_CONTEXT> _certs;
+ DWORD _protocols;
+ IceUtil::Mutex _mutex;
+
+ std::vector<HCERTSTORE> _stores;
+
+ HCERTSTORE _rootStore;
+
+ HCERTCHAINENGINE _chainEngine;
+ std::vector<ALG_ID> _ciphers;
+};
+#else // OpenSSL
class OpenSSLEngine : public SSLEngine
{
public:
@@ -142,12 +251,11 @@ public:
virtual void initialize();
virtual bool initialized() const;
virtual void destroy();
- virtual void verifyPeer(SSL*, SOCKET, const std::string&, const NativeConnectionInfoPtr&);
int verifyCallback(int , SSL*, X509_STORE_CTX*);
-# ifndef OPENSSL_NO_DH
+# ifndef OPENSSL_NO_DH
DH* dhParams(int);
-# endif
+# endif
SSL_CTX* context() const;
void context(SSL_CTX*);
std::string sslErrors() const;
@@ -165,9 +273,9 @@ private:
SSL_CTX* _ctx;
std::string _defaultDir;
-# ifndef OPENSSL_NO_DH
+# ifndef OPENSSL_NO_DH
DHParamsPtr _dhParams;
-# endif
+# endif
IceUtil::Mutex _mutex;
};
#endif
diff --git a/cpp/src/IceSSL/SSLEngineF.h b/cpp/src/IceSSL/SSLEngineF.h
index c064c2f4250..a485da2d4fd 100644
--- a/cpp/src/IceSSL/SSLEngineF.h
+++ b/cpp/src/IceSSL/SSLEngineF.h
@@ -22,15 +22,19 @@ class SSLEngine;
ICE_SSL_API IceUtil::Shared* upCast(IceSSL::SSLEngine*);
typedef IceInternal::Handle<SSLEngine> SSLEnginePtr;
-# ifdef ICE_USE_SECURE_TRANSPORT
+#if defined(ICE_USE_SECURE_TRANSPORT)
class SecureTransportEngine;
ICE_SSL_API IceUtil::Shared* upCast(IceSSL::SecureTransportEngine*);
typedef IceInternal::Handle<SecureTransportEngine> SecureTransportEnginePtr;
-# else
+#elif defined(ICE_USE_SCHANNEL)
+class SChannelEngine;
+ICE_SSL_API IceUtil::Shared* upCast(IceSSL::SChannelEngine*);
+typedef IceInternal::Handle<SChannelEngine> SChannelEnginePtr;
+#else // OpenSSL
class OpenSSLEngine;
ICE_SSL_API IceUtil::Shared* upCast(IceSSL::OpenSSLEngine*);
typedef IceInternal::Handle<OpenSSLEngine> OpenSSLEnginePtr;
-# endif
+#endif
}
diff --git a/cpp/src/IceSSL/SecureTransportEngine.cpp b/cpp/src/IceSSL/SecureTransportEngine.cpp
index f2ac0d7947a..37ae0a2dceb 100644
--- a/cpp/src/IceSSL/SecureTransportEngine.cpp
+++ b/cpp/src/IceSSL/SecureTransportEngine.cpp
@@ -26,7 +26,6 @@
#ifdef ICE_USE_SECURE_TRANSPORT
#include <regex.h>
-#include <dirent.h>
using namespace std;
using namespace IceUtil;
@@ -56,39 +55,13 @@ public:
Init init;
-vector<string>
-dir(const string& path)
-{
- vector<string> result;
-
- DIR* d = opendir(path.c_str());
- if(!d)
- {
- ostringstream os;
- os << "failed to open dir `" << path << "'";
- throw IceUtil::IllegalArgumentException(__FILE__, __LINE__, os.str());
- }
-
- struct dirent* dp = 0;
- while((dp = readdir(d)))
- {
- string name(dp->d_name);
- if(IceUtilInternal::fileExists(path + "/" + name))
- {
- result.push_back(name);
- }
- }
- closedir(d);
- return result;
-}
-
class RegExp : public IceUtil::Shared
{
public:
- RegExp(const std::string&);
+ RegExp(const string&);
~RegExp();
- bool match(const std::string&);
+ bool match(const string&);
private:
@@ -96,14 +69,12 @@ private:
};
typedef IceUtil::Handle<RegExp> RegExpPtr;
-RegExp::RegExp(const std::string& regexp)
+RegExp::RegExp(const string& regexp)
{
int err = regcomp(&_preg, regexp.c_str(), REG_EXTENDED | REG_NOSUB);
- if(err != 0)
+ if(err)
{
- ostringstream os;
- os << "failed to compiler regular expression `" << regexp << "' (error = " << err << ")";
- throw IllegalArgumentException(__FILE__, __LINE__, os.str());
+ throw IceUtil::SyscallException(__FILE__, __LINE__, err);
}
}
@@ -113,7 +84,7 @@ RegExp::~RegExp()
}
bool
-RegExp::match(const std::string& value)
+RegExp::match(const string& value)
{
return regexec(&_preg, value.c_str(), 0, 0, 0) == 0;
}
@@ -132,6 +103,7 @@ public:
static void initialize();
static SSLCipherSuite cipherForName(const string& name);
static string cipherName(SSLCipherSuite cipher);
+ static map<string, SSLCipherSuite> ciphers();
private:
@@ -376,8 +348,7 @@ CiphersHelper::cipherForName(const string& name)
map<string, SSLCipherSuite>::const_iterator i = _ciphers.find(name);
if(i == _ciphers.end() || i->second == SSL_NO_SUCH_CIPHERSUITE)
{
- PluginInitializationException ex(__FILE__, __LINE__, "IceSSL: no such cipher " + name);
- throw ex;
+ throw PluginInitializationException(__FILE__, __LINE__, "IceSSL: no such cipher " + name);
}
return i->second;
}
@@ -773,8 +744,14 @@ CiphersHelper::cipherName(SSLCipherSuite cipher)
}
}
+map<string, SSLCipherSuite>
+CiphersHelper::ciphers()
+{
+ return _ciphers;
+}
+
SSLProtocol
-parseProtocol(const std::string& prot)
+parseProtocol(const string& prot)
{
if(prot == "ssl2" || prot == "sslv2")
{
@@ -798,9 +775,7 @@ parseProtocol(const std::string& prot)
}
else
{
- PluginInitializationException ex(__FILE__, __LINE__);
- ex.reason = "IceSSL: unrecognized protocol `" + prot + "'";
- throw ex;
+ throw PluginInitializationException(__FILE__, __LINE__, "IceSSL: unrecognized protocol `" + prot + "'");
}
}
@@ -811,17 +786,10 @@ IceUtil::Shared* IceSSL::upCast(IceSSL::SecureTransportEngine* p) { return p; }
IceSSL::SecureTransportEngine::SecureTransportEngine(const Ice::CommunicatorPtr& communicator) :
SSLEngine(communicator),
_initialized(false),
- _ctx(0),
_certificateAuthorities(0),
- _cert(0),
- _key(0),
- _identity(0),
- _keychain(0),
+ _chain(0),
_protocolVersionMax(kSSLProtocolUnknown),
- _protocolVersionMin(kSSLProtocolUnknown),
- _dhParams(0),
- _dhParamsLength(0),
- _allCiphers(false)
+ _protocolVersionMin(kSSLProtocolUnknown)
{
}
@@ -863,296 +831,369 @@ IceSSL::SecureTransportEngine::initialize()
bool usePassword = !keychainPassword.empty();
size_t size = keychainPassword.size();
const char* password = usePassword ? keychainPassword.c_str() : 0;
- OSStatus err = noErr;
- if(keychainPath.empty())
+
+ CFDataRef hash = 0;
+ SecKeychainRef keychain = 0;
+ SecCertificateRef cert = 0;
+ SecKeyRef key = 0;
+ SecIdentityRef identity = 0;
+
+ try
{
- err = SecKeychainCopyDefault(&_keychain);
- if(err != noErr)
+ OSStatus err = 0;
+ if(keychainPath.empty())
{
- ostringstream os;
- os << "IceSSL: unable to retrieve default keychain:\n" << errorToString(err);
- throw PluginInitializationException(__FILE__, __LINE__, os.str());
- }
- }
- else
- {
- //
- // KeyChain path is relative to the current working directory.
- //
- if(!IceUtilInternal::isAbsolutePath(keychainPath))
- {
- string cwd;
- if(IceUtilInternal::getcwd(cwd) == 0)
+ if((err = SecKeychainCopyDefault(&keychain)))
{
- keychainPath = string(cwd) + '/' + keychainPath;
+ throw PluginInitializationException(__FILE__, __LINE__,
+ "IceSSL: unable to retrieve default keychain:\n" + errorToString(err));
}
}
-
- err = SecKeychainOpen(keychainPath.c_str(), &_keychain);
- if(err != noErr)
+ else
{
- ostringstream os;
- os << "IceSSL: unable to open keychain: `" << keychainPath << "'\n" << errorToString(err);
- throw PluginInitializationException(__FILE__, __LINE__, os.str());
+ //
+ // KeyChain path is relative to the current working directory.
+ //
+ if(!IceUtilInternal::isAbsolutePath(keychainPath))
+ {
+ string cwd;
+ if(IceUtilInternal::getcwd(cwd) == 0)
+ {
+ keychainPath = string(cwd) + '/' + keychainPath;
+ }
+ }
+
+ if((err = SecKeychainOpen(keychainPath.c_str(), &keychain)))
+ {
+ throw PluginInitializationException(__FILE__, __LINE__, "IceSSL: unable to open keychain: `" +
+ keychainPath + "'\n" + errorToString(err));
+ }
}
- }
-
- SecKeychainStatus status;
- err = SecKeychainGetStatus(_keychain, &status);
+
+ SecKeychainStatus status;
+ err = SecKeychainGetStatus(keychain, &status);
- if(err == noErr)
- {
- err = SecKeychainUnlock(_keychain, size, password, usePassword);
- if(err != noErr)
+ if(err == noErr)
{
- ostringstream os;
- os << "IceSSL: unable to unlock keychain:\n" << errorToString(err);
- throw PluginInitializationException(__FILE__, __LINE__, os.str());
- }
- }
- else if(err == errSecNoSuchKeychain)
- {
- err = SecKeychainCreate(keychainPath.c_str(), size, password, keychainPassword.empty(), 0, &_keychain);
- if(err != noErr)
- {
- ostringstream os;
- os << "IceSSL: unable to create keychain:\n" << errorToString(err);
- throw PluginInitializationException(__FILE__, __LINE__, os.str());
+ if((err = SecKeychainUnlock(keychain, size, password, usePassword)))
+ {
+ throw PluginInitializationException(__FILE__, __LINE__,
+ "IceSSL: unable to unlock keychain:\n" + errorToString(err));
+ }
}
- }
- else
- {
- ostringstream os;
- os << "IceSSL: unable to open keychain:\n" << errorToString(err);
- throw PluginInitializationException(__FILE__, __LINE__, os.str());
- }
-
- int passwordRetryMax = properties->getPropertyAsIntWithDefault(propPrefix + "PasswordRetryMax", 3);
- PasswordPromptPtr passwordPrompt = getPasswordPrompt();
-
- //
- // Load the CA certificates used to authenticate peers into
- // _certificateAuthorities array.
- //
- {
- try
+ else if(err == errSecNoSuchKeychain)
{
- string caFile = properties->getProperty(propPrefix + "CertAuthFile");
- if(!caFile.empty())
+ if((err = SecKeychainCreate(keychainPath.c_str(), size, password, keychainPassword.empty(), 0, &keychain)))
{
- if(!checkPath(caFile, defaultDir, false))
- {
- PluginInitializationException ex(__FILE__, __LINE__);
- ex.reason = "IceSSL: CA certificate file not found:\n" + caFile;
- throw ex;
- }
- _certificateAuthorities = loadCACertificates(caFile);
+ throw PluginInitializationException(__FILE__, __LINE__,
+ "IceSSL: unable to create keychain:\n" + errorToString(err));
}
}
- catch(const CertificateReadException& ce)
+ else
{
- PluginInitializationException ex(__FILE__, __LINE__, ce.reason);
- throw ex;
+ throw PluginInitializationException(__FILE__, __LINE__,
+ "IceSSL: unable to open keychain:\n" + errorToString(err));
}
- catch(const CertificateEncodingException& ce)
+
+ //
+ // Set keychain settings to avoid keychain lock.
+ //
+ SecKeychainSettings settings;
+ settings.version = SEC_KEYCHAIN_SETTINGS_VERS1;
+ settings.lockOnSleep = FALSE;
+ settings.useLockInterval = FALSE;
+ settings.lockInterval = INT_MAX;
+
+ if((err = SecKeychainSetSettings(keychain, &settings)))
{
- PluginInitializationException ex(__FILE__, __LINE__, ce.reason);
- throw ex;
+ throw PluginInitializationException(__FILE__, __LINE__,
+ "IceSSL: error setting keychain settings:\n" + errorToString(err));
}
- string caDir = properties->getPropertyWithDefault(propPrefix + "CertAuthDir", defaultDir);
- if(!caDir.empty())
+ int passwordRetryMax = properties->getPropertyAsIntWithDefault(propPrefix + "PasswordRetryMax", 3);
+ PasswordPromptPtr passwordPrompt = getPasswordPrompt();
+
+ //
+ // Load the CA certificates used to authenticate peers into
+ // _certificateAuthorities array.
+ //
{
- CFMutableArrayRef certificateAuthorities;
- if(_certificateAuthorities)
+ try
{
- certificateAuthorities = CFArrayCreateMutableCopy(kCFAllocatorDefault, 0, _certificateAuthorities);
- CFRelease(_certificateAuthorities);
+ string caFile = properties->getProperty(propPrefix + "CertAuthFile");
+ if(!caFile.empty())
+ {
+ if(!checkPath(caFile, defaultDir, false))
+ {
+ throw PluginInitializationException(__FILE__, __LINE__,
+ "IceSSL: CA certificate file not found:\n" + caFile);
+ }
+ _certificateAuthorities = loadCACertificates(caFile);
+ }
}
- else
+ catch(const CertificateReadException& ce)
{
- certificateAuthorities = CFArrayCreateMutable(kCFAllocatorDefault, 0, &kCFTypeArrayCallBacks);
+ throw PluginInitializationException(__FILE__, __LINE__, ce.reason);
}
-
- vector<string> files = dir(caDir);
- for(vector<string>::const_iterator i = files.begin(); i != files.end(); ++i)
+ catch(const CertificateEncodingException& ce)
{
- try
- {
- CFArrayRef tmp = loadCACertificates(caDir + "/" + *i);
-
- CFArrayAppendArray(certificateAuthorities, tmp, CFRangeMake(0, CFArrayGetCount(tmp)));
- CFRelease(tmp);
- }
- catch(const CertificateReadException&)
- {
- //
- // Some files in CertAuthDir might not be certificates, we just ignore those files.
- //
- }
- catch(const CertificateEncodingException&)
- {
- //
- // Some files in CertAuthDir might not be certificates, we just ignore those files.
- //
- }
+ throw PluginInitializationException(__FILE__, __LINE__, ce.reason);
}
- _certificateAuthorities = certificateAuthorities;
}
- }
-
- //
- // Import the application certificate and private keys into the application
- // keychain.
- //
- {
- string certFile = properties->getProperty(propPrefix + "CertFile");
- string keyFile = properties->getProperty(propPrefix + "KeyFile");
- vector<string>::size_type numCerts = 0;
- CFDataRef hash = 0;
-
- if(!certFile.empty())
+ //
+ // Import the application certificate and private keys into the application
+ // keychain.
+ //
{
- vector<string> files;
- if(!IceUtilInternal::splitString(certFile, IceUtilInternal::pathsep, files) || files.size() > 2)
+ string certFile = properties->getProperty(propPrefix + "CertFile");
+ string keyFile = properties->getPropertyWithDefault(propPrefix + "KeyFile", certFile);
+ vector<string>::size_type numCerts = 0;
+
+ if(!certFile.empty())
{
- PluginInitializationException ex(__FILE__, __LINE__);
- ex.reason = "IceSSL: invalid value for " + propPrefix + "CertFile:\n" + certFile;
- throw ex;
+ vector<string> files;
+ if(!IceUtilInternal::splitString(certFile, IceUtilInternal::pathsep, files) || files.size() > 2)
+ {
+ throw PluginInitializationException(__FILE__, __LINE__, "IceSSL: invalid value for " + propPrefix +
+ "CertFile:\n" + certFile);
+ }
+ numCerts = files.size();
+ for(vector<string>::iterator p = files.begin(); p != files.end();)
+ {
+ string file = *p;
+ if(!checkPath(file, defaultDir, false))
+ {
+ throw PluginInitializationException(__FILE__, __LINE__,
+ "IceSSL: certificate file not found:\n" + file);
+ }
+
+ try
+ {
+ loadCertificate(&cert, &hash, &key, keychain, file,
+ properties->getProperty(propPrefix + "Password"), passwordPrompt,
+ passwordRetryMax);
+ break;
+ }
+ catch(const CertificateReadException& ce)
+ {
+ //
+ // If this is the last certificate rethrow the exception as PluginInitializationException,
+ // otherwise try the next certificate.
+ //
+ if(++p == files.end())
+ {
+ throw PluginInitializationException(__FILE__, __LINE__, ce.reason);
+ }
+ }
+ }
}
- numCerts = files.size();
- for(vector<string>::iterator p = files.begin(); p != files.end();)
+
+ if(!key && !keyFile.empty())
{
- string file = *p;
- if(!checkPath(file, defaultDir, false))
+ vector<string> files;
+ if(!IceUtilInternal::splitString(keyFile, IceUtilInternal::pathsep, files) || files.size() > 2)
{
- PluginInitializationException ex(__FILE__, __LINE__);
- ex.reason = "IceSSL: certificate file not found:\n" + file;
- throw ex;
+ throw PluginInitializationException(__FILE__, __LINE__,
+ "IceSSL: invalid value for " + propPrefix + "KeyFile:\n" + keyFile);
}
-
- try
+ if(files.size() != numCerts)
{
- loadCertificate(&_cert, &hash, keyFile.empty() ? &_key : 0, _keychain, file,
- properties->getProperty(propPrefix + "Password"), passwordPrompt,
- passwordRetryMax);
- break;
+ throw PluginInitializationException(__FILE__, __LINE__,
+ "IceSSL: IceSSL.KeyFile does not agree with IceSSL.CertFile");
}
- catch(const CertificateReadException& ce)
+ for(vector<string>::iterator p = files.begin(); p != files.end();)
{
- //
- // If this is the last certificate rethrow the exception as PluginInitializationException,
- // otherwise try the next certificate.
- //
- if(++p == files.end())
+ string file = *p;
+ if(!checkPath(file, defaultDir, false))
{
- PluginInitializationException ex(__FILE__, __LINE__, ce.reason);
- throw ex;
+ throw PluginInitializationException(__FILE__, __LINE__,
+ "IceSSL: key file not found:\n" + file);
+ }
+
+ try
+ {
+ loadPrivateKey(&key, keyLabel(cert), hash, keychain, file,
+ properties->getProperty(propPrefix + "Password"),
+ passwordPrompt, passwordRetryMax);
+ break;
+ }
+ catch(const CertificateReadException& ce)
+ {
+ //
+ // If this is the last key rethrow the exception as PluginInitializationException,
+ // otherwise try the next certificate.
+ //
+ if(++p == files.end())
+ {
+ PluginInitializationException ex(__FILE__, __LINE__, ce.reason);
+ throw ex;
+ }
}
}
}
- }
-
- if(!keyFile.empty())
- {
- vector<string> files;
- if(!IceUtilInternal::splitString(keyFile, IceUtilInternal::pathsep, files) || files.size() > 2)
- {
- PluginInitializationException ex(__FILE__, __LINE__);
- ex.reason = "IceSSL: invalid value for " + propPrefix + "KeyFile:\n" + keyFile;
- throw ex;
- }
- if(files.size() != numCerts)
- {
- PluginInitializationException ex(__FILE__, __LINE__);
- ex.reason = "IceSSL: " + propPrefix + "KeyFile does not agree with " + propPrefix + "CertFile";
- throw ex;
- }
- for(vector<string>::iterator p = files.begin(); p != files.end();)
+
+ if(cert)
{
- string file = *p;
- if(!checkPath(file, defaultDir, false))
+ if((err = SecIdentityCreateWithCertificate(keychain, cert, &identity)) != noErr)
{
- PluginInitializationException ex(__FILE__, __LINE__);
- ex.reason = "IceSSL: key file not found:\n" + file;
- throw ex;
+ throw PluginInitializationException(__FILE__, __LINE__,
+ "IceSSL: error creating certificate identity:\n" + errorToString(err));
}
-
+ }
+
+ if(identity)
+ {
+ SecTrustRef trust = 0;
try
{
- loadPrivateKey(&_key, keyLabel(_cert), hash, _keychain, file,
- properties->getProperty(propPrefix + "Password"),
- passwordPrompt, passwordRetryMax);
- break;
- }
- catch(const CertificateReadException& ce)
- {
//
- // If this is the last key rethrow the exception as PluginInitializationException,
- // otherwise try the next certificate.
+ // Retrieve the certificate chain
//
- if(++p == files.end())
+ SecPolicyRef policy = SecPolicyCreateSSL(true, 0);
+ err = SecTrustCreateWithCertificates((CFArrayRef)cert, policy, &trust);
+ CFRelease(policy);
+ if(err || !trust)
+ {
+ throw PluginInitializationException(__FILE__, __LINE__,
+ "IceSSL: error creating trust object" + (err ? ":\n" + errorToString(err) : ""));
+ }
+
+ if((err = SecTrustSetAnchorCertificates(trust, _certificateAuthorities)))
+ {
+ throw PluginInitializationException(__FILE__, __LINE__,
+ "IceSSL: error while establish the anchor certificates:\n" + errorToString(err));
+ }
+
+ SecTrustResultType trustResult;
+ if((err = SecTrustEvaluate(trust, &trustResult)))
+ {
+ throw PluginInitializationException(__FILE__, __LINE__,
+ "IceSSL: error evaluating trust:\n" + errorToString(err));
+ }
+
+ int chainLength = SecTrustGetCertificateCount(trust);
+ _chain = CFArrayCreateMutable(kCFAllocatorDefault, chainLength, &kCFTypeArrayCallBacks);
+ CFArrayAppendValue(_chain, identity);
+ for(int i = 1; i < chainLength; ++i)
+ {
+ CFArrayAppendValue(_chain, SecTrustGetCertificateAtIndex(trust, i));
+ }
+ CFRelease(trust);
+ }
+ catch(...)
+ {
+ if(trust)
{
- PluginInitializationException ex(__FILE__, __LINE__, ce.reason);
- throw ex;
+ CFRelease(trust);
}
+ throw;
}
}
- }
-
- if(_cert)
- {
- err = SecIdentityCreateWithCertificate(_keychain, _cert, &_identity);
- if(err != noErr)
+
+ if(hash)
+ {
+ CFRelease(hash);
+ }
+
+ if(keychain)
{
- ostringstream os;
- os << "IceSSL: unable to create the certificate identity:\n" << errorToString(err);
- PluginInitializationException ex(__FILE__, __LINE__, os.str());
- throw ex;
+ CFRelease(keychain);
+ }
+
+ if(cert)
+ {
+ CFRelease(cert);
+ }
+
+ if(key)
+ {
+ CFRelease(key);
+ }
+
+ if(identity)
+ {
+ CFRelease(identity);
}
}
-
+ }
+ catch(...)
+ {
if(hash)
{
CFRelease(hash);
}
+
+ if(keychain)
+ {
+ CFRelease(keychain);
+ }
+
+ if(cert)
+ {
+ CFRelease(cert);
+ }
+
+ if(key)
+ {
+ CFRelease(key);
+ }
+
+ if(identity)
+ {
+ CFRelease(identity);
+ }
+
+ throw;
}
-
//
// DiffieHellmanParams in DER format.
//
+ string dhFile = properties->getProperty(propPrefix + "DHParams");
+ if(!dhFile.empty())
{
- string dhParams = properties->getProperty(propPrefix + "DHParams");
- if(!dhParams.empty())
+ if(!checkPath(dhFile, defaultDir, false))
{
- if(!checkPath(dhParams, defaultDir, false))
- {
- PluginInitializationException ex(__FILE__, __LINE__);
- ex.reason = "IceSSL: DH params file not found:\n" + dhParams;
- throw ex;
- }
-
- ScopedArray<char> buffer;
- _dhParamsLength = readFile(dhParams, buffer);
- _dhParams.reset(new ScopedArray<char>(buffer));
+ throw PluginInitializationException(__FILE__, __LINE__, "IceSSL: DH params file not found:\n" + dhFile);
}
+
+ readFile(dhFile, _dhParams);
}
//
// Establish the cipher list.
//
string ciphers = properties->getProperty(propPrefix + "Ciphers");
+ CiphersHelper::initialize();
+
if(!ciphers.empty())
{
- //
- // Context used to get the cipher list
- //
- _ctx = SSLCreateContext(kCFAllocatorDefault, kSSLServerSide, kSSLStreamType);
- CiphersHelper::initialize();
parseCiphers(ciphers);
}
+ if(securityTraceLevel() >= 1)
+ {
+ ostringstream os;
+ os << "enabling SSL ciphersuites:";
+
+ if(_ciphers.empty())
+ {
+ map<string, SSLCipherSuite> enabled = CiphersHelper::ciphers();
+ for(map<string, SSLCipherSuite>::const_iterator i = enabled.begin(); i != enabled.end(); ++i)
+ {
+ os << "\n " << i->first;
+ }
+ }
+ else
+ {
+ for(vector<SSLCipherSuite>::const_iterator i = _ciphers.begin(); i != _ciphers.end(); ++i)
+ {
+ os << "\n " << getCipherName(*i);
+ }
+ }
+ getLogger()->trace(securityTraceCategory(), os.str());
+ }
+
//
// Parse protocols
//
@@ -1182,45 +1223,21 @@ IceSSL::SecureTransportEngine::destroy()
_certificateAuthorities = 0;
}
- if(_identity)
- {
- CFRelease(_identity);
- _identity = 0;
- }
-
- if(_cert)
+ if(_chain)
{
- CFRelease(_cert);
- _cert = 0;
- }
-
- if(_key)
- {
- CFRelease(_key);
- _key = 0;
- }
-
- if(_keychain)
- {
- CFRelease(_keychain);
- _keychain = 0;
- }
-
- if(_ctx)
- {
- CFRelease(_ctx);
- _ctx = 0;
+ CFRelease(_chain);
+ _chain = 0;
}
}
SSLContextRef
IceSSL::SecureTransportEngine::newContext(bool incoming)
{
- SSLContextRef ssl = SSLCreateContext(kCFAllocatorDefault, incoming ? kSSLServerSide : kSSLClientSide, kSSLStreamType);
+ SSLContextRef ssl = SSLCreateContext(kCFAllocatorDefault, incoming ? kSSLServerSide : kSSLClientSide,
+ kSSLStreamType);
if(!ssl)
{
- PluginInitializationException ex(__FILE__, __LINE__, "IceSSL: unable to create SSL context");
- throw ex;
+ throw SecurityException(__FILE__, __LINE__, "IceSSL: unable to create SSL context");
}
OSStatus err = noErr;
@@ -1250,125 +1267,53 @@ IceSSL::SecureTransportEngine::newContext(bool incoming)
}
}
- if(_dhParamsLength > 0)
+ if(!_dhParams.empty())
{
- err = SSLSetDiffieHellmanParams(ssl, _dhParams->get(), _dhParamsLength);
- if(err != noErr)
+ if((err = SSLSetDiffieHellmanParams(ssl, &_dhParams[0], _dhParams.size())))
{
- ostringstream os;
- os << "IceSSL: unable to create the trust object:\n" << errorToString(err);
- PluginInitializationException ex(__FILE__, __LINE__, os.str());
- throw ex;
+ throw SecurityException(__FILE__, __LINE__,
+ "IceSSL: unable to create the trust object:\n" + errorToString(err));
}
}
}
- if(_cert)
- {
- //
- // Retrieve the certificate chain
- //
- SecPolicyRef policy = SecPolicyCreateSSL(incoming, 0);
- SecTrustRef trust;
- err = SecTrustCreateWithCertificates((CFArrayRef)_cert, policy, &trust);
- CFRelease(policy);
- if(err != noErr || !trust)
- {
- ostringstream os;
- os << "IceSSL: unable to create the trust object";
- if(err != noErr)
- {
- os << ":\n" << errorToString(err);
- }
- PluginInitializationException ex(__FILE__, __LINE__, os.str());
- throw ex;
- }
-
- err = SecTrustSetAnchorCertificates(trust, _certificateAuthorities);
- if(err != noErr)
- {
- ostringstream os;
- os << "IceSSL: unable to establish the anchor certificates:\n" << errorToString(err);
- PluginInitializationException ex(__FILE__, __LINE__, os.str());
- throw ex;
- }
-
- SecTrustResultType trustResult;
- err = SecTrustEvaluate(trust, &trustResult);
- if(err != noErr)
- {
- ostringstream os;
- os << "IceSSL: unable to evaluate trust:\n" << errorToString(err);
- PluginInitializationException ex(__FILE__, __LINE__, os.str());
- throw ex;
- }
-
- int chainLength = SecTrustGetCertificateCount(trust);
- CFMutableArrayRef chain = CFArrayCreateMutable(kCFAllocatorDefault, chainLength, &kCFTypeArrayCallBacks);
- CFArrayAppendValue(chain, _identity);
- for(int i = 1; i < chainLength; ++i)
- {
- CFArrayAppendValue(chain, SecTrustGetCertificateAtIndex(trust, i));
- }
- CFRelease(trust);
-
- err = SSLSetCertificate(ssl, chain);
-
- CFRelease(chain);
-
- if(err != noErr)
- {
- ostringstream os;
- os << "IceSSL: unable to set the SSL context certificate identity:\n" << errorToString(err);
- PluginInitializationException ex(__FILE__, __LINE__, os.str());
- throw ex;
- }
+ if(_chain && (err = SSLSetCertificate(ssl, _chain)))
+ {
+ throw SecurityException(__FILE__, __LINE__,
+ "IceSSL: error while set the SSL context certificate:\n" + errorToString(err));
}
if(!_ciphers.empty())
{
- err = SSLSetEnabledCiphers(ssl, reinterpret_cast<SSLCipherSuite*>(&_ciphers[0]), _ciphers.size());
- if(err != noErr)
+ if((err = SSLSetEnabledCiphers(ssl, &_ciphers[0], _ciphers.size())))
{
- ostringstream os;
- os << "IceSSL: failed to set enabled ciphers:\n" << errorToString(err);
- PluginInitializationException ex(__FILE__, __LINE__, os.str());
- throw ex;
+ throw SecurityException(__FILE__, __LINE__, "IceSSL: error while set ciphers:\n" + errorToString(err));
}
}
- err = SSLSetSessionOption(ssl, incoming ? kSSLSessionOptionBreakOnClientAuth : kSSLSessionOptionBreakOnServerAuth,
- true);
- if(err != noErr)
+ if((err = SSLSetSessionOption(ssl, incoming ? kSSLSessionOptionBreakOnClientAuth :
+ kSSLSessionOptionBreakOnServerAuth,
+ true)))
{
- ostringstream os;
- os << "IceSSL: failed to set SSL option:\n" << errorToString(err);
- PluginInitializationException ex(__FILE__, __LINE__, os.str());
- throw ex;
+ throw SecurityException(__FILE__, __LINE__, "IceSSL: error while set SSL option:\n" + errorToString(err));
}
if(_protocolVersionMax != kSSLProtocolUnknown)
{
- err = SSLSetProtocolVersionMax(ssl, _protocolVersionMax);
- if(err != noErr)
+ if((err = SSLSetProtocolVersionMax(ssl, _protocolVersionMax)))
{
- ostringstream os;
- os << "IceSSL: failed to set SSL protocol version max:\n" << errorToString(err);
- PluginInitializationException ex(__FILE__, __LINE__, os.str());
- throw ex;
+ throw SecurityException(__FILE__, __LINE__,
+ "IceSSL: error while set SSL protocol version max:\n" + errorToString(err));
}
}
if(_protocolVersionMin != kSSLProtocolUnknown)
{
- err = SSLSetProtocolVersionMin(ssl, _protocolVersionMin);
- if(err != noErr)
+ if((err = SSLSetProtocolVersionMin(ssl, _protocolVersionMin)))
{
- ostringstream os;
- os << "IceSSL: failed to set SSL protocol version min:\n" << errorToString(err);
- PluginInitializationException ex(__FILE__, __LINE__, os.str());
- throw ex;
+ throw SecurityException(__FILE__, __LINE__,
+ "IceSSL: error while set SSL protocol version min:\n" + errorToString(err));
}
}
@@ -1393,6 +1338,7 @@ IceSSL::SecureTransportEngine::parseCiphers(const string& ciphers)
vector<string> tokens;
vector<CipherExpression> cipherExpressions;
+ bool allCiphers = false;
IceUtilInternal::splitString(ciphers, " \t", tokens);
for(vector<string>::const_iterator i = tokens.begin(); i != tokens.end(); ++i)
{
@@ -1401,21 +1347,17 @@ IceSSL::SecureTransportEngine::parseCiphers(const string& ciphers)
{
if(i != tokens.begin())
{
- ostringstream os;
- os << "IceSSL: `ALL' must be first in cipher list `" << ciphers << "'";
- PluginInitializationException ex(__FILE__, __LINE__, os.str());
- throw ex;
+ throw PluginInitializationException(__FILE__, __LINE__,
+ "IceSSL: `ALL' must be first in cipher list `" + ciphers + "'");
}
- _allCiphers = true;
+ allCiphers = true;
}
else if(token == "NONE")
{
if(i != tokens.begin())
{
- ostringstream os;
- os << "IceSSL: `NONE' must be first in cipher list `" << ciphers << "'";
- PluginInitializationException ex(__FILE__, __LINE__, os.str());
- throw ex;
+ throw PluginInitializationException(__FILE__, __LINE__,
+ "IceSSL: `NONE' must be first in cipher list `" + ciphers + "'");
}
}
else
@@ -1430,10 +1372,8 @@ IceSSL::SecureTransportEngine::parseCiphers(const string& ciphers)
}
else
{
- ostringstream os;
- os << "IceSSL: invalid cipher expression `" << token << "'";
- PluginInitializationException ex(__FILE__, __LINE__, os.str());
- throw ex;
+ throw PluginInitializationException(__FILE__, __LINE__,
+ "IceSSL: invalid cipher expression `" + token + "'");
}
}
else
@@ -1445,10 +1385,8 @@ IceSSL::SecureTransportEngine::parseCiphers(const string& ciphers)
{
if(token.rfind(')') != token.size() - 1)
{
- ostringstream os;
- os << "IceSSL: invalid cipher expression `" << token << "'";
- PluginInitializationException ex(__FILE__, __LINE__, os.str());
- throw ex;
+ throw PluginInitializationException(__FILE__, __LINE__,
+ "IceSSL: invalid cipher expression `" + token + "'");
}
try
@@ -1457,10 +1395,8 @@ IceSSL::SecureTransportEngine::parseCiphers(const string& ciphers)
}
catch(const Ice::SyscallException&)
{
- ostringstream os;
- os << "IceSSL: invalid cipher expression `" << token << "'";
- PluginInitializationException ex(__FILE__, __LINE__, os.str());
- throw ex;
+ throw PluginInitializationException(__FILE__, __LINE__,
+ "IceSSL: invalid cipher expression `" + token + "'");
}
}
else
@@ -1472,25 +1408,25 @@ IceSSL::SecureTransportEngine::parseCiphers(const string& ciphers)
}
}
+ //
+ // Context used to get the cipher list
+ //
+ SSLContextRef ctx = SSLCreateContext(kCFAllocatorDefault, kSSLServerSide, kSSLStreamType);
size_t numSupportedCiphers = 0;
- SSLGetNumberSupportedCiphers(_ctx, &numSupportedCiphers);
+ SSLGetNumberSupportedCiphers(ctx, &numSupportedCiphers);
vector<SSLCipherSuite> supported;
supported.resize(numSupportedCiphers);
- OSStatus err = SSLGetSupportedCiphers(_ctx,
- reinterpret_cast<SSLCipherSuite*>(&supported[0]),
- &numSupportedCiphers);
- if(err != noErr)
+ OSStatus err = SSLGetSupportedCiphers(ctx, &supported[0], &numSupportedCiphers);
+ if(err)
{
- ostringstream os;
- os << "IceSSL: unable to get supported ciphers list:\n" << errorToString(err);
- PluginInitializationException ex(__FILE__, __LINE__, os.str());
- throw ex;
+ throw PluginInitializationException(__FILE__, __LINE__,
+ "IceSSL: unable to get supported ciphers list:\n" + errorToString(err));
}
vector<SSLCipherSuite> enabled;
- if(_allCiphers)
+ if(allCiphers)
{
enabled = supported;
}
@@ -1555,17 +1491,4 @@ IceSSL::SecureTransportEngine::parseCiphers(const string& ciphers)
}
_ciphers = enabled;
}
-
-SecCertificateRef
-IceSSL::SecureTransportEngine::getCertificate() const
-{
- return _cert;
-}
-
-SecKeychainRef
-IceSSL::SecureTransportEngine::getKeychain() const
-{
- return _keychain;
-}
-
#endif
diff --git a/cpp/src/IceSSL/SecureTransportTransceiverI.cpp b/cpp/src/IceSSL/SecureTransportTransceiverI.cpp
index 6454743acb5..a64b4d8ee65 100644
--- a/cpp/src/IceSSL/SecureTransportTransceiverI.cpp
+++ b/cpp/src/IceSSL/SecureTransportTransceiverI.cpp
@@ -8,17 +8,10 @@
// **********************************************************************
#include <IceSSL/SecureTransportTransceiverI.h>
-#include <IceUtil/FileUtil.h>
-#include <IceUtil/Mutex.h>
-#include <IceUtil/MutexPtrLock.h>
-
-#include <IceSSL/ConnectionInfo.h>
#include <IceSSL/Instance.h>
#include <IceSSL/SSLEngine.h>
-#include <IceSSL/Util.h>
-#include <Ice/Communicator.h>
+
#include <Ice/LoggerUtil.h>
-#include <Ice/Buffer.h>
#include <Ice/LocalException.h>
#ifdef ICE_USE_SECURE_TRANSPORT
@@ -46,7 +39,7 @@ trustResultDescription(SecTrustResultType result)
case kSecTrustResultRecoverableTrustFailure:
case kSecTrustResultFatalTrustFailure:
{
- return "Trust denied; no simple fix is available";
+ return "Trust denied";
}
case kSecTrustResultOtherError:
{
@@ -102,6 +95,76 @@ socketRead(SSLConnectionRef connection, void* data, size_t* length)
return transceiver->readRaw(reinterpret_cast<char*>(data), length);
}
+void
+checkTrustResult(SecTrustRef trust, const SecureTransportEnginePtr& engine, const InstancePtr& instance)
+{
+ OSStatus err = noErr;
+ SecTrustResultType trustResult = kSecTrustResultOtherError;
+ if(trust)
+ {
+ if((err = SecTrustSetAnchorCertificates(trust, engine->getCertificateAuthorities())))
+ {
+ throw SecurityException(__FILE__, __LINE__, "IceSSL: handshake failure:\n" + errorToString(err));
+ }
+
+ //
+ // Disable network fetch, we don't want this to block.
+ //
+ if((err = SecTrustSetNetworkFetchAllowed(trust, false)))
+ {
+ throw ProtocolException(__FILE__, __LINE__, "IceSSL: handshake failure:\n" + errorToString(err));
+ }
+
+ //
+ // Evaluate the trust
+ //
+ if((err = SecTrustEvaluate(trust, &trustResult)))
+ {
+ throw ProtocolException(__FILE__, __LINE__, "IceSSL: handshake failure:\n" + errorToString(err));
+ }
+ }
+
+ switch(trustResult)
+ {
+ case kSecTrustResultUnspecified:
+ case kSecTrustResultProceed:
+ {
+ //
+ // Trust verify success.
+ //
+ break;
+ }
+ case kSecTrustResultInvalid:
+ //case kSecTrustResultConfirm: // Used in old OS X versions
+ case kSecTrustResultDeny:
+ case kSecTrustResultRecoverableTrustFailure:
+ case kSecTrustResultFatalTrustFailure:
+ case kSecTrustResultOtherError:
+ {
+ if(engine->getVerifyPeer() == 0)
+ {
+ if(instance->traceLevel() >= 1)
+ {
+ ostringstream os;
+ os << "IceSSL: ignoring certificate verification failure\n" << trustResultDescription(trustResult);
+ instance->logger()->trace(instance->traceCategory(), os.str());
+ }
+ break;
+ }
+ else
+ {
+ ostringstream os;
+ os << "IceSSL: certificate verification failure\n" << trustResultDescription(trustResult);
+ string msg = os.str();
+ if(instance->traceLevel() >= 1)
+ {
+ instance->logger()->trace(instance->traceCategory(), msg);
+ }
+ throw ProtocolException(__FILE__, __LINE__, msg);
+ }
+ }
+ }
+}
}
IceInternal::NativeInfoPtr
@@ -194,26 +257,23 @@ IceSSL::TransceiverI::initialize(IceInternal::Buffer& readBuffer, IceInternal::B
assert(_state == StateConnected);
- OSStatus err = noErr;
-
+ OSStatus err = 0;
if(!_ssl)
{
//
// Initialize SSL context
//
_ssl = _engine->newContext(_incoming);
- if((err = SSLSetIOFuncs(_ssl, socketRead, socketWrite)) != noErr)
+ if((err = SSLSetIOFuncs(_ssl, socketRead, socketWrite)))
{
- ostringstream os;
- os << "IceSSL: cannot set SSL IO functions\n" << errorToString(err);
- throw PluginInitializationException(__FILE__, __LINE__, os.str());
+ throw SecurityException(__FILE__, __LINE__, "IceSSL: setting IO functions failed\n" +
+ errorToString(err));
}
- if((err = SSLSetConnection(_ssl, reinterpret_cast<SSLConnectionRef>(this))) != noErr)
+ if((err = SSLSetConnection(_ssl, reinterpret_cast<SSLConnectionRef>(this))))
{
- ostringstream os;
- os << "IceSSL: cannot set SSL connection\n" << errorToString(err);
- throw PluginInitializationException(__FILE__, __LINE__, os.str());
+ throw SecurityException(__FILE__, __LINE__, "IceSSL: setting SSL connection failed\n" +
+ errorToString(err));
}
}
@@ -226,136 +286,41 @@ IceSSL::TransceiverI::initialize(IceInternal::Buffer& readBuffer, IceInternal::B
while(state == kSSLHandshake || state == kSSLIdle)
{
err = SSLHandshake(_ssl);
- if(err != noErr)
+ if(err == noErr)
+ {
+ break; // We're done!
+ }
+ else if(err == errSSLWouldBlock)
{
- switch(err)
+ assert(_flags & SSLWantRead || _flags & SSLWantWrite);
+ return _flags & SSLWantRead ? IceInternal::SocketOperationRead : IceInternal::SocketOperationWrite;
+ }
+ else if(err == errSSLPeerAuthCompleted)
+ {
+ assert(!_trust);
+ err = SSLCopyPeerTrust(_ssl, &_trust);
+ if(err == noErr)
{
- case errSSLWouldBlock:
- {
- assert(_flags & SSLWantRead || _flags & SSLWantWrite);
- return _flags & SSLWantRead ? IceInternal::SocketOperationRead : IceInternal::SocketOperationWrite;
- }
- case errSSLPeerAuthCompleted:
- {
- assert(!_trust);
- err = SSLCopyPeerTrust(_ssl, &_trust);
- if(err != noErr)
- {
- break;
- }
-
- SecTrustResultType trustResult = kSecTrustResultOtherError;
-
- if(_trust)
- {
- err = SecTrustSetAnchorCertificates(_trust, _engine->getCertificateAuthorities());
-
- if(err != noErr)
- {
- ostringstream os;
- os << "SSL handsake failure:\n" << errorToString(err);
- throw SecurityException(__FILE__, __LINE__, os.str());
- }
-
- //
- // Disable network fetch, we don't want this to block.
- //
- err = SecTrustSetNetworkFetchAllowed(_trust, false);
- if(err != noErr)
- {
- ostringstream os;
- os << "SSL handsake failure:\n" << errorToString(err);
- throw SecurityException(__FILE__, __LINE__, os.str());
- }
-
- //
- // Evaluate the trust
- //
- err = SecTrustEvaluate(_trust, &trustResult);
- if(err != noErr)
- {
- ostringstream os;
- os << "SSL handsake failure:\n" << errorToString(err);
- throw SecurityException(__FILE__, __LINE__, os.str());;
- }
- }
-
- switch(trustResult)
- {
- case kSecTrustResultUnspecified:
- case kSecTrustResultProceed:
- {
- //
- // Trust verify success.
- //
- break;
- }
- case kSecTrustResultInvalid:
- //case kSecTrustResultConfirm: // Used in old OS X versions
- case kSecTrustResultDeny:
- case kSecTrustResultRecoverableTrustFailure:
- case kSecTrustResultFatalTrustFailure:
- case kSecTrustResultOtherError:
- {
- if(_engine->getVerifyPeer() == 0)
- {
- if(_instance->traceLevel() >= 1)
- {
- ostringstream os;
- os << "IceSSL: ignoring certificate verification failure\n"
- << trustResultDescription(trustResult);
- _instance->logger()->trace(_instance->traceCategory(), os.str());
- }
- break;
- }
- else
- {
- ostringstream os;
- os << "IceSSL: certificate verification failure\n"
- << trustResultDescription(trustResult);
- string msg = os.str();
- if(_instance->traceLevel() >= 1)
- {
- _instance->logger()->trace(_instance->traceCategory(), msg);
- }
- throw ProtocolException(__FILE__, __LINE__, msg);
- }
- }
- }
- //
- // Call SSLHandshake to resume the handsake.
- //
- continue;
- }
- default:
- {
- break;
- }
+ checkTrustResult(_trust, _engine, _instance);
+ continue; // Call SSLHandshake to resume the handsake.
}
+ // Let it fall through, this will raise a SecurityException with the SSLCopyPeerTrust error.
+ }
+ else if(err == errSSLClosedGraceful || err == errSSLClosedAbort)
+ {
+ throw ConnectionLostException(__FILE__, __LINE__, 0);
+ }
- if(err == errSSLClosedGraceful || err == errSSLClosedAbort)
- {
- ConnectionLostException ex(__FILE__, __LINE__);
- ex.error = 0;
- throw ex;
- }
- else
- {
- IceInternal::Address remoteAddr;
- string desc = "<not available>";
- if(IceInternal::fdToRemoteAddress(_fd, remoteAddr))
- {
- desc = IceInternal::addrToString(remoteAddr);
- }
- ostringstream os;
- os << "SSL error occurred for new " << (_incoming ? "incoming" : "outgoing")
- << " connection:\nremote address = " << desc << "\n"
- << errorToString(err);
- ProtocolException ex(__FILE__, __LINE__, os.str());
- throw ex;
- }
+ IceInternal::Address remoteAddr;
+ string desc = "<not available>";
+ if(IceInternal::fdToRemoteAddress(_fd, remoteAddr))
+ {
+ desc = IceInternal::addrToString(remoteAddr);
}
- break;
+ ostringstream os;
+ os << "IceSSL: ssl error occurred for new " << (_incoming ? "incoming" : "outgoing") << " connection:\n"
+ << "remote address = " << desc << "\n" << errorToString(err);
+ throw ProtocolException(__FILE__, __LINE__, os.str());
}
_engine->verifyPeer(_fd, _host, getNativeConnectionInfo());
_state = StateHandshakeComplete;
@@ -474,22 +439,6 @@ IceSSL::TransceiverI::write(IceInternal::Buffer& buf)
return writeRaw(buf) ? IceInternal::SocketOperationNone : IceInternal::SocketOperationWrite;
}
- size_t processed = 0;
-
- if(_buffered > 0)
- {
- //
- // Required to flush SSL buffers
- //
- if(SSLWrite(_ssl, 0, 0, &processed) == errSSLWouldBlock)
- {
- return IceInternal::SocketOperationWrite;
- }
-
- buf.i += _buffered;
- _buffered = 0;
- }
-
if(buf.i == buf.b.end())
{
return IceInternal::SocketOperationNone;
@@ -503,58 +452,71 @@ IceSSL::TransceiverI::write(IceInternal::Buffer& buf)
while(buf.i != buf.b.end())
{
assert(_fd != INVALID_SOCKET);
- OSStatus ret = SSLWrite(_ssl, reinterpret_cast<const void*>(buf.i), packetSize, &processed);
- if(ret != noErr)
+ size_t processed = 0;
+ OSStatus err = _buffered ? SSLWrite(_ssl, 0, 0, &processed) :
+ SSLWrite(_ssl, reinterpret_cast<const void*>(buf.i), packetSize, &processed);
+
+ if(err)
{
- if(ret == errSSLWouldBlock)
+ if(err == errSSLWouldBlock)
{
- _buffered = processed;
+ if(_buffered == 0)
+ {
+ _buffered = processed;
+ }
assert(_flags & SSLWantWrite);
return IceInternal::SocketOperationWrite;
}
- if(ret == errSSLClosedGraceful)
+ if(err == errSSLClosedGraceful)
{
- ConnectionLostException ex(__FILE__, __LINE__);
- ex.error = 0;
- throw ex;
+ throw ConnectionLostException(__FILE__, __LINE__, 0);
}
//
// SSL protocol errors are defined in SecureTransport.h are in the range
// -9800 to -9849
//
- if(ret <= -9800 && ret >= -9849)
+ if(err <= -9800 && err >= -9849)
{
- ProtocolException ex(__FILE__, __LINE__);
- ostringstream os;
- os << "SSL protocol error during read:\n" << errorToString(ret);
- ex.reason = os.str();
- throw ex;
+ throw ProtocolException(__FILE__, __LINE__, "IceSSL: error during read:\n" + errorToString(err));
}
- errno = ret;
+ errno = err;
if(IceInternal::connectionLost())
{
- ConnectionLostException ex(__FILE__, __LINE__);
- ex.error = IceInternal::getSocketErrno();
- throw ex;
+ throw ConnectionLostException(__FILE__, __LINE__, IceInternal::getSocketErrno());
}
else
{
- SocketException ex(__FILE__, __LINE__);
- ex.error = IceInternal::getSocketErrno();
- throw ex;
+ throw SocketException(__FILE__, __LINE__, IceInternal::getSocketErrno());
}
}
if(_instance->traceLevel() >= 3)
{
Trace out(_instance->logger(), _instance->traceCategory());
- out << "sent " << processed << " of " << packetSize << " bytes via " << protocol() << "\n" << toString();
+ out << "sent ";
+ if(_buffered)
+ {
+ out << _buffered << " of " << _buffered;
+ }
+ else
+ {
+ out << processed << " of " << packetSize;
+ }
+ out << " bytes via " << protocol() << "\n" << toString();
}
- buf.i += processed;
+ if(_buffered)
+ {
+ buf.i += _buffered;
+ _buffered = 0;
+ }
+ else
+ {
+ buf.i += processed;
+ }
if(packetSize > buf.b.end() - buf.i)
{
@@ -587,73 +549,65 @@ IceSSL::TransceiverI::read(IceInternal::Buffer& buf, bool&)
{
return IceInternal::SocketOperationNone;
}
- //
- // It's impossible for packetSize to be more than an Int.
- //
+
size_t packetSize = buf.b.end() - buf.i;
- size_t processed = 0;
-
packetSize = std::min(packetSize, _maxReceivePacketSize);
-
+
while(buf.i != buf.b.end())
{
assert(_fd != INVALID_SOCKET);
- OSStatus ret = SSLRead(_ssl, reinterpret_cast<void*>(buf.i), packetSize, &processed);
- if(ret != noErr)
+ size_t processed = 0;
+ OSStatus err = SSLRead(_ssl, reinterpret_cast<void*>(buf.i), packetSize, &processed);
+
+ if(processed)
{
- if(ret == errSSLWouldBlock)
+ if(_instance->traceLevel() >= 3)
+ {
+ Trace out(_instance->logger(), _instance->traceCategory());
+ out << "received " << processed << " of " << packetSize << " bytes via " << protocol() << "\n"
+ << toString();
+ }
+ }
+
+ if(err)
+ {
+ if(err == errSSLWouldBlock)
{
buf.i += processed;
assert(_flags & SSLWantRead);
return IceInternal::SocketOperationRead;
}
- if(ret == errSSLClosedGraceful || ret == errSSLPeerBadRecordMac || ret == errSSLPeerDecryptionFail)
+ if(err == errSSLClosedGraceful || err == errSSLPeerBadRecordMac || err == errSSLPeerDecryptionFail)
{
//
// Forcefully closing a connection can result in SSLRead reporting
// "decryption failed or bad record mac". We trap that error and
// treat it as the loss of a connection.
//
- ConnectionLostException ex(__FILE__, __LINE__);
- ex.error = 0;
- throw ex;
+ throw ConnectionLostException(__FILE__, __LINE__, 0);
}
//
// SSL protocol errors are defined in SecureTransport.h are in the range
// -9800 to -9849
//
- if(ret <= -9800 && ret >= -9849)
+ if(err <= -9800 && err >= -9849)
{
- ProtocolException ex(__FILE__, __LINE__);
- ostringstream os;
- os << "SSL protocol error during read:\n" << errorToString(ret);
- ex.reason = os.str();
- throw ex;
+ throw ProtocolException(__FILE__, __LINE__, "IceSSL: error during read:\n" + errorToString(err));
}
- errno = ret;
+ errno = err;
if(IceInternal::connectionLost())
{
- ConnectionLostException ex(__FILE__, __LINE__);
- ex.error = IceInternal::getSocketErrno();
- throw ex;
+ throw ConnectionLostException(__FILE__, __LINE__, IceInternal::getSocketErrno());
}
else
{
- SocketException ex(__FILE__, __LINE__);
- ex.error = IceInternal::getSocketErrno();
- throw ex;
+ throw SocketException(__FILE__, __LINE__, IceInternal::getSocketErrno());
}
}
- if(_instance->traceLevel() >= 3)
- {
- Trace out(_instance->logger(), _instance->traceCategory());
- out << "received " << processed << " of " << packetSize << " bytes via " << protocol() << "\n"
- << toString();
- }
buf.i += processed;
if(packetSize > buf.b.end() - buf.i)
@@ -726,8 +680,8 @@ IceSSL::TransceiverI::TransceiverI(const InstancePtr& instance, SOCKET fd, const
}
//
- // Limit the size of packet passed to SSLWrite/SSLRead to avoid blocking and
- // holding too much memory.
+ // Limit the size of packets passed to SSLWrite/SSLRead to avoid
+ // blocking and holding too much memory.
//
_maxSendPacketSize = std::max(512, IceInternal::getSendBufferSize(fd));
_maxReceivePacketSize = std::max(512, IceInternal::getRecvBufferSize(fd));
@@ -751,8 +705,8 @@ IceSSL::TransceiverI::TransceiverI(const InstancePtr& instance, SOCKET fd, const
IceInternal::setTcpBufSize(fd, _instance->properties(), _instance->logger());
//
- // Limit the size of packet passed to SSLWrite/SSLRead to avoid blocking and
- // holding too much memory.
+ // Limit the size of packets passed to SSLWrite/SSLRead to avoid
+ // blocking and holding too much memory.
//
_maxSendPacketSize = std::max(512, IceInternal::getSendBufferSize(fd));
_maxReceivePacketSize = std::max(512, IceInternal::getRecvBufferSize(fd));
@@ -827,15 +781,11 @@ IceSSL::TransceiverI::writeRaw(IceInternal::Buffer& buf)
if(IceInternal::connectionLost())
{
- ConnectionLostException ex(__FILE__, __LINE__);
- ex.error = IceInternal::getSocketErrno();
- throw ex;
+ throw ConnectionLostException(__FILE__, __LINE__, IceInternal::getSocketErrno());
}
else
{
- SocketException ex(__FILE__, __LINE__);
- ex.error = IceInternal::getSocketErrno();
- throw ex;
+ throw SocketException(__FILE__, __LINE__, IceInternal::getSocketErrno());
}
}
@@ -867,9 +817,7 @@ IceSSL::TransceiverI::readRaw(IceInternal::Buffer& buf)
if(ret == 0)
{
- ConnectionLostException ex(__FILE__, __LINE__);
- ex.error = 0;
- throw ex;
+ throw ConnectionLostException(__FILE__, __LINE__, 0);
}
if(ret == SOCKET_ERROR)
@@ -892,15 +840,11 @@ IceSSL::TransceiverI::readRaw(IceInternal::Buffer& buf)
if(IceInternal::connectionLost())
{
- ConnectionLostException ex(__FILE__, __LINE__);
- ex.error = IceInternal::getSocketErrno();
- throw ex;
+ throw ConnectionLostException(__FILE__, __LINE__, IceInternal::getSocketErrno());
}
else
{
- SocketException ex(__FILE__, __LINE__);
- ex.error = IceInternal::getSocketErrno();
- throw ex;
+ throw SocketException(__FILE__, __LINE__, IceInternal::getSocketErrno());
}
}
@@ -911,7 +855,10 @@ IceSSL::TransceiverI::readRaw(IceInternal::Buffer& buf)
}
buf.i += ret;
- packetSize = buf.b.end() - buf.i;
+ if(packetSize > buf.b.end() - buf.i)
+ {
+ packetSize = buf.b.end() - buf.i;
+ }
}
return true;
@@ -1010,7 +957,10 @@ IceSSL::TransceiverI::readRaw(char* data, size_t* length) const
}
i += ret;
- packetSize = end - i;
+ if(packetSize > end - i)
+ {
+ packetSize = end - i;
+ }
}
*length = i - data;
diff --git a/cpp/src/IceSSL/SecureTransportTransceiverI.h b/cpp/src/IceSSL/SecureTransportTransceiverI.h
index bef04b5c8c0..ea5051814df 100644
--- a/cpp/src/IceSSL/SecureTransportTransceiverI.h
+++ b/cpp/src/IceSSL/SecureTransportTransceiverI.h
@@ -68,8 +68,6 @@ private:
virtual NativeConnectionInfoPtr getNativeConnectionInfo() const;
- void traceConnection();
-
bool writeRaw(IceInternal::Buffer&);
bool readRaw(IceInternal::Buffer&);
diff --git a/cpp/src/IceSSL/Util.cpp b/cpp/src/IceSSL/Util.cpp
index 27fd312c3d6..37a4888e11f 100644
--- a/cpp/src/IceSSL/Util.cpp
+++ b/cpp/src/IceSSL/Util.cpp
@@ -13,18 +13,14 @@
#endif
#include <IceSSL/Util.h>
-#include <IceUtil/ScopedArray.h>
#include <IceUtil/FileUtil.h>
+#include <IceUtil/StringUtil.h>
#include <Ice/LocalException.h>
#include <Ice/Network.h>
#include <Ice/Object.h>
#ifdef ICE_USE_OPENSSL
-# ifdef _WIN32
-# include <direct.h>
-# include <sys/types.h>
-# endif
# include <openssl/err.h>
#endif
@@ -33,6 +29,27 @@ using namespace Ice;
using namespace IceUtil;
using namespace IceSSL;
+void
+IceSSL::readFile(const string& file, vector<char>& buffer)
+{
+ IceUtilInternal::ifstream is(file, ios::in | ios::binary);
+ if(!is.good())
+ {
+ throw CertificateReadException(__FILE__, __LINE__, "error opening file " + file);
+ }
+
+ is.seekg(0, is.end);
+ buffer.resize(static_cast<int>(is.tellg()));
+ is.seekg(0, is.beg);
+
+ is.read(&buffer[0], buffer.size());
+
+ if(!is.good())
+ {
+ throw CertificateReadException(__FILE__, __LINE__, "error reading file " + file);
+ }
+}
+
#ifdef ICE_USE_OPENSSL
namespace
{
@@ -179,8 +196,6 @@ convertDH(unsigned char* p, int plen, unsigned char* g, int glen)
return dh;
}
-IceUtil::Shared* IceSSL::upCast(IceSSL::DHParams* p) { return p; }
-
IceSSL::DHParams::DHParams() :
_dh512(0), _dh1024(0), _dh2048(0), _dh4096(0)
{
@@ -370,37 +385,14 @@ IceSSL::fromCFString(CFStringRef v)
if(v)
{
CFIndex size = CFStringGetMaximumSizeForEncoding(CFStringGetLength(v), kCFStringEncodingUTF8);
- IceUtil::ScopedArray<char> buffer(new char[size + 1]);
- CFStringGetCString(v, buffer.get(), size + 1, kCFStringEncodingUTF8);
- s.assign(buffer.get());
+ vector<char> buffer;
+ buffer.resize(size + 1);
+ CFStringGetCString(v, &buffer[0], buffer.size(), kCFStringEncodingUTF8);
+ s.assign(&buffer[0]);
}
return s;
}
-int
-IceSSL::readFile(const string& file, ScopedArray<char>& buffer)
-{
- IceUtilInternal::ifstream is(file);
-
- if(!is.good())
- {
- throw CertificateReadException(__FILE__, __LINE__, "error opening file " + file);
- }
-
- is.seekg (0, is.end);
- streampos length = is.tellg();
- is.seekg (0, is.beg);
-
- buffer.reset(new char[length]);
- is.read(buffer.get(), length);
-
- if(!is.good())
- {
- throw CertificateReadException(__FILE__, __LINE__, "error reading file " + file);
- }
- return length;
-}
-
CFDictionaryRef
IceSSL::getCertificateProperty(SecCertificateRef cert, CFTypeRef key)
{
@@ -519,10 +511,8 @@ copyMatching(SecKeychainRef keychain, CFDataRef hash, CFTypeRef type)
if(err != noErr && err != errSecItemNotFound)
{
- ostringstream os;
- os << "Error searching for keychain items\n" << errorToString(err);
- CertificateReadException ex(__FILE__, __LINE__, os.str());
- throw ex;
+ throw CertificateReadException(__FILE__, __LINE__,
+ "Error searching for keychain items\n" + errorToString(err));
}
return item;
@@ -561,8 +551,7 @@ addToKeychain(SecKeychainRef keychain, SecKeychainItemRef item, CFDataRef hash,
ostringstream os;
os << "Failure adding " << (type == kSecClassKey ? "key" : "certificate")
<< " to keychain\n" << errorToString(err);
- CertificateReadException ex(__FILE__, __LINE__, os.str());
- throw ex;
+ throw CertificateReadException(__FILE__, __LINE__, os.str());
}
newItem = (SecKeychainItemRef)CFArrayGetValueAtIndex(added, 0);
CFRetain(newItem);
@@ -579,73 +568,105 @@ addToKeychain(SecKeychainRef keychain, SecKeychainItemRef item, CFDataRef hash,
// the list of items, the caller must release it.
//
void
-loadKeychainItems(CFArrayRef* items, CFTypeRef type, const string& file, const string& passphrase,
- const PasswordPromptPtr& prompt, int passwordRetryMax)
+loadKeychainItems(CFArrayRef* items, CFTypeRef type, const string& file, SecExternalFormat* format,
+ SecKeychainRef keychain, const string& passphrase, const PasswordPromptPtr& prompt,
+ int passwordRetryMax)
{
assert(type == kSecClassCertificate || type == kSecClassKey);
- ScopedArray<char> buffer;
- int length = readFile(file, buffer);
+ vector<char> buffer;
+ readFile(file, buffer);
+
CFDataRef data = CFDataCreateWithBytesNoCopy(kCFAllocatorDefault,
- (const UInt8*)buffer.get(),
- length,
+ reinterpret_cast<const UInt8*>(&buffer[0]),
+ buffer.size(),
kCFAllocatorNull);
-
- SecExternalFormat format = kSecFormatUnknown;
- SecExternalItemType itemType = type == kSecClassKey ? kSecItemTypePrivateKey : kSecItemTypeCertificate;
+ SecExternalItemType itemType = kSecItemTypeUnknown;
SecItemImportExportKeyParameters params;
memset(&params, 0, sizeof(params));
params.version = SEC_KEY_IMPORT_EXPORT_PARAMS_VERSION;
- if(type == kSecClassKey)
+
{
- params.flags |= kSecKeyNoAccessControl;
+ const void* values[] = {kSecACLAuthorizationAny};
+ params.keyUsage = CFArrayCreate(0, values, 1, 0);
+ }
+
+ params.flags |= kSecKeyNoAccessControl;
+
+ OSStatus err = noErr;
+ int count = 0;
+
+ while(true)
+ {
+ if(!passphrase.empty())
+ {
+ assert(!params.passphrase);
+ params.passphrase = toCFString(passphrase);
+ }
+ err = SecItemImport(data, 0, format, &itemType, 0, &params, *format == kSecFormatPKCS12 ? keychain : 0,
+ items);
+ if(params.passphrase)
+ {
+ CFRelease(params.passphrase);
+ params.passphrase = 0;
+ }
+
+ if(err == noErr)
+ {
+ break;
+ }
//
- // If the application doesn't provide an password prompt configure
- // the default OS X password prompt.
+ // Try PKCS12 format.
//
- if(!prompt)
+ if(err == errSecUnknownFormat && *format != kSecFormatPKCS12)
+ {
+ *format = kSecFormatPKCS12;
+ itemType = kSecItemTypeAggregate;
+ continue;
+ }
+
+ //
+ // Error
+ //
+ if(!passphrase.empty() || (err != errSecPassphraseRequired &&
+ err != errSecInvalidData &&
+ err != errSecPkcs12VerifyFailure))
+ {
+ break;
+ }
+
+ if(prompt && count < passwordRetryMax)
+ {
+ params.passphrase = toCFString(prompt->getPassword());
+ }
+ //
+ // Configure the default OS X password prompt if passphrase is required
+ // and the user doesn't provide a passphrase or password prompt.
+ //
+ else if(!prompt && !(params.flags & kSecKeySecurePassphrase))
{
params.flags |= kSecKeySecurePassphrase;
ostringstream os;
os << "Enter the password for\n" << file;
-
params.alertPrompt = toCFString(os.str());
+ continue;
}
- }
-
- if(!passphrase.empty())
- {
- params.passphrase = toCFString(passphrase);
- }
- OSStatus err = SecItemImport(data, 0, &format, &itemType, 0, &params, 0, items);
- if(params.passphrase)
- {
- CFRelease(params.passphrase);
- }
-
- if(prompt && err == errSecPassphraseRequired)
- {
- for(int i = 0; i < passwordRetryMax; ++i)
+ //
+ // Password retry.
+ //
+ if(++count >= passwordRetryMax)
{
- params.passphrase = toCFString(prompt->getPassword());
- err = SecItemImport(data, 0, &format, &itemType, 0, &params, 0, items);
- if(params.passphrase)
- {
- CFRelease(params.passphrase);
- }
-
- if(err != errSecPassphraseRequired && err != errSecInvalidData)
- {
- break;
- }
+ break;
}
}
+
if(params.alertPrompt)
{
CFRelease(params.alertPrompt);
}
+
CFRelease(data);
if(err != noErr)
@@ -653,8 +674,7 @@ loadKeychainItems(CFArrayRef* items, CFTypeRef type, const string& file, const s
ostringstream os;
os << "Error reading " << (type == kSecClassCertificate ? "certificate " : "private key ")
<< "from file: `" << file << "'\n" << errorToString(err);
- CertificateReadException ex(__FILE__, __LINE__, os.str());
- throw ex;
+ throw CertificateReadException(__FILE__, __LINE__, os.str());
}
}
@@ -671,10 +691,7 @@ IceSSL::keyLabel(SecCertificateRef cert)
OSStatus err = SecCertificateCopyCommonName(cert, &commonName);
if(err != noErr)
{
- ostringstream os;
- os << "certificate error:\n" << errorToString(err);
- CertificateReadException ex(__FILE__, __LINE__, os.str());
- throw ex;
+ throw CertificateReadException(__FILE__, __LINE__, "certificate error:\n" + errorToString(err));
}
string label = fromCFString(commonName);
CFRelease(commonName);
@@ -693,73 +710,80 @@ IceSSL::loadPrivateKey(SecKeyRef* key, const string& label, CFDataRef hash, SecK
CFArrayRef items = 0;
try
{
- loadKeychainItems(&items, kSecClassKey, file, passphrase, prompt, passwordRetryMax);
- if(items && CFArrayGetCount(items) > 0)
+ SecExternalFormat format = kSecFormatUnknown;
+ loadKeychainItems(&items, kSecClassKey, file, &format, keychain, passphrase, prompt, passwordRetryMax);
+ if(items)
{
- SecKeychainItemRef item = (SecKeychainItemRef)CFArrayGetValueAtIndex(items, 0);
- assert(SecKeyGetTypeID() == CFGetTypeID(item));
- CFRetain(item);
- *key = (SecKeyRef)item;
-
- CFRelease(items);
- items = 0;
-
- if(keychain)
+ int count = CFArrayGetCount(items);
+ for(int i = 0; i < count; ++i)
{
- SecKeychainItemRef newItem = addToKeychain(keychain, item, hash, kSecClassKey);
- assert(newItem);
- CFRelease(*key);
- *key = (SecKeyRef)newItem;
- if(hash)
+ SecKeychainItemRef item = (SecKeychainItemRef)CFArrayGetValueAtIndex(items, 0);
+ if(SecKeyGetTypeID() == CFGetTypeID(item))
{
- //
- // Create the association between the private key and the certificate,
- // kSecKeyLabel attribute should match the subject key identifier.
- //
- SecKeychainAttribute attr;
- attr.tag = kSecKeyLabel;
- attr.data = (void*)CFDataGetBytePtr(hash);
- attr.length = CFDataGetLength(hash);
+ CFRetain(item);
+ *key = (SecKeyRef)item;
- SecKeychainAttributeList attrs;
- attrs.attr = &attr;
- attrs.count = 1;
+ CFRelease(items);
+ items = 0;
- SecKeychainItemModifyAttributesAndData(newItem, &attrs, 0, 0);
- }
-
- if(!label.empty())
- {
- //
- // kSecKeyPrintName attribute correspond to the keychain display
- // name.
- //
- SecKeychainAttribute att;
- att.tag = kSecKeyPrintName;
- att.data = (void*)label.c_str();
- att.length = label.size();
-
- SecKeychainAttributeList attrs;
- attrs.attr = &att;
- attrs.count = 1;
-
- SecKeychainItemModifyAttributesAndData(newItem, &attrs, 0, 0);
+ if(keychain)
+ {
+ SecKeychainItemRef newItem = addToKeychain(keychain, item, hash, kSecClassKey);
+ assert(newItem);
+ CFRelease(*key);
+ *key = (SecKeyRef)newItem;
+ if(hash)
+ {
+ //
+ // Create the association between the private key and the certificate,
+ // kSecKeyLabel attribute should match the subject key identifier.
+ //
+ SecKeychainAttribute attr;
+ attr.tag = kSecKeyLabel;
+ attr.data = (void*)CFDataGetBytePtr(hash);
+ attr.length = CFDataGetLength(hash);
+
+ SecKeychainAttributeList attrs;
+ attrs.attr = &attr;
+ attrs.count = 1;
+
+ SecKeychainItemModifyAttributesAndData(newItem, &attrs, 0, 0);
+ }
+
+ if(!label.empty())
+ {
+ //
+ // kSecKeyPrintName attribute correspond to the keychain display
+ // name.
+ //
+ SecKeychainAttribute att;
+ att.tag = kSecKeyPrintName;
+ att.data = (void*)label.c_str();
+ att.length = label.size();
+
+ SecKeychainAttributeList attrs;
+ attrs.attr = &att;
+ attrs.count = 1;
+
+ SecKeychainItemModifyAttributesAndData(newItem, &attrs, 0, 0);
+ }
+ }
+ break;
}
}
}
- }
- catch(...)
- {
- if(hash)
+
+ if(!*key)
{
- CFRelease(hash);
- hash = 0;
+ throw CertificateReadException(__FILE__, __LINE__,
+ "Certificate error:\n error importing certificate from " + file);
}
-
+ }
+ catch(...)
+ {
if(items)
{
CFRelease(items);
- items = 0;
}
if(*key)
@@ -773,6 +797,8 @@ IceSSL::loadPrivateKey(SecKeyRef* key, const string& label, CFDataRef hash, SecK
}
//
+// Imports a certificate and private key and optionally add then to a keychain.
+//
void
IceSSL::loadCertificate(SecCertificateRef* cert, CFDataRef* hash, SecKeyRef* key, SecKeychainRef keychain,
const string& file, const string& passphrase, const PasswordPromptPtr& prompt,
@@ -780,42 +806,93 @@ IceSSL::loadCertificate(SecCertificateRef* cert, CFDataRef* hash, SecKeyRef* key
{
assert(cert);
CFArrayRef items = 0;
+ SecIdentityRef identity = 0;
+
try
{
- loadKeychainItems(&items, kSecClassCertificate, file, passphrase, prompt, passwordRetryMax);
- if(items && CFArrayGetCount(items) > 0)
+ SecExternalFormat format = kSecFormatUnknown;
+ loadKeychainItems(&items, kSecClassCertificate, file, &format, keychain, passphrase, prompt, passwordRetryMax);
+
+ if(items)
{
- SecKeychainItemRef item = (SecKeychainItemRef)CFArrayGetValueAtIndex(items, 0);
- assert(SecCertificateGetTypeID() == CFGetTypeID(item));
- CFRetain(item);
- *cert = (SecCertificateRef)item;
-
- CFRelease(items);
- items = 0;
+ int count = CFArrayGetCount(items);
- //
- // Copy the public key hash, that is used when added the private key
- // to create an association between the certificate and the corresponding
- // private key.
- //
- if(hash)
+ for(int i = 0; i < count; ++i)
{
- *hash = getSubjectKeyIdentifier(*cert);
-
- if(keychain)
+ SecKeychainItemRef item = (SecKeychainItemRef)CFArrayGetValueAtIndex(items, i);
+ if(format == kSecFormatPKCS12)
{
- SecKeychainItemRef newItem = addToKeychain(keychain, item, *hash, kSecClassCertificate);
- assert(newItem);
- CFRelease(*cert);
- *cert = (SecCertificateRef)newItem;
-
+ OSStatus err = noErr;
+ if(SecIdentityGetTypeID() == CFGetTypeID(item))
+ {
+ if((err = SecIdentityCopyCertificate((SecIdentityRef)item, cert)) != noErr)
+ {
+ throw CertificateReadException(__FILE__, __LINE__, "Certificate error:\n" +
+ errorToString(err));
+ }
+
+ if((err = SecIdentityCopyPrivateKey((SecIdentityRef)item, key)) != noErr)
+ {
+ throw CertificateReadException(__FILE__, __LINE__, "Certificate error:\n" +
+ errorToString(err));
+ }
+ break;
+ }
+ else if(SecCertificateGetTypeID() == CFGetTypeID(item))
+ {
+ CFRetain(item);
+ *cert = (SecCertificateRef)item;
+
+ if((err = SecIdentityCreateWithCertificate(keychain, *cert, &identity)) != noErr)
+ {
+ throw CertificateReadException(__FILE__, __LINE__, "Certificate error:\n" +
+ errorToString(err));
+ }
+ if((err = SecIdentityCopyPrivateKey(identity, key)) != noErr)
+ {
+ throw CertificateReadException(__FILE__, __LINE__, "Certificate error:\n" +
+ errorToString(err));
+ }
+
+ CFRelease(identity);
+ identity = 0;
+ break;
+ }
+ }
+ else if(SecCertificateGetTypeID() == CFGetTypeID(item))
+ {
+ CFRetain(item);
+ *cert = (SecCertificateRef)item;
+
+ //
+ // Copy the public key hash, that is used when added the private key
+ // to create an association between the certificate and the corresponding
+ // private key.
+ //
+ if(hash)
+ {
+ *hash = getSubjectKeyIdentifier(*cert);
+
+ if(keychain)
+ {
+ SecKeychainItemRef newItem = addToKeychain(keychain, item, *hash, kSecClassCertificate);
+ assert(newItem);
+ CFRelease(*cert);
+ *cert = (SecCertificateRef)newItem;
+ }
+ }
+ break;
}
}
- if(key)
- {
- loadPrivateKey(key, keyLabel(*cert), hash ? *hash : 0, keychain, file, passphrase, prompt, passwordRetryMax);
- }
+ CFRelease(items);
+ items = 0;
+ }
+
+ if(!*cert)
+ {
+ throw CertificateReadException(__FILE__, __LINE__,
+ "Certificate error:\n error importing certificate from " + file);
}
}
catch(...)
@@ -826,7 +903,7 @@ IceSSL::loadCertificate(SecCertificateRef* cert, CFDataRef* hash, SecKeyRef* key
*cert = 0;
}
- if(*hash)
+ if(hash && *hash)
{
CFRelease(*hash);
*hash = 0;
@@ -835,7 +912,11 @@ IceSSL::loadCertificate(SecCertificateRef* cert, CFDataRef* hash, SecKeyRef* key
if(items)
{
CFRelease(items);
- items = 0;
+ }
+
+ if(identity)
+ {
+ CFRelease(identity);
}
if(key && *key)
@@ -853,7 +934,8 @@ IceSSL::loadCACertificates(const string& file, const string& passphrase, const P
int passwordRetryMax)
{
CFArrayRef items = 0;
- loadKeychainItems(&items, kSecClassCertificate, file, passphrase, prompt, passwordRetryMax);
+ SecExternalFormat format = kSecFormatUnknown;
+ loadKeychainItems(&items, kSecClassCertificate, file, &format, 0, passphrase, prompt, passwordRetryMax);
CFMutableArrayRef certificateAuthorities = CFArrayCreateMutable(kCFAllocatorDefault, 0, &kCFTypeArrayCallBacks);
if(items)
{
@@ -869,8 +951,7 @@ IceSSL::loadCACertificates(const string& file, const string& passphrase, const P
}
return certificateAuthorities;
}
-
-#endif // End ICE_USE_OPENSSL
+#endif
bool
IceSSL::checkPath(string& path, const string& defaultDir, bool dir)
diff --git a/cpp/src/IceSSL/Util.h b/cpp/src/IceSSL/Util.h
index 5b8784e29e5..6204dedbb4d 100644
--- a/cpp/src/IceSSL/Util.h
+++ b/cpp/src/IceSSL/Util.h
@@ -10,27 +10,41 @@
#ifndef ICE_SSL_UTIL_H
#define ICE_SSL_UTIL_H
-#include <IceSSL/Config.h>
-#include <IceSSL/UtilF.h>
-#include <Ice/Network.h>
#include <IceUtil/Mutex.h>
#include <IceUtil/Shared.h>
-#include <IceUtil/ScopedArray.h>
+#include <IceUtil/Handle.h>
#include <IceSSL/Plugin.h>
-#include <list>
-
-#ifdef ICE_USE_OPENSSL
+#if defined(ICE_USE_OPENSSL)
# include <openssl/ssl.h>
-#else
+# include <list>
+#elif defined(ICE_USE_SECURE_TRANSPORT)
# include <Security/Security.h>
# include <CoreFoundation/CoreFoundation.h>
+#elif defined(ICE_USE_SCHANNEL)
+# include <wincrypt.h>
#endif
-#ifdef ICE_USE_OPENSSL
namespace IceSSL
{
+
+//
+// Constants for X509 certificate alt names (AltNameOther, AltNameORAddress, AltNameEDIPartyName and
+// AltNameObjectIdentifier) are not supported.
+//
+
+//const int AltNameOther = 0;
+const int AltNameEmail = 1;
+const int AltNameDNS = 2;
+//const int AltNameORAddress = 3;
+const int AltNameDirectory = 4;
+//const int AltNameEDIPartyName = 5;
+const int AltNameURL = 6;
+const int AltNAmeIP = 7;
+//const AltNameObjectIdentifier = 8;
+
+#ifdef ICE_USE_OPENSSL
# ifndef OPENSSL_NO_DH
class DHParams : public IceUtil::Shared, public IceUtil::Mutex
@@ -54,6 +68,7 @@ private:
DH* _dh2048;
DH* _dh4096;
};
+typedef IceUtil::Handle<DHParams> DHParamsPtr;
# endif
//
@@ -61,12 +76,8 @@ private:
//
std::string getSslErrors(bool);
-}
#elif defined(ICE_USE_SECURE_TRANSPORT)
-namespace IceSSL
-{
-
//
// Helper functions to use by Secure Transport.
//
@@ -80,51 +91,40 @@ toCFString(const std::string& s)
}
std::string errorToString(CFErrorRef);
-
std::string errorToString(OSStatus);
//
-// Read a while file into memory buffer and return the number of bytes read.
-//
-int readFile(const std::string&, IceUtil::ScopedArray<char>&);
-
-
-//
// Retrieve a certificate property
//
-CFDictionaryRef
-getCertificateProperty(SecCertificateRef, CFTypeRef);
-
+CFDictionaryRef getCertificateProperty(SecCertificateRef, CFTypeRef);
std::string keyLabel(SecCertificateRef);
//
// Read a private key from an file and optionaly import into a keychain.
//
-void loadPrivateKey(SecKeyRef*, const std::string&, CFDataRef, SecKeychainRef,
- const std::string&, const std::string&, const PasswordPromptPtr&,
- int);
+void loadPrivateKey(SecKeyRef*, const std::string&, CFDataRef, SecKeychainRef, const std::string&, const std::string&,
+ const PasswordPromptPtr&, int);
//
-// Read a certificate and key from an file and optionaly import then into a
-// keychain.
+// Read a certificate and key from an file and optionaly import then
+// into a keychain.
//
-void loadCertificate(SecCertificateRef*, CFDataRef*, SecKeyRef*, SecKeychainRef,
- const std::string&, const std::string& = "",
- const PasswordPromptPtr& = 0, int = 0);
+void loadCertificate(SecCertificateRef*, CFDataRef*, SecKeyRef*, SecKeychainRef, const std::string&,
+ const std::string& = "", const PasswordPromptPtr& = 0, int = 0);
-CFArrayRef loadCACertificates(const std::string&, const std::string& = "", const PasswordPromptPtr& = 0,
- int = 0);
-
-}
+CFArrayRef loadCACertificates(const std::string&, const std::string& = "", const PasswordPromptPtr& = 0, int = 0);
#endif
-namespace IceSSL
-{
+//
+// Read a file into memory buffer.
+//
+void readFile(const std::string&, std::vector<char>&);
//
-// Determine if a file or directory exists, with an optional default directory.
+// Determine if a file or directory exists, with an optional default
+// directory.
//
bool checkPath(std::string&, const std::string&, bool);
diff --git a/cpp/src/IceSSL/UtilF.h b/cpp/src/IceSSL/UtilF.h
deleted file mode 100644
index e44a5b00a4f..00000000000
--- a/cpp/src/IceSSL/UtilF.h
+++ /dev/null
@@ -1,30 +0,0 @@
-// **********************************************************************
-//
-// Copyright (c) 2003-2014 ZeroC, Inc. All rights reserved.
-//
-// This copy of Ice is licensed to you under the terms described in the
-// ICE_LICENSE file included in this distribution.
-//
-// **********************************************************************
-
-#ifndef ICE_SSL_UTIL_F_H
-#define ICE_SSL_UTIL_F_H
-
-#include <IceUtil/Shared.h>
-
-#include <Ice/Handle.h>
-
-#include <openssl/ssl.h>
-
-#ifndef OPENSSL_NO_DH
-namespace IceSSL
-{
-
-class DHParams;
-IceUtil::Shared* upCast(IceSSL::DHParams*);
-typedef IceInternal::Handle<DHParams> DHParamsPtr;
-
-}
-#endif
-
-#endif
diff --git a/cpp/src/IceUtil/.depend b/cpp/src/IceUtil/.depend
index 6428d3d5aaf..db2895f3265 100644
--- a/cpp/src/IceUtil/.depend
+++ b/cpp/src/IceUtil/.depend
@@ -20,3 +20,4 @@ Unicode$(OBJEXT): Unicode.cpp ../IceUtil/Unicode.h $(includedir)/IceUtil/Config.
MutexProtocol$(OBJEXT): MutexProtocol.cpp $(includedir)/IceUtil/MutexProtocol.h $(includedir)/IceUtil/Config.h
FileUtil$(OBJEXT): FileUtil.cpp $(includedir)/IceUtil/DisableWarnings.h $(includedir)/IceUtil/FileUtil.h $(includedir)/IceUtil/Config.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Exception.h $(includedir)/IceUtil/StringConverter.h
StringConverter$(OBJEXT): StringConverter.cpp $(includedir)/IceUtil/StringConverter.h $(includedir)/IceUtil/Config.h $(includedir)/IceUtil/Exception.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/MutexPtrLock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Time.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/MutexProtocol.h $(includedir)/IceUtil/ScopedArray.h $(includedir)/IceUtil/StringUtil.h ../IceUtil/Unicode.h
+SHA1$(OBJEXT): SHA1.cpp $(includedir)/IceUtil/SHA1.h $(includedir)/IceUtil/Config.h
diff --git a/cpp/src/IceUtil/.depend.mak b/cpp/src/IceUtil/.depend.mak
index 1670182391c..bfaf9740cd1 100644
--- a/cpp/src/IceUtil/.depend.mak
+++ b/cpp/src/IceUtil/.depend.mak
@@ -20,3 +20,4 @@ Unicode$(OBJEXT): Unicode.cpp ../IceUtil/Unicode.h "$(includedir)/IceUtil/Config
MutexProtocol$(OBJEXT): MutexProtocol.cpp "$(includedir)/IceUtil/MutexProtocol.h" "$(includedir)/IceUtil/Config.h"
FileUtil$(OBJEXT): FileUtil.cpp "$(includedir)/IceUtil/DisableWarnings.h" "$(includedir)/IceUtil/FileUtil.h" "$(includedir)/IceUtil/Config.h" "$(includedir)/IceUtil/Shared.h" "$(includedir)/IceUtil/Handle.h" "$(includedir)/IceUtil/Exception.h" "$(includedir)/IceUtil/StringConverter.h"
StringConverter$(OBJEXT): StringConverter.cpp "$(includedir)/IceUtil/StringConverter.h" "$(includedir)/IceUtil/Config.h" "$(includedir)/IceUtil/Exception.h" "$(includedir)/IceUtil/Shared.h" "$(includedir)/IceUtil/Handle.h" "$(includedir)/IceUtil/MutexPtrLock.h" "$(includedir)/IceUtil/ThreadException.h" "$(includedir)/IceUtil/Time.h" "$(includedir)/IceUtil/Mutex.h" "$(includedir)/IceUtil/Lock.h" "$(includedir)/IceUtil/MutexProtocol.h" "$(includedir)/IceUtil/ScopedArray.h" "$(includedir)/IceUtil/StringUtil.h" ../IceUtil/Unicode.h
+SHA1$(OBJEXT): SHA1.cpp "$(includedir)/IceUtil/SHA1.h" "$(includedir)/IceUtil/Config.h"
diff --git a/cpp/src/IceUtil/Makefile b/cpp/src/IceUtil/Makefile
index 0ff4e4e525b..f5571c56242 100644
--- a/cpp/src/IceUtil/Makefile
+++ b/cpp/src/IceUtil/Makefile
@@ -35,7 +35,8 @@ OBJS = ArgVector.o \
Unicode.o \
MutexProtocol.o \
FileUtil.o \
- StringConverter.o
+ StringConverter.o \
+ SHA1.o
SRCS = $(OBJS:.o=.cpp)
diff --git a/cpp/src/IceUtil/Makefile.mak b/cpp/src/IceUtil/Makefile.mak
index 799d2091f28..3d5a3de8ff4 100644
--- a/cpp/src/IceUtil/Makefile.mak
+++ b/cpp/src/IceUtil/Makefile.mak
@@ -35,7 +35,8 @@ OBJS = ArgVector.obj \
UUID.obj \
Unicode.obj \
MutexProtocol.obj \
- StringConverter.obj
+ StringConverter.obj \
+ SHA1.obj
SRCS = $(OBJS:.obj=.cpp)
diff --git a/cpp/src/IceUtil/SHA1.cpp b/cpp/src/IceUtil/SHA1.cpp
new file mode 100644
index 00000000000..eda08e35e38
--- /dev/null
+++ b/cpp/src/IceUtil/SHA1.cpp
@@ -0,0 +1,128 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2014 ZeroC, Inc. All rights reserved.
+//
+// This copy of Ice is licensed to you under the terms described in the
+// ICE_LICENSE file included in this distribution.
+//
+// **********************************************************************
+
+#include <IceUtil/SHA1.h>
+
+#if defined(_WIN32) && !defined(ICE_OS_WINRT)
+# include <IceUtil/Exception.h>
+#endif
+
+using namespace std;
+using namespace IceUtil;
+
+#ifndef ICE_OS_WINRT
+# if defined(_WIN32)
+
+namespace
+{
+const int SHA_DIGEST_LENGTH = 20;
+}
+
+IceUtil::SHA1::SHA1() :
+ _ctx(0),
+ _hash(0)
+{
+ if(!CryptAcquireContext(&_ctx, 0, MS_DEF_PROV, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT))
+ {
+ throw IceUtil::SyscallException(__FILE__, __LINE__, GetLastError());
+ }
+
+ if(!CryptCreateHash(_ctx, CALG_SHA1, 0, 0, &_hash))
+ {
+ throw IceUtil::SyscallException(__FILE__, __LINE__, GetLastError());
+ }
+}
+
+IceUtil::SHA1::~SHA1()
+{
+ if(_hash)
+ {
+ CryptDestroyHash(_hash);
+ }
+
+ if(_ctx)
+ {
+ CryptReleaseContext(_ctx, 0);
+ }
+}
+# elif defined(__APPLE__)
+IceUtil::SHA1::SHA1()
+{
+ CC_SHA1_Init(&_ctx);
+}
+# else
+IceUtil::SHA1::SHA1()
+{
+ SHA1_Init(&_ctx);
+}
+# endif
+
+void
+IceUtil::SHA1::update(const unsigned char* data, size_t length)
+{
+# if defined(_WIN32)
+ if(!CryptHashData(_hash, data, static_cast<DWORD>(length), 0))
+ {
+ throw IceUtil::SyscallException(__FILE__, __LINE__, GetLastError());
+ }
+# elif defined(__APPLE__)
+ CC_SHA1_Update(&_ctx, reinterpret_cast<const void*>(data), length);
+# else
+ SHA1_Update(&_ctx, reinterpret_cast<const void*>(data), length);
+# endif
+}
+
+void
+IceUtil::SHA1::finalize(vector<unsigned char>& md)
+{
+# if defined(_WIN32)
+ md.resize(SHA_DIGEST_LENGTH);
+ DWORD length = SHA_DIGEST_LENGTH;
+ if(!CryptGetHashParam(_hash, HP_HASHVAL, &md[0], &length, 0))
+ {
+ throw IceUtil::SyscallException(__FILE__, __LINE__, GetLastError());
+ }
+# elif defined(__APPLE__)
+ md.resize(CC_SHA1_DIGEST_LENGTH);
+ CC_SHA1_Final(&md[0], &_ctx);
+# else
+ md.resize(SHA_DIGEST_LENGTH);
+ SHA1_Final(&md[0], &_ctx);
+# endif
+}
+#endif
+
+void
+IceUtil::sha1(const unsigned char* data, size_t length, vector<unsigned char>& md)
+{
+#if defined(ICE_OS_WINRT)
+ auto dataA = ref new Platform::Array<unsigned char>(const_cast<unsigned char*>(&data[0]),
+ static_cast<unsigned int>(data.size()));
+ auto hasher = Windows::Security::Cryptography::Core::HashAlgorithmProvider::OpenAlgorithm("SHA1");
+ auto hashed = hasher->HashData(Windows::Security::Cryptography::CryptographicBuffer::CreateFromByteArray(dataA));
+ auto reader = ::Windows::Storage::Streams::DataReader::FromBuffer(hashed);
+ md.resize(reader->UnconsumedBufferLength);
+ if(!md.empty())
+ {
+ reader->ReadBytes(::Platform::ArrayReference<unsigned char>(&result[0],
+ static_cast<unsigned int>(result.size())));
+ }
+ return md;
+#elif defined(_WIN32)
+ SHA1 hasher;
+ hasher.update(data, length);
+ hasher.finalize(md);
+#elif defined(__APPLE__)
+ md.resize(CC_SHA1_DIGEST_LENGTH);
+ CC_SHA1(&data[0], length, &md[0]);
+#else
+ md.resize(SHA_DIGEST_LENGTH);
+ ::SHA1(&data[0], length, &md[0]);
+#endif
+}
diff --git a/cpp/src/IceWS/.depend b/cpp/src/IceWS/.depend
index f79518265a8..5ada30c5f1f 100644
--- a/cpp/src/IceWS/.depend
+++ b/cpp/src/IceWS/.depend
@@ -5,7 +5,7 @@ ConnectionInfo$(OBJEXT): ConnectionInfo.cpp $(includedir)/IceWS/ConnectionInfo.h
EndpointI$(OBJEXT): EndpointI.cpp ../IceWS/EndpointI.h ../Ice/EndpointI.h ../Ice/EndpointIF.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/Config.h $(includedir)/Ice/Handle.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Exception.h $(includedir)/Ice/Config.h $(includedir)/Ice/Endpoint.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/Exception.h $(includedir)/Ice/Format.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/LocalObjectF.h $(includedir)/Ice/StreamHelpers.h $(includedir)/IceUtil/ScopedArray.h $(includedir)/IceUtil/Iterator.h $(includedir)/IceUtil/Optional.h $(includedir)/Ice/Version.h $(includedir)/IceUtil/UndefSysMacros.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/Ice/EndpointF.h $(includedir)/Ice/EndpointTypes.h ../Ice/TransceiverF.h ../Ice/ConnectorF.h ../Ice/AcceptorF.h ../Ice/IPEndpointIF.h ../Ice/EndpointFactory.h ../Ice/EndpointFactoryF.h ../Ice/ProtocolInstanceF.h ../IceWS/InstanceF.h $(includedir)/IceWS/EndpointInfo.h ../IceWS/AcceptorI.h $(includedir)/Ice/LoggerF.h ../Ice/Acceptor.h ../Ice/Network.h ../Ice/NetworkF.h $(includedir)/Ice/PropertiesF.h $(includedir)/Ice/Proxy.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Time.h $(includedir)/IceUtil/MutexProtocol.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/Thread.h $(includedir)/IceUtil/UniquePtr.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/BasicStream.h $(includedir)/IceUtil/StringConverter.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/ObjectFactoryManagerF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/Ice/SlicedDataF.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/FactoryTable.h $(includedir)/Ice/ObserverHelper.h $(includedir)/Ice/Instrumentation.h $(includedir)/Ice/ThreadPoolF.h ../IceWS/ConnectorI.h ../Ice/Connector.h ../IceWS/TransceiverI.h $(includedir)/IceWS/Plugin.h $(includedir)/Ice/Plugin.h ../IceWS/Util.h ../Ice/Transceiver.h ../IceWS/Instance.h ../Ice/ProtocolInstance.h $(includedir)/Ice/LocalException.h ../Ice/IPEndpointI.h ../Ice/HashUtil.h
Instance$(OBJEXT): Instance.cpp ../IceWS/Instance.h ../IceWS/InstanceF.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/Config.h $(includedir)/Ice/Handle.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Exception.h $(includedir)/Ice/Config.h ../Ice/ProtocolInstance.h ../Ice/ProtocolInstanceF.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/Exception.h $(includedir)/Ice/Format.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/LocalObjectF.h $(includedir)/Ice/StreamHelpers.h $(includedir)/IceUtil/ScopedArray.h $(includedir)/IceUtil/Iterator.h $(includedir)/IceUtil/Optional.h $(includedir)/IceUtil/UndefSysMacros.h $(includedir)/Ice/PropertiesF.h $(includedir)/Ice/Proxy.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Time.h $(includedir)/IceUtil/MutexProtocol.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointF.h $(includedir)/Ice/EndpointTypes.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/Thread.h $(includedir)/IceUtil/UniquePtr.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/Version.h $(includedir)/Ice/BasicStream.h $(includedir)/IceUtil/StringConverter.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/ObjectFactoryManagerF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/Ice/SlicedDataF.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/FactoryTable.h $(includedir)/Ice/ObserverHelper.h $(includedir)/Ice/Instrumentation.h $(includedir)/Ice/ThreadPoolF.h $(includedir)/Ice/LoggerF.h ../Ice/EndpointIF.h ../Ice/ConnectorF.h ../Ice/IPEndpointIF.h ../Ice/NetworkF.h ../IceWS/EndpointI.h ../Ice/EndpointI.h $(includedir)/Ice/Endpoint.h $(includedir)/Ice/BuiltinSequences.h ../Ice/TransceiverF.h ../Ice/AcceptorF.h ../Ice/EndpointFactory.h ../Ice/EndpointFactoryF.h $(includedir)/IceWS/EndpointInfo.h ../Ice/ProtocolPluginFacade.h ../Ice/ProtocolPluginFacadeF.h
PluginI$(OBJEXT): PluginI.cpp ../IceWS/PluginI.h $(includedir)/IceWS/Plugin.h $(includedir)/Ice/Plugin.h $(includedir)/Ice/ProxyF.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/Config.h $(includedir)/Ice/Config.h $(includedir)/Ice/ProxyHandle.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Exception.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/Handle.h $(includedir)/Ice/Exception.h $(includedir)/Ice/Format.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/LocalObjectF.h $(includedir)/Ice/StreamHelpers.h $(includedir)/IceUtil/ScopedArray.h $(includedir)/IceUtil/Iterator.h $(includedir)/IceUtil/Optional.h $(includedir)/Ice/LoggerF.h $(includedir)/IceUtil/UndefSysMacros.h $(includedir)/Ice/BuiltinSequences.h ../IceWS/InstanceF.h $(includedir)/Ice/CommunicatorF.h ../IceWS/Instance.h ../Ice/ProtocolInstance.h ../Ice/ProtocolInstanceF.h $(includedir)/Ice/PropertiesF.h $(includedir)/Ice/Proxy.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Time.h $(includedir)/IceUtil/MutexProtocol.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointF.h $(includedir)/Ice/EndpointTypes.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/Thread.h $(includedir)/IceUtil/UniquePtr.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/Version.h $(includedir)/Ice/BasicStream.h $(includedir)/IceUtil/StringConverter.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/ObjectFactoryManagerF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/Ice/SlicedDataF.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/FactoryTable.h $(includedir)/Ice/ObserverHelper.h $(includedir)/Ice/Instrumentation.h $(includedir)/Ice/ThreadPoolF.h ../Ice/EndpointIF.h ../Ice/ConnectorF.h ../Ice/IPEndpointIF.h ../Ice/NetworkF.h ../IceWS/EndpointI.h ../Ice/EndpointI.h $(includedir)/Ice/Endpoint.h ../Ice/TransceiverF.h ../Ice/AcceptorF.h ../Ice/EndpointFactory.h ../Ice/EndpointFactoryF.h $(includedir)/IceWS/EndpointInfo.h ../Ice/ProtocolPluginFacade.h ../Ice/ProtocolPluginFacadeF.h
-TransceiverI$(OBJEXT): TransceiverI.cpp ../IceWS/TransceiverI.h ../IceWS/InstanceF.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/Config.h $(includedir)/Ice/Handle.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Exception.h $(includedir)/Ice/Config.h $(includedir)/IceWS/Plugin.h $(includedir)/Ice/Plugin.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/Exception.h $(includedir)/Ice/Format.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/LocalObjectF.h $(includedir)/Ice/StreamHelpers.h $(includedir)/IceUtil/ScopedArray.h $(includedir)/IceUtil/Iterator.h $(includedir)/IceUtil/Optional.h $(includedir)/Ice/LoggerF.h $(includedir)/IceUtil/UndefSysMacros.h $(includedir)/Ice/BuiltinSequences.h ../IceWS/Util.h ../Ice/Transceiver.h ../Ice/TransceiverF.h $(includedir)/Ice/ConnectionF.h ../Ice/Network.h ../Ice/NetworkF.h $(includedir)/Ice/PropertiesF.h $(includedir)/Ice/Proxy.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Time.h $(includedir)/IceUtil/MutexProtocol.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointF.h $(includedir)/Ice/EndpointTypes.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/Thread.h $(includedir)/IceUtil/UniquePtr.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/Current.h $(includedir)/Ice/Identity.h $(includedir)/Ice/Version.h $(includedir)/Ice/BasicStream.h $(includedir)/IceUtil/StringConverter.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/ObjectFactoryManagerF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/Ice/SlicedDataF.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/FactoryTable.h $(includedir)/Ice/ObserverHelper.h $(includedir)/Ice/Instrumentation.h $(includedir)/Ice/ThreadPoolF.h $(includedir)/IceWS/EndpointInfo.h $(includedir)/Ice/Endpoint.h $(includedir)/IceWS/ConnectionInfo.h $(includedir)/Ice/Connection.h ../IceWS/Instance.h ../Ice/ProtocolInstance.h ../Ice/ProtocolInstanceF.h ../Ice/EndpointIF.h ../Ice/ConnectorF.h ../Ice/IPEndpointIF.h $(includedir)/Ice/Communicator.h $(includedir)/Ice/GCObject.h $(includedir)/IceUtil/MutexPtrLock.h $(includedir)/Ice/Outgoing.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/ResponseHandlerF.h $(includedir)/Ice/IncomingAsync.h $(includedir)/Ice/InstrumentationF.h $(includedir)/Ice/RouterF.h $(includedir)/Ice/LocatorF.h $(includedir)/Ice/PluginF.h $(includedir)/Ice/ImplicitContextF.h $(includedir)/Ice/Properties.h $(includedir)/Ice/PropertiesAdmin.h $(includedir)/Ice/LoggerUtil.h $(includedir)/Ice/Logger.h $(includedir)/Ice/LocalException.h ../Ice/Base64.h $(includedir)/IceUtil/Random.h $(includedir)/IceUtil/StringUtil.h $(includedir)/IceUtil/DisableWarnings.h
+TransceiverI$(OBJEXT): TransceiverI.cpp ../IceWS/TransceiverI.h ../IceWS/InstanceF.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/Config.h $(includedir)/Ice/Handle.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Exception.h $(includedir)/Ice/Config.h $(includedir)/IceWS/Plugin.h $(includedir)/Ice/Plugin.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/Exception.h $(includedir)/Ice/Format.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/LocalObjectF.h $(includedir)/Ice/StreamHelpers.h $(includedir)/IceUtil/ScopedArray.h $(includedir)/IceUtil/Iterator.h $(includedir)/IceUtil/Optional.h $(includedir)/Ice/LoggerF.h $(includedir)/IceUtil/UndefSysMacros.h $(includedir)/Ice/BuiltinSequences.h ../IceWS/Util.h ../Ice/Transceiver.h ../Ice/TransceiverF.h $(includedir)/Ice/ConnectionF.h ../Ice/Network.h ../Ice/NetworkF.h $(includedir)/Ice/PropertiesF.h $(includedir)/Ice/Proxy.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Time.h $(includedir)/IceUtil/MutexProtocol.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointF.h $(includedir)/Ice/EndpointTypes.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/Thread.h $(includedir)/IceUtil/UniquePtr.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/Current.h $(includedir)/Ice/Identity.h $(includedir)/Ice/Version.h $(includedir)/Ice/BasicStream.h $(includedir)/IceUtil/StringConverter.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/ObjectFactoryManagerF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/Ice/SlicedDataF.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/FactoryTable.h $(includedir)/Ice/ObserverHelper.h $(includedir)/Ice/Instrumentation.h $(includedir)/Ice/ThreadPoolF.h $(includedir)/IceWS/EndpointInfo.h $(includedir)/Ice/Endpoint.h $(includedir)/IceWS/ConnectionInfo.h $(includedir)/Ice/Connection.h ../IceWS/Instance.h ../Ice/ProtocolInstance.h ../Ice/ProtocolInstanceF.h ../Ice/EndpointIF.h ../Ice/ConnectorF.h ../Ice/IPEndpointIF.h $(includedir)/Ice/Communicator.h $(includedir)/Ice/GCObject.h $(includedir)/IceUtil/MutexPtrLock.h $(includedir)/Ice/Outgoing.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/ResponseHandlerF.h $(includedir)/Ice/IncomingAsync.h $(includedir)/Ice/InstrumentationF.h $(includedir)/Ice/RouterF.h $(includedir)/Ice/LocatorF.h $(includedir)/Ice/PluginF.h $(includedir)/Ice/ImplicitContextF.h $(includedir)/Ice/Properties.h $(includedir)/Ice/PropertiesAdmin.h $(includedir)/Ice/LoggerUtil.h $(includedir)/Ice/Logger.h $(includedir)/Ice/LocalException.h ../Ice/Base64.h $(includedir)/IceUtil/Random.h $(includedir)/IceUtil/SHA1.h $(includedir)/IceUtil/StringUtil.h $(includedir)/IceUtil/DisableWarnings.h
Util$(OBJEXT): Util.cpp $(includedir)/IceUtil/Config.h ../IceWS/Util.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Exception.h $(includedir)/Ice/Config.h $(includedir)/Ice/BasicStream.h $(includedir)/IceUtil/StringConverter.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/Handle.h $(includedir)/Ice/Object.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Time.h $(includedir)/IceUtil/MutexProtocol.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/Current.h $(includedir)/Ice/Exception.h $(includedir)/Ice/Format.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/LocalObjectF.h $(includedir)/Ice/StreamHelpers.h $(includedir)/IceUtil/ScopedArray.h $(includedir)/IceUtil/Iterator.h $(includedir)/IceUtil/Optional.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/IceUtil/UndefSysMacros.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/Version.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/ObjectFactoryManagerF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/Ice/SlicedDataF.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/FactoryTable.h $(includedir)/Ice/LocalException.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/IceUtil/StringUtil.h $(includedir)/IceUtil/DisableWarnings.h
$(HDIR)/EndpointInfo.h EndpointInfo.cpp: $(slicedir)/IceWS/EndpointInfo.ice $(slicedir)/Ice/Endpoint.ice $(slicedir)/Ice/Version.ice $(slicedir)/Ice/BuiltinSequences.ice $(slicedir)/Ice/EndpointF.ice $(SLICE2CPP) $(SLICEPARSERLIB)
$(HDIR)/ConnectionInfo.h ConnectionInfo.cpp: $(slicedir)/IceWS/ConnectionInfo.ice $(slicedir)/Ice/Connection.ice $(slicedir)/Ice/ObjectAdapterF.ice $(slicedir)/Ice/Identity.ice $(slicedir)/Ice/Endpoint.ice $(slicedir)/Ice/Version.ice $(slicedir)/Ice/BuiltinSequences.ice $(slicedir)/Ice/EndpointF.ice $(SLICE2CPP) $(SLICEPARSERLIB)
diff --git a/cpp/src/IceWS/.depend.mak b/cpp/src/IceWS/.depend.mak
index f9b7a4ed0e7..a7412c1823f 100644
--- a/cpp/src/IceWS/.depend.mak
+++ b/cpp/src/IceWS/.depend.mak
@@ -5,7 +5,7 @@ ConnectionInfo$(OBJEXT): ConnectionInfo.cpp "$(includedir)/IceWS/ConnectionInfo.
EndpointI$(OBJEXT): EndpointI.cpp ../IceWS/EndpointI.h ../Ice/EndpointI.h ../Ice/EndpointIF.h "$(includedir)/IceUtil/Shared.h" "$(includedir)/IceUtil/Config.h" "$(includedir)/Ice/Handle.h" "$(includedir)/IceUtil/Handle.h" "$(includedir)/IceUtil/Exception.h" "$(includedir)/Ice/Config.h" "$(includedir)/Ice/Endpoint.h" "$(includedir)/Ice/ProxyF.h" "$(includedir)/Ice/ProxyHandle.h" "$(includedir)/Ice/ObjectF.h" "$(includedir)/Ice/Exception.h" "$(includedir)/Ice/Format.h" "$(includedir)/Ice/StreamF.h" "$(includedir)/Ice/LocalObject.h" "$(includedir)/Ice/LocalObjectF.h" "$(includedir)/Ice/StreamHelpers.h" "$(includedir)/IceUtil/ScopedArray.h" "$(includedir)/IceUtil/Iterator.h" "$(includedir)/IceUtil/Optional.h" "$(includedir)/Ice/Version.h" "$(includedir)/IceUtil/UndefSysMacros.h" "$(includedir)/Ice/BuiltinSequences.h" "$(includedir)/Ice/EndpointF.h" "$(includedir)/Ice/EndpointTypes.h" ../Ice/TransceiverF.h ../Ice/ConnectorF.h ../Ice/AcceptorF.h ../Ice/IPEndpointIF.h ../Ice/EndpointFactory.h ../Ice/EndpointFactoryF.h ../Ice/ProtocolInstanceF.h ../IceWS/InstanceF.h "$(includedir)/IceWS/EndpointInfo.h" ../IceWS/AcceptorI.h "$(includedir)/Ice/LoggerF.h" ../Ice/Acceptor.h ../Ice/Network.h ../Ice/NetworkF.h "$(includedir)/Ice/PropertiesF.h" "$(includedir)/Ice/Proxy.h" "$(includedir)/IceUtil/Mutex.h" "$(includedir)/IceUtil/Lock.h" "$(includedir)/IceUtil/ThreadException.h" "$(includedir)/IceUtil/Time.h" "$(includedir)/IceUtil/MutexProtocol.h" "$(includedir)/Ice/ProxyFactoryF.h" "$(includedir)/Ice/ConnectionIF.h" "$(includedir)/Ice/RequestHandlerF.h" "$(includedir)/Ice/ObjectAdapterF.h" "$(includedir)/Ice/ReferenceF.h" "$(includedir)/Ice/OutgoingAsync.h" "$(includedir)/IceUtil/Monitor.h" "$(includedir)/IceUtil/Cond.h" "$(includedir)/IceUtil/Timer.h" "$(includedir)/IceUtil/Thread.h" "$(includedir)/IceUtil/UniquePtr.h" "$(includedir)/Ice/OutgoingAsyncF.h" "$(includedir)/Ice/InstanceF.h" "$(includedir)/Ice/CommunicatorF.h" "$(includedir)/Ice/Current.h" "$(includedir)/Ice/ConnectionF.h" "$(includedir)/Ice/Identity.h" "$(includedir)/Ice/BasicStream.h" "$(includedir)/IceUtil/StringConverter.h" "$(includedir)/Ice/Object.h" "$(includedir)/Ice/IncomingAsyncF.h" "$(includedir)/Ice/ObjectFactoryF.h" "$(includedir)/Ice/ObjectFactoryManagerF.h" "$(includedir)/Ice/Buffer.h" "$(includedir)/Ice/Protocol.h" "$(includedir)/Ice/SlicedDataF.h" "$(includedir)/Ice/UserExceptionFactory.h" "$(includedir)/Ice/FactoryTable.h" "$(includedir)/Ice/ObserverHelper.h" "$(includedir)/Ice/Instrumentation.h" "$(includedir)/Ice/ThreadPoolF.h" ../IceWS/ConnectorI.h ../Ice/Connector.h ../IceWS/TransceiverI.h "$(includedir)/IceWS/Plugin.h" "$(includedir)/Ice/Plugin.h" ../IceWS/Util.h ../Ice/Transceiver.h ../IceWS/Instance.h ../Ice/ProtocolInstance.h "$(includedir)/Ice/LocalException.h" ../Ice/IPEndpointI.h ../Ice/HashUtil.h
Instance$(OBJEXT): Instance.cpp ../IceWS/Instance.h ../IceWS/InstanceF.h "$(includedir)/IceUtil/Shared.h" "$(includedir)/IceUtil/Config.h" "$(includedir)/Ice/Handle.h" "$(includedir)/IceUtil/Handle.h" "$(includedir)/IceUtil/Exception.h" "$(includedir)/Ice/Config.h" ../Ice/ProtocolInstance.h ../Ice/ProtocolInstanceF.h "$(includedir)/Ice/CommunicatorF.h" "$(includedir)/Ice/ProxyF.h" "$(includedir)/Ice/ProxyHandle.h" "$(includedir)/Ice/ObjectF.h" "$(includedir)/Ice/Exception.h" "$(includedir)/Ice/Format.h" "$(includedir)/Ice/StreamF.h" "$(includedir)/Ice/LocalObject.h" "$(includedir)/Ice/LocalObjectF.h" "$(includedir)/Ice/StreamHelpers.h" "$(includedir)/IceUtil/ScopedArray.h" "$(includedir)/IceUtil/Iterator.h" "$(includedir)/IceUtil/Optional.h" "$(includedir)/IceUtil/UndefSysMacros.h" "$(includedir)/Ice/PropertiesF.h" "$(includedir)/Ice/Proxy.h" "$(includedir)/IceUtil/Mutex.h" "$(includedir)/IceUtil/Lock.h" "$(includedir)/IceUtil/ThreadException.h" "$(includedir)/IceUtil/Time.h" "$(includedir)/IceUtil/MutexProtocol.h" "$(includedir)/Ice/ProxyFactoryF.h" "$(includedir)/Ice/ConnectionIF.h" "$(includedir)/Ice/RequestHandlerF.h" "$(includedir)/Ice/EndpointF.h" "$(includedir)/Ice/EndpointTypes.h" "$(includedir)/Ice/ObjectAdapterF.h" "$(includedir)/Ice/ReferenceF.h" "$(includedir)/Ice/OutgoingAsync.h" "$(includedir)/IceUtil/Monitor.h" "$(includedir)/IceUtil/Cond.h" "$(includedir)/IceUtil/Timer.h" "$(includedir)/IceUtil/Thread.h" "$(includedir)/IceUtil/UniquePtr.h" "$(includedir)/Ice/OutgoingAsyncF.h" "$(includedir)/Ice/InstanceF.h" "$(includedir)/Ice/Current.h" "$(includedir)/Ice/ConnectionF.h" "$(includedir)/Ice/Identity.h" "$(includedir)/Ice/Version.h" "$(includedir)/Ice/BasicStream.h" "$(includedir)/IceUtil/StringConverter.h" "$(includedir)/Ice/Object.h" "$(includedir)/Ice/IncomingAsyncF.h" "$(includedir)/Ice/ObjectFactoryF.h" "$(includedir)/Ice/ObjectFactoryManagerF.h" "$(includedir)/Ice/Buffer.h" "$(includedir)/Ice/Protocol.h" "$(includedir)/Ice/SlicedDataF.h" "$(includedir)/Ice/UserExceptionFactory.h" "$(includedir)/Ice/FactoryTable.h" "$(includedir)/Ice/ObserverHelper.h" "$(includedir)/Ice/Instrumentation.h" "$(includedir)/Ice/ThreadPoolF.h" "$(includedir)/Ice/LoggerF.h" ../Ice/EndpointIF.h ../Ice/ConnectorF.h ../Ice/IPEndpointIF.h ../Ice/NetworkF.h ../IceWS/EndpointI.h ../Ice/EndpointI.h "$(includedir)/Ice/Endpoint.h" "$(includedir)/Ice/BuiltinSequences.h" ../Ice/TransceiverF.h ../Ice/AcceptorF.h ../Ice/EndpointFactory.h ../Ice/EndpointFactoryF.h "$(includedir)/IceWS/EndpointInfo.h" ../Ice/ProtocolPluginFacade.h ../Ice/ProtocolPluginFacadeF.h
PluginI$(OBJEXT): PluginI.cpp ../IceWS/PluginI.h "$(includedir)/IceWS/Plugin.h" "$(includedir)/Ice/Plugin.h" "$(includedir)/Ice/ProxyF.h" "$(includedir)/IceUtil/Shared.h" "$(includedir)/IceUtil/Config.h" "$(includedir)/Ice/Config.h" "$(includedir)/Ice/ProxyHandle.h" "$(includedir)/IceUtil/Handle.h" "$(includedir)/IceUtil/Exception.h" "$(includedir)/Ice/ObjectF.h" "$(includedir)/Ice/Handle.h" "$(includedir)/Ice/Exception.h" "$(includedir)/Ice/Format.h" "$(includedir)/Ice/StreamF.h" "$(includedir)/Ice/LocalObject.h" "$(includedir)/Ice/LocalObjectF.h" "$(includedir)/Ice/StreamHelpers.h" "$(includedir)/IceUtil/ScopedArray.h" "$(includedir)/IceUtil/Iterator.h" "$(includedir)/IceUtil/Optional.h" "$(includedir)/Ice/LoggerF.h" "$(includedir)/IceUtil/UndefSysMacros.h" "$(includedir)/Ice/BuiltinSequences.h" ../IceWS/InstanceF.h "$(includedir)/Ice/CommunicatorF.h" ../IceWS/Instance.h ../Ice/ProtocolInstance.h ../Ice/ProtocolInstanceF.h "$(includedir)/Ice/PropertiesF.h" "$(includedir)/Ice/Proxy.h" "$(includedir)/IceUtil/Mutex.h" "$(includedir)/IceUtil/Lock.h" "$(includedir)/IceUtil/ThreadException.h" "$(includedir)/IceUtil/Time.h" "$(includedir)/IceUtil/MutexProtocol.h" "$(includedir)/Ice/ProxyFactoryF.h" "$(includedir)/Ice/ConnectionIF.h" "$(includedir)/Ice/RequestHandlerF.h" "$(includedir)/Ice/EndpointF.h" "$(includedir)/Ice/EndpointTypes.h" "$(includedir)/Ice/ObjectAdapterF.h" "$(includedir)/Ice/ReferenceF.h" "$(includedir)/Ice/OutgoingAsync.h" "$(includedir)/IceUtil/Monitor.h" "$(includedir)/IceUtil/Cond.h" "$(includedir)/IceUtil/Timer.h" "$(includedir)/IceUtil/Thread.h" "$(includedir)/IceUtil/UniquePtr.h" "$(includedir)/Ice/OutgoingAsyncF.h" "$(includedir)/Ice/InstanceF.h" "$(includedir)/Ice/Current.h" "$(includedir)/Ice/ConnectionF.h" "$(includedir)/Ice/Identity.h" "$(includedir)/Ice/Version.h" "$(includedir)/Ice/BasicStream.h" "$(includedir)/IceUtil/StringConverter.h" "$(includedir)/Ice/Object.h" "$(includedir)/Ice/IncomingAsyncF.h" "$(includedir)/Ice/ObjectFactoryF.h" "$(includedir)/Ice/ObjectFactoryManagerF.h" "$(includedir)/Ice/Buffer.h" "$(includedir)/Ice/Protocol.h" "$(includedir)/Ice/SlicedDataF.h" "$(includedir)/Ice/UserExceptionFactory.h" "$(includedir)/Ice/FactoryTable.h" "$(includedir)/Ice/ObserverHelper.h" "$(includedir)/Ice/Instrumentation.h" "$(includedir)/Ice/ThreadPoolF.h" ../Ice/EndpointIF.h ../Ice/ConnectorF.h ../Ice/IPEndpointIF.h ../Ice/NetworkF.h ../IceWS/EndpointI.h ../Ice/EndpointI.h "$(includedir)/Ice/Endpoint.h" ../Ice/TransceiverF.h ../Ice/AcceptorF.h ../Ice/EndpointFactory.h ../Ice/EndpointFactoryF.h "$(includedir)/IceWS/EndpointInfo.h" ../Ice/ProtocolPluginFacade.h ../Ice/ProtocolPluginFacadeF.h
-TransceiverI$(OBJEXT): TransceiverI.cpp ../IceWS/TransceiverI.h ../IceWS/InstanceF.h "$(includedir)/IceUtil/Shared.h" "$(includedir)/IceUtil/Config.h" "$(includedir)/Ice/Handle.h" "$(includedir)/IceUtil/Handle.h" "$(includedir)/IceUtil/Exception.h" "$(includedir)/Ice/Config.h" "$(includedir)/IceWS/Plugin.h" "$(includedir)/Ice/Plugin.h" "$(includedir)/Ice/ProxyF.h" "$(includedir)/Ice/ProxyHandle.h" "$(includedir)/Ice/ObjectF.h" "$(includedir)/Ice/Exception.h" "$(includedir)/Ice/Format.h" "$(includedir)/Ice/StreamF.h" "$(includedir)/Ice/LocalObject.h" "$(includedir)/Ice/LocalObjectF.h" "$(includedir)/Ice/StreamHelpers.h" "$(includedir)/IceUtil/ScopedArray.h" "$(includedir)/IceUtil/Iterator.h" "$(includedir)/IceUtil/Optional.h" "$(includedir)/Ice/LoggerF.h" "$(includedir)/IceUtil/UndefSysMacros.h" "$(includedir)/Ice/BuiltinSequences.h" ../IceWS/Util.h ../Ice/Transceiver.h ../Ice/TransceiverF.h "$(includedir)/Ice/ConnectionF.h" ../Ice/Network.h ../Ice/NetworkF.h "$(includedir)/Ice/PropertiesF.h" "$(includedir)/Ice/Proxy.h" "$(includedir)/IceUtil/Mutex.h" "$(includedir)/IceUtil/Lock.h" "$(includedir)/IceUtil/ThreadException.h" "$(includedir)/IceUtil/Time.h" "$(includedir)/IceUtil/MutexProtocol.h" "$(includedir)/Ice/ProxyFactoryF.h" "$(includedir)/Ice/ConnectionIF.h" "$(includedir)/Ice/RequestHandlerF.h" "$(includedir)/Ice/EndpointF.h" "$(includedir)/Ice/EndpointTypes.h" "$(includedir)/Ice/ObjectAdapterF.h" "$(includedir)/Ice/ReferenceF.h" "$(includedir)/Ice/OutgoingAsync.h" "$(includedir)/IceUtil/Monitor.h" "$(includedir)/IceUtil/Cond.h" "$(includedir)/IceUtil/Timer.h" "$(includedir)/IceUtil/Thread.h" "$(includedir)/IceUtil/UniquePtr.h" "$(includedir)/Ice/OutgoingAsyncF.h" "$(includedir)/Ice/InstanceF.h" "$(includedir)/Ice/CommunicatorF.h" "$(includedir)/Ice/Current.h" "$(includedir)/Ice/Identity.h" "$(includedir)/Ice/Version.h" "$(includedir)/Ice/BasicStream.h" "$(includedir)/IceUtil/StringConverter.h" "$(includedir)/Ice/Object.h" "$(includedir)/Ice/IncomingAsyncF.h" "$(includedir)/Ice/ObjectFactoryF.h" "$(includedir)/Ice/ObjectFactoryManagerF.h" "$(includedir)/Ice/Buffer.h" "$(includedir)/Ice/Protocol.h" "$(includedir)/Ice/SlicedDataF.h" "$(includedir)/Ice/UserExceptionFactory.h" "$(includedir)/Ice/FactoryTable.h" "$(includedir)/Ice/ObserverHelper.h" "$(includedir)/Ice/Instrumentation.h" "$(includedir)/Ice/ThreadPoolF.h" "$(includedir)/IceWS/EndpointInfo.h" "$(includedir)/Ice/Endpoint.h" "$(includedir)/IceWS/ConnectionInfo.h" "$(includedir)/Ice/Connection.h" ../IceWS/Instance.h ../Ice/ProtocolInstance.h ../Ice/ProtocolInstanceF.h ../Ice/EndpointIF.h ../Ice/ConnectorF.h ../Ice/IPEndpointIF.h "$(includedir)/Ice/Communicator.h" "$(includedir)/Ice/GCObject.h" "$(includedir)/IceUtil/MutexPtrLock.h" "$(includedir)/Ice/Outgoing.h" "$(includedir)/Ice/Incoming.h" "$(includedir)/Ice/ServantLocatorF.h" "$(includedir)/Ice/ServantManagerF.h" "$(includedir)/Ice/ResponseHandlerF.h" "$(includedir)/Ice/IncomingAsync.h" "$(includedir)/Ice/InstrumentationF.h" "$(includedir)/Ice/RouterF.h" "$(includedir)/Ice/LocatorF.h" "$(includedir)/Ice/PluginF.h" "$(includedir)/Ice/ImplicitContextF.h" "$(includedir)/Ice/Properties.h" "$(includedir)/Ice/PropertiesAdmin.h" "$(includedir)/Ice/LoggerUtil.h" "$(includedir)/Ice/Logger.h" "$(includedir)/Ice/LocalException.h" ../Ice/Base64.h "$(includedir)/IceUtil/Random.h" "$(includedir)/IceUtil/StringUtil.h" "$(includedir)/IceUtil/DisableWarnings.h"
+TransceiverI$(OBJEXT): TransceiverI.cpp ../IceWS/TransceiverI.h ../IceWS/InstanceF.h "$(includedir)/IceUtil/Shared.h" "$(includedir)/IceUtil/Config.h" "$(includedir)/Ice/Handle.h" "$(includedir)/IceUtil/Handle.h" "$(includedir)/IceUtil/Exception.h" "$(includedir)/Ice/Config.h" "$(includedir)/IceWS/Plugin.h" "$(includedir)/Ice/Plugin.h" "$(includedir)/Ice/ProxyF.h" "$(includedir)/Ice/ProxyHandle.h" "$(includedir)/Ice/ObjectF.h" "$(includedir)/Ice/Exception.h" "$(includedir)/Ice/Format.h" "$(includedir)/Ice/StreamF.h" "$(includedir)/Ice/LocalObject.h" "$(includedir)/Ice/LocalObjectF.h" "$(includedir)/Ice/StreamHelpers.h" "$(includedir)/IceUtil/ScopedArray.h" "$(includedir)/IceUtil/Iterator.h" "$(includedir)/IceUtil/Optional.h" "$(includedir)/Ice/LoggerF.h" "$(includedir)/IceUtil/UndefSysMacros.h" "$(includedir)/Ice/BuiltinSequences.h" ../IceWS/Util.h ../Ice/Transceiver.h ../Ice/TransceiverF.h "$(includedir)/Ice/ConnectionF.h" ../Ice/Network.h ../Ice/NetworkF.h "$(includedir)/Ice/PropertiesF.h" "$(includedir)/Ice/Proxy.h" "$(includedir)/IceUtil/Mutex.h" "$(includedir)/IceUtil/Lock.h" "$(includedir)/IceUtil/ThreadException.h" "$(includedir)/IceUtil/Time.h" "$(includedir)/IceUtil/MutexProtocol.h" "$(includedir)/Ice/ProxyFactoryF.h" "$(includedir)/Ice/ConnectionIF.h" "$(includedir)/Ice/RequestHandlerF.h" "$(includedir)/Ice/EndpointF.h" "$(includedir)/Ice/EndpointTypes.h" "$(includedir)/Ice/ObjectAdapterF.h" "$(includedir)/Ice/ReferenceF.h" "$(includedir)/Ice/OutgoingAsync.h" "$(includedir)/IceUtil/Monitor.h" "$(includedir)/IceUtil/Cond.h" "$(includedir)/IceUtil/Timer.h" "$(includedir)/IceUtil/Thread.h" "$(includedir)/IceUtil/UniquePtr.h" "$(includedir)/Ice/OutgoingAsyncF.h" "$(includedir)/Ice/InstanceF.h" "$(includedir)/Ice/CommunicatorF.h" "$(includedir)/Ice/Current.h" "$(includedir)/Ice/Identity.h" "$(includedir)/Ice/Version.h" "$(includedir)/Ice/BasicStream.h" "$(includedir)/IceUtil/StringConverter.h" "$(includedir)/Ice/Object.h" "$(includedir)/Ice/IncomingAsyncF.h" "$(includedir)/Ice/ObjectFactoryF.h" "$(includedir)/Ice/ObjectFactoryManagerF.h" "$(includedir)/Ice/Buffer.h" "$(includedir)/Ice/Protocol.h" "$(includedir)/Ice/SlicedDataF.h" "$(includedir)/Ice/UserExceptionFactory.h" "$(includedir)/Ice/FactoryTable.h" "$(includedir)/Ice/ObserverHelper.h" "$(includedir)/Ice/Instrumentation.h" "$(includedir)/Ice/ThreadPoolF.h" "$(includedir)/IceWS/EndpointInfo.h" "$(includedir)/Ice/Endpoint.h" "$(includedir)/IceWS/ConnectionInfo.h" "$(includedir)/Ice/Connection.h" ../IceWS/Instance.h ../Ice/ProtocolInstance.h ../Ice/ProtocolInstanceF.h ../Ice/EndpointIF.h ../Ice/ConnectorF.h ../Ice/IPEndpointIF.h "$(includedir)/Ice/Communicator.h" "$(includedir)/Ice/GCObject.h" "$(includedir)/IceUtil/MutexPtrLock.h" "$(includedir)/Ice/Outgoing.h" "$(includedir)/Ice/Incoming.h" "$(includedir)/Ice/ServantLocatorF.h" "$(includedir)/Ice/ServantManagerF.h" "$(includedir)/Ice/ResponseHandlerF.h" "$(includedir)/Ice/IncomingAsync.h" "$(includedir)/Ice/InstrumentationF.h" "$(includedir)/Ice/RouterF.h" "$(includedir)/Ice/LocatorF.h" "$(includedir)/Ice/PluginF.h" "$(includedir)/Ice/ImplicitContextF.h" "$(includedir)/Ice/Properties.h" "$(includedir)/Ice/PropertiesAdmin.h" "$(includedir)/Ice/LoggerUtil.h" "$(includedir)/Ice/Logger.h" "$(includedir)/Ice/LocalException.h" ../Ice/Base64.h "$(includedir)/IceUtil/Random.h" "$(includedir)/IceUtil/SHA1.h" "$(includedir)/IceUtil/StringUtil.h" "$(includedir)/IceUtil/DisableWarnings.h"
Util$(OBJEXT): Util.cpp "$(includedir)/IceUtil/Config.h" ../IceWS/Util.h "$(includedir)/IceUtil/Shared.h" "$(includedir)/IceUtil/Handle.h" "$(includedir)/IceUtil/Exception.h" "$(includedir)/Ice/Config.h" "$(includedir)/Ice/BasicStream.h" "$(includedir)/IceUtil/StringConverter.h" "$(includedir)/Ice/InstanceF.h" "$(includedir)/Ice/Handle.h" "$(includedir)/Ice/Object.h" "$(includedir)/IceUtil/Mutex.h" "$(includedir)/IceUtil/Lock.h" "$(includedir)/IceUtil/ThreadException.h" "$(includedir)/IceUtil/Time.h" "$(includedir)/IceUtil/MutexProtocol.h" "$(includedir)/Ice/ObjectF.h" "$(includedir)/Ice/ProxyF.h" "$(includedir)/Ice/ProxyHandle.h" "$(includedir)/Ice/IncomingAsyncF.h" "$(includedir)/Ice/Current.h" "$(includedir)/Ice/Exception.h" "$(includedir)/Ice/Format.h" "$(includedir)/Ice/StreamF.h" "$(includedir)/Ice/LocalObject.h" "$(includedir)/Ice/LocalObjectF.h" "$(includedir)/Ice/StreamHelpers.h" "$(includedir)/IceUtil/ScopedArray.h" "$(includedir)/IceUtil/Iterator.h" "$(includedir)/IceUtil/Optional.h" "$(includedir)/Ice/ObjectAdapterF.h" "$(includedir)/IceUtil/UndefSysMacros.h" "$(includedir)/Ice/ConnectionF.h" "$(includedir)/Ice/Identity.h" "$(includedir)/Ice/Version.h" "$(includedir)/Ice/ObjectFactoryF.h" "$(includedir)/Ice/ObjectFactoryManagerF.h" "$(includedir)/Ice/Buffer.h" "$(includedir)/Ice/Protocol.h" "$(includedir)/Ice/SlicedDataF.h" "$(includedir)/Ice/UserExceptionFactory.h" "$(includedir)/Ice/FactoryTable.h" "$(includedir)/Ice/LocalException.h" "$(includedir)/Ice/BuiltinSequences.h" "$(includedir)/IceUtil/StringUtil.h" "$(includedir)/IceUtil/DisableWarnings.h"
$(HDIR)\EndpointInfo.h EndpointInfo.cpp: "$(slicedir)/IceWS/EndpointInfo.ice" "$(slicedir)/Ice/Endpoint.ice" "$(slicedir)/Ice/Version.ice" "$(slicedir)/Ice/BuiltinSequences.ice" "$(slicedir)/Ice/EndpointF.ice" "$(SLICE2CPP)" "$(SLICEPARSERLIB)"
$(HDIR)\ConnectionInfo.h ConnectionInfo.cpp: "$(slicedir)/IceWS/ConnectionInfo.ice" "$(slicedir)/Ice/Connection.ice" "$(slicedir)/Ice/ObjectAdapterF.ice" "$(slicedir)/Ice/Identity.ice" "$(slicedir)/Ice/Endpoint.ice" "$(slicedir)/Ice/Version.ice" "$(slicedir)/Ice/BuiltinSequences.ice" "$(slicedir)/Ice/EndpointF.ice" "$(SLICE2CPP)" "$(SLICEPARSERLIB)"
diff --git a/cpp/src/IceWS/Makefile b/cpp/src/IceWS/Makefile
index 3e961791839..b1d034552c8 100644
--- a/cpp/src/IceWS/Makefile
+++ b/cpp/src/IceWS/Makefile
@@ -38,7 +38,7 @@ include $(top_srcdir)/config/Make.rules
CPPFLAGS := -I.. $(CPPFLAGS) -DICE_WS_API_EXPORTS $(OPENSSL_FLAGS)
SLICE2CPPFLAGS := --ice --include-dir IceWS --dll-export ICE_WS_API $(SLICE2CPPFLAGS)
-LINKWITH := $(BZIP2_RPATH_LINK) -lIce -lIceUtil $(OPENSSL_LIBS) $(CXXLIBS)
+LINKWITH := $(BZIP2_RPATH_LINK) -lIce -lIceUtil $(ICEWS_OS_LIBS) $(CXXLIBS)
ifeq ($(STATICLIBS),yes)
$(libdir)/$(LIBNAME): $(OBJS)
diff --git a/cpp/src/IceWS/TransceiverI.cpp b/cpp/src/IceWS/TransceiverI.cpp
index 3c4f8ad5127..6f1a287ea9a 100644
--- a/cpp/src/IceWS/TransceiverI.cpp
+++ b/cpp/src/IceWS/TransceiverI.cpp
@@ -18,6 +18,7 @@
#include <Ice/LocalException.h>
#include <Ice/Base64.h>
#include <IceUtil/Random.h>
+#include <IceUtil/SHA1.h>
#include <IceUtil/StringUtil.h>
#include <IceUtil/DisableWarnings.h>
@@ -589,9 +590,16 @@ IceWS::TransceiverI::read(Buffer& buf, bool& hasMoreData)
}
while(postRead(buf));
- hasMoreData = _readI < _readBuffer.i;
-
- s = buf.i == buf.b.end() ? SocketOperationNone : SocketOperationRead;
+ if(buf.i == buf.b.end())
+ {
+ hasMoreData |= _readI < _readBuffer.i;
+ s = SocketOperationNone;
+ }
+ else
+ {
+ hasMoreData = false;
+ s = SocketOperationRead;
+ }
if(((_state == StateClosingRequestPending && !_closingInitiator) ||
(_state == StateClosingResponsePending && _closingInitiator) ||
@@ -723,18 +731,18 @@ IceWS::TransceiverI::startRead(Buffer& buf)
}
void
-IceWS::TransceiverI::finishRead(Buffer& buf)
+IceWS::TransceiverI::finishRead(Buffer& buf, bool& hasMoreData)
{
_readPending = false;
if(_state < StateOpened)
{
if(_state < StateConnected)
{
- _delegate->finishRead(buf);
+ _delegate->finishRead(buf, hasMoreData);
}
else
{
- _delegate->finishRead(_readBuffer);
+ _delegate->finishRead(_readBuffer, hasMoreData);
}
return;
}
@@ -745,11 +753,11 @@ IceWS::TransceiverI::finishRead(Buffer& buf)
}
else if(_readState == ReadStatePayload)
{
- _delegate->finishRead(buf);
+ _delegate->finishRead(buf, hasMoreData);
}
else
{
- _delegate->finishRead(_readBuffer);
+ _delegate->finishRead(_readBuffer, hasMoreData);
}
postRead(buf);
}
@@ -807,7 +815,9 @@ IceWS::TransceiverI::TransceiverI(const InstancePtr& instance, const Transceiver
_writeBuffer(0),
_writeBufferSize(1024),
_readPending(false),
- _writePending(false)
+ _writePending(false),
+ _closingInitiator(false),
+ _closingReason(CLOSURE_NORMAL)
{
//
// For client connections, the sent frame payload must be
@@ -841,7 +851,9 @@ IceWS::TransceiverI::TransceiverI(const InstancePtr& instance, const Transceiver
_writeBuffer(0),
_writeBufferSize(1024),
_readPending(false),
- _writePending(false)
+ _writePending(false),
+ _closingInitiator(false),
+ _closingReason(CLOSURE_NORMAL)
{
//
// Write and read buffer size must be large enough to hold the frame header!
@@ -973,8 +985,8 @@ IceWS::TransceiverI::handleRequest(Buffer& responseBuffer)
//
out << "Sec-WebSocket-Accept: ";
string input = key + _wsUUID;
- vector<unsigned char> v(&input[0], &input[0] + input.size());
- vector<unsigned char> hash = calcSHA1(v);
+ vector<unsigned char> hash;
+ IceUtil::sha1(reinterpret_cast<const unsigned char*>(&input[0]), input.size(), hash);
out << IceInternal::Base64::encode(hash) << "\r\n" << "\r\n"; // EOM
string str = out.str();
@@ -1071,8 +1083,8 @@ IceWS::TransceiverI::handleResponse()
throw WebSocketException("missing value for Sec-WebSocket-Accept");
}
string input = _key + _wsUUID;
- vector<unsigned char> v(&input[0], &input[0] + input.size());
- vector<unsigned char> hash = calcSHA1(v);
+ vector<unsigned char> hash;
+ IceUtil::sha1(reinterpret_cast<const unsigned char*>(&input[0]), input.size(), hash);
if(val != IceInternal::Base64::encode(hash))
{
throw WebSocketException("invalid value `" + val + "' for Sec-WebSocket-Accept");
diff --git a/cpp/src/IceWS/TransceiverI.h b/cpp/src/IceWS/TransceiverI.h
index cba5439b8b5..f7e1ecea6cd 100644
--- a/cpp/src/IceWS/TransceiverI.h
+++ b/cpp/src/IceWS/TransceiverI.h
@@ -45,7 +45,7 @@ public:
virtual bool startWrite(IceInternal::Buffer&);
virtual void finishWrite(IceInternal::Buffer&);
virtual void startRead(IceInternal::Buffer&);
- virtual void finishRead(IceInternal::Buffer&);
+ virtual void finishRead(IceInternal::Buffer&, bool&);
#endif
virtual std::string protocol() const;
virtual std::string toString() const;
@@ -133,12 +133,12 @@ private:
unsigned char _writeMask[4];
size_t _writePayloadLength;
- bool _closingInitiator;
- int _closingReason;
-
bool _readPending;
bool _writePending;
+ bool _closingInitiator;
+ int _closingReason;
+
std::vector<Ice::Byte> _pingPayload;
};
typedef IceUtil::Handle<TransceiverI> TransceiverIPtr;
diff --git a/cpp/src/IceWS/Util.cpp b/cpp/src/IceWS/Util.cpp
index 16820ca0999..fc4388aff44 100644
--- a/cpp/src/IceWS/Util.cpp
+++ b/cpp/src/IceWS/Util.cpp
@@ -13,40 +13,12 @@
#include <Ice/LocalException.h>
#include <IceUtil/StringUtil.h>
-#ifndef ICE_OS_WINRT
-# include <openssl/err.h>
-# include <openssl/sha.h>
-#endif
-
#include <IceUtil/DisableWarnings.h>
using namespace std;
using namespace Ice;
using namespace IceWS;
-vector<unsigned char>
-IceWS::calcSHA1(const vector<unsigned char>& data)
-{
-#ifndef ICE_OS_WINRT
- vector<unsigned char> hash(SHA_DIGEST_LENGTH);
- ::SHA1(&data[0], static_cast<unsigned long>(data.size()), &hash[0]);
- return hash;
-#else
- auto dataA = ref new Platform::Array<unsigned char>(const_cast<unsigned char*>(&data[0]),
- static_cast<unsigned int>(data.size()));
- auto hasher = Windows::Security::Cryptography::Core::HashAlgorithmProvider::OpenAlgorithm("SHA1");
- auto hashed = hasher->HashData(Windows::Security::Cryptography::CryptographicBuffer::CreateFromByteArray(dataA));
- auto reader = ::Windows::Storage::Streams::DataReader::FromBuffer(hashed);
- std::vector<unsigned char> result(reader->UnconsumedBufferLength);
- if(!result.empty())
- {
- reader->ReadBytes(::Platform::ArrayReference<unsigned char>(&result[0],
- static_cast<unsigned int>(result.size())));
- }
- return result;
-#endif
-}
-
WebSocketException::WebSocketException(const string& r) :
reason(r)
{