diff options
Diffstat (limited to 'cpp/src')
104 files changed, 8522 insertions, 4023 deletions
diff --git a/cpp/src/Glacier2/Blobject.cpp b/cpp/src/Glacier2/Blobject.cpp index bc5995fb547..6ae716c5cfe 100644 --- a/cpp/src/Glacier2/Blobject.cpp +++ b/cpp/src/Glacier2/Blobject.cpp @@ -15,73 +15,77 @@ using namespace Glacier2; static const string serverForwardContext = "Glacier2.Server.ForwardContext"; static const string clientForwardContext = "Glacier2.Client.ForwardContext"; -static const string serverBuffered = "Glacier2.Server.Buffered"; -static const string clientBuffered = "Glacier2.Client.Buffered"; static const string serverAlwaysBatch = "Glacier2.Server.AlwaysBatch"; static const string clientAlwaysBatch = "Glacier2.Client.AlwaysBatch"; static const string serverTraceRequest = "Glacier2.Server.Trace.Request"; static const string clientTraceRequest = "Glacier2.Client.Trace.Request"; static const string serverTraceOverride = "Glacier2.Server.Trace.Override"; static const string clientTraceOverride = "Glacier2.Client.Trace.Override"; -static const string serverSleepTime = "Glacier2.Server.SleepTime"; -static const string clientSleepTime = "Glacier2.Client.SleepTime"; -Glacier2::Blobject::Blobject(const CommunicatorPtr& communicator, bool reverse, const Ice::Context& sslContext) : - _communicator(communicator), - _properties(_communicator->getProperties()), - _logger(_communicator->getLogger()), +namespace +{ + +class AMI_Array_Object_ice_invokeI : public AMI_Array_Object_ice_invoke +{ +public: + + AMI_Array_Object_ice_invokeI(const AMD_Array_Object_ice_invokePtr& amdCB) : + _amdCB(amdCB) + { + } + + virtual void + ice_response(bool ok, const pair<const Byte*, const Byte*>& outParams) + { + if(_amdCB) + { + _amdCB->ice_response(ok, outParams); + } + } + + virtual void + ice_exception(const Exception& ex) + { + if(_amdCB) + { + _amdCB->ice_exception(ex); + } + } + +private: + + const AMD_Array_Object_ice_invokePtr _amdCB; +}; + +} + +Glacier2::Blobject::Blobject(const InstancePtr& instance, bool reverse, const Ice::Context& sslContext) : + _instance(instance), _reverse(reverse), _forwardContext(_reverse ? - _properties->getPropertyAsInt(serverForwardContext) > 0 : - _properties->getPropertyAsInt(clientForwardContext) > 0), - _buffered(_reverse ? - _properties->getPropertyAsIntWithDefault(serverBuffered, 1) > 0 : - _properties->getPropertyAsIntWithDefault(clientBuffered, 1) > 0), + _instance->properties()->getPropertyAsInt(serverForwardContext) > 0 : + _instance->properties()->getPropertyAsInt(clientForwardContext) > 0), _alwaysBatch(_reverse ? - _properties->getPropertyAsInt(serverAlwaysBatch) > 0 : - _properties->getPropertyAsInt(clientAlwaysBatch) > 0), + _instance->properties()->getPropertyAsInt(serverAlwaysBatch) > 0 : + _instance->properties()->getPropertyAsInt(clientAlwaysBatch) > 0), _requestTraceLevel(_reverse ? - _properties->getPropertyAsInt(serverTraceRequest) : - _properties->getPropertyAsInt(clientTraceRequest)), + _instance->properties()->getPropertyAsInt(serverTraceRequest) : + _instance->properties()->getPropertyAsInt(clientTraceRequest)), _overrideTraceLevel(reverse ? - _properties->getPropertyAsInt(serverTraceOverride) : - _properties->getPropertyAsInt(clientTraceOverride)), + _instance->properties()->getPropertyAsInt(serverTraceOverride) : + _instance->properties()->getPropertyAsInt(clientTraceOverride)), _sslContext(sslContext) { - - if(_buffered) + RequestQueueThreadPtr t = _reverse ? _instance->serverRequestQueueThread() : _instance->clientRequestQueueThread(); + if(t) { - try + if(reverse) { - IceUtil::Time sleepTime = _reverse ? - IceUtil::Time::milliSeconds(_properties->getPropertyAsInt(serverSleepTime)) : - IceUtil::Time::milliSeconds(_properties->getPropertyAsInt(clientSleepTime)); - - const_cast<RequestQueuePtr&>(_requestQueue) = new RequestQueue(sleepTime); - - Int threadStackSize = _properties->getPropertyAsInt("Ice.ThreadPerConnection.StackSize"); - - _requestQueue->start(static_cast<size_t>(threadStackSize)); - - // - // See the comment in Glacier2::RequestQueue::destroy() - // for why we detach the thread. - // - _requestQueue->getThreadControl().detach(); + const_cast<RequestQueuePtr&>(_requestQueue) = new RequestQueue(t); } - catch(const IceUtil::Exception& ex) + else { - { - Error out(_logger); - out << "cannot create thread for request queue:\n" << ex; - } - - if(_requestQueue) - { - _requestQueue->destroy(); - } - - throw; + const_cast<RequestQueuePtr&>(_requestQueue) = new RequestQueue(t); } } } @@ -91,12 +95,6 @@ Glacier2::Blobject::~Blobject() } void -Glacier2::Blobject::destroy() -{ - _requestQueue->destroy(); -} - -void Glacier2::Blobject::invoke(ObjectPrx& proxy, const AMD_Array_Object_ice_invokePtr& amdCB, const std::pair<const Ice::Byte*, const Ice::Byte*>& inParams, const Current& current) { @@ -114,7 +112,7 @@ Glacier2::Blobject::invoke(ObjectPrx& proxy, const AMD_Array_Object_ice_invokePt // if(current.requestId == 0) { - if(_alwaysBatch && _buffered) + if(_alwaysBatch && _requestQueue) { proxy = proxy->ice_batchOneway(); } @@ -147,7 +145,7 @@ Glacier2::Blobject::invoke(ObjectPrx& proxy, const AMD_Array_Object_ice_invokePt case 'o': { - if(_alwaysBatch && _buffered) + if(_alwaysBatch && _requestQueue) { proxy = proxy->ice_batchOneway(); } @@ -160,7 +158,7 @@ Glacier2::Blobject::invoke(ObjectPrx& proxy, const AMD_Array_Object_ice_invokePt case 'd': { - if(_alwaysBatch && _buffered) + if(_alwaysBatch && _requestQueue) { proxy = proxy->ice_batchDatagram(); } @@ -173,7 +171,7 @@ Glacier2::Blobject::invoke(ObjectPrx& proxy, const AMD_Array_Object_ice_invokePt case 'O': { - if(_buffered) + if(_requestQueue) { proxy = proxy->ice_batchOneway(); } @@ -186,7 +184,7 @@ Glacier2::Blobject::invoke(ObjectPrx& proxy, const AMD_Array_Object_ice_invokePt case 'D': { - if(_buffered) + if(_requestQueue) { proxy = proxy->ice_batchDatagram(); } @@ -211,7 +209,7 @@ Glacier2::Blobject::invoke(ObjectPrx& proxy, const AMD_Array_Object_ice_invokePt default: { - Warning out(_logger); + Warning out(_instance->logger()); out << "unknown forward option `" << option << "'"; break; } @@ -221,13 +219,13 @@ Glacier2::Blobject::invoke(ObjectPrx& proxy, const AMD_Array_Object_ice_invokePt if(_requestTraceLevel >= 1) { - Trace out(_logger, "Glacier2"); + Trace out(_instance->logger(), "Glacier2"); if(_reverse) { out << "reverse "; } out << "routing"; - if(_buffered) + if(_requestQueue) { out << " (buffered)"; } @@ -237,11 +235,11 @@ Glacier2::Blobject::invoke(ObjectPrx& proxy, const AMD_Array_Object_ice_invokePt } if(_reverse) { - out << "\nidentity = " << _communicator->identityToString(proxy->ice_getIdentity()); + out << "\nidentity = " << _instance->communicator()->identityToString(proxy->ice_getIdentity()); } else { - out << "\nproxy = " << _communicator->proxyToString(proxy); + out << "\nproxy = " << _instance->communicator()->proxyToString(proxy); } out << "\noperation = " << current.operation; out << "\ncontext = "; @@ -256,7 +254,7 @@ Glacier2::Blobject::invoke(ObjectPrx& proxy, const AMD_Array_Object_ice_invokePt } } - if(_buffered) + if(_requestQueue) { // // If we are in buffered mode, we create a new request and add @@ -278,7 +276,7 @@ Glacier2::Blobject::invoke(ObjectPrx& proxy, const AMD_Array_Object_ice_invokePt if(override && _overrideTraceLevel >= 1) { - Trace out(_logger, "Glacier2"); + Trace out(_instance->logger(), "Glacier2"); if(_reverse) { out << "reverse "; @@ -286,11 +284,11 @@ Glacier2::Blobject::invoke(ObjectPrx& proxy, const AMD_Array_Object_ice_invokePt out << "routing override"; if(_reverse) { - out << "\nidentity = " << _communicator->identityToString(proxy->ice_getIdentity()); + out << "\nidentity = " << _instance->communicator()->identityToString(proxy->ice_getIdentity()); } else { - out << "\nproxy = " << _communicator->proxyToString(proxy); + out << "\nproxy = " << _instance->communicator()->proxyToString(proxy); } out << "\noperation = " << current.operation; out << "\ncontext = "; @@ -311,48 +309,49 @@ Glacier2::Blobject::invoke(ObjectPrx& proxy, const AMD_Array_Object_ice_invokePt // If we are in not in buffered mode, we send the request // directly. // - - bool ok; - ByteSeq outParams; + assert(!proxy->ice_isBatchOneway() && !proxy->ice_isBatchDatagram()); try { + AMI_Array_Object_ice_invokePtr amiCB; + if(proxy->ice_isTwoway()) + { + amiCB = new AMI_Array_Object_ice_invokeI(amdCB); + } + else + { + amiCB = new AMI_Array_Object_ice_invokeI(0); + } + if(_forwardContext) { if(_sslContext.size() > 0) { Ice::Context ctx = current.ctx; ctx.insert(_sslContext.begin(), _sslContext.end()); - ok = proxy->ice_invoke(current.operation, current.mode, inParams, outParams, ctx); + proxy->ice_invoke_async(amiCB, current.operation, current.mode, inParams); } else { - ok = proxy->ice_invoke(current.operation, current.mode, inParams, outParams, current.ctx); + proxy->ice_invoke_async(amiCB, current.operation, current.mode, inParams, current.ctx); } } else { if(_sslContext.size() > 0) { - ok = proxy->ice_invoke(current.operation, current.mode, inParams, outParams, _sslContext); + proxy->ice_invoke_async(amiCB, current.operation, current.mode, inParams, _sslContext); } else { - ok = proxy->ice_invoke(current.operation, current.mode, inParams, outParams); + proxy->ice_invoke_async(amiCB, current.operation, current.mode, inParams); } } - pair<const Byte*, const Byte*> outPair; - if(outParams.size() == 0) - { - outPair.first = outPair.second = 0; - } - else + if(!proxy->ice_isTwoway()) { - outPair.first = &outParams[0]; - outPair.second = outPair.first + outParams.size(); + amdCB->ice_response(true, pair<const Byte*, const Byte*>(0, 0)); } - amdCB->ice_response(ok, outPair); } catch(const LocalException& ex) { diff --git a/cpp/src/Glacier2/Blobject.h b/cpp/src/Glacier2/Blobject.h index afda9383a7e..ab6ebf8b3ff 100644 --- a/cpp/src/Glacier2/Blobject.h +++ b/cpp/src/Glacier2/Blobject.h @@ -12,6 +12,7 @@ #include <Ice/Ice.h> #include <Glacier2/RequestQueue.h> +#include <Glacier2/Instance.h> namespace Glacier2 { @@ -20,25 +21,20 @@ class Blobject : public Ice::BlobjectArrayAsync { public: - Blobject(const Ice::CommunicatorPtr&, bool, const Ice::Context&); + Blobject(const InstancePtr&, bool, const Ice::Context&); virtual ~Blobject(); - virtual void destroy(); - protected: void invoke(Ice::ObjectPrx&, const Ice::AMD_Array_Object_ice_invokePtr&, const std::pair<const Ice::Byte*, const Ice::Byte*>&, const Ice::Current&); - const Ice::CommunicatorPtr _communicator; - const Ice::PropertiesPtr _properties; - const Ice::LoggerPtr _logger; + const InstancePtr _instance; private: const bool _reverse; const bool _forwardContext; - const bool _buffered; const bool _alwaysBatch; const int _requestTraceLevel; const int _overrideTraceLevel; diff --git a/cpp/src/Glacier2/ClientBlobject.cpp b/cpp/src/Glacier2/ClientBlobject.cpp index a1e32dca027..daf772c3c83 100644 --- a/cpp/src/Glacier2/ClientBlobject.cpp +++ b/cpp/src/Glacier2/ClientBlobject.cpp @@ -16,14 +16,14 @@ using namespace std; using namespace Ice; using namespace Glacier2; -Glacier2::ClientBlobject::ClientBlobject(const CommunicatorPtr& communicator, +Glacier2::ClientBlobject::ClientBlobject(const InstancePtr& instance, const FilterManagerPtr& filters, const Ice::Context& sslContext): - Glacier2::Blobject(communicator, false, sslContext), - _routingTable(new RoutingTable(communicator)), + Glacier2::Blobject(instance, false, sslContext), + _routingTable(new RoutingTable(_instance->communicator())), _filters(filters), - _rejectTraceLevel(_properties->getPropertyAsInt("Glacier2.Client.Trace.Reject")) + _rejectTraceLevel(_instance->properties()->getPropertyAsInt("Glacier2.Client.Trace.Reject")) { } @@ -117,9 +117,9 @@ Glacier2::ClientBlobject::ice_invoke_async(const Ice::AMD_Array_Object_ice_invok { if(_rejectTraceLevel >= 1) { - Trace out(_logger, "Glacier2"); + Trace out(_instance->logger(), "Glacier2"); out << "rejecting request: " << rejectedFilters << "\n"; - out << "identity: " << _communicator->identityToString(current.id); + out << "identity: " << _instance->communicator()->identityToString(current.id); } ObjectNotExistException ex(__FILE__, __LINE__); diff --git a/cpp/src/Glacier2/ClientBlobject.h b/cpp/src/Glacier2/ClientBlobject.h index 5385a0f2c0b..62824646190 100644 --- a/cpp/src/Glacier2/ClientBlobject.h +++ b/cpp/src/Glacier2/ClientBlobject.h @@ -31,7 +31,7 @@ class ClientBlobject : public Glacier2::Blobject { public: - ClientBlobject(const Ice::CommunicatorPtr&, const FilterManagerPtr&, const Ice::Context&); + ClientBlobject(const InstancePtr&, const FilterManagerPtr&, const Ice::Context&); virtual ~ClientBlobject(); virtual void ice_invoke_async(const Ice::AMD_Array_Object_ice_invokePtr&, diff --git a/cpp/src/Glacier2/FilterManager.cpp b/cpp/src/Glacier2/FilterManager.cpp index 48112725aa6..079dd964b14 100755 --- a/cpp/src/Glacier2/FilterManager.cpp +++ b/cpp/src/Glacier2/FilterManager.cpp @@ -109,13 +109,14 @@ Glacier2::FilterManager::~FilterManager() void Glacier2::FilterManager::destroy() { - if(_adapter) + Ice::ObjectAdapterPtr adapter = _instance->serverObjectAdapter(); + if(adapter) { try { if(_categoriesPrx) { - _adapter->remove(_categoriesPrx->ice_getIdentity()); + adapter->remove(_categoriesPrx->ice_getIdentity()); } } catch(const Exception&) @@ -125,7 +126,7 @@ Glacier2::FilterManager::destroy() { if(_adapterIdsPrx) { - _adapter->remove(_adapterIdsPrx->ice_getIdentity()); + adapter->remove(_adapterIdsPrx->ice_getIdentity()); } } catch(const Exception&) @@ -135,7 +136,7 @@ Glacier2::FilterManager::destroy() { if(_identitiesPrx) { - _adapter->remove(_identitiesPrx->ice_getIdentity()); + adapter->remove(_identitiesPrx->ice_getIdentity()); } } catch(const Exception&) @@ -144,21 +145,22 @@ Glacier2::FilterManager::destroy() } } -Glacier2::FilterManager::FilterManager(const ObjectAdapterPtr& adapter, const Glacier2::StringSetIPtr& categories, +Glacier2::FilterManager::FilterManager(const InstancePtr& instance, const Glacier2::StringSetIPtr& categories, const Glacier2::StringSetIPtr& adapters, const Glacier2::IdentitySetIPtr& identities) : _categories(categories), _adapters(adapters), _identities(identities), - _adapter(adapter) + _instance(instance) { try { - if(_adapter) + Ice::ObjectAdapterPtr adapter = _instance->serverObjectAdapter(); + if(adapter) { - _categoriesPrx = Glacier2::StringSetPrx::uncheckedCast(_adapter->addWithUUID(_categories)); - _adapterIdsPrx = Glacier2::StringSetPrx::uncheckedCast(_adapter->addWithUUID(_adapters)); - _identitiesPrx = Glacier2::IdentitySetPrx::uncheckedCast(_adapter->addWithUUID(_identities)); + _categoriesPrx = Glacier2::StringSetPrx::uncheckedCast(adapter->addWithUUID(_categories)); + _adapterIdsPrx = Glacier2::StringSetPrx::uncheckedCast(adapter->addWithUUID(_adapters)); + _identitiesPrx = Glacier2::IdentitySetPrx::uncheckedCast(adapter->addWithUUID(_identities)); } } catch(...) @@ -169,10 +171,9 @@ Glacier2::FilterManager::FilterManager(const ObjectAdapterPtr& adapter, const Gl } Glacier2::FilterManager* -Glacier2::FilterManager::create(const CommunicatorPtr& communicator, const ObjectAdapterPtr& adapter, const string& userId, - const bool allowAddUser) +Glacier2::FilterManager::create(const InstancePtr& instance, const string& userId, const bool allowAddUser) { - PropertiesPtr props = communicator->getProperties(); + PropertiesPtr props = instance->properties(); string allow = props->getProperty("Glacier2.Filter.Category.Accept"); vector<string> allowSeq; stringToSeq(allow, allowSeq); @@ -211,8 +212,8 @@ Glacier2::FilterManager::create(const CommunicatorPtr& communicator, const Objec // IdentitySeq allowIdSeq; allow = props->getProperty("Glacier2.Filter.Identity.Accept"); - stringToSeq(communicator, allow, allowIdSeq); + stringToSeq(instance->communicator(), allow, allowIdSeq); Glacier2::IdentitySetIPtr identityFilter = new Glacier2::IdentitySetI(allowIdSeq); - return new Glacier2::FilterManager(adapter, categoryFilter, adapterIdFilter, identityFilter); + return new Glacier2::FilterManager(instance, categoryFilter, adapterIdFilter, identityFilter); } diff --git a/cpp/src/Glacier2/FilterManager.h b/cpp/src/Glacier2/FilterManager.h index 71881846e81..db74035f80d 100755 --- a/cpp/src/Glacier2/FilterManager.h +++ b/cpp/src/Glacier2/FilterManager.h @@ -14,6 +14,7 @@ // It'd be better if we didn't have to include this everywhere, but // this is the most expeditious approach for now. // +#include <Glacier2/Instance.h> #include <Glacier2/FilterI.h> #include <Ice/ObjectAdapter.h> @@ -67,7 +68,7 @@ public: } static FilterManager* - create(const Ice::CommunicatorPtr&, const Ice::ObjectAdapterPtr&, const std::string&, const bool); + create(const InstancePtr&, const std::string&, const bool); private: @@ -78,9 +79,9 @@ private: const StringSetIPtr _categories; const StringSetIPtr _adapters; const IdentitySetIPtr _identities; - const Ice::ObjectAdapterPtr _adapter; + const InstancePtr _instance; - FilterManager(const Ice::ObjectAdapterPtr& , const StringSetIPtr&, const StringSetIPtr&, const IdentitySetIPtr&); + FilterManager(const InstancePtr& , const StringSetIPtr&, const StringSetIPtr&, const IdentitySetIPtr&); }; }; diff --git a/cpp/src/Glacier2/Glacier2Router.cpp b/cpp/src/Glacier2/Glacier2Router.cpp index 9cbeadab7a6..6745551c474 100644 --- a/cpp/src/Glacier2/Glacier2Router.cpp +++ b/cpp/src/Glacier2/Glacier2Router.cpp @@ -11,6 +11,7 @@ #include <IceUtil/UUID.h> #include <IceUtil/Options.h> #include <Ice/Service.h> +#include <Glacier2/Instance.h> #include <Glacier2/RouterI.h> #include <Glacier2/Session.h> #include <Glacier2/SessionRouterI.h> @@ -60,6 +61,7 @@ private: void usage(const std::string&); + InstancePtr _instance; SessionRouterIPtr _sessionRouter; }; @@ -428,12 +430,16 @@ Glacier2::RouterService::start(int argc, char* argv[]) } // + // Create the instance object. + // + _instance = new Instance(communicator(), clientAdapter, serverAdapter); + + // // Create the session router. The session router registers itself // and all required servant locators, so no registration has to be // done here. // - _sessionRouter = new SessionRouterI(clientAdapter, serverAdapter, verifier, sessionManager, sslVerifier, - sslSessionManager); + _sessionRouter = new SessionRouterI(_instance, verifier, sessionManager, sslVerifier, sslSessionManager); // // If we have an admin adapter, we add an admin object. @@ -482,6 +488,12 @@ Glacier2::RouterService::stop() _sessionRouter->destroy(); _sessionRouter = 0; } + + if(_instance) + { + _instance->destroy(); + _instance = 0; + } return true; } @@ -493,11 +505,6 @@ Glacier2::RouterService::initializeCommunicator(int& argc, char* argv[], initData.properties = createProperties(argc, argv, initializationData.properties); // - // Glacier2 always runs in thread-per-connection mode. - // - initData.properties->setProperty("Ice.ThreadPerConnection", "1"); - - // // Make sure that Glacier2 doesn't use a router. // initData.properties->setProperty("Ice.Default.Router", ""); @@ -508,17 +515,6 @@ Glacier2::RouterService::initializeCommunicator(int& argc, char* argv[], // initData.properties->setProperty("Ice.ACM.Client", "0"); initData.properties->setProperty("Ice.ACM.Server", "0"); - - // - // Ice.MonitorConnections defaults to the smaller of Ice.ACM.Client - // or Ice.ACM.Server, which we set to 0 above. However, we still want - // the connection monitor thread for AMI timeouts. We only set - // this value if it hasn't been set explicitly already. - // - if(initData.properties->getProperty("Ice.MonitorConnections").empty()) - { - initData.properties->setProperty("Ice.MonitorConnections", "60"); - } // // We do not need to set Ice.RetryIntervals to -1, i.e., we do diff --git a/cpp/src/Glacier2/Instance.cpp b/cpp/src/Glacier2/Instance.cpp new file mode 100644 index 00000000000..00f3042d401 --- /dev/null +++ b/cpp/src/Glacier2/Instance.cpp @@ -0,0 +1,59 @@ +// ********************************************************************** +// +// Copyright (c) 2003-2007 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 <Glacier2/Instance.h> + +using namespace std; +using namespace Glacier2; + +static const string serverSleepTime = "Glacier2.Server.SleepTime"; +static const string clientSleepTime = "Glacier2.Client.SleepTime"; +static const string serverBuffered = "Glacier2.Server.Buffered"; +static const string clientBuffered = "Glacier2.Client.Buffered"; + +Glacier2::Instance::Instance(const Ice::CommunicatorPtr& communicator, const Ice::ObjectAdapterPtr& clientAdapter, + const Ice::ObjectAdapterPtr& serverAdapter) : + _communicator(communicator), + _properties(communicator->getProperties()), + _logger(communicator->getLogger()), + _clientAdapter(clientAdapter), + _serverAdapter(serverAdapter) +{ + if(_properties->getPropertyAsIntWithDefault(serverBuffered, 1) > 0) + { + IceUtil::Time sleepTime = IceUtil::Time::milliSeconds(_properties->getPropertyAsInt(serverSleepTime)); + const_cast<RequestQueueThreadPtr&>(_serverRequestQueueThread) = new RequestQueueThread(sleepTime); + _serverRequestQueueThread->start(); + } + + if(_properties->getPropertyAsIntWithDefault(clientBuffered, 1) > 0) + { + IceUtil::Time sleepTime = IceUtil::Time::milliSeconds(_properties->getPropertyAsInt(clientSleepTime)); + const_cast<RequestQueueThreadPtr&>(_clientRequestQueueThread) = new RequestQueueThread(sleepTime); + _clientRequestQueueThread->start(); + } +} + +Glacier2::Instance::~Instance() +{ +} + +void +Glacier2::Instance::destroy() +{ + if(_clientRequestQueueThread) + { + _clientRequestQueueThread->destroy(); + } + + if(_serverRequestQueueThread) + { + _serverRequestQueueThread->destroy(); + } +} diff --git a/cpp/src/Glacier2/Instance.h b/cpp/src/Glacier2/Instance.h new file mode 100644 index 00000000000..dbe05d48e56 --- /dev/null +++ b/cpp/src/Glacier2/Instance.h @@ -0,0 +1,55 @@ +// ********************************************************************** +// +// Copyright (c) 2003-2007 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 GLACIER2_INSTANCE_H +#define GLACIER2_INSTANCE_H + +#include <Ice/CommunicatorF.h> +#include <Ice/ObjectAdapterF.h> +#include <Ice/PropertiesF.h> +#include <IceUtil/Time.h> + +#include <Glacier2/RequestQueue.h> + +namespace Glacier2 +{ + +class Instance : public IceUtil::Shared +{ +public: + + Instance(const Ice::CommunicatorPtr&, const Ice::ObjectAdapterPtr&, const Ice::ObjectAdapterPtr&); + ~Instance(); + + Ice::CommunicatorPtr communicator() const { return _communicator; } + Ice::ObjectAdapterPtr clientObjectAdapter() const { return _clientAdapter; } + Ice::ObjectAdapterPtr serverObjectAdapter() const { return _serverAdapter; } + Ice::PropertiesPtr properties() const { return _properties; } + Ice::LoggerPtr logger() const { return _logger; } + + RequestQueueThreadPtr clientRequestQueueThread() const { return _clientRequestQueueThread; } + RequestQueueThreadPtr serverRequestQueueThread() const { return _serverRequestQueueThread; } + + void destroy(); + +private: + + const Ice::CommunicatorPtr _communicator; + const Ice::PropertiesPtr _properties; + const Ice::LoggerPtr _logger; + const Ice::ObjectAdapterPtr _clientAdapter; + const Ice::ObjectAdapterPtr _serverAdapter; + const RequestQueueThreadPtr _clientRequestQueueThread; + const RequestQueueThreadPtr _serverRequestQueueThread; +}; +typedef IceUtil::Handle<Instance> InstancePtr; + +} // End namespace Glacier2 + +#endif diff --git a/cpp/src/Glacier2/Makefile b/cpp/src/Glacier2/Makefile index 07f73a0be00..fab4fe99ae5 100644 --- a/cpp/src/Glacier2/Makefile +++ b/cpp/src/Glacier2/Makefile @@ -27,6 +27,7 @@ ROBJS = Blobject.o \ ClientBlobject.o \ CryptPermissionsVerifierI.o \ Glacier2Router.o \ + Instance.o \ ProxyVerifier.o \ RequestQueue.o \ RouterI.o \ diff --git a/cpp/src/Glacier2/Makefile.mak b/cpp/src/Glacier2/Makefile.mak index 8eda88543f4..88ed24437df 100644 --- a/cpp/src/Glacier2/Makefile.mak +++ b/cpp/src/Glacier2/Makefile.mak @@ -33,6 +33,7 @@ ROBJS = Blobject.obj \ ClientBlobject.obj \ CryptPermissionsVerifierI.obj \ Glacier2Router.obj \ + Instance.obj \ ProxyVerifier.obj \ RequestQueue.obj \ RouterI.obj \ diff --git a/cpp/src/Glacier2/RequestQueue.cpp b/cpp/src/Glacier2/RequestQueue.cpp index 399884cf2f2..e508fa1ad51 100644 --- a/cpp/src/Glacier2/RequestQueue.cpp +++ b/cpp/src/Glacier2/RequestQueue.cpp @@ -14,43 +14,40 @@ using namespace std; using namespace Ice; using namespace Glacier2; -namespace Glacier2 +namespace { // // AMI callback class for twoway requests // -// NOTE: the received response isn't sent back directly with the AMD -// callback. Instead it's queued and the request queue thread is -// responsible for sending back the response. It's necessary because -// sending back the response might block. -// class AMI_Array_Object_ice_invokeI : public AMI_Array_Object_ice_invoke { public: - - AMI_Array_Object_ice_invokeI(const RequestQueuePtr& requestQueue, const AMD_Array_Object_ice_invokePtr& amdCB) : - _requestQueue(requestQueue), - _amdCB(amdCB) + + AMI_Array_Object_ice_invokeI(const AMD_Array_Object_ice_invokePtr& amdCB) : _amdCB(amdCB) { - assert(_amdCB); } - + virtual void ice_response(bool ok, const pair<const Byte*, const Byte*>& outParams) { - _requestQueue->addResponse(new Response(_amdCB, ok, outParams)); + if(_amdCB) + { + _amdCB->ice_response(ok, outParams); + } } virtual void ice_exception(const Exception& ex) { - _requestQueue->addResponse(new Response(_amdCB, ex)); + if(_amdCB) + { + _amdCB->ice_exception(ex); + } } private: - const RequestQueuePtr _requestQueue; const AMD_Array_Object_ice_invokePtr _amdCB; }; @@ -72,9 +69,7 @@ Glacier2::Request::Request(const ObjectPrx& proxy, const std::pair<const Byte*, // if(!_proxy->ice_isTwoway()) { - bool ok = true; - pair<const Byte*, const Byte*> outParams(0, 0); - _amdCB->ice_response(ok, outParams); + _amdCB->ice_response(true, pair<const Byte*, const Byte*>(0, 0)); } Context::const_iterator p = current.ctx.find("_ovrd"); @@ -86,7 +81,7 @@ Glacier2::Request::Request(const ObjectPrx& proxy, const std::pair<const Byte*, bool -Glacier2::Request::invoke(const RequestQueuePtr& requestQueue) +Glacier2::Request::invoke() { pair<const Byte*, const Byte*> inPair; if(_inParams.size() == 0) @@ -98,69 +93,73 @@ Glacier2::Request::invoke(const RequestQueuePtr& requestQueue) inPair.first = &_inParams[0]; inPair.second = inPair.first + _inParams.size(); } - if(_proxy->ice_isTwoway()) + + if(_proxy->ice_isBatchOneway() || _proxy->ice_isBatchDatagram()) { - AMI_Array_Object_ice_invokePtr cb = new AMI_Array_Object_ice_invokeI(requestQueue, _amdCB); + ByteSeq outParams; if(_forwardContext) - { + { if(_sslContext.size() > 0) { Ice::Context ctx = _current.ctx; ctx.insert(_sslContext.begin(), _sslContext.end()); - _proxy->ice_invoke_async(cb, _current.operation, _current.mode, inPair, ctx); + _proxy->ice_invoke(_current.operation, _current.mode, inPair, outParams, ctx); } else { - _proxy->ice_invoke_async(cb, _current.operation, _current.mode, inPair, _current.ctx); + _proxy->ice_invoke(_current.operation, _current.mode, inPair, outParams, _current.ctx); } } else { if(_sslContext.size() > 0) { - _proxy->ice_invoke_async(cb, _current.operation, _current.mode, inPair, _sslContext); + _proxy->ice_invoke(_current.operation, _current.mode, inPair, outParams, _sslContext); } else { - _proxy->ice_invoke_async(cb, _current.operation, _current.mode, inPair); + _proxy->ice_invoke(_current.operation, _current.mode, inPair, outParams); } } - return true; // A twoway method is being dispatched. + return true; // Batch invocation. } else { - try + AMI_Array_Object_ice_invokePtr amiCB; + if(_proxy->ice_isTwoway()) + { + amiCB = new AMI_Array_Object_ice_invokeI(_amdCB); + } + else { - ByteSeq outParams; - if(_forwardContext) + amiCB = new AMI_Array_Object_ice_invokeI(0); + } + + if(_forwardContext) + { + if(_sslContext.size() > 0) { - if(_sslContext.size() > 0) - { - Ice::Context ctx = _current.ctx; - ctx.insert(_sslContext.begin(), _sslContext.end()); - _proxy->ice_invoke(_current.operation, _current.mode, inPair, outParams, ctx); - } - else - { - _proxy->ice_invoke(_current.operation, _current.mode, inPair, outParams, _current.ctx); - } + Ice::Context ctx = _current.ctx; + ctx.insert(_sslContext.begin(), _sslContext.end()); + _proxy->ice_invoke_async(amiCB, _current.operation, _current.mode, inPair, ctx); } else { - if(_sslContext.size() > 0) - { - _proxy->ice_invoke(_current.operation, _current.mode, inPair, outParams, _sslContext); - } - else - { - _proxy->ice_invoke(_current.operation, _current.mode, inPair, outParams); - } + _proxy->ice_invoke_async(amiCB, _current.operation, _current.mode, inPair, _current.ctx); } } - catch(const LocalException&) + else { + if(_sslContext.size() > 0) + { + _proxy->ice_invoke_async(amiCB, _current.operation, _current.mode, inPair, _sslContext); + } + else + { + _proxy->ice_invoke_async(amiCB, _current.operation, _current.mode, inPair); + } } - return false; + return false; // Not a batch invocation. } } @@ -195,74 +194,68 @@ Glacier2::Request::override(const RequestPtr& other) const return _override == other->_override; } -bool -Glacier2::Request::isBatch() const -{ - return _proxy->ice_isBatchOneway() || _proxy->ice_isBatchDatagram(); -} - -ConnectionPtr -Glacier2::Request::getConnection() const -{ - return _proxy->ice_getConnection(); -} - -Glacier2::Response::Response(const AMD_Array_Object_ice_invokePtr& amdCB, bool ok, - const pair<const Byte*, const Byte*>& outParams) : - _amdCB(amdCB), - _ok(ok), - _outParams(outParams.first, outParams.second) +Glacier2::RequestQueue::RequestQueue(const RequestQueueThreadPtr& requestQueueThread) : + _requestQueueThread(requestQueueThread) { } -Glacier2::Response::Response(const AMD_Array_Object_ice_invokePtr& amdCB, const Exception& ex) : - _amdCB(amdCB), - _ok(false), - _exception(ex.ice_clone()) +bool +Glacier2::RequestQueue::addRequest(const RequestPtr& request) { + IceUtil::Mutex::Lock lock(*this); + for(vector<RequestPtr>::iterator p = _requests.begin(); p != _requests.end(); ++p) + { + // + // If the new request overrides an old one, then abort the old + // request and replace it with the new request. + // + if(request->override(*p)) + { + *p = request; + return true; + } + } + + // + // No override, we add the new request. + // + if(_requests.empty()) + { + _requestQueueThread->flushRequestQueue(this); // This might throw if the thread is destroyed. + } + _requests.push_back(request); + return false; } void -Glacier2::Response::invoke() +Glacier2::RequestQueue::flushRequests(set<Ice::ObjectPrx>& batchProxies) { - if(_exception.get()) + IceUtil::Mutex::Lock lock(*this); + for(vector<RequestPtr>::const_iterator p = _requests.begin(); p != _requests.end(); ++p) { - _amdCB->ice_exception(*_exception.get()); - } - else - { - pair<const Byte*, const Byte*> outPair; - if(_outParams.size() == 0) - { - outPair.first = outPair.second = 0; - } - else + if((*p)->invoke()) // If batch invocation, add the proxy to the batch proxy set. { - outPair.first = &_outParams[0]; - outPair.second = outPair.first + _outParams.size(); + batchProxies.insert((*p)->getProxy()); } - _amdCB->ice_response(_ok, outPair); } + _requests.clear(); } -Glacier2::RequestQueue::RequestQueue(const IceUtil::Time& sleepTime) : +Glacier2::RequestQueueThread::RequestQueueThread(const IceUtil::Time& sleepTime) : _sleepTime(sleepTime), _destroy(false), _sleep(false) { } -Glacier2::RequestQueue::~RequestQueue() +Glacier2::RequestQueueThread::~RequestQueueThread() { - IceUtil::Monitor<IceUtil::Mutex>::Lock lock(*this); - assert(_destroy); - assert(_requests.empty()); - assert(_responses.empty()); + assert(_queues.empty()); } void -Glacier2::RequestQueue::destroy() +Glacier2::RequestQueueThread::destroy() { { IceUtil::Monitor<IceUtil::Mutex>::Lock lock(*this); @@ -273,82 +266,42 @@ Glacier2::RequestQueue::destroy() notify(); } - // - // We don't want to wait for the RequestQueue thread, because this - // destroy() operation is called when sessions expire or are - // destroyed, in which case we do not want the session handler - // thread to block here. Therefore we don't call join(), but - // instead detach the thread right after we start it. - // - //getThreadControl().join(); + getThreadControl().join(); } -bool -Glacier2::RequestQueue::addRequest(const RequestPtr& request) +void +Glacier2::RequestQueueThread::flushRequestQueue(const RequestQueuePtr& queue) { IceUtil::Monitor<IceUtil::Mutex>::Lock lock(*this); - if(_destroy) { - throw ObjectNotExistException(__FILE__, __LINE__); - } - - for(vector<RequestPtr>::iterator p = _requests.begin(); p != _requests.end(); ++p) - { - // - // If the new request overrides an old one, then abort the old - // request and replace it with the new request. - // - if(request->override(*p)) - { - *p = request; - return true; - } + throw Ice::ObjectNotExistException(__FILE__, __LINE__); } - // - // No override, we add the new request. - // - _requests.push_back(request); - if(!_sleep) + if(_queues.empty() && !_sleep) { - // - // No need to notify if the request queue thread is sleeping, - // once it wakes up it will check if there's requests to send. - // notify(); } - return false; + _queues.push_back(queue); } void -Glacier2::RequestQueue::addResponse(const ResponsePtr& response) +Glacier2::RequestQueueThread::run() { - IceUtil::Monitor<IceUtil::Mutex>::Lock lock(*this); - _responses.push_back(response); - notify(); -} - -void -Glacier2::RequestQueue::run() -{ - RequestQueuePtr self = this; // This is to avoid creating a temporary Ptr for each call to Request::invoke() - ptrdiff_t dispatchCount = 0; // The dispatch count keeps track of the number of outstanding twoway requests. while(true) { - vector<RequestPtr> requests; - vector<ResponsePtr> responses; + vector<RequestQueuePtr> queues; { IceUtil::Monitor<IceUtil::Mutex>::Lock lock(*this); // - // Wait indefinitely if there's no requests/responses to + // Wait indefinitely if there's no requests to // send. If the queue is being destroyed we still need to // wait until all the responses for twoway requests are // received. // - while((!_destroy || dispatchCount != 0) && _responses.empty() && (_requests.empty() || _sleep)) + while(!_destroy && (_queues.empty() || _sleep)) { if(_sleep) { @@ -361,6 +314,7 @@ Glacier2::RequestQueue::run() { _sleepDuration -= IceUtil::Time::now(IceUtil::Time::Monotonic) - now; } + if(_sleepDuration <= IceUtil::Time()) { _sleep = false; @@ -373,90 +327,54 @@ Glacier2::RequestQueue::run() } // - // If the queue is being destroyed and there's no requests - // or responses to send, we're done. + // If the queue is being destroyed and there's no requests or responses + // to send, we're done. // - if(_destroy && _requests.empty() && _responses.empty()) + if(_destroy && _queues.empty()) { - assert(dispatchCount == 0); // We would have blocked in the wait() above otherwise. return; } - // - // If there's requests to sent and we're not sleeping, - // send the requests. If a sleep time is configured, we - // set the sleep duration and set the sleep flag to make - // sure we'll sleep again once we're done sending requests - // and responses. - // - if(!_requests.empty() && !_sleep) - { - requests.swap(_requests); - if(_sleepTime > IceUtil::Time()) - { - _sleep = true; - _sleepDuration = _sleepTime; - } - } - if(!_responses.empty()) + assert(!_queues.empty() && !_sleep); + + queues.swap(_queues); + + if(_sleepTime > IceUtil::Time()) { - responses.swap(_responses); + _sleep = true; + _sleepDuration = _sleepTime; } } - // - // Send requests, flush batch requests, and sleep outside the - // thread synchronization, so that new messages can be added - // while this is being done. - // + set<Ice::ObjectPrx> flushProxySet; + for(vector<RequestQueuePtr>::const_iterator p = queues.begin(); p != queues.end(); ++p) + { + (*p)->flushRequests(flushProxySet); + } - set<ConnectionPtr> flushSet; - - for(vector<RequestPtr>::const_iterator p = requests.begin(); p != requests.end(); ++p) + set<Ice::ConnectionPtr> flushConnectionSet; + for(set<Ice::ObjectPrx>::const_iterator q = flushProxySet.begin(); q != flushProxySet.end(); ++q) { - if((*p)->isBatch()) - { - try - { - flushSet.insert((*p)->getConnection()); - } - catch(const LocalException&) - { - // Ignore. - } - } - // - // Invoke returns true if the request expects a response. - // If that's the case we increment the dispatch count to - // ensure that the thread won't be destroyed before the - // response is received. + // As an optimization, we only flush the proxy batch requests if we didn't + // already flush the requests of a proxy which is using the same connection. // - if((*p)->invoke(self)) // Exceptions are caught within invoke(). + Ice::ConnectionPtr connection = (*q)->ice_getCachedConnection(); + if(!connection || flushConnectionSet.find(connection) == flushConnectionSet.end()) { - ++dispatchCount; - } - } + class FlushCB : public AMI_Object_ice_flushBatchRequests + { + public: - for(set<ConnectionPtr>::const_iterator q = flushSet.begin(); q != flushSet.end(); ++q) - { - try - { - (*q)->flushBatchRequests(); - } - catch(const LocalException&) - { - // Ignore. - } - } + virtual void ice_exception(const Ice::Exception&) { } // Ignore. + }; + (*q)->ice_flushBatchRequests_async(new FlushCB()); - // - // Send the responses and decrement the dispatch count. - // - for(vector<ResponsePtr>::const_iterator r = responses.begin(); r != responses.end(); ++r) - { - (*r)->invoke(); + if(connection) + { + flushConnectionSet.insert(connection); + } + } } - dispatchCount -= responses.size(); } } diff --git a/cpp/src/Glacier2/RequestQueue.h b/cpp/src/Glacier2/RequestQueue.h index 2599b24f7aa..1ecba68e343 100644 --- a/cpp/src/Glacier2/RequestQueue.h +++ b/cpp/src/Glacier2/RequestQueue.h @@ -20,8 +20,8 @@ namespace Glacier2 class Request; typedef IceUtil::Handle<Request> RequestPtr; -class RequestQueue; -typedef IceUtil::Handle<RequestQueue> RequestQueuePtr; +class RequestQueueThread; +typedef IceUtil::Handle<RequestQueueThread> RequestQueueThreadPtr; class Request : public IceUtil::Shared { @@ -30,10 +30,9 @@ public: Request(const Ice::ObjectPrx&, const std::pair<const Ice::Byte*, const Ice::Byte*>&, const Ice::Current&, bool, const Ice::Context&, const Ice::AMD_Array_Object_ice_invokePtr&); - bool invoke(const RequestQueuePtr&); + bool invoke(); bool override(const RequestPtr&) const; - bool isBatch() const; - Ice::ConnectionPtr getConnection() const; + const Ice::ObjectPrx& getProxy() const { return _proxy; } private: @@ -46,47 +45,42 @@ private: const Ice::AMD_Array_Object_ice_invokePtr _amdCB; }; -class Response : public IceUtil::Shared +class RequestQueue : public IceUtil::Mutex, public IceUtil::Shared { public: - Response(const Ice::AMD_Array_Object_ice_invokePtr&, bool, const std::pair<const Ice::Byte*, const Ice::Byte*>&); - Response(const Ice::AMD_Array_Object_ice_invokePtr&, const Ice::Exception&); + RequestQueue(const RequestQueueThreadPtr&); - void invoke(); - -private: + bool addRequest(const RequestPtr&); + void flushRequests(std::set<Ice::ObjectPrx>&); - const Ice::AMD_Array_Object_ice_invokePtr _amdCB; - const bool _ok; - const Ice::ByteSeq _outParams; - const std::auto_ptr<Ice::Exception> _exception; +private: + + const RequestQueueThreadPtr _requestQueueThread; + std::vector<RequestPtr> _requests; }; +typedef IceUtil::Handle<RequestQueue> RequestQueuePtr; -class Response; -typedef IceUtil::Handle<Response> ResponsePtr; -class RequestQueue : public IceUtil::Thread, public IceUtil::Monitor<IceUtil::Mutex> +class RequestQueueThread : public IceUtil::Thread, public IceUtil::Monitor<IceUtil::Mutex> { public: - RequestQueue(const IceUtil::Time&); - virtual ~RequestQueue(); - + RequestQueueThread(const IceUtil::Time&); + virtual ~RequestQueueThread(); + + void flushRequestQueue(const RequestQueuePtr&); void destroy(); - bool addRequest(const RequestPtr&); - void addResponse(const ResponsePtr&); virtual void run(); private: const IceUtil::Time _sleepTime; - std::vector<RequestPtr> _requests; - std::vector<ResponsePtr> _responses; bool _destroy; bool _sleep; IceUtil::Time _sleepDuration; + std::vector<RequestQueuePtr> _queues; }; } diff --git a/cpp/src/Glacier2/RouterI.cpp b/cpp/src/Glacier2/RouterI.cpp index ee6dde8edd4..07431ee0389 100644 --- a/cpp/src/Glacier2/RouterI.cpp +++ b/cpp/src/Glacier2/RouterI.cpp @@ -18,13 +18,11 @@ using namespace std; using namespace Ice; using namespace Glacier2; -Glacier2::RouterI::RouterI(const ObjectAdapterPtr& clientAdapter, const ObjectAdapterPtr& serverAdapter, - const ConnectionPtr& connection, const string& userId, const SessionPrx& session, - const Identity& controlId, const FilterManagerPtr& filters, +Glacier2::RouterI::RouterI(const InstancePtr& instance, const ConnectionPtr& connection, const string& userId, + const SessionPrx& session, const Identity& controlId, const FilterManagerPtr& filters, const Ice::Context& sslContext) : - _communicator(clientAdapter->getCommunicator()), - _clientBlobject(new ClientBlobject(_communicator, filters, sslContext)), - _serverAdapter(serverAdapter), + _instance(instance), + _clientBlobject(new ClientBlobject(_instance, filters, sslContext)), _connection(connection), _userId(userId), _session(session), @@ -36,13 +34,13 @@ Glacier2::RouterI::RouterI(const ObjectAdapterPtr& clientAdapter, const ObjectAd // If Glacier2 will be used with pre 3.2 clients, then the client proxy must be set. // Otherwise getClientProxy just needs to return a nil proxy. // - if(_communicator->getProperties()->getPropertyAsInt("Glacier2.ReturnClientProxy") > 0) + if(_instance->properties()->getPropertyAsInt("Glacier2.ReturnClientProxy") > 0) { const_cast<Ice::ObjectPrx&>(_clientProxy) = - clientAdapter->createProxy(_communicator->stringToIdentity("dummy")); + _instance->clientObjectAdapter()->createProxy(_instance->communicator()->stringToIdentity("dummy")); } - if(serverAdapter) + if(_instance->serverObjectAdapter()) { ObjectPrx& serverProxy = const_cast<ObjectPrx&>(_serverProxy); Identity ident; @@ -55,10 +53,10 @@ Glacier2::RouterI::RouterI(const ObjectAdapterPtr& clientAdapter, const ObjectAd const unsigned char c = static_cast<unsigned char>(buf[i]); // A value between 0-255 ident.category[i] = 33 + c % (127-33); // We use ASCII 33-126 (from ! to ~, w/o space). } - serverProxy = serverAdapter->createProxy(ident); + serverProxy = _instance->serverObjectAdapter()->createProxy(ident); ServerBlobjectPtr& serverBlobject = const_cast<ServerBlobjectPtr&>(_serverBlobject); - serverBlobject = new ServerBlobject(_communicator, _connection); + serverBlobject = new ServerBlobject(_instance, _connection); } } @@ -67,27 +65,20 @@ Glacier2::RouterI::~RouterI() } void -Glacier2::RouterI::destroy() +Glacier2::RouterI::destroy(const AMI_Session_destroyPtr& amiCB) { _connection->close(true); - _clientBlobject->destroy(); - - if(_serverBlobject) - { - _serverBlobject->destroy(); - } - if(_session) { - if(_serverAdapter) + if(_instance->serverObjectAdapter()) { try { // // Remove the session control object. // - _serverAdapter->remove(_controlId); + _instance->serverObjectAdapter()->remove(_controlId); } catch(const NotRegisteredException&) { @@ -100,17 +91,13 @@ Glacier2::RouterI::destroy() } } - // - // This can raise an exception, therefore it must be the last - // statement in this destroy() function. - // if(_sslContext.size() > 0) { - _session->destroy(_sslContext); + _session->destroy_async(amiCB, _sslContext); } else { - _session->destroy(); + _session->destroy_async(amiCB); } } } @@ -154,18 +141,18 @@ Glacier2::RouterI::getCategoryForClient(const Ice::Current&) const return 0; } -SessionPrx -Glacier2::RouterI::createSession(const std::string&, const std::string&, const Current&) +void +Glacier2::RouterI::createSession_async(const AMD_Router_createSessionPtr&, const std::string&, const std::string&, + const Current&) { assert(false); // Must not be called in this router implementation. - return 0; } -SessionPrx -Glacier2::RouterI::createSessionFromSecureConnection(const Current&) +void +Glacier2::RouterI::createSessionFromSecureConnection_async(const AMD_Router_createSessionFromSecureConnectionPtr&, + const Current&) { assert(false); // Must not be called in this router implementation. - return 0; } void diff --git a/cpp/src/Glacier2/RouterI.h b/cpp/src/Glacier2/RouterI.h index 64bccd5d50c..077161ee178 100644 --- a/cpp/src/Glacier2/RouterI.h +++ b/cpp/src/Glacier2/RouterI.h @@ -29,19 +29,21 @@ class RouterI : public Router, public IceUtil::Mutex { public: - RouterI(const Ice::ObjectAdapterPtr&, const Ice::ObjectAdapterPtr&, const Ice::ConnectionPtr&, const std::string&, - const SessionPrx&, const Ice::Identity&, const FilterManagerPtr&, const Ice::Context& sslContext); + RouterI(const InstancePtr&, const Ice::ConnectionPtr&, const std::string&, const SessionPrx&, const Ice::Identity&, + const FilterManagerPtr&, const Ice::Context&); virtual ~RouterI(); - void destroy(); + void destroy(const AMI_Session_destroyPtr&); - virtual Ice::ObjectPrx getClientProxy(const Ice::Current&) const; - virtual Ice::ObjectPrx getServerProxy(const Ice::Current&) const; + virtual Ice::ObjectPrx getClientProxy(const Ice::Current& = Ice::Current()) const; + virtual Ice::ObjectPrx getServerProxy(const Ice::Current& = Ice::Current()) const; virtual void addProxy(const Ice::ObjectPrx&, const Ice::Current&); virtual Ice::ObjectProxySeq addProxies(const Ice::ObjectProxySeq&, const Ice::Current&); virtual std::string getCategoryForClient(const Ice::Current&) const; - virtual SessionPrx createSession(const std::string&, const std::string&, const Ice::Current&); - virtual SessionPrx createSessionFromSecureConnection(const Ice::Current&); + virtual void createSession_async(const AMD_Router_createSessionPtr&, const std::string&, const std::string&, + const Ice::Current&); + virtual void createSessionFromSecureConnection_async(const AMD_Router_createSessionFromSecureConnectionPtr&, + const Ice::Current&); virtual void destroySession(const ::Ice::Current&); virtual Ice::Long getSessionTimeout(const ::Ice::Current&) const; @@ -56,12 +58,11 @@ public: private: - const Ice::CommunicatorPtr _communicator; + const InstancePtr _instance; const Ice::ObjectPrx _clientProxy; const Ice::ObjectPrx _serverProxy; const ClientBlobjectPtr _clientBlobject; const ServerBlobjectPtr _serverBlobject; - const Ice::ObjectAdapterPtr _serverAdapter; const Ice::ConnectionPtr _connection; const std::string _userId; const SessionPrx _session; diff --git a/cpp/src/Glacier2/ServerBlobject.cpp b/cpp/src/Glacier2/ServerBlobject.cpp index aafc1c8429f..0915655ebed 100644 --- a/cpp/src/Glacier2/ServerBlobject.cpp +++ b/cpp/src/Glacier2/ServerBlobject.cpp @@ -13,8 +13,8 @@ using namespace std; using namespace Ice; using namespace Glacier2; -Glacier2::ServerBlobject::ServerBlobject(const CommunicatorPtr& communicator, const ConnectionPtr& connection) : - Glacier2::Blobject(communicator, true, Ice::Context()), +Glacier2::ServerBlobject::ServerBlobject(const InstancePtr& instance, const ConnectionPtr& connection) : + Glacier2::Blobject(instance, true, Ice::Context()), _connection(connection) { } diff --git a/cpp/src/Glacier2/ServerBlobject.h b/cpp/src/Glacier2/ServerBlobject.h index 200a951cc59..4dda0036748 100644 --- a/cpp/src/Glacier2/ServerBlobject.h +++ b/cpp/src/Glacier2/ServerBlobject.h @@ -22,7 +22,7 @@ class ServerBlobject : public Glacier2::Blobject { public: - ServerBlobject(const Ice::CommunicatorPtr&, const Ice::ConnectionPtr&); + ServerBlobject(const InstancePtr&, const Ice::ConnectionPtr&); virtual ~ServerBlobject(); virtual void ice_invoke_async(const Ice::AMD_Array_Object_ice_invokePtr&, diff --git a/cpp/src/Glacier2/SessionRouterI.cpp b/cpp/src/Glacier2/SessionRouterI.cpp index 95945659800..9e05665ce3c 100644 --- a/cpp/src/Glacier2/SessionRouterI.cpp +++ b/cpp/src/Glacier2/SessionRouterI.cpp @@ -28,12 +28,11 @@ class SessionControlI : public SessionControl { public: - SessionControlI(const SessionRouterIPtr& sessionRouter, const ConnectionPtr& connection, - const FilterManagerPtr& filterManager, IceUtil::Time timeout) : + SessionControlI(const SessionRouterIPtr& sessionRouter, const ConnectionPtr& connection, + const FilterManagerPtr& filterManager) : _sessionRouter(sessionRouter), _connection(connection), - _filters(filterManager), - _timeout(static_cast<int>(timeout.toSeconds())) + _filters(filterManager) { } @@ -56,9 +55,9 @@ public: } virtual int - getSessionTimeout(const Current&) + getSessionTimeout(const Current& current) { - return _timeout; + return static_cast<int>(_sessionRouter->getSessionTimeout(current)); } virtual void @@ -73,7 +72,6 @@ private: const SessionRouterIPtr _sessionRouter; const ConnectionPtr _connection; const FilterManagerPtr _filters; - const int _timeout; }; class ClientLocator : public ServantLocator @@ -136,123 +134,494 @@ private: const SessionRouterIPtr _sessionRouter; }; -class UserPasswordAuthorizer : public Authorizer +class UserPasswordCreateSession : public CreateSession { public: - UserPasswordAuthorizer(const PermissionsVerifierPrx& verifier, const string& user, const string& password) : - _verifier(verifier), _user(user), _password(password) + UserPasswordCreateSession(const AMD_Router_createSessionPtr& amdCB, const string& user, const string& password, + const Ice::Current& current, const SessionRouterIPtr& sessionRouter) : + CreateSession(sessionRouter, user, current, Ice::Context()), + _amdCB(amdCB), + _password(password) { } - virtual bool - authorize(string& reason, const Ice::Context& ctx) + virtual void + authorize() { - if(_verifier) + assert(_sessionRouter->_verifier); + + class CheckPermissionsCB : public AMI_PermissionsVerifier_checkPermissions { - return _verifier->checkPermissions(_user, _password, reason, ctx); + public: + + CheckPermissionsCB(const UserPasswordCreateSessionPtr& session, bool hasSessionManager) : + _session(session), + _hasSessionManager(hasSessionManager) + { + } + + virtual void + ice_response(bool ok, const string& reason) + { + if(ok) + { + _session->authorized(_hasSessionManager); + } + else + { + _session->exception(PermissionDeniedException(reason.empty() ? "permission denied" : reason)); + } + } + + virtual void + ice_exception(const Ice::Exception& ex) + { + if(dynamic_cast<const CollocationOptimizationException*>(&ex)) + { + _session->authorizeCollocated(); + } + else + { + _session->unexpectedAuthorizeException(ex); + } + } + + private: + + const UserPasswordCreateSessionPtr _session; + const bool _hasSessionManager; + }; + + AMI_PermissionsVerifier_checkPermissionsPtr cb = new CheckPermissionsCB(this, _sessionRouter->_sessionManager); + _sessionRouter->_verifier->checkPermissions_async(cb, _user, _password, _current.ctx); + } + + virtual void + authorizeCollocated() + { + try + { + string reason; + if(_sessionRouter->_verifier->checkPermissions(_user, _password, reason, _current.ctx)) + { + authorized(_sessionRouter->_sessionManager); + } + else + { + exception(PermissionDeniedException(reason.empty() ? "permission denied" : reason)); + } + } + catch(const Ice::Exception& ex) + { + unexpectedAuthorizeException(ex); } - reason = "No PermissionsVerifier is available"; - return false; + } + + virtual FilterManagerPtr + createFilterManager() + { + return FilterManager::create(_instance, _user, true); + } + + virtual void + createSession() + { + class CreateCB : public AMI_SessionManager_create + { + public: + + CreateCB(const CreateSessionPtr& session) : _session(session) + { + } + + virtual void + ice_response(const SessionPrx& session) + { + _session->sessionCreated(session); + } + + virtual void + ice_exception(const Ice::Exception& ex) + { + try + { + ex.ice_throw(); + } + catch(const CannotCreateSessionException& ex) + { + _session->exception(ex); + } + catch(const Ice::Exception& ex) + { + _session->unexpectedCreateSessionException(ex); + } + } + + private: + + const CreateSessionPtr _session; + }; + _sessionRouter->_sessionManager->create_async(new CreateCB(this), _user, _control, _current.ctx); + } + + virtual void + finished(const SessionPrx& session) + { + _amdCB->ice_response(session); + } + + virtual void + finished(const Ice::Exception& ex) + { + _amdCB->ice_exception(ex); } private: - const PermissionsVerifierPrx _verifier; - const string _user; + const AMD_Router_createSessionPtr _amdCB; const string _password; }; -class SSLPasswordAuthorizer : public Authorizer +class SSLCreateSession : public CreateSession { public: - SSLPasswordAuthorizer(const SSLPermissionsVerifierPrx& verifier, const SSLInfo& info) : - _verifier(verifier), _info(info) + SSLCreateSession(const AMD_Router_createSessionFromSecureConnectionPtr& amdCB, const string& user, + const SSLInfo& sslInfo, const Ice::Current& current, const SessionRouterIPtr& sessionRouter, + const Ice::Context& sslContext) : + CreateSession(sessionRouter, user, current, sslContext), + _amdCB(amdCB), + _sslInfo(sslInfo) + { + } + + virtual void + authorize() { + assert(_sessionRouter->_verifier); + + class AuthorizeCB : public AMI_SSLPermissionsVerifier_authorize + { + public: + + AuthorizeCB(const SSLCreateSessionPtr& session, bool hasSessionManager) : + _session(session), + _hasSessionManager(hasSessionManager) + { + } + + virtual void + ice_response(bool ok, const string& reason) + { + if(ok) + { + _session->authorized(_hasSessionManager); + } + else + { + _session->exception(PermissionDeniedException(reason.empty() ? "permission denied" : reason)); + } + } + + virtual void + ice_exception(const Ice::Exception& ex) + { + if(dynamic_cast<const CollocationOptimizationException*>(&ex)) + { + _session->authorizeCollocated(); + } + else + { + _session->unexpectedAuthorizeException(ex); + } + } + + private: + + const SSLCreateSessionPtr _session; + const bool _hasSessionManager; + }; + + AMI_SSLPermissionsVerifier_authorizePtr cb = new AuthorizeCB(this, _sessionRouter->_sessionManager); + _sessionRouter->_sslVerifier->authorize_async(cb, _sslInfo, _current.ctx); } - virtual bool - authorize(string& reason, const Ice::Context& ctx) + virtual void + authorizeCollocated() { - if(_verifier) + try + { + string reason; + if(_sessionRouter->_sslVerifier->authorize(_sslInfo, reason, _current.ctx)) + { + authorized(_sessionRouter->_sessionManager); + } + else + { + exception(PermissionDeniedException(reason.empty() ? "permission denied" : reason)); + } + } + catch(const Ice::Exception& ex) { - return _verifier->authorize(_info, reason, ctx); + unexpectedAuthorizeException(ex); } + } - reason = "No SSLPermissionsVerifier is available"; - return false; + virtual FilterManagerPtr + createFilterManager() + { + return FilterManager::create(_instance, _user, false); + } + + virtual void + createSession() + { + class CreateCB : public AMI_SSLSessionManager_create + { + public: + + CreateCB(const CreateSessionPtr& session) : _session(session) + { + } + + virtual void + ice_response(const SessionPrx& session) + { + _session->sessionCreated(session); + } + + virtual void + ice_exception(const Ice::Exception& ex) + { + try + { + ex.ice_throw(); + } + catch(const CannotCreateSessionException& ex) + { + _session->exception(ex); + } + catch(const Ice::Exception& ex) + { + _session->unexpectedCreateSessionException(ex); + } + } + + private: + + const CreateSessionPtr _session; + }; + _sessionRouter->_sslSessionManager->create_async(new CreateCB(this), _sslInfo, _control, _current.ctx); + } + + virtual void + finished(const SessionPrx& session) + { + _amdCB->ice_response(session); + } + + virtual void + finished(const Ice::Exception& ex) + { + _amdCB->ice_exception(ex); } private: - const SSLPermissionsVerifierPrx _verifier; - const SSLInfo _info; + const AMD_Router_createSessionFromSecureConnectionPtr _amdCB; + const SSLInfo _sslInfo; }; -class UserSessionFactory : public SessionFactory +class DestroyCB : public AMI_Session_destroy { public: - UserSessionFactory(const SessionManagerPrx& manager, const string& user) : - _manager(manager), _user(user) + DestroyCB(int traceLevel, const LoggerPtr& logger) : + _logger(traceLevel > 0 ? logger : LoggerPtr()) + { + } + + virtual void + ice_response() { } - virtual SessionPrx - create(const SessionControlPrx& control, const Ice::Context& ctx) + virtual void + ice_exception(const Ice::Exception& ex) { - return _manager->create(_user, control, ctx); + if(_logger) + { + Trace out(_logger, "Glacier2"); + out << "exception while destroying session\n" << ex; + } } private: - const SessionManagerPrx _manager; - const string _user; + LoggerPtr _logger; }; -class SSLSessionFactory : public SessionFactory +} + +using namespace Glacier2; + +Glacier2::CreateSession::CreateSession(const SessionRouterIPtr& sessionRouter, const string& user, + const Ice::Current& current, const Ice::Context& sslContext) : + _instance(sessionRouter->_instance), + _sessionRouter(sessionRouter), + _user(user), + _current(current), + _sslContext(sslContext) { -public: +} + +void +Glacier2::CreateSession::create() +{ + try + { + if(_sessionRouter->startCreateSession(this, _current.con)) + { + authorize(); + } + } + catch(const Ice::Exception& ex) + { + finished(ex); + } +} + +void +Glacier2::CreateSession::addPendingCallback(const CreateSessionPtr& callback) +{ + _pendingCallbacks.push_back(callback); +} - SSLSessionFactory(const SSLSessionManagerPrx& manager, const SSLInfo& info) : - _manager(manager), _info(info) +void +Glacier2::CreateSession::authorized(bool createSession) +{ + // + // Create the filter manager now as it's required for the session control object. + // + _filterManager = createFilterManager(); + + // + // If we have a session manager configured, we create a client-visible session object, + // otherwise, we return a null session proxy. + // + if(createSession) { + if(_instance->serverObjectAdapter()) + { + Ice::ObjectPtr obj = new SessionControlI(_sessionRouter, _current.con, _filterManager); + _control = SessionControlPrx::uncheckedCast(_instance->serverObjectAdapter()->addWithUUID(obj)); + } + this->createSession(); } + else + { + sessionCreated(0); + } +} - virtual SessionPrx - create(const SessionControlPrx& control, const Ice::Context& ctx) +void +Glacier2::CreateSession::unexpectedAuthorizeException(const Ice::Exception& ex) +{ + if(_sessionRouter->sessionTraceLevel() >= 1) { - return _manager->create(_info, control, ctx); + Warning out(_instance->logger()); + out << "exception while verifying permissions:\n" << ex; } + exception(PermissionDeniedException("internal server error")); +} -private: +void +Glacier2::CreateSession::sessionCreated(const SessionPrx& session) +{ + // + // Create the session router object. + // + RouterIPtr router; + try + { + router = new RouterI(_instance, _current.con, _user, session, + _control ? _control->ice_getIdentity() : Ice::Identity(), _filterManager, _sslContext); + } + catch(const Ice::Exception& ex) + { + session->destroy_async(new DestroyCB(0, 0)); + unexpectedCreateSessionException(ex); + return; + } - const SSLSessionManagerPrx _manager; - const SSLInfo _info; -}; + // + // Notify the router that the creation is finished. + // + try + { + _sessionRouter->finishCreateSession(_current.con, router); + finished(session); + } + catch(const Ice::Exception& ex) + { + finished(ex); + } + for(vector<CreateSessionPtr>::const_iterator p = _pendingCallbacks.begin(); p != _pendingCallbacks.end(); ++p) + { + (*p)->create(); + } } -using namespace Glacier2; +void +Glacier2::CreateSession::unexpectedCreateSessionException(const Ice::Exception& ex) +{ + if(_sessionRouter->sessionTraceLevel() >= 1) + { + Trace out(_instance->logger(), "Glacier2"); + out << "exception while creating session with session manager:\n" << ex; + } + exception(CannotCreateSessionException("internal server error")); +} + +void +Glacier2::CreateSession::exception(const Ice::Exception& ex) +{ + _sessionRouter->finishCreateSession(_current.con, 0); + + finished(ex); + + if(_control) + { + try + { + _instance->serverObjectAdapter()->remove(_control->ice_getIdentity()); + } + catch(const Exception&) + { + } + } -Glacier2::SessionRouterI::SessionRouterI(const ObjectAdapterPtr& clientAdapter, - const ObjectAdapterPtr& serverAdapter, + for(vector<CreateSessionPtr>::const_iterator p = _pendingCallbacks.begin(); p != _pendingCallbacks.end(); ++p) + { + (*p)->create(); + } +} + +Glacier2::SessionRouterI::SessionRouterI(const InstancePtr& instance, const PermissionsVerifierPrx& verifier, const SessionManagerPrx& sessionManager, const SSLPermissionsVerifierPrx& sslVerifier, const SSLSessionManagerPrx& sslSessionManager) : - _properties(clientAdapter->getCommunicator()->getProperties()), - _logger(clientAdapter->getCommunicator()->getLogger()), - _sessionTraceLevel(_properties->getPropertyAsInt("Glacier2.Trace.Session")), - _rejectTraceLevel(_properties->getPropertyAsInt("Glacier2.Client.Trace.Reject")), - _clientAdapter(clientAdapter), - _serverAdapter(serverAdapter), + _instance(instance), + _sessionTraceLevel(_instance->properties()->getPropertyAsInt("Glacier2.Trace.Session")), + _rejectTraceLevel(_instance->properties()->getPropertyAsInt("Glacier2.Client.Trace.Reject")), _verifier(verifier), _sessionManager(sessionManager), _sslVerifier(sslVerifier), _sslSessionManager(sslSessionManager), - _sessionTimeout(IceUtil::Time::seconds(_properties->getPropertyAsInt("Glacier2.SessionTimeout"))), + _sessionTimeout(IceUtil::Time::seconds(_instance->properties()->getPropertyAsInt("Glacier2.SessionTimeout"))), _sessionThread(_sessionTimeout > IceUtil::Time() ? new SessionThread(this, _sessionTimeout) : 0), _routersByConnectionHint(_routersByConnection.end()), _routersByCategoryHint(_routersByCategory.end()), @@ -263,24 +632,24 @@ Glacier2::SessionRouterI::SessionRouterI(const ObjectAdapterPtr& clientAdapter, // Glacier2 router Ice object. // Identity routerId; - routerId.category = _properties->getPropertyWithDefault("Glacier2.InstanceName", "Glacier2"); + routerId.category = _instance->properties()->getPropertyWithDefault("Glacier2.InstanceName", "Glacier2"); routerId.name = "router"; - _clientAdapter->add(this, routerId); + _instance->clientObjectAdapter()->add(this, routerId); // // All other calls on the client object adapter are dispatched to // a router servant based on connection information. // - _clientAdapter->addServantLocator(new ClientLocator(this), ""); + _instance->clientObjectAdapter()->addServantLocator(new ClientLocator(this), ""); // // If there is a server object adapter, all calls on this adapter // are dispatched to a router servant based on the category field // of the identity. // - if(_serverAdapter) + if(_instance->serverObjectAdapter()) { - _serverAdapter->addServantLocator(new ServerLocator(this), ""); + _instance->serverObjectAdapter()->addServantLocator(new ServerLocator(this), ""); } if(_sessionThread) @@ -329,20 +698,7 @@ Glacier2::SessionRouterI::destroy() // for(map<ConnectionPtr, RouterIPtr>::iterator p = routers.begin(); p != routers.end(); ++p) { - RouterIPtr router = p->second; - - try - { - router->destroy(); - } - catch(const Exception& ex) - { - if(_sessionTraceLevel >= 1) - { - Trace out(_logger, "Glacier2"); - out << "exception while destroying session\n" << ex; - } - } + p->second->destroy(new DestroyCB(_sessionTraceLevel, _instance->logger())); } if(sessionThread) @@ -388,26 +744,28 @@ Glacier2::SessionRouterI::getCategoryForClient(const Ice::Current& current) cons return getRouter(current.con, current.id)->getServerProxy(current)->ice_getIdentity().category; } -SessionPrx -Glacier2::SessionRouterI::createSession(const std::string& userId, const std::string& password, const Current& current) +void +Glacier2::SessionRouterI::createSession_async(const AMD_Router_createSessionPtr& amdCB, const std::string& userId, + const std::string& password, const Current& current) { - SessionFactoryPtr factory; - if(_sessionManager) + if(!_verifier) { - factory = new UserSessionFactory(_sessionManager, userId); + amdCB->ice_exception(PermissionDeniedException("no configured permissions verifier")); + return; } - return createSessionInternal(userId, true, new UserPasswordAuthorizer(_verifier, userId, password), factory, - Ice::Context(), current); + + CreateSessionPtr session = new UserPasswordCreateSession(amdCB, userId, password, current, this); + session->create(); } -SessionPrx -Glacier2::SessionRouterI::createSessionFromSecureConnection(const Current& current) +void +Glacier2::SessionRouterI::createSessionFromSecureConnection_async( + const AMD_Router_createSessionFromSecureConnectionPtr& amdCB, const Current& current) { if(!_sslVerifier) { - PermissionDeniedException exc; - exc.reason = "no configured ssl permissions verifier"; - throw exc; + amdCB->ice_exception(PermissionDeniedException("no configured ssl permissions verifier")); + return; } string userDN; @@ -437,7 +795,7 @@ Glacier2::SessionRouterI::createSessionFromSecureConnection(const Current& curre userDN = info.certs[0]->getSubjectDN(); } - if(_properties->getPropertyAsInt("Glacier2.AddSSLContext") > 0) + if(_instance->properties()->getPropertyAsInt("Glacier2.AddSSLContext") > 0) { sslCtx["SSL.Active"] = "1"; sslCtx["SSL.Cipher"] = sslinfo.cipher; @@ -457,24 +815,17 @@ Glacier2::SessionRouterI::createSessionFromSecureConnection(const Current& curre } catch(const IceSSL::ConnectionInvalidException&) { - PermissionDeniedException exc; - exc.reason = "not ssl connection"; - throw exc; + amdCB->ice_exception(PermissionDeniedException("not ssl connection")); + return; } catch(const IceSSL::CertificateEncodingException&) { - PermissionDeniedException exc; - exc.reason = "certificate encoding exception"; - throw exc; + amdCB->ice_exception(PermissionDeniedException("certificate encoding exception")); + return; } - SessionFactoryPtr factory; - if(_sslSessionManager) - { - factory = new SSLSessionFactory(_sslSessionManager, sslinfo); - } - return createSessionInternal(userDN, false, new SSLPasswordAuthorizer(_sslVerifier, sslinfo), factory, sslCtx, - current); + CreateSessionPtr session = new SSLCreateSession(amdCB, userDN, sslinfo, current, this, sslCtx); + session->create(); } void @@ -519,7 +870,7 @@ Glacier2::SessionRouterI::destroySession(const ConnectionPtr& connection) _routersByConnection.erase(p++); _routersByConnectionHint = p; - if(_serverAdapter) + if(_instance->serverObjectAdapter()) { string category = router->getServerProxy(Current())->ice_getIdentity().category; assert(!category.empty()); @@ -532,25 +883,13 @@ Glacier2::SessionRouterI::destroySession(const ConnectionPtr& connection) // We destroy the router outside the thread synchronization, to // avoid deadlocks. // - try + if(_sessionTraceLevel >= 1) { - if(_sessionTraceLevel >= 1) - { - Trace out(_logger, "Glacier2"); - out << "destroying session\n"; - out << router->toString(); - } - - router->destroy(); - } - catch(const Exception& ex) - { - if(_sessionTraceLevel >= 1) - { - Trace out(_logger, "Glacier2"); - out << "exception while destroying session\n" << ex; - } + Trace out(_instance->logger(), "Glacier2"); + out << "destroying session\n" << router->toString(); } + + router->destroy(new DestroyCB(_sessionTraceLevel, _instance->logger())); } Ice::Long @@ -588,9 +927,9 @@ Glacier2::SessionRouterI::getRouter(const ConnectionPtr& connection, const Ice:: { if(_rejectTraceLevel >= 1) { - Trace out(_logger, "Glacier2"); + Trace out(_instance->logger(), "Glacier2"); out << "rejecting request. no session is associated with the connection.\n"; - out << "identity: " << _clientAdapter->getCommunicator()->identityToString(id); + out << "identity: " << _instance->communicator()->identityToString(id); } connection->close(true); throw ObjectNotExistException(__FILE__, __LINE__); @@ -655,7 +994,7 @@ Glacier2::SessionRouterI::expireSessions() _routersByConnection.erase(p++); _routersByConnectionHint = p; - if(_serverAdapter) + if(_instance->serverObjectAdapter()) { string category = router->getServerProxy(Current())->ice_getIdentity().category; assert(!category.empty()); @@ -676,319 +1015,114 @@ Glacier2::SessionRouterI::expireSessions() // for(vector<RouterIPtr>::iterator p = routers.begin(); p != routers.end(); ++p) { - RouterIPtr router = *p; - - try - { - if(_sessionTraceLevel >= 1) - { - Trace out(_logger, "Glacier2"); - out << "expiring session\n"; - out << router->toString(); - } - - router->destroy(); - } - catch(const Exception& ex) + if(_sessionTraceLevel >= 1) { - if(_sessionTraceLevel >= 1) - { - Trace out(_logger, "Glacier2"); - out << "exception while expiring session\n" << ex; - } + Trace out(_instance->logger(), "Glacier2"); + out << "expiring session\n" << (*p)->toString(); } + + (*p)->destroy(new DestroyCB(_sessionTraceLevel, _instance->logger())); } } -SessionPrx -Glacier2::SessionRouterI::createSessionInternal(const string& userId, bool allowAddUserMode, - const AuthorizerPtr& authorizer, const SessionFactoryPtr& factory, - const Ice::Context& sslContext, const Current& current) +bool +Glacier2::SessionRouterI::startCreateSession(const CreateSessionPtr& cb, const ConnectionPtr& connection) { - { - IceUtil::Monitor<IceUtil::Mutex>::Lock lock(*this); - - if(_destroy) - { - current.con->close(true); - throw ObjectNotExistException(__FILE__, __LINE__); - } - - // - // Check whether a session already exists for the connection. - // - { - map<ConnectionPtr, RouterIPtr>::iterator p; - if(_routersByConnectionHint != _routersByConnection.end() && - _routersByConnectionHint->first == current.con) - { - p = _routersByConnectionHint; - } - else - { - p = _routersByConnection.find(current.con); - } - - if(p != _routersByConnection.end()) - { - CannotCreateSessionException exc; - exc.reason = "session exists"; - throw exc; - } - } + IceUtil::Monitor<IceUtil::Mutex>::Lock lock(*this); - // - // If some other thread is currently trying to create a - // session, we wait until this thread is finished. - // - bool searchAgain = false; - while(_pending.find(current.con) != _pending.end()) - { - wait(); - - if(_destroy) - { - current.con->close(true); - throw ObjectNotExistException(__FILE__, __LINE__); - } - - searchAgain = true; - } - - // - // Check for existing sessions again if we waited above, as - // new sessions have been added in the meantime. - // - if(searchAgain) - { - map<ConnectionPtr, RouterIPtr>::iterator p; - if(_routersByConnectionHint != _routersByConnection.end() && - _routersByConnectionHint->first == current.con) - { - p = _routersByConnectionHint; - } - else - { - p = _routersByConnection.find(current.con); - } - - if(p != _routersByConnection.end()) - { - CannotCreateSessionException exc; - exc.reason = "session exists"; - throw exc; - } - } - - // - // No session exists yet, so we will try to create one. To - // avoid that other threads try to create sessions for the - // same connection, we add our endpoints to _pending. - // - _pending.insert(current.con); + if(_destroy) + { + connection->close(true); + throw ObjectNotExistException(__FILE__, __LINE__); } - try + // + // Check whether a session already exists for the connection. + // { - // - // Authorize. - // - string reason; - bool ok; - - try + map<ConnectionPtr, RouterIPtr>::iterator p; + if(_routersByConnectionHint != _routersByConnection.end() && + _routersByConnectionHint->first == connection) { - ok = authorizer->authorize(reason, current.ctx); + p = _routersByConnectionHint; } - catch(const Exception& ex) + else { - if(_sessionTraceLevel >= 1) - { - Warning out(_logger); - out << "exception while verifying password:\n" << ex; - } - - PermissionDeniedException exc; - exc.reason = "internal server error"; - throw exc; + p = _routersByConnection.find(connection); } - - if(!ok) + + if(p != _routersByConnection.end()) { - PermissionDeniedException exc; - if(reason.empty()) - { - exc.reason = "permission denied"; - } - else - { - exc.reason = reason; - } + CannotCreateSessionException exc; + exc.reason = "session exists"; throw exc; } } - catch(const Exception& ex) - { - IceUtil::Monitor<IceUtil::Mutex>::Lock lock(*this); + map<ConnectionPtr, CreateSessionPtr>::iterator p = _pending.find(connection); + if(p != _pending.end()) + { // - // Signal other threads that we are done with trying to - // establish a session for our connection; + // If some other thread is currently trying to create a + // session, we wait until this thread is finished. // - _pending.erase(current.con); - notify(); - - ex.ice_throw(); + p->second->addPendingCallback(cb); + return false; } - - - SessionPrx session; - Identity controlId; - RouterIPtr router; - - try + else { // - // The client blobject requires direct access to the full filter - // servant, but proliferating the implementation of the servant - // throughout the router code is undesirable. To avoid lots of - // physical interdependencies, we create the filters and - // clientblobject together and pass the clientblobject to the - // router. We create the clientblobject here since it is - // responsible for creating the filters and we want them to be - // accessible during session creation. + // No session exists yet, so we will try to create one. To + // avoid that other threads try to create sessions for the + // same connection, we add our endpoints to _pending. // - FilterManagerPtr filterManager = FilterManager::create(_clientAdapter->getCommunicator(), _serverAdapter, - userId, allowAddUserMode); + _pending.insert(make_pair(connection, cb)); + return true; + } +} - // - // If we have a session manager configured, we create a - // client-visible session object. - // - if(factory) - { - SessionControlPrx control; - if(_serverAdapter) - { - control = SessionControlPrx::uncheckedCast( - _serverAdapter->addWithUUID( - new SessionControlI(this, current.con, filterManager, _sessionTimeout))); - controlId = control->ice_getIdentity(); - } - session = factory->create(control, current.ctx); - } +void +Glacier2::SessionRouterI::finishCreateSession(const ConnectionPtr& connection, const RouterIPtr& router) +{ + IceUtil::Monitor<IceUtil::Mutex>::Lock lock(*this); - // - // Add a new per-client router. - // - router = new RouterI(_clientAdapter, _serverAdapter, current.con, userId, - session, controlId, filterManager, sslContext); - } - catch(const Exception& ex) + // + // Signal other threads that we are done with trying to + // establish a session for our connection; + // + _pending.erase(connection); + notify(); + + if(!router) { - IceUtil::Monitor<IceUtil::Mutex>::Lock lock(*this); - - // - // Signal other threads that we are done with trying to - // establish a session for our connection; - // - _pending.erase(current.con); - notify(); - - assert(!router); - - if(session) - { - if(_serverAdapter) - { - try - { - _serverAdapter->remove(controlId); - } - catch(const Exception&) - { - // Ignore all exceptions here. - } - } - try - { - session->destroy(); - } - catch(const Exception&) - { - // Ignore all exceptions here. - } - } - - try - { - ex.ice_throw(); - } - catch(const Glacier2::CannotCreateSessionException&) - { - throw; - } - catch(const Exception&) - { - if(_sessionTraceLevel >= 1) - { - Trace out(_logger, "Glacier2"); - out << "exception while creating session with session manager:\n" << ex; - } - - CannotCreateSessionException exc; - exc.reason = "internal server error"; - throw exc; - } + return; } + if(_destroy) { - IceUtil::Monitor<IceUtil::Mutex>::Lock lock(*this); - - // - // Signal other threads that we are done with trying to - // establish a session for our connection; - // - _pending.erase(current.con); - notify(); - - if(_destroy) - { - try - { - router->destroy(); - } - catch(const Exception&) - { - // Ignore all exceptions here. - } - - current.con->close(true); - throw ObjectNotExistException(__FILE__, __LINE__); - } - - _routersByConnectionHint = _routersByConnection.insert( - _routersByConnectionHint, pair<const ConnectionPtr, RouterIPtr>(current.con, router)); - - if(_serverAdapter) - { - string category = router->getServerProxy(current)->ice_getIdentity().category; - assert(!category.empty()); - pair<map<string, RouterIPtr>::iterator, bool> rc = - _routersByCategory.insert(pair<const string, RouterIPtr>(category, router)); - assert(rc.second); - _routersByCategoryHint = rc.first; - } - - if(_sessionTraceLevel >= 1) - { - Trace out(_logger, "Glacier2"); - out << "created session\n"; - out << router->toString(); - } + router->destroy(new DestroyCB(0, 0)); + connection->close(true); + throw ObjectNotExistException(__FILE__, __LINE__); + } + + _routersByConnectionHint = _routersByConnection.insert( + _routersByConnectionHint, pair<const ConnectionPtr, RouterIPtr>(connection, router)); + + if(_instance->serverObjectAdapter()) + { + string category = router->getServerProxy()->ice_getIdentity().category; + assert(!category.empty()); + pair<map<string, RouterIPtr>::iterator, bool> rc = + _routersByCategory.insert(pair<const string, RouterIPtr>(category, router)); + assert(rc.second); + _routersByCategoryHint = rc.first; + } + + if(_sessionTraceLevel >= 1) + { + Trace out(_instance->logger(), "Glacier2"); + out << "created session\n" << router->toString(); } - - return session; } Glacier2::SessionRouterI::SessionThread::SessionThread(const SessionRouterIPtr& sessionRouter, diff --git a/cpp/src/Glacier2/SessionRouterI.h b/cpp/src/Glacier2/SessionRouterI.h index 9be3f25e2b0..6ab526ffbd0 100644 --- a/cpp/src/Glacier2/SessionRouterI.h +++ b/cpp/src/Glacier2/SessionRouterI.h @@ -15,6 +15,7 @@ #include <Ice/Ice.h> #include <Glacier2/PermissionsVerifierF.h> #include <Glacier2/Router.h> +#include <Glacier2/Instance.h> #include <set> #include <IceUtil/DisableWarnings.h> @@ -27,28 +28,58 @@ typedef IceUtil::Handle<RouterI> RouterIPtr; class SessionRouterI; typedef IceUtil::Handle<SessionRouterI> SessionRouterIPtr; -class Authorizer : public IceUtil::Shared +class FilterManager; +typedef IceUtil::Handle<FilterManager> FilterManagerPtr; + +class CreateSession; +typedef IceUtil::Handle<CreateSession> CreateSessionPtr; + +class CreateSession : public IceUtil::Shared { public: - virtual bool authorize(std::string&, const Ice::Context&) = 0; -}; -typedef IceUtil::Handle<Authorizer> AuthorizerPtr; + CreateSession(const SessionRouterIPtr&, const std::string&, const Ice::Current&, const Ice::Context&); -class SessionFactory : public IceUtil::Shared -{ -public: + void create(); + void addPendingCallback(const CreateSessionPtr&); + + void authorized(bool); + void unexpectedAuthorizeException(const Ice::Exception&); + + void sessionCreated(const SessionPrx&); + void unexpectedCreateSessionException(const Ice::Exception&); - virtual SessionPrx create(const SessionControlPrx&, const Ice::Context&) = 0; + void exception(const Ice::Exception&); + + virtual void authorize() = 0; + virtual void createSession() = 0; + virtual FilterManagerPtr createFilterManager() = 0; + virtual void finished(const SessionPrx&) = 0; + virtual void finished(const Ice::Exception&) = 0; + +protected: + + const InstancePtr _instance; + const SessionRouterIPtr _sessionRouter; + const std::string _user; + const Ice::Current _current; + Ice::Context _sslContext; + std::vector<CreateSessionPtr> _pendingCallbacks; + SessionControlPrx _control; + FilterManagerPtr _filterManager; }; -typedef IceUtil::Handle<SessionFactory> SessionFactoryPtr; + +class UserPasswordCreateSession; +typedef IceUtil::Handle<UserPasswordCreateSession> UserPasswordCreateSessionPtr; + +class SSLCreateSession; +typedef IceUtil::Handle<SSLCreateSession> SSLCreateSessionPtr; class SessionRouterI : public Router, public IceUtil::Monitor<IceUtil::Mutex> { public: - SessionRouterI(const Ice::ObjectAdapterPtr&, const Ice::ObjectAdapterPtr&, - const PermissionsVerifierPrx&, const SessionManagerPrx&, + SessionRouterI(const InstancePtr&, const PermissionsVerifierPrx&, const SessionManagerPrx&, const SSLPermissionsVerifierPrx&, const SSLSessionManagerPrx&); virtual ~SessionRouterI(); void destroy(); @@ -58,8 +89,10 @@ public: virtual void addProxy(const Ice::ObjectPrx&, const Ice::Current&); virtual Ice::ObjectProxySeq addProxies(const Ice::ObjectProxySeq&, const Ice::Current&); virtual std::string getCategoryForClient(const Ice::Current&) const; - virtual SessionPrx createSession(const std::string&, const std::string&, const Ice::Current&); - virtual SessionPrx createSessionFromSecureConnection(const Ice::Current&); + virtual void createSession_async(const AMD_Router_createSessionPtr&, const std::string&, const std::string&, + const Ice::Current&); + virtual void createSessionFromSecureConnection_async(const AMD_Router_createSessionFromSecureConnectionPtr&, + const Ice::Current&); virtual void destroySession(const ::Ice::Current&); virtual Ice::Long getSessionTimeout(const ::Ice::Current&) const; @@ -70,17 +103,19 @@ public: void destroySession(const ::Ice::ConnectionPtr&); + int sessionTraceLevel() const { return _sessionTraceLevel; } + private: - SessionPrx createSessionInternal(const std::string&, bool, const AuthorizerPtr&, const SessionFactoryPtr&, - const Ice::Context&, const Ice::Current&); + bool startCreateSession(const CreateSessionPtr&, const Ice::ConnectionPtr&); + void finishCreateSession(const Ice::ConnectionPtr&, const RouterIPtr&); + friend class Glacier2::CreateSession; + friend class Glacier2::UserPasswordCreateSession; + friend class Glacier2::SSLCreateSession; - const Ice::PropertiesPtr _properties; - const Ice::LoggerPtr _logger; + const InstancePtr _instance; const int _sessionTraceLevel; const int _rejectTraceLevel; - const Ice::ObjectAdapterPtr _clientAdapter; - const Ice::ObjectAdapterPtr _serverAdapter; const PermissionsVerifierPrx _verifier; const SessionManagerPrx _sessionManager; const SSLPermissionsVerifierPrx _sslVerifier; @@ -111,7 +146,7 @@ private: std::map<std::string, RouterIPtr> _routersByCategory; mutable std::map<std::string, RouterIPtr>::iterator _routersByCategoryHint; - std::set<Ice::ConnectionPtr> _pending; + std::map<Ice::ConnectionPtr, CreateSessionPtr> _pending; bool _destroy; }; diff --git a/cpp/src/Ice/.depend b/cpp/src/Ice/.depend index 569597da8fb..d4cede0d2a0 100644 --- a/cpp/src/Ice/.depend +++ b/cpp/src/Ice/.depend @@ -1,92 +1,97 @@ -Acceptor$(OBJEXT): Acceptor.cpp ../Ice/Acceptor.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../Ice/AcceptorF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../Ice/TransceiverF.h -Application$(OBJEXT): Application.cpp ../../include/Ice/Application.h ../../include/Ice/Ice.h ../../include/Ice/Initialize.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/PropertiesF.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/InstanceF.h ../../include/Ice/LoggerF.h ../../include/Ice/StatsF.h ../../include/Ice/StringConverter.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/LocalException.h ../../include/Ice/Properties.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../../include/Ice/Logger.h ../../include/Ice/LoggerUtil.h ../../include/Ice/Stats.h ../../include/Ice/Communicator.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/PluginF.h ../../include/Ice/ImplicitContextF.h ../../include/Ice/ObjectFactory.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/FacetMap.h ../../include/Ice/ServantLocator.h ../../include/Ice/OutgoingAsync.h ../../include/IceUtil/RecMutex.h ../../include/Ice/IncomingAsync.h ../../include/Ice/Process.h ../../include/Ice/Connection.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h ../../include/Ice/Stream.h ../../include/Ice/ImplicitContext.h ../../include/Ice/Locator.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/FactoryTable.h ../../include/Ice/FactoryTableDef.h ../../include/IceUtil/StaticMutex.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/ProcessF.h ../../include/Ice/Router.h ../../include/Ice/DispatchInterceptor.h ../../include/Ice/IconvStringConverter.h ../../include/IceUtil/CtrlCHandler.h ../../include/IceUtil/ArgVector.h ../Ice/GC.h ../../include/IceUtil/Thread.h -Buffer$(OBJEXT): Buffer.cpp ../../include/Ice/Buffer.h ../../include/Ice/Config.h ../../include/IceUtil/Config.h ../../include/Ice/LocalException.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/BuiltinSequences.h -BasicStream$(OBJEXT): BasicStream.cpp ../../include/IceUtil/DisableWarnings.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../Ice/Instance.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/CommunicatorF.h ../../include/Ice/StatsF.h ../Ice/TraceLevelsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../../include/Ice/ProxyFactoryF.h ../Ice/ThreadPoolF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/Proxy.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/LoggerF.h ../../include/Ice/BuiltinSequences.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/LocalException.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../Ice/ProxyFactory.h ../../include/Ice/ObjectFactory.h ../Ice/ObjectFactoryManager.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/FactoryTable.h ../../include/Ice/FactoryTableDef.h ../../include/IceUtil/StaticMutex.h ../../include/Ice/UserExceptionFactoryF.h ../Ice/TraceUtil.h ../Ice/TraceLevels.h ../../include/Ice/LoggerUtil.h -BuiltinSequences$(OBJEXT): BuiltinSequences.cpp ../../include/Ice/BuiltinSequences.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/DisableWarnings.h -CommunicatorI$(OBJEXT): CommunicatorI.cpp ../../include/IceUtil/DisableWarnings.h ../Ice/CommunicatorI.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Config.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/StaticMutex.h ../../include/Ice/DynamicLibraryF.h ../../include/IceUtil/Shared.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/Initialize.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/PropertiesF.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/InstanceF.h ../../include/Ice/LoggerF.h ../../include/Ice/StatsF.h ../../include/Ice/StringConverter.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Communicator.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/PluginF.h ../../include/Ice/ImplicitContextF.h ../Ice/Instance.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../Ice/TraceLevelsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../Ice/ThreadPoolF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/LocalException.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/BasicStream.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../../include/Ice/Properties.h ../Ice/ReferenceFactory.h ../Ice/Reference.h ../Ice/ProxyFactory.h ../Ice/ObjectFactoryManager.h ../Ice/ObjectAdapterFactory.h ../Ice/ObjectAdapterI.h ../../include/Ice/ObjectAdapter.h ../Ice/ConnectorF.h ../../include/Ice/LoggerUtil.h ../Ice/DefaultsAndOverrides.h ../Ice/TraceLevels.h ../Ice/GC.h -Communicator$(OBJEXT): Communicator.cpp ../../include/Ice/Communicator.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/LoggerF.h ../../include/Ice/StatsF.h ../../include/Ice/PropertiesF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/PluginF.h ../../include/Ice/ImplicitContextF.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/DisableWarnings.h -ConnectionFactory$(OBJEXT): ConnectionFactory.cpp ../Ice/ConnectionFactory.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Config.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Handle.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ConnectionIF.h ../../include/Ice/LocalObject.h ../../include/Ice/LocalObjectF.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../Ice/ConnectorF.h ../Ice/AcceptorF.h ../Ice/TransceiverF.h ../Ice/RouterInfoF.h ../Ice/EventHandler.h ../Ice/EventHandlerF.h ../Ice/ThreadPoolF.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../Ice/ConnectionI.h ../../include/Ice/Connection.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/LoggerF.h ../Ice/TraceLevelsF.h ../Ice/Instance.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Timer.h ../../include/Ice/StatsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/BuiltinSequences.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/LocalException.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/Direct.h ../../include/Ice/LoggerUtil.h ../Ice/TraceLevels.h ../Ice/DefaultsAndOverrides.h ../../include/Ice/Properties.h ../Ice/Transceiver.h ../Ice/Connector.h ../Ice/Acceptor.h ../Ice/ThreadPool.h ../Ice/ObjectAdapterI.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../Ice/Reference.h ../Ice/EndpointI.h ../Ice/RouterInfo.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h ../../include/IceUtil/Random.h -ConnectionI$(OBJEXT): ConnectionI.cpp ../../include/IceUtil/DisableWarnings.h ../Ice/ConnectionI.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Config.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Handle.h ../../include/Ice/Connection.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/InstanceF.h ../Ice/TransceiverF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/LoggerF.h ../Ice/TraceLevelsF.h ../Ice/EventHandler.h ../Ice/EventHandlerF.h ../Ice/ThreadPoolF.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../Ice/Instance.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Timer.h ../../include/Ice/StatsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/BuiltinSequences.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/LocalException.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/Direct.h ../../include/Ice/LoggerUtil.h ../../include/Ice/Properties.h ../Ice/TraceUtil.h ../Ice/DefaultsAndOverrides.h ../Ice/Transceiver.h ../Ice/ThreadPool.h ../Ice/ConnectionMonitor.h ../Ice/ObjectAdapterI.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../Ice/ConnectorF.h ../Ice/EndpointI.h ../Ice/AcceptorF.h ../Ice/ReferenceFactory.h ../Ice/Reference.h ../Ice/ProxyFactory.h -ConnectionMonitor$(OBJEXT): ConnectionMonitor.cpp ../Ice/ConnectionMonitor.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Config.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Handle.h ../../include/Ice/ConnectionMonitorF.h ../../include/Ice/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ConnectionIF.h ../../include/Ice/LocalObject.h ../../include/Ice/LocalObjectF.h ../../include/Ice/InstanceF.h ../Ice/ConnectionI.h ../../include/Ice/Connection.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/ConnectionFactoryF.h ../Ice/TransceiverF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/LoggerF.h ../Ice/TraceLevelsF.h ../Ice/EventHandler.h ../Ice/EventHandlerF.h ../Ice/ThreadPoolF.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/LocalException.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/LoggerUtil.h ../Ice/Instance.h ../../include/IceUtil/RecMutex.h ../../include/Ice/StatsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/Direct.h -Connection$(OBJEXT): Connection.cpp ../../include/Ice/Connection.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/DisableWarnings.h -Connector$(OBJEXT): Connector.cpp ../Ice/Connector.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../Ice/ConnectorF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../Ice/TransceiverF.h -Current$(OBJEXT): Current.cpp ../../include/Ice/Current.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Object.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/StreamF.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/DisableWarnings.h -DefaultsAndOverrides$(OBJEXT): DefaultsAndOverrides.cpp ../Ice/DefaultsAndOverrides.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../Ice/DefaultsAndOverridesF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/PropertiesF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Properties.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../../include/Ice/BuiltinSequences.h ../Ice/Network.h ../../include/Ice/LoggerF.h ../../include/Ice/LocalException.h -Direct$(OBJEXT): Direct.cpp ../../include/Ice/Direct.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ReferenceF.h ../../include/Ice/Object.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../Ice/ObjectAdapterI.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/FacetMap.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectAdapterFactoryF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ServantManagerF.h ../Ice/RouterInfoF.h ../Ice/ConnectorF.h ../Ice/LocatorInfoF.h ../Ice/ThreadPoolF.h ../../include/Ice/BuiltinSequences.h ../Ice/ServantManager.h ../../include/Ice/ServantLocator.h ../Ice/Reference.h ../Ice/ReferenceFactoryF.h ../Ice/SharedContext.h ../../include/Ice/LocalException.h -DispatchInterceptor$(OBJEXT): DispatchInterceptor.cpp ../../include/Ice/DispatchInterceptor.h ../../include/Ice/Object.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Config.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Shared.h ../../include/Ice/GCShared.h ../../include/Ice/Config.h ../../include/Ice/GCCountMap.h ../../include/Ice/ObjectF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../Ice/IncomingRequest.h ../../include/Ice/Incoming.h ../../include/Ice/InstanceF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Direct.h ../../include/Ice/ReferenceF.h ../../include/Ice/LocalException.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/BuiltinSequences.h -DynamicLibrary$(OBJEXT): DynamicLibrary.cpp ../../include/Ice/DynamicLibrary.h ../../include/Ice/DynamicLibraryF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h -EndpointFactoryManager$(OBJEXT): EndpointFactoryManager.cpp ../Ice/EndpointFactoryManager.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/InstanceF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/EndpointIF.h ../../include/Ice/LocalObject.h ../../include/Ice/LocalObjectF.h ../../include/Ice/EndpointFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/Endpoint.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/UndefSysMacros.h ../Ice/UnknownEndpointI.h ../Ice/EndpointI.h ../Ice/TransceiverF.h ../Ice/ConnectorF.h ../Ice/AcceptorF.h ../../include/Ice/EndpointFactory.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/LocalException.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/BuiltinSequences.h ../Ice/Instance.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/StatsF.h ../Ice/TraceLevelsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../Ice/ThreadPoolF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/LoggerF.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../../include/Ice/Properties.h ../Ice/DefaultsAndOverrides.h -EndpointFactory$(OBJEXT): EndpointFactory.cpp ../../include/Ice/EndpointFactory.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/EndpointIF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/LocalObject.h ../../include/Ice/LocalObjectF.h ../../include/Ice/EndpointFactoryF.h -Endpoint$(OBJEXT): Endpoint.cpp ../../include/Ice/Endpoint.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Object.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/DisableWarnings.h -EndpointI$(OBJEXT): EndpointI.cpp ../Ice/EndpointI.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Endpoint.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/EndpointIF.h ../../include/Ice/InstanceF.h ../Ice/TransceiverF.h ../Ice/ConnectorF.h ../Ice/AcceptorF.h -EventHandler$(OBJEXT): EventHandler.cpp ../Ice/EventHandler.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../Ice/EventHandlerF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/InstanceF.h ../Ice/ThreadPoolF.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../Ice/Instance.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/CommunicatorF.h ../../include/Ice/StatsF.h ../Ice/TraceLevelsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/Proxy.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/LoggerF.h ../../include/Ice/BuiltinSequences.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/LocalException.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h -Exception$(OBJEXT): Exception.cpp ../../include/Ice/Exception.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Config.h ../../include/Ice/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/ProxyHandle.h ../../include/Ice/LocalException.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/BuiltinSequences.h ../Ice/Network.h ../../include/Ice/PropertiesF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/LoggerF.h ../../include/Ice/Plugin.h ../../include/IceUtil/StringUtil.h -FacetMap$(OBJEXT): FacetMap.cpp ../../include/Ice/FacetMap.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Object.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/DisableWarnings.h +Acceptor$(OBJEXT): Acceptor.cpp ../Ice/Acceptor.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../Ice/AcceptorF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../Ice/TransceiverF.h +Application$(OBJEXT): Application.cpp ../../include/Ice/Application.h ../../include/Ice/Ice.h ../../include/Ice/Initialize.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/PropertiesF.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/InstanceF.h ../../include/Ice/LoggerF.h ../../include/Ice/StatsF.h ../../include/Ice/StringConverter.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/LocalException.h ../../include/Ice/Properties.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../../include/Ice/Logger.h ../../include/Ice/LoggerUtil.h ../../include/Ice/Stats.h ../../include/Ice/Communicator.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/PluginF.h ../../include/Ice/ImplicitContextF.h ../../include/Ice/ObjectFactory.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/FacetMap.h ../../include/Ice/ServantLocator.h ../../include/Ice/OutgoingAsync.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Thread.h ../../include/Ice/IncomingAsync.h ../../include/Ice/Process.h ../../include/Ice/Connection.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h ../../include/Ice/Stream.h ../../include/Ice/ImplicitContext.h ../../include/Ice/Locator.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/FactoryTable.h ../../include/Ice/FactoryTableDef.h ../../include/IceUtil/StaticMutex.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/ProcessF.h ../../include/Ice/Router.h ../../include/Ice/DispatchInterceptor.h ../../include/Ice/IconvStringConverter.h ../../include/IceUtil/CtrlCHandler.h ../../include/IceUtil/ArgVector.h ../Ice/GC.h +Buffer$(OBJEXT): Buffer.cpp ../../include/Ice/Buffer.h ../../include/Ice/Config.h ../../include/IceUtil/Config.h ../../include/Ice/LocalException.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/BuiltinSequences.h +BasicStream$(OBJEXT): BasicStream.cpp ../../include/IceUtil/DisableWarnings.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../Ice/Instance.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/CommunicatorF.h ../../include/Ice/StatsF.h ../Ice/TraceLevelsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../../include/Ice/ProxyFactoryF.h ../Ice/ThreadPoolF.h ../Ice/SelectorThreadF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/Proxy.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/LoggerF.h ../../include/Ice/BuiltinSequences.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/LocalException.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../Ice/ProxyFactory.h ../../include/Ice/ObjectFactory.h ../Ice/ObjectFactoryManager.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/FactoryTable.h ../../include/Ice/FactoryTableDef.h ../../include/IceUtil/StaticMutex.h ../../include/Ice/UserExceptionFactoryF.h ../Ice/TraceUtil.h ../Ice/TraceLevels.h ../../include/Ice/LoggerUtil.h +BuiltinSequences$(OBJEXT): BuiltinSequences.cpp ../../include/Ice/BuiltinSequences.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/DisableWarnings.h +CommunicatorI$(OBJEXT): CommunicatorI.cpp ../../include/IceUtil/DisableWarnings.h ../Ice/CommunicatorI.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Config.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/StaticMutex.h ../../include/Ice/DynamicLibraryF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Mutex.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/Initialize.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/PropertiesF.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/InstanceF.h ../../include/Ice/LoggerF.h ../../include/Ice/StatsF.h ../../include/Ice/StringConverter.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Communicator.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/PluginF.h ../../include/Ice/ImplicitContextF.h ../Ice/Instance.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../Ice/TraceLevelsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../Ice/ThreadPoolF.h ../Ice/SelectorThreadF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/LocalException.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/BasicStream.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../../include/Ice/Properties.h ../Ice/ReferenceFactory.h ../Ice/Reference.h ../Ice/ProxyFactory.h ../Ice/ObjectFactoryManager.h ../Ice/ObjectAdapterFactory.h ../Ice/ObjectAdapterI.h ../../include/Ice/ObjectAdapter.h ../Ice/ConnectorF.h ../../include/Ice/LoggerUtil.h ../Ice/DefaultsAndOverrides.h ../Ice/TraceLevels.h ../Ice/GC.h +Communicator$(OBJEXT): Communicator.cpp ../../include/Ice/Communicator.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/LoggerF.h ../../include/Ice/StatsF.h ../../include/Ice/PropertiesF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/PluginF.h ../../include/Ice/ImplicitContextF.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/DisableWarnings.h +ConnectRequestHandler$(OBJEXT): ConnectRequestHandler.cpp ../Ice/ConnectRequestHandler.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Config.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/IceUtil/Mutex.h ../Ice/RequestHandler.h ../../include/IceUtil/Shared.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/LocalObject.h ../../include/Ice/LocalObjectF.h ../Ice/Reference.h ../../include/IceUtil/RecMutex.h ../Ice/ReferenceFactoryF.h ../../include/Ice/EndpointIF.h ../../include/Ice/InstanceF.h ../../include/Ice/RouterF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/LocatorF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/SharedContext.h ../Ice/RouterInfo.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../Ice/ConnectionRequestHandler.h ../Ice/Instance.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Thread.h ../../include/Ice/StatsF.h ../Ice/TraceLevelsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/ThreadPoolF.h ../Ice/SelectorThreadF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/LoggerF.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/LocalException.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../Ice/ConnectionI.h ../../include/Ice/Connection.h ../Ice/TransceiverF.h ../Ice/EventHandler.h ../Ice/EventHandlerF.h ../Ice/SelectorThread.h ../Ice/Selector.h ../../include/Ice/Properties.h +ConnectionFactory$(OBJEXT): ConnectionFactory.cpp ../Ice/ConnectionFactory.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Config.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Handle.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../Ice/ConnectionI.h ../../include/Ice/Connection.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/InstanceF.h ../Ice/TransceiverF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/LoggerF.h ../Ice/TraceLevelsF.h ../Ice/EventHandler.h ../Ice/EventHandlerF.h ../Ice/ThreadPoolF.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../Ice/SelectorThread.h ../../include/IceUtil/Timer.h ../Ice/SelectorThreadF.h ../Ice/Selector.h ../Ice/ConnectorF.h ../Ice/AcceptorF.h ../Ice/RouterInfoF.h ../Ice/EndpointI.h ../Ice/Instance.h ../../include/IceUtil/RecMutex.h ../../include/Ice/StatsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/BuiltinSequences.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/LocalException.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/Direct.h ../../include/Ice/LoggerUtil.h ../Ice/TraceLevels.h ../Ice/DefaultsAndOverrides.h ../../include/Ice/Properties.h ../Ice/Transceiver.h ../Ice/Connector.h ../Ice/Acceptor.h ../Ice/ThreadPool.h ../Ice/ObjectAdapterI.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../Ice/Reference.h ../Ice/RouterInfo.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h ../../include/IceUtil/Random.h +ConnectionI$(OBJEXT): ConnectionI.cpp ../../include/IceUtil/DisableWarnings.h ../Ice/ConnectionI.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Config.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Handle.h ../../include/Ice/Connection.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/InstanceF.h ../Ice/TransceiverF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/LoggerF.h ../Ice/TraceLevelsF.h ../Ice/EventHandler.h ../Ice/EventHandlerF.h ../Ice/ThreadPoolF.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../Ice/SelectorThread.h ../../include/IceUtil/Timer.h ../Ice/SelectorThreadF.h ../Ice/Selector.h ../Ice/Instance.h ../../include/IceUtil/RecMutex.h ../../include/Ice/StatsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/BuiltinSequences.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/LocalException.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/Direct.h ../../include/Ice/LoggerUtil.h ../../include/Ice/Properties.h ../Ice/TraceUtil.h ../Ice/DefaultsAndOverrides.h ../Ice/Transceiver.h ../Ice/ThreadPool.h ../Ice/ConnectionMonitor.h ../Ice/ObjectAdapterI.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../Ice/ConnectorF.h ../Ice/EndpointI.h ../Ice/AcceptorF.h ../Ice/ReferenceFactory.h ../Ice/Reference.h ../Ice/ProxyFactory.h +ConnectionMonitor$(OBJEXT): ConnectionMonitor.cpp ../Ice/ConnectionMonitor.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Config.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Handle.h ../../include/Ice/ConnectionMonitorF.h ../../include/Ice/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ConnectionIF.h ../../include/Ice/LocalObject.h ../../include/Ice/LocalObjectF.h ../../include/Ice/InstanceF.h ../Ice/ConnectionI.h ../../include/Ice/Connection.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/ConnectionFactoryF.h ../Ice/TransceiverF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/LoggerF.h ../Ice/TraceLevelsF.h ../Ice/EventHandler.h ../Ice/EventHandlerF.h ../Ice/ThreadPoolF.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../Ice/SelectorThread.h ../Ice/SelectorThreadF.h ../Ice/Selector.h ../../include/Ice/LocalException.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/LoggerUtil.h ../Ice/Instance.h ../../include/IceUtil/RecMutex.h ../../include/Ice/StatsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/Direct.h +Connection$(OBJEXT): Connection.cpp ../../include/Ice/Connection.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/DisableWarnings.h +ConnectionRequestHandler$(OBJEXT): ConnectionRequestHandler.cpp ../Ice/ConnectionRequestHandler.h ../Ice/RequestHandler.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/LocalObject.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../Ice/Reference.h ../../include/IceUtil/RecMutex.h ../Ice/ReferenceFactoryF.h ../../include/Ice/InstanceF.h ../../include/Ice/RouterF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/LocatorF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/SharedContext.h ../Ice/ConnectionI.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/IceUtil/Thread.h ../../include/Ice/Connection.h ../../include/Ice/ConnectionFactoryF.h ../Ice/TransceiverF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/LoggerF.h ../Ice/TraceLevelsF.h ../Ice/EventHandler.h ../Ice/EventHandlerF.h ../Ice/ThreadPoolF.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../Ice/SelectorThread.h ../../include/IceUtil/Timer.h ../Ice/SelectorThreadF.h ../Ice/Selector.h ../Ice/RouterInfo.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Outgoing.h ../../include/Ice/OutgoingAsync.h +Connector$(OBJEXT): Connector.cpp ../Ice/Connector.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../Ice/ConnectorF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../Ice/TransceiverF.h +Current$(OBJEXT): Current.cpp ../../include/Ice/Current.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/StreamF.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/DisableWarnings.h +DefaultsAndOverrides$(OBJEXT): DefaultsAndOverrides.cpp ../Ice/DefaultsAndOverrides.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../Ice/DefaultsAndOverridesF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/PropertiesF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Properties.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/InstanceF.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../../include/Ice/BuiltinSequences.h ../Ice/Network.h ../../include/Ice/LoggerF.h ../../include/Ice/LocalException.h +Direct$(OBJEXT): Direct.cpp ../../include/Ice/Direct.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ReferenceF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../Ice/ObjectAdapterI.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/FacetMap.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectAdapterFactoryF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ServantManagerF.h ../Ice/RouterInfoF.h ../Ice/ConnectorF.h ../Ice/LocatorInfoF.h ../Ice/ThreadPoolF.h ../../include/Ice/BuiltinSequences.h ../Ice/ServantManager.h ../../include/Ice/ServantLocator.h ../Ice/Reference.h ../Ice/ReferenceFactoryF.h ../Ice/SharedContext.h ../../include/Ice/LocalException.h +DispatchInterceptor$(OBJEXT): DispatchInterceptor.cpp ../../include/Ice/DispatchInterceptor.h ../../include/Ice/Object.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Config.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Shared.h ../../include/Ice/GCShared.h ../../include/Ice/Config.h ../../include/Ice/GCCountMap.h ../../include/Ice/ObjectF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../Ice/IncomingRequest.h ../../include/Ice/Incoming.h ../../include/Ice/InstanceF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Direct.h ../../include/Ice/ReferenceF.h ../../include/Ice/LocalException.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/BuiltinSequences.h +DynamicLibrary$(OBJEXT): DynamicLibrary.cpp ../../include/Ice/DynamicLibrary.h ../../include/Ice/DynamicLibraryF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h +EndpointFactoryManager$(OBJEXT): EndpointFactoryManager.cpp ../Ice/EndpointFactoryManager.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/InstanceF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/EndpointIF.h ../../include/Ice/LocalObject.h ../../include/Ice/LocalObjectF.h ../../include/Ice/EndpointFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/Endpoint.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/UndefSysMacros.h ../Ice/UnknownEndpointI.h ../Ice/EndpointI.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../Ice/TransceiverF.h ../Ice/ConnectorF.h ../Ice/AcceptorF.h ../../include/Ice/EndpointFactory.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/LocalException.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/BuiltinSequences.h ../Ice/Instance.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Timer.h ../../include/Ice/StatsF.h ../Ice/TraceLevelsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../Ice/ThreadPoolF.h ../Ice/SelectorThreadF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/LoggerF.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../../include/Ice/Properties.h ../Ice/DefaultsAndOverrides.h +EndpointFactory$(OBJEXT): EndpointFactory.cpp ../../include/Ice/EndpointFactory.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/EndpointIF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/LocalObject.h ../../include/Ice/LocalObjectF.h ../../include/Ice/EndpointFactoryF.h +Endpoint$(OBJEXT): Endpoint.cpp ../../include/Ice/Endpoint.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/DisableWarnings.h +EndpointI$(OBJEXT): EndpointI.cpp ../Ice/EndpointI.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/Endpoint.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/EndpointIF.h ../../include/Ice/InstanceF.h ../Ice/TransceiverF.h ../Ice/ConnectorF.h ../Ice/AcceptorF.h ../Ice/Instance.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Timer.h ../../include/Ice/CommunicatorF.h ../../include/Ice/StatsF.h ../Ice/TraceLevelsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../../include/Ice/ProxyFactoryF.h ../Ice/ThreadPoolF.h ../Ice/SelectorThreadF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/Proxy.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/LoggerF.h ../../include/Ice/StringConverter.h ../../include/Ice/BuiltinSequences.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/LocalException.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../Ice/Network.h +EventHandler$(OBJEXT): EventHandler.cpp ../Ice/EventHandler.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../Ice/EventHandlerF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/InstanceF.h ../Ice/ThreadPoolF.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../Ice/Instance.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/CommunicatorF.h ../../include/Ice/StatsF.h ../Ice/TraceLevelsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../../include/Ice/ProxyFactoryF.h ../Ice/SelectorThreadF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/Proxy.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/LoggerF.h ../../include/Ice/BuiltinSequences.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/LocalException.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h +Exception$(OBJEXT): Exception.cpp ../../include/Ice/Exception.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Config.h ../../include/Ice/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/ProxyHandle.h ../../include/Ice/LocalException.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/BuiltinSequences.h ../Ice/Network.h ../../include/Ice/PropertiesF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/LoggerF.h ../../include/Ice/Plugin.h ../../include/IceUtil/StringUtil.h +FacetMap$(OBJEXT): FacetMap.cpp ../../include/Ice/FacetMap.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/DisableWarnings.h FactoryTableDef$(OBJEXT): FactoryTableDef.cpp ../../include/Ice/FactoryTableDef.h ../../include/IceUtil/StaticMutex.h ../../include/IceUtil/Config.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Mutex.h ../../include/Ice/UserExceptionFactoryF.h ../../include/IceUtil/Handle.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/Ice/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/UserExceptionFactory.h FactoryTable$(OBJEXT): FactoryTable.cpp ../../include/Ice/FactoryTable.h ../../include/Ice/FactoryTableDef.h ../../include/IceUtil/StaticMutex.h ../../include/IceUtil/Config.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Mutex.h ../../include/Ice/UserExceptionFactoryF.h ../../include/IceUtil/Handle.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/Ice/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/UserExceptionFactory.h -GC$(OBJEXT): GC.cpp ../../include/IceUtil/Time.h ../../include/IceUtil/Config.h ../../include/IceUtil/StaticMutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/RecMutex.h ../Ice/GC.h ../../include/Ice/Config.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/Ice/GCShared.h ../../include/Ice/GCCountMap.h -Identity$(OBJEXT): Identity.cpp ../../include/Ice/Identity.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Object.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ConnectionF.h ../../include/Ice/StreamF.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/DisableWarnings.h -IdentityUtil$(OBJEXT): IdentityUtil.cpp ../../include/Ice/IdentityUtil.h ../../include/Ice/Identity.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/LocalException.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/BuiltinSequences.h ../../include/IceUtil/StringUtil.h -ImplicitContextI$(OBJEXT): ImplicitContextI.cpp ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalException.h ../../include/Ice/BuiltinSequences.h ../../include/IceUtil/StaticMutex.h -ImplicitContext$(OBJEXT): ImplicitContext.cpp ../../include/Ice/ImplicitContext.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalException.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/DisableWarnings.h -IncomingAsync$(OBJEXT): IncomingAsync.cpp ../../include/Ice/IncomingAsync.h ../../include/Ice/IncomingAsyncF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/Incoming.h ../../include/Ice/InstanceF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/LocalObject.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ServantManagerF.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Object.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/Current.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/ServantLocator.h ../Ice/ConnectionI.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/IceUtil/Thread.h ../../include/Ice/Connection.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/ConnectionFactoryF.h ../Ice/TransceiverF.h ../../include/Ice/LoggerF.h ../Ice/TraceLevelsF.h ../Ice/EventHandler.h ../Ice/EventHandlerF.h ../Ice/ThreadPoolF.h ../../include/Ice/LocalException.h ../../include/Ice/BuiltinSequences.h ../Ice/Instance.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Timer.h ../../include/Ice/StatsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Direct.h ../../include/Ice/Properties.h ../Ice/ReplyStatus.h ../../include/IceUtil/StaticMutex.h -Incoming$(OBJEXT): Incoming.cpp ../../include/Ice/Incoming.h ../../include/Ice/InstanceF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ConnectionIF.h ../../include/Ice/LocalObject.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ServantManagerF.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Object.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/IncomingAsync.h ../Ice/IncomingRequest.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/FacetMap.h ../../include/Ice/ServantLocator.h ../Ice/ServantManager.h ../Ice/ConnectionI.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/IceUtil/Thread.h ../../include/Ice/Connection.h ../../include/Ice/ConnectionFactoryF.h ../Ice/TransceiverF.h ../../include/Ice/LoggerF.h ../Ice/TraceLevelsF.h ../Ice/EventHandler.h ../Ice/EventHandlerF.h ../Ice/ThreadPoolF.h ../../include/Ice/LocalException.h ../../include/Ice/BuiltinSequences.h ../Ice/Instance.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Timer.h ../../include/Ice/StatsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Direct.h ../../include/Ice/Properties.h ../../include/Ice/LoggerUtil.h ../Ice/ReplyStatus.h ../../include/IceUtil/StringUtil.h -Initialize$(OBJEXT): Initialize.cpp ../../include/IceUtil/DisableWarnings.h ../../include/IceUtil/ArgVector.h ../../include/IceUtil/Config.h ../Ice/GC.h ../../include/Ice/Config.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../Ice/CommunicatorI.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/StaticMutex.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/Handle.h ../../include/Ice/ProxyHandle.h ../../include/Ice/Initialize.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/PropertiesF.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/InstanceF.h ../../include/Ice/LoggerF.h ../../include/Ice/StatsF.h ../../include/Ice/StringConverter.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Communicator.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/PluginF.h ../../include/Ice/ImplicitContextF.h ../Ice/PropertiesI.h ../../include/Ice/Properties.h ../../include/Ice/Outgoing.h ../../include/Ice/BasicStream.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../../include/Ice/LocalException.h ../Ice/StreamI.h ../../include/Ice/Stream.h ../Ice/LoggerI.h ../../include/Ice/Logger.h -Instance$(OBJEXT): Instance.cpp ../../include/IceUtil/DisableWarnings.h ../Ice/Instance.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/InstanceF.h ../../include/Ice/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/StatsF.h ../Ice/TraceLevelsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../../include/Ice/ProxyFactoryF.h ../Ice/ThreadPoolF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/Proxy.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/LoggerF.h ../../include/Ice/StringConverter.h ../../include/Ice/BuiltinSequences.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/LocalException.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../Ice/TraceLevels.h ../Ice/DefaultsAndOverrides.h ../Ice/RouterInfo.h ../../include/Ice/RouterF.h ../../include/Ice/Router.h ../Ice/LocatorInfo.h ../../include/Ice/LocatorF.h ../../include/Ice/Locator.h ../../include/Ice/IncomingAsync.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/FactoryTable.h ../../include/Ice/FactoryTableDef.h ../../include/IceUtil/StaticMutex.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/ProcessF.h ../Ice/ReferenceFactory.h ../Ice/Reference.h ../Ice/ProxyFactory.h ../Ice/ThreadPool.h ../Ice/EventHandlerF.h ../Ice/ConnectionFactory.h ../Ice/ConnectorF.h ../Ice/AcceptorF.h ../Ice/TransceiverF.h ../Ice/EventHandler.h ../Ice/ConnectionMonitor.h ../Ice/ObjectFactoryManager.h ../Ice/ObjectAdapterFactory.h ../Ice/ObjectAdapterI.h ../../include/Ice/ObjectAdapter.h ../Ice/PropertiesI.h ../../include/Ice/Properties.h ../Ice/LoggerI.h ../../include/Ice/Logger.h ../Ice/Network.h ../Ice/EndpointFactoryManager.h ../../include/Ice/EndpointFactoryF.h ../Ice/TcpEndpointI.h ../Ice/EndpointI.h ../../include/Ice/EndpointFactory.h ../Ice/UdpEndpointI.h ../../include/Ice/DynamicLibrary.h ../Ice/PluginManagerI.h ../../include/Ice/Plugin.h ../../include/Ice/LoggerUtil.h ../../include/IceUtil/StringUtil.h ../../include/IceUtil/UUID.h ../../include/Ice/Communicator.h ../../include/Ice/ImplicitContextF.h ../Ice/SysLoggerI.h -LocalException$(OBJEXT): LocalException.cpp ../../include/Ice/LocalException.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/DisableWarnings.h -LocalObject$(OBJEXT): LocalObject.cpp ../../include/Ice/LocalObject.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h -LocatorInfo$(OBJEXT): LocatorInfo.cpp ../Ice/LocatorInfo.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Time.h ../Ice/LocatorInfoF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/LocatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Locator.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/OutgoingAsync.h ../../include/IceUtil/RecMutex.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/IncomingAsync.h ../../include/Ice/Direct.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/FactoryTable.h ../../include/Ice/FactoryTableDef.h ../../include/IceUtil/StaticMutex.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/ProcessF.h ../../include/Ice/LocalException.h ../../include/Ice/BuiltinSequences.h ../Ice/Instance.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Thread.h ../../include/Ice/StatsF.h ../Ice/TraceLevelsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/ReferenceFactoryF.h ../Ice/ThreadPoolF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/LoggerF.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../Ice/TraceLevels.h ../../include/Ice/LoggerUtil.h ../Ice/EndpointI.h ../Ice/TransceiverF.h ../Ice/ConnectorF.h ../Ice/AcceptorF.h ../Ice/Reference.h ../../include/Ice/RouterF.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h -Locator$(OBJEXT): Locator.cpp ../../include/Ice/Locator.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/OutgoingAsync.h ../../include/IceUtil/RecMutex.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/IncomingAsync.h ../../include/Ice/Direct.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/FactoryTable.h ../../include/Ice/FactoryTableDef.h ../../include/IceUtil/StaticMutex.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/ProcessF.h ../../include/Ice/LocalException.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/ObjectFactory.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/DisableWarnings.h -LoggerI$(OBJEXT): LoggerI.cpp ../../include/IceUtil/Time.h ../../include/IceUtil/Config.h ../Ice/LoggerI.h ../../include/Ice/Logger.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/IceUtil/StaticMutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h -Logger$(OBJEXT): Logger.cpp ../../include/Ice/Logger.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/DisableWarnings.h -LoggerUtil$(OBJEXT): LoggerUtil.cpp ../../include/Ice/LoggerUtil.h ../../include/Ice/LoggerF.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/Logger.h -Network$(OBJEXT): Network.cpp ../../include/IceUtil/StaticMutex.h ../../include/IceUtil/Config.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../Ice/Network.h ../../include/Ice/Config.h ../../include/Ice/PropertiesF.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/LoggerF.h ../../include/Ice/LocalException.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Properties.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../../include/Ice/LoggerUtil.h -ObjectAdapterFactory$(OBJEXT): ObjectAdapterFactory.cpp ../Ice/ObjectAdapterFactory.h ../Ice/ObjectAdapterI.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/FacetMap.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectAdapterFactoryF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ServantManagerF.h ../Ice/RouterInfoF.h ../Ice/ConnectorF.h ../Ice/LocatorInfoF.h ../Ice/ThreadPoolF.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/LocalException.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h ../../include/IceUtil/UUID.h -ObjectAdapterI$(OBJEXT): ObjectAdapterI.cpp ../../include/IceUtil/UUID.h ../../include/IceUtil/Config.h ../Ice/ObjectAdapterI.h ../../include/IceUtil/Shared.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/FacetMap.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectAdapterFactoryF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ServantManagerF.h ../Ice/RouterInfoF.h ../Ice/ConnectorF.h ../Ice/LocatorInfoF.h ../Ice/ThreadPoolF.h ../../include/Ice/BuiltinSequences.h ../Ice/ObjectAdapterFactory.h ../Ice/Instance.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Thread.h ../../include/Ice/StatsF.h ../Ice/TraceLevelsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/ReferenceFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/LoggerF.h ../../include/Ice/StringConverter.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/LocalException.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/Direct.h ../Ice/ProxyFactory.h ../Ice/ReferenceFactory.h ../Ice/Reference.h ../Ice/EndpointI.h ../Ice/TransceiverF.h ../Ice/AcceptorF.h ../Ice/EndpointFactoryManager.h ../../include/Ice/EndpointFactoryF.h ../Ice/ConnectionFactory.h ../Ice/EventHandler.h ../Ice/EventHandlerF.h ../Ice/ServantManager.h ../Ice/RouterInfo.h ../../include/Ice/Properties.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h ../Ice/LocatorInfo.h ../../include/Ice/Locator.h ../../include/Ice/IncomingAsync.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/FactoryTable.h ../../include/Ice/FactoryTableDef.h ../../include/IceUtil/StaticMutex.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/ProcessF.h ../../include/Ice/LoggerUtil.h ../Ice/ThreadPool.h ../../include/Ice/Communicator.h ../../include/Ice/ImplicitContextF.h ../../include/Ice/Router.h ../Ice/DefaultsAndOverrides.h ../Ice/TraceLevels.h ../Ice/PropertyNames.h -ObjectAdapter$(OBJEXT): ObjectAdapter.cpp ../../include/Ice/ObjectAdapter.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/FacetMap.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/DisableWarnings.h -ObjectFactoryManager$(OBJEXT): ObjectFactoryManager.cpp ../Ice/ObjectFactoryManager.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectFactory.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h ../../include/Ice/LocalException.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/BuiltinSequences.h -ObjectFactory$(OBJEXT): ObjectFactory.cpp ../../include/Ice/ObjectFactory.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Object.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/DisableWarnings.h -Object$(OBJEXT): Object.cpp ../../include/Ice/Object.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Config.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Shared.h ../../include/Ice/GCShared.h ../../include/Ice/Config.h ../../include/Ice/GCCountMap.h ../../include/Ice/ObjectF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/Incoming.h ../../include/Ice/InstanceF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/IncomingAsync.h ../Ice/IncomingRequest.h ../../include/Ice/Direct.h ../../include/Ice/ReferenceF.h ../../include/Ice/LocalException.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Stream.h -OutgoingAsync$(OBJEXT): OutgoingAsync.cpp ../../include/Ice/OutgoingAsync.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Config.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/IceUtil/RecMutex.h ../../include/Ice/OutgoingAsyncF.h ../../include/IceUtil/Shared.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ReferenceF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/LocalObject.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Current.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/Object.h ../../include/IceUtil/Mutex.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/StreamF.h ../Ice/ConnectionI.h ../../include/IceUtil/Thread.h ../../include/Ice/Connection.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/CommunicatorF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/InstanceF.h ../Ice/TransceiverF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/LoggerF.h ../Ice/TraceLevelsF.h ../Ice/EventHandler.h ../Ice/EventHandlerF.h ../Ice/ThreadPoolF.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../Ice/Reference.h ../Ice/ReferenceFactoryF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/SharedContext.h ../Ice/Instance.h ../../include/IceUtil/Timer.h ../../include/Ice/StatsF.h ../Ice/DefaultsAndOverridesF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/BuiltinSequences.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/LocalException.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/Direct.h ../../include/Ice/Properties.h ../../include/Ice/LoggerUtil.h ../Ice/LocatorInfo.h ../Ice/ProxyFactory.h ../Ice/RouterInfo.h ../Ice/ReplyStatus.h -Outgoing$(OBJEXT): Outgoing.cpp ../../include/Ice/Outgoing.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Config.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/ConnectionIF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/LocalObject.h ../../include/IceUtil/Shared.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ReferenceF.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Exception.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Current.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/StreamF.h ../Ice/ConnectionI.h ../../include/IceUtil/Thread.h ../../include/Ice/Connection.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/ConnectionFactoryF.h ../Ice/TransceiverF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/LoggerF.h ../Ice/TraceLevelsF.h ../Ice/EventHandler.h ../Ice/EventHandlerF.h ../Ice/ThreadPoolF.h ../Ice/Reference.h ../../include/IceUtil/RecMutex.h ../Ice/ReferenceFactoryF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/SharedContext.h ../../include/Ice/LocalException.h ../../include/Ice/BuiltinSequences.h ../Ice/Instance.h ../../include/IceUtil/Timer.h ../../include/Ice/StatsF.h ../Ice/DefaultsAndOverridesF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/Direct.h ../Ice/ReplyStatus.h -PluginManagerI$(OBJEXT): PluginManagerI.cpp ../Ice/PluginManagerI.h ../../include/Ice/Plugin.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/LoggerF.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/InstanceF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/DynamicLibrary.h ../../include/Ice/Communicator.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/StatsF.h ../../include/Ice/PropertiesF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/PluginF.h ../../include/Ice/ImplicitContextF.h ../../include/Ice/Properties.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/BasicStream.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../../include/Ice/LoggerUtil.h ../../include/Ice/Initialize.h ../../include/Ice/LocalException.h -Plugin$(OBJEXT): Plugin.cpp ../../include/Ice/Plugin.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/LoggerF.h ../../include/Ice/UndefSysMacros.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/DisableWarnings.h -Process$(OBJEXT): Process.cpp ../../include/Ice/Process.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/OutgoingAsync.h ../../include/IceUtil/RecMutex.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../../include/Ice/LocalException.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/ObjectFactory.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/DisableWarnings.h -PropertiesI$(OBJEXT): PropertiesI.cpp ../../include/IceUtil/DisableWarnings.h ../../include/IceUtil/StringUtil.h ../../include/IceUtil/Config.h ../Ice/PropertiesI.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Properties.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/LoggerF.h ../../include/Ice/StatsF.h ../../include/Ice/LocalException.h ../Ice/PropertyNames.h ../../include/Ice/Logger.h ../../include/Ice/LoggerUtil.h ../../include/Ice/Communicator.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/PluginF.h ../../include/Ice/ImplicitContextF.h -Properties$(OBJEXT): Properties.cpp ../../include/Ice/Properties.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/LocalException.h ../../include/Ice/ObjectFactory.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/DisableWarnings.h +GC$(OBJEXT): GC.cpp ../../include/IceUtil/Time.h ../../include/IceUtil/Config.h ../../include/IceUtil/StaticMutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/RecMutex.h ../Ice/GC.h ../../include/Ice/Config.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/Ice/GCShared.h ../../include/Ice/GCCountMap.h +Identity$(OBJEXT): Identity.cpp ../../include/Ice/Identity.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ConnectionF.h ../../include/Ice/StreamF.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/DisableWarnings.h +IdentityUtil$(OBJEXT): IdentityUtil.cpp ../../include/Ice/IdentityUtil.h ../../include/Ice/Identity.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/LocalException.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/BuiltinSequences.h ../../include/IceUtil/StringUtil.h +ImplicitContextI$(OBJEXT): ImplicitContextI.cpp ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalException.h ../../include/Ice/BuiltinSequences.h ../../include/IceUtil/StaticMutex.h +ImplicitContext$(OBJEXT): ImplicitContext.cpp ../../include/Ice/ImplicitContext.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalException.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/DisableWarnings.h +IncomingAsync$(OBJEXT): IncomingAsync.cpp ../../include/Ice/IncomingAsync.h ../../include/Ice/IncomingAsyncF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/Incoming.h ../../include/Ice/InstanceF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/LocalObject.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ServantManagerF.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Object.h ../../include/Ice/Current.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/ServantLocator.h ../Ice/ConnectionI.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/IceUtil/Thread.h ../../include/Ice/Connection.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/ConnectionFactoryF.h ../Ice/TransceiverF.h ../../include/Ice/LoggerF.h ../Ice/TraceLevelsF.h ../Ice/EventHandler.h ../Ice/EventHandlerF.h ../Ice/ThreadPoolF.h ../Ice/SelectorThread.h ../../include/IceUtil/Timer.h ../Ice/SelectorThreadF.h ../Ice/Selector.h ../../include/Ice/LocalException.h ../../include/Ice/BuiltinSequences.h ../Ice/Instance.h ../../include/IceUtil/RecMutex.h ../../include/Ice/StatsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Direct.h ../../include/Ice/Properties.h ../Ice/ReplyStatus.h ../../include/IceUtil/StaticMutex.h +Incoming$(OBJEXT): Incoming.cpp ../../include/Ice/Incoming.h ../../include/Ice/InstanceF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ConnectionIF.h ../../include/Ice/LocalObject.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ServantManagerF.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/IncomingAsync.h ../Ice/IncomingRequest.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/FacetMap.h ../../include/Ice/ServantLocator.h ../Ice/ServantManager.h ../Ice/ConnectionI.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/IceUtil/Thread.h ../../include/Ice/Connection.h ../../include/Ice/ConnectionFactoryF.h ../Ice/TransceiverF.h ../../include/Ice/LoggerF.h ../Ice/TraceLevelsF.h ../Ice/EventHandler.h ../Ice/EventHandlerF.h ../Ice/ThreadPoolF.h ../Ice/SelectorThread.h ../../include/IceUtil/Timer.h ../Ice/SelectorThreadF.h ../Ice/Selector.h ../../include/Ice/LocalException.h ../../include/Ice/BuiltinSequences.h ../Ice/Instance.h ../../include/IceUtil/RecMutex.h ../../include/Ice/StatsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Direct.h ../../include/Ice/Properties.h ../../include/Ice/LoggerUtil.h ../Ice/ReplyStatus.h ../../include/IceUtil/StringUtil.h +Initialize$(OBJEXT): Initialize.cpp ../../include/IceUtil/DisableWarnings.h ../../include/IceUtil/ArgVector.h ../../include/IceUtil/Config.h ../Ice/GC.h ../../include/Ice/Config.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../Ice/CommunicatorI.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/StaticMutex.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/Handle.h ../../include/Ice/ProxyHandle.h ../../include/Ice/Initialize.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/PropertiesF.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/InstanceF.h ../../include/Ice/LoggerF.h ../../include/Ice/StatsF.h ../../include/Ice/StringConverter.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Communicator.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/PluginF.h ../../include/Ice/ImplicitContextF.h ../Ice/PropertiesI.h ../../include/Ice/Properties.h ../../include/Ice/Outgoing.h ../../include/Ice/BasicStream.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../../include/Ice/LocalException.h ../Ice/StreamI.h ../../include/Ice/Stream.h ../Ice/LoggerI.h ../../include/Ice/Logger.h +Instance$(OBJEXT): Instance.cpp ../../include/IceUtil/DisableWarnings.h ../Ice/Instance.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/InstanceF.h ../../include/Ice/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/StatsF.h ../Ice/TraceLevelsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../../include/Ice/ProxyFactoryF.h ../Ice/ThreadPoolF.h ../Ice/SelectorThreadF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/Proxy.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/LoggerF.h ../../include/Ice/StringConverter.h ../../include/Ice/BuiltinSequences.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/LocalException.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../Ice/TraceLevels.h ../Ice/DefaultsAndOverrides.h ../Ice/RouterInfo.h ../../include/Ice/RouterF.h ../../include/Ice/Router.h ../Ice/LocatorInfo.h ../../include/Ice/LocatorF.h ../../include/Ice/Locator.h ../../include/Ice/IncomingAsync.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/FactoryTable.h ../../include/Ice/FactoryTableDef.h ../../include/IceUtil/StaticMutex.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/ProcessF.h ../Ice/ReferenceFactory.h ../Ice/Reference.h ../Ice/ProxyFactory.h ../Ice/ThreadPool.h ../Ice/EventHandlerF.h ../Ice/Selector.h ../Ice/SelectorThread.h ../Ice/ConnectionFactory.h ../Ice/ConnectionI.h ../../include/Ice/Connection.h ../Ice/TransceiverF.h ../Ice/EventHandler.h ../Ice/ConnectorF.h ../Ice/AcceptorF.h ../Ice/EndpointI.h ../Ice/ConnectionMonitor.h ../Ice/ObjectFactoryManager.h ../Ice/ObjectAdapterFactory.h ../Ice/ObjectAdapterI.h ../../include/Ice/ObjectAdapter.h ../Ice/PropertiesI.h ../../include/Ice/Properties.h ../Ice/LoggerI.h ../../include/Ice/Logger.h ../Ice/Network.h ../Ice/EndpointFactoryManager.h ../../include/Ice/EndpointFactoryF.h ../Ice/TcpEndpointI.h ../../include/Ice/EndpointFactory.h ../Ice/UdpEndpointI.h ../../include/Ice/DynamicLibrary.h ../Ice/PluginManagerI.h ../../include/Ice/Plugin.h ../../include/Ice/LoggerUtil.h ../../include/IceUtil/StringUtil.h ../../include/IceUtil/UUID.h ../../include/Ice/Communicator.h ../../include/Ice/ImplicitContextF.h ../Ice/SysLoggerI.h +LocalException$(OBJEXT): LocalException.cpp ../../include/Ice/LocalException.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/DisableWarnings.h +LocalObject$(OBJEXT): LocalObject.cpp ../../include/Ice/LocalObject.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h +LocatorInfo$(OBJEXT): LocatorInfo.cpp ../Ice/LocatorInfo.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Time.h ../Ice/LocatorInfoF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/LocatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Locator.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/Ice/InstanceF.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/OutgoingAsync.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Thread.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/IncomingAsync.h ../../include/Ice/Direct.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/FactoryTable.h ../../include/Ice/FactoryTableDef.h ../../include/IceUtil/StaticMutex.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/ProcessF.h ../../include/Ice/LocalException.h ../../include/Ice/BuiltinSequences.h ../Ice/Instance.h ../../include/IceUtil/RecMutex.h ../../include/Ice/StatsF.h ../Ice/TraceLevelsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/ReferenceFactoryF.h ../Ice/ThreadPoolF.h ../Ice/SelectorThreadF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/LoggerF.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../Ice/TraceLevels.h ../../include/Ice/LoggerUtil.h ../Ice/EndpointI.h ../Ice/TransceiverF.h ../Ice/ConnectorF.h ../Ice/AcceptorF.h ../Ice/Reference.h ../../include/Ice/RouterF.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h +Locator$(OBJEXT): Locator.cpp ../../include/Ice/Locator.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/InstanceF.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/OutgoingAsync.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Thread.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/IncomingAsync.h ../../include/Ice/Direct.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/FactoryTable.h ../../include/Ice/FactoryTableDef.h ../../include/IceUtil/StaticMutex.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/ProcessF.h ../../include/Ice/LocalException.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/ObjectFactory.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/DisableWarnings.h +LoggerI$(OBJEXT): LoggerI.cpp ../../include/IceUtil/Time.h ../../include/IceUtil/Config.h ../Ice/LoggerI.h ../../include/Ice/Logger.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/IceUtil/StaticMutex.h +Logger$(OBJEXT): Logger.cpp ../../include/Ice/Logger.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/DisableWarnings.h +LoggerUtil$(OBJEXT): LoggerUtil.cpp ../../include/Ice/LoggerUtil.h ../../include/Ice/LoggerF.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/Logger.h +Network$(OBJEXT): Network.cpp ../../include/IceUtil/StaticMutex.h ../../include/IceUtil/Config.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../Ice/Network.h ../../include/Ice/Config.h ../../include/Ice/PropertiesF.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Mutex.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/LoggerF.h ../../include/Ice/LocalException.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Properties.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/InstanceF.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../../include/Ice/LoggerUtil.h +ObjectAdapterFactory$(OBJEXT): ObjectAdapterFactory.cpp ../Ice/ObjectAdapterFactory.h ../Ice/ObjectAdapterI.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/FacetMap.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectAdapterFactoryF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ServantManagerF.h ../Ice/RouterInfoF.h ../Ice/ConnectorF.h ../Ice/LocatorInfoF.h ../Ice/ThreadPoolF.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/LocalException.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h ../../include/IceUtil/UUID.h +ObjectAdapterI$(OBJEXT): ObjectAdapterI.cpp ../../include/IceUtil/UUID.h ../../include/IceUtil/Config.h ../Ice/ObjectAdapterI.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/FacetMap.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectAdapterFactoryF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ServantManagerF.h ../Ice/RouterInfoF.h ../Ice/ConnectorF.h ../Ice/LocatorInfoF.h ../Ice/ThreadPoolF.h ../../include/Ice/BuiltinSequences.h ../Ice/ObjectAdapterFactory.h ../Ice/Instance.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Thread.h ../../include/Ice/StatsF.h ../Ice/TraceLevelsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/ReferenceFactoryF.h ../Ice/SelectorThreadF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/LoggerF.h ../../include/Ice/StringConverter.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/LocalException.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/Direct.h ../Ice/ProxyFactory.h ../Ice/ReferenceFactory.h ../Ice/Reference.h ../Ice/EndpointI.h ../Ice/TransceiverF.h ../Ice/AcceptorF.h ../Ice/EndpointFactoryManager.h ../../include/Ice/EndpointFactoryF.h ../Ice/ConnectionFactory.h ../Ice/ConnectionI.h ../../include/Ice/Connection.h ../Ice/EventHandler.h ../Ice/EventHandlerF.h ../Ice/SelectorThread.h ../Ice/Selector.h ../Ice/ServantManager.h ../Ice/RouterInfo.h ../../include/Ice/Properties.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h ../Ice/LocatorInfo.h ../../include/Ice/Locator.h ../../include/Ice/IncomingAsync.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/FactoryTable.h ../../include/Ice/FactoryTableDef.h ../../include/IceUtil/StaticMutex.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/ProcessF.h ../../include/Ice/LoggerUtil.h ../Ice/ThreadPool.h ../../include/Ice/Communicator.h ../../include/Ice/ImplicitContextF.h ../../include/Ice/Router.h ../Ice/DefaultsAndOverrides.h ../Ice/TraceLevels.h ../Ice/PropertyNames.h +ObjectAdapter$(OBJEXT): ObjectAdapter.cpp ../../include/Ice/ObjectAdapter.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/FacetMap.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/DisableWarnings.h +ObjectFactoryManager$(OBJEXT): ObjectFactoryManager.cpp ../Ice/ObjectFactoryManager.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectFactory.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h ../../include/Ice/LocalException.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/BuiltinSequences.h +ObjectFactory$(OBJEXT): ObjectFactory.cpp ../../include/Ice/ObjectFactory.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/DisableWarnings.h +Object$(OBJEXT): Object.cpp ../../include/Ice/Object.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Config.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Shared.h ../../include/Ice/GCShared.h ../../include/Ice/Config.h ../../include/Ice/GCCountMap.h ../../include/Ice/ObjectF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/Incoming.h ../../include/Ice/InstanceF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/IncomingAsync.h ../Ice/IncomingRequest.h ../../include/Ice/Direct.h ../../include/Ice/ReferenceF.h ../../include/Ice/LocalException.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Stream.h +OutgoingAsync$(OBJEXT): OutgoingAsync.cpp ../../include/Ice/OutgoingAsync.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Config.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Handle.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/InstanceF.h ../../include/Ice/ReferenceF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/LocalObject.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Current.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/StreamF.h ../Ice/ConnectionI.h ../../include/Ice/Connection.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/CommunicatorF.h ../../include/Ice/ConnectionFactoryF.h ../Ice/TransceiverF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/LoggerF.h ../Ice/TraceLevelsF.h ../Ice/EventHandler.h ../Ice/EventHandlerF.h ../Ice/ThreadPoolF.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../Ice/SelectorThread.h ../Ice/SelectorThreadF.h ../Ice/Selector.h ../Ice/RequestHandler.h ../Ice/Reference.h ../../include/IceUtil/RecMutex.h ../Ice/ReferenceFactoryF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/SharedContext.h ../Ice/Instance.h ../../include/Ice/StatsF.h ../Ice/DefaultsAndOverridesF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/BuiltinSequences.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/LocalException.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/Direct.h ../../include/Ice/Properties.h ../../include/Ice/LoggerUtil.h ../Ice/LocatorInfo.h ../Ice/ProxyFactory.h ../Ice/RouterInfo.h ../Ice/ReplyStatus.h +Outgoing$(OBJEXT): Outgoing.cpp ../../include/Ice/Outgoing.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Config.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/RequestHandlerF.h ../../include/IceUtil/Shared.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/InstanceF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/LocalObject.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ReferenceF.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Exception.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Current.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/StreamF.h ../Ice/RequestHandler.h ../../include/Ice/OutgoingAsyncF.h ../Ice/ConnectionI.h ../../include/IceUtil/Thread.h ../../include/Ice/Connection.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/CommunicatorF.h ../../include/Ice/ConnectionFactoryF.h ../Ice/TransceiverF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/LoggerF.h ../Ice/TraceLevelsF.h ../Ice/EventHandler.h ../Ice/EventHandlerF.h ../Ice/ThreadPoolF.h ../Ice/SelectorThread.h ../../include/IceUtil/Timer.h ../Ice/SelectorThreadF.h ../Ice/Selector.h ../Ice/Reference.h ../../include/IceUtil/RecMutex.h ../Ice/ReferenceFactoryF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/SharedContext.h ../../include/Ice/LocalException.h ../../include/Ice/BuiltinSequences.h ../Ice/Instance.h ../../include/Ice/StatsF.h ../Ice/DefaultsAndOverridesF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/Direct.h ../Ice/ReplyStatus.h +PluginManagerI$(OBJEXT): PluginManagerI.cpp ../Ice/PluginManagerI.h ../../include/Ice/Plugin.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/LoggerF.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/InstanceF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/DynamicLibrary.h ../../include/Ice/Communicator.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/StatsF.h ../../include/Ice/PropertiesF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/PluginF.h ../../include/Ice/ImplicitContextF.h ../../include/Ice/Properties.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/BasicStream.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../../include/Ice/LoggerUtil.h ../../include/Ice/Initialize.h ../../include/Ice/LocalException.h +Plugin$(OBJEXT): Plugin.cpp ../../include/Ice/Plugin.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/LoggerF.h ../../include/Ice/UndefSysMacros.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/DisableWarnings.h +Process$(OBJEXT): Process.cpp ../../include/Ice/Process.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/InstanceF.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/OutgoingAsync.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Thread.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../../include/Ice/LocalException.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/ObjectFactory.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/DisableWarnings.h +PropertiesI$(OBJEXT): PropertiesI.cpp ../../include/IceUtil/DisableWarnings.h ../../include/IceUtil/StringUtil.h ../../include/IceUtil/Config.h ../Ice/PropertiesI.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Properties.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/InstanceF.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/LoggerF.h ../../include/Ice/StatsF.h ../../include/Ice/LocalException.h ../Ice/PropertyNames.h ../../include/Ice/Logger.h ../../include/Ice/LoggerUtil.h ../../include/Ice/Communicator.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/PluginF.h ../../include/Ice/ImplicitContextF.h +Properties$(OBJEXT): Properties.cpp ../../include/Ice/Properties.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/InstanceF.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/LocalException.h ../../include/Ice/ObjectFactory.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/DisableWarnings.h PropertyNames$(OBJEXT): PropertyNames.cpp ../Ice/PropertyNames.h ../../include/Ice/Config.h ../../include/IceUtil/Config.h Protocol$(OBJEXT): Protocol.cpp ../../include/Ice/Protocol.h ../../include/Ice/Config.h ../../include/IceUtil/Config.h -ProtocolPluginFacade$(OBJEXT): ProtocolPluginFacade.cpp ../../include/Ice/ProtocolPluginFacade.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/ProtocolPluginFacadeF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/EndpointFactoryF.h ../../include/Ice/InstanceF.h ../Ice/Instance.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/StatsF.h ../Ice/TraceLevelsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../../include/Ice/ProxyFactoryF.h ../Ice/ThreadPoolF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/Proxy.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/LoggerF.h ../../include/Ice/StringConverter.h ../../include/Ice/BuiltinSequences.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/LocalException.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../Ice/EndpointFactoryManager.h ../Ice/TraceLevels.h ../Ice/DefaultsAndOverrides.h -ProxyFactory$(OBJEXT): ProxyFactory.cpp ../../include/IceUtil/Thread.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Time.h ../Ice/ProxyFactory.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/InstanceF.h ../../include/Ice/ReferenceF.h ../../include/Ice/ProxyF.h ../../include/Ice/Exception.h ../Ice/Instance.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/StatsF.h ../Ice/TraceLevelsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../Ice/ThreadPoolF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/Proxy.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/LoggerF.h ../../include/Ice/StringConverter.h ../../include/Ice/BuiltinSequences.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/LocalException.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../Ice/ReferenceFactory.h ../Ice/Reference.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../Ice/LocatorInfo.h ../../include/Ice/Properties.h ../../include/Ice/LoggerUtil.h ../Ice/TraceLevels.h -Proxy$(OBJEXT): Proxy.cpp ../../include/Ice/Proxy.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/ProxyF.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/IceUtil/Handle.h ../../include/Ice/Handle.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/LocalObject.h ../../include/Ice/LocalObjectF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../Ice/ProxyFactory.h ../../include/Ice/InstanceF.h ../Ice/ReferenceFactory.h ../Ice/ReferenceFactoryF.h ../Ice/Reference.h ../../include/IceUtil/RecMutex.h ../../include/Ice/RouterF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/LocatorF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/SharedContext.h ../../include/Ice/BuiltinSequences.h ../Ice/ObjectAdapterFactory.h ../Ice/ObjectAdapterI.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/FacetMap.h ../../include/Ice/ObjectAdapterFactoryF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ServantManagerF.h ../Ice/ConnectorF.h ../Ice/ThreadPoolF.h ../../include/Ice/Outgoing.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Direct.h ../Ice/EndpointI.h ../Ice/TransceiverF.h ../Ice/AcceptorF.h ../Ice/Instance.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Thread.h ../../include/Ice/StatsF.h ../Ice/TraceLevelsF.h ../Ice/DefaultsAndOverridesF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/LoggerF.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/LocalException.h ../../include/Ice/Process.h ../../include/Ice/Incoming.h ../Ice/RouterInfo.h ../Ice/LocatorInfo.h ../Ice/ConnectionI.h ../../include/Ice/Connection.h ../Ice/EventHandler.h ../Ice/EventHandlerF.h ../../include/Ice/Stream.h -ReferenceFactory$(OBJEXT): ReferenceFactory.cpp ../../include/Ice/Communicator.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/LoggerF.h ../../include/Ice/StatsF.h ../../include/Ice/PropertiesF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/PluginF.h ../../include/Ice/ImplicitContextF.h ../Ice/ReferenceFactory.h ../Ice/ReferenceFactoryF.h ../Ice/Reference.h ../../include/IceUtil/RecMutex.h ../../include/Ice/InstanceF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/SharedContext.h ../../include/Ice/BuiltinSequences.h ../Ice/ProxyFactory.h ../../include/Ice/LocalException.h ../Ice/Instance.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../Ice/TraceLevelsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/ThreadPoolF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/Initialize.h ../../include/Ice/StringConverter.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/BasicStream.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../Ice/EndpointI.h ../Ice/TransceiverF.h ../Ice/ConnectorF.h ../Ice/AcceptorF.h ../Ice/EndpointFactoryManager.h ../../include/Ice/EndpointFactoryF.h ../Ice/RouterInfo.h ../../include/Ice/Router.h ../Ice/LocatorInfo.h ../../include/Ice/Locator.h ../../include/Ice/IncomingAsync.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/FactoryTable.h ../../include/Ice/FactoryTableDef.h ../../include/IceUtil/StaticMutex.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/ProcessF.h ../../include/Ice/LoggerUtil.h ../../include/Ice/Properties.h ../Ice/DefaultsAndOverrides.h ../Ice/PropertyNames.h ../../include/IceUtil/StringUtil.h -Reference$(OBJEXT): Reference.cpp ../Ice/Reference.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/ReferenceF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../Ice/ReferenceFactoryF.h ../../include/Ice/EndpointIF.h ../../include/Ice/LocalObject.h ../../include/Ice/LocalObjectF.h ../../include/Ice/InstanceF.h ../../include/Ice/RouterF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/LocatorF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/SharedContext.h ../Ice/ReferenceFactory.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/LocalException.h ../Ice/Instance.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/StatsF.h ../Ice/TraceLevelsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/ThreadPoolF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/LoggerF.h ../../include/Ice/StringConverter.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../Ice/EndpointI.h ../Ice/TransceiverF.h ../Ice/ConnectorF.h ../Ice/AcceptorF.h ../Ice/RouterInfo.h ../../include/Ice/Router.h ../Ice/LocatorInfo.h ../../include/Ice/Locator.h ../../include/Ice/IncomingAsync.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/FactoryTable.h ../../include/Ice/FactoryTableDef.h ../../include/IceUtil/StaticMutex.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/ProcessF.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h ../Ice/ConnectionI.h ../../include/Ice/Connection.h ../Ice/EventHandler.h ../Ice/EventHandlerF.h ../Ice/ConnectionFactory.h ../../include/Ice/LoggerUtil.h ../Ice/TraceLevels.h ../Ice/DefaultsAndOverrides.h ../../include/IceUtil/StringUtil.h ../../include/IceUtil/Random.h -RouterInfo$(OBJEXT): RouterInfo.cpp ../Ice/RouterInfo.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../Ice/RouterInfoF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/RouterF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Router.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/LocalException.h ../../include/Ice/Connection.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h ../Ice/Reference.h ../../include/IceUtil/RecMutex.h ../Ice/ReferenceFactoryF.h ../../include/Ice/LocatorF.h ../Ice/LocatorInfoF.h ../Ice/SharedContext.h -Router$(OBJEXT): Router.cpp ../../include/Ice/Router.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/LocalException.h ../../include/Ice/ObjectFactory.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/DisableWarnings.h -ServantLocator$(OBJEXT): ServantLocator.cpp ../../include/Ice/ServantLocator.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Object.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/StreamF.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/DisableWarnings.h -ServantManager$(OBJEXT): ServantManager.cpp ../Ice/ServantManager.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/InstanceF.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/Identity.h ../../include/Ice/FacetMap.h ../../include/Ice/ServantLocator.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/LocalException.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/LoggerUtil.h ../../include/Ice/LoggerF.h ../Ice/Instance.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/StatsF.h ../Ice/TraceLevelsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../Ice/ThreadPoolF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/StringConverter.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/Direct.h ../../include/IceUtil/StringUtil.h -Service$(OBJEXT): Service.cpp ../../include/IceUtil/DisableWarnings.h ../../include/IceUtil/CtrlCHandler.h ../../include/IceUtil/Config.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/IceUtil/ArgVector.h ../../include/Ice/Service.h ../../include/Ice/Ice.h ../../include/Ice/Initialize.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/PropertiesF.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/InstanceF.h ../../include/Ice/LoggerF.h ../../include/Ice/StatsF.h ../../include/Ice/StringConverter.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/LocalException.h ../../include/Ice/Properties.h ../../include/Ice/Outgoing.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../../include/Ice/Logger.h ../../include/Ice/LoggerUtil.h ../../include/Ice/Stats.h ../../include/Ice/Communicator.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/PluginF.h ../../include/Ice/ImplicitContextF.h ../../include/Ice/ObjectFactory.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/FacetMap.h ../../include/Ice/ServantLocator.h ../../include/Ice/OutgoingAsync.h ../../include/IceUtil/RecMutex.h ../../include/Ice/IncomingAsync.h ../../include/Ice/Process.h ../../include/Ice/Application.h ../../include/Ice/Connection.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h ../../include/Ice/Stream.h ../../include/Ice/ImplicitContext.h ../../include/Ice/Locator.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/FactoryTable.h ../../include/Ice/FactoryTableDef.h ../../include/IceUtil/StaticMutex.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/ProcessF.h ../../include/Ice/Router.h ../../include/Ice/DispatchInterceptor.h ../../include/Ice/IconvStringConverter.h ../Ice/LoggerI.h ../Ice/Network.h -SliceChecksumDict$(OBJEXT): SliceChecksumDict.cpp ../../include/Ice/SliceChecksumDict.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Object.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/DisableWarnings.h -SliceChecksums$(OBJEXT): SliceChecksums.cpp ../../include/Ice/SliceChecksums.h ../../include/Ice/SliceChecksumDict.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/IceUtil/StaticMutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h -Stats$(OBJEXT): Stats.cpp ../../include/Ice/Stats.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/DisableWarnings.h -StreamI$(OBJEXT): StreamI.cpp ../Ice/StreamI.h ../../include/Ice/Stream.h ../../include/Ice/StreamF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/Object.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/LoggerF.h ../../include/Ice/StatsF.h ../../include/Ice/BuiltinSequences.h -Stream$(OBJEXT): Stream.cpp ../../include/Ice/Stream.h ../../include/Ice/StreamF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/Object.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h -StringConverter$(OBJEXT): StringConverter.cpp ../../include/Ice/StringConverter.h ../../include/Ice/Config.h ../../include/IceUtil/Config.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Handle.h ../../include/IceUtil/IceUtil.h ../../include/IceUtil/AbstractMutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Algorithm.h ../../include/IceUtil/ArgVector.h ../../include/IceUtil/Base64.h ../../include/IceUtil/Cache.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/CountDownLatch.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/IceUtil/CtrlCHandler.h ../../include/IceUtil/Functional.h ../../include/IceUtil/InputUtil.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/MD5.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Options.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/OutputUtil.h ../../include/IceUtil/RWRecMutex.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Random.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/StaticMutex.h ../../include/IceUtil/StringUtil.h ../../include/IceUtil/UUID.h ../../include/IceUtil/Unicode.h ../../include/IceUtil/Timer.h ../../include/Ice/LocalException.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/BuiltinSequences.h +ProtocolPluginFacade$(OBJEXT): ProtocolPluginFacade.cpp ../../include/Ice/ProtocolPluginFacade.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/ProtocolPluginFacadeF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/EndpointFactoryF.h ../../include/Ice/InstanceF.h ../../include/Ice/EndpointIF.h ../Ice/Instance.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/StatsF.h ../Ice/TraceLevelsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../../include/Ice/ProxyFactoryF.h ../Ice/ThreadPoolF.h ../Ice/SelectorThreadF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/Proxy.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/LoggerF.h ../../include/Ice/StringConverter.h ../../include/Ice/BuiltinSequences.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/LocalException.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../Ice/EndpointFactoryManager.h ../Ice/TraceLevels.h ../Ice/DefaultsAndOverrides.h +ProxyFactory$(OBJEXT): ProxyFactory.cpp ../../include/IceUtil/Thread.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Time.h ../Ice/ProxyFactory.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/InstanceF.h ../../include/Ice/ReferenceF.h ../../include/Ice/ProxyF.h ../../include/Ice/Exception.h ../Ice/Instance.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/StatsF.h ../Ice/TraceLevelsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../Ice/ThreadPoolF.h ../Ice/SelectorThreadF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/Proxy.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/LoggerF.h ../../include/Ice/StringConverter.h ../../include/Ice/BuiltinSequences.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/LocalException.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../Ice/ReferenceFactory.h ../Ice/Reference.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../Ice/LocatorInfo.h ../../include/Ice/Properties.h ../../include/Ice/LoggerUtil.h ../Ice/TraceLevels.h +Proxy$(OBJEXT): Proxy.cpp ../../include/Ice/Proxy.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/ProxyF.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/IceUtil/Handle.h ../../include/Ice/Handle.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/LocalObject.h ../../include/Ice/LocalObjectF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../Ice/ProxyFactory.h ../../include/Ice/InstanceF.h ../Ice/ReferenceFactory.h ../Ice/ReferenceFactoryF.h ../Ice/Reference.h ../../include/IceUtil/RecMutex.h ../../include/Ice/RouterF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/LocatorF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/SharedContext.h ../../include/Ice/BuiltinSequences.h ../Ice/ObjectAdapterFactory.h ../Ice/ObjectAdapterI.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/FacetMap.h ../../include/Ice/ObjectAdapterFactoryF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ServantManagerF.h ../Ice/ConnectorF.h ../Ice/ThreadPoolF.h ../../include/Ice/Outgoing.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/OutgoingAsync.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Thread.h ../Ice/ConnectRequestHandler.h ../Ice/RequestHandler.h ../Ice/RouterInfo.h ../Ice/ConnectionRequestHandler.h ../../include/Ice/Direct.h ../Ice/EndpointI.h ../Ice/TransceiverF.h ../Ice/AcceptorF.h ../Ice/Instance.h ../../include/Ice/StatsF.h ../Ice/TraceLevelsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/SelectorThreadF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/LoggerF.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/LocalException.h ../../include/Ice/Process.h ../../include/Ice/Incoming.h ../Ice/LocatorInfo.h ../Ice/ConnectionI.h ../../include/Ice/Connection.h ../Ice/EventHandler.h ../Ice/EventHandlerF.h ../Ice/SelectorThread.h ../Ice/Selector.h ../../include/Ice/Stream.h +ReferenceFactory$(OBJEXT): ReferenceFactory.cpp ../../include/Ice/Communicator.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/LoggerF.h ../../include/Ice/StatsF.h ../../include/Ice/PropertiesF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/PluginF.h ../../include/Ice/ImplicitContextF.h ../Ice/ReferenceFactory.h ../Ice/ReferenceFactoryF.h ../Ice/Reference.h ../../include/IceUtil/RecMutex.h ../../include/Ice/InstanceF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/SharedContext.h ../../include/Ice/BuiltinSequences.h ../Ice/ProxyFactory.h ../../include/Ice/LocalException.h ../Ice/Instance.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../Ice/TraceLevelsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/ThreadPoolF.h ../Ice/SelectorThreadF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/Initialize.h ../../include/Ice/StringConverter.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/BasicStream.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../Ice/EndpointI.h ../Ice/TransceiverF.h ../Ice/ConnectorF.h ../Ice/AcceptorF.h ../Ice/EndpointFactoryManager.h ../../include/Ice/EndpointFactoryF.h ../Ice/RouterInfo.h ../../include/Ice/Router.h ../Ice/LocatorInfo.h ../../include/Ice/Locator.h ../../include/Ice/IncomingAsync.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/FactoryTable.h ../../include/Ice/FactoryTableDef.h ../../include/IceUtil/StaticMutex.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/ProcessF.h ../../include/Ice/LoggerUtil.h ../../include/Ice/Properties.h ../Ice/DefaultsAndOverrides.h ../Ice/PropertyNames.h ../../include/IceUtil/StringUtil.h +Reference$(OBJEXT): Reference.cpp ../Ice/Reference.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/RecMutex.h ../../include/Ice/ReferenceF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../Ice/ReferenceFactoryF.h ../../include/Ice/EndpointIF.h ../../include/Ice/LocalObject.h ../../include/Ice/LocalObjectF.h ../../include/Ice/InstanceF.h ../../include/Ice/RouterF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/LocatorF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/SharedContext.h ../Ice/ReferenceFactory.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/LocalException.h ../Ice/Instance.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/StatsF.h ../Ice/TraceLevelsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/ThreadPoolF.h ../Ice/SelectorThreadF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/LoggerF.h ../../include/Ice/StringConverter.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../Ice/EndpointI.h ../Ice/TransceiverF.h ../Ice/ConnectorF.h ../Ice/AcceptorF.h ../Ice/RouterInfo.h ../../include/Ice/Router.h ../Ice/LocatorInfo.h ../../include/Ice/Locator.h ../../include/Ice/IncomingAsync.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/FactoryTable.h ../../include/Ice/FactoryTableDef.h ../../include/IceUtil/StaticMutex.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/ProcessF.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h ../Ice/ConnectionI.h ../../include/Ice/Connection.h ../Ice/EventHandler.h ../Ice/EventHandlerF.h ../Ice/SelectorThread.h ../Ice/Selector.h ../Ice/ConnectionFactory.h ../../include/Ice/LoggerUtil.h ../Ice/TraceLevels.h ../Ice/DefaultsAndOverrides.h ../../include/IceUtil/StringUtil.h ../../include/IceUtil/Random.h +RequestHandler$(OBJEXT): RequestHandler.cpp ../Ice/RequestHandler.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/LocalObject.h ../../include/Ice/LocalObjectF.h +RouterInfo$(OBJEXT): RouterInfo.cpp ../Ice/RouterInfo.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../Ice/RouterInfoF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/RouterF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Router.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/InstanceF.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/OutgoingAsync.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Thread.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../../include/Ice/LocalException.h ../../include/Ice/Connection.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h ../Ice/Reference.h ../../include/IceUtil/RecMutex.h ../Ice/ReferenceFactoryF.h ../../include/Ice/LocatorF.h ../Ice/LocatorInfoF.h ../Ice/SharedContext.h +Router$(OBJEXT): Router.cpp ../../include/Ice/Router.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/InstanceF.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/OutgoingAsync.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Thread.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/LocalException.h ../../include/Ice/ObjectFactory.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/DisableWarnings.h +Selector$(OBJEXT): Selector.cpp ../../include/IceUtil/DisableWarnings.h ../Ice/Selector.h ../../include/Ice/Config.h ../../include/IceUtil/Config.h ../../include/Ice/InstanceF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/ProxyHandle.h ../Ice/Network.h ../../include/Ice/PropertiesF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/LoggerF.h ../Ice/Instance.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/StatsF.h ../Ice/TraceLevelsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../Ice/ThreadPoolF.h ../Ice/SelectorThreadF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/StringConverter.h ../../include/Ice/BuiltinSequences.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/LocalException.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../../include/Ice/LoggerUtil.h +SelectorThread$(OBJEXT): SelectorThread.cpp ../../include/IceUtil/DisableWarnings.h ../Ice/SelectorThread.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Timer.h ../../include/Ice/Config.h ../Ice/SelectorThreadF.h ../../include/Ice/Handle.h ../../include/Ice/ProxyHandle.h ../../include/Ice/InstanceF.h ../Ice/Selector.h ../Ice/Network.h ../../include/Ice/PropertiesF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/LoggerF.h ../Ice/Instance.h ../../include/IceUtil/RecMutex.h ../../include/Ice/StatsF.h ../Ice/TraceLevelsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../Ice/ThreadPoolF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/StringConverter.h ../../include/Ice/BuiltinSequences.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/LocalException.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../../include/Ice/LoggerUtil.h +ServantLocator$(OBJEXT): ServantLocator.cpp ../../include/Ice/ServantLocator.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/StreamF.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/DisableWarnings.h +ServantManager$(OBJEXT): ServantManager.cpp ../Ice/ServantManager.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/InstanceF.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/Identity.h ../../include/Ice/FacetMap.h ../../include/Ice/ServantLocator.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/LocalException.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/LoggerUtil.h ../../include/Ice/LoggerF.h ../Ice/Instance.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/StatsF.h ../Ice/TraceLevelsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../Ice/ThreadPoolF.h ../Ice/SelectorThreadF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/StringConverter.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/Direct.h ../../include/IceUtil/StringUtil.h +Service$(OBJEXT): Service.cpp ../../include/IceUtil/DisableWarnings.h ../../include/IceUtil/CtrlCHandler.h ../../include/IceUtil/Config.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/IceUtil/ArgVector.h ../../include/Ice/Service.h ../../include/Ice/Ice.h ../../include/Ice/Initialize.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/PropertiesF.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/InstanceF.h ../../include/Ice/LoggerF.h ../../include/Ice/StatsF.h ../../include/Ice/StringConverter.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/LocalException.h ../../include/Ice/Properties.h ../../include/Ice/Outgoing.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../../include/Ice/Logger.h ../../include/Ice/LoggerUtil.h ../../include/Ice/Stats.h ../../include/Ice/Communicator.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/PluginF.h ../../include/Ice/ImplicitContextF.h ../../include/Ice/ObjectFactory.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/FacetMap.h ../../include/Ice/ServantLocator.h ../../include/Ice/OutgoingAsync.h ../../include/IceUtil/Timer.h ../../include/Ice/IncomingAsync.h ../../include/Ice/Process.h ../../include/Ice/Application.h ../../include/Ice/Connection.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h ../../include/Ice/Stream.h ../../include/Ice/ImplicitContext.h ../../include/Ice/Locator.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/FactoryTable.h ../../include/Ice/FactoryTableDef.h ../../include/IceUtil/StaticMutex.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/ProcessF.h ../../include/Ice/Router.h ../../include/Ice/DispatchInterceptor.h ../../include/Ice/IconvStringConverter.h ../Ice/LoggerI.h ../Ice/Network.h +SliceChecksumDict$(OBJEXT): SliceChecksumDict.cpp ../../include/Ice/SliceChecksumDict.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/DisableWarnings.h +SliceChecksums$(OBJEXT): SliceChecksums.cpp ../../include/Ice/SliceChecksums.h ../../include/Ice/SliceChecksumDict.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/IceUtil/StaticMutex.h +Stats$(OBJEXT): Stats.cpp ../../include/Ice/Stats.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/DisableWarnings.h +StreamI$(OBJEXT): StreamI.cpp ../Ice/StreamI.h ../../include/Ice/Stream.h ../../include/Ice/StreamF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/LoggerF.h ../../include/Ice/StatsF.h ../../include/Ice/BuiltinSequences.h +Stream$(OBJEXT): Stream.cpp ../../include/Ice/Stream.h ../../include/Ice/StreamF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h +StringConverter$(OBJEXT): StringConverter.cpp ../../include/Ice/StringConverter.h ../../include/Ice/Config.h ../../include/IceUtil/Config.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Handle.h ../../include/IceUtil/IceUtil.h ../../include/IceUtil/AbstractMutex.h ../../include/IceUtil/Algorithm.h ../../include/IceUtil/ArgVector.h ../../include/IceUtil/Base64.h ../../include/IceUtil/Cache.h ../../include/IceUtil/CountDownLatch.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/IceUtil/CtrlCHandler.h ../../include/IceUtil/Functional.h ../../include/IceUtil/InputUtil.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/MD5.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Options.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/OutputUtil.h ../../include/IceUtil/RWRecMutex.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Random.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/StaticMutex.h ../../include/IceUtil/StringUtil.h ../../include/IceUtil/UUID.h ../../include/IceUtil/Unicode.h ../../include/IceUtil/Timer.h ../../include/Ice/LocalException.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/BuiltinSequences.h SysLoggerI$(OBJEXT): SysLoggerI.cpp ../Ice/SysLoggerI.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Config.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Logger.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h -TcpAcceptor$(OBJEXT): TcpAcceptor.cpp ../Ice/TcpAcceptor.h ../Ice/TransceiverF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/InstanceF.h ../Ice/TraceLevelsF.h ../../include/Ice/LoggerF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../Ice/Acceptor.h ../Ice/AcceptorF.h ../Ice/TcpTransceiver.h ../../include/Ice/StatsF.h ../Ice/Transceiver.h ../Ice/Instance.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/CommunicatorF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../../include/Ice/ProxyFactoryF.h ../Ice/ThreadPoolF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/Proxy.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/StringConverter.h ../../include/Ice/BuiltinSequences.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/LocalException.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../Ice/TraceLevels.h ../../include/Ice/LoggerUtil.h ../Ice/Network.h -TcpConnector$(OBJEXT): TcpConnector.cpp ../Ice/TcpConnector.h ../Ice/TransceiverF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/InstanceF.h ../Ice/TraceLevelsF.h ../../include/Ice/LoggerF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../Ice/Connector.h ../Ice/ConnectorF.h ../Ice/TcpTransceiver.h ../../include/Ice/StatsF.h ../Ice/Transceiver.h ../Ice/TcpEndpointI.h ../Ice/EndpointI.h ../../include/Ice/Endpoint.h ../../include/Ice/EndpointIF.h ../Ice/AcceptorF.h ../../include/Ice/EndpointFactory.h ../../include/Ice/EndpointFactoryF.h ../Ice/Instance.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/CommunicatorF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../../include/Ice/ProxyFactoryF.h ../Ice/ThreadPoolF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/Proxy.h ../../include/Ice/ConnectionIF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/StringConverter.h ../../include/Ice/BuiltinSequences.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/LocalException.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../Ice/TraceLevels.h ../../include/Ice/LoggerUtil.h ../Ice/Network.h -TcpEndpointI$(OBJEXT): TcpEndpointI.cpp ../Ice/TcpEndpointI.h ../Ice/EndpointI.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Endpoint.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/EndpointIF.h ../../include/Ice/InstanceF.h ../Ice/TransceiverF.h ../Ice/ConnectorF.h ../Ice/AcceptorF.h ../../include/Ice/EndpointFactory.h ../../include/Ice/EndpointFactoryF.h ../Ice/Network.h ../../include/Ice/PropertiesF.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/LoggerF.h ../Ice/TcpAcceptor.h ../Ice/TraceLevelsF.h ../Ice/Acceptor.h ../Ice/TcpConnector.h ../Ice/Connector.h ../Ice/TcpTransceiver.h ../../include/Ice/StatsF.h ../Ice/Transceiver.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/LocalException.h ../../include/Ice/BuiltinSequences.h ../Ice/Instance.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../Ice/ThreadPoolF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../Ice/DefaultsAndOverrides.h -TcpTransceiver$(OBJEXT): TcpTransceiver.cpp ../Ice/TcpTransceiver.h ../../include/Ice/InstanceF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../Ice/TraceLevelsF.h ../../include/Ice/LoggerF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/StatsF.h ../Ice/Transceiver.h ../Ice/TransceiverF.h ../Ice/Instance.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/CommunicatorF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../../include/Ice/ProxyFactoryF.h ../Ice/ThreadPoolF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/Proxy.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/StringConverter.h ../../include/Ice/BuiltinSequences.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/LocalException.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../Ice/TraceLevels.h ../../include/Ice/LoggerUtil.h ../../include/Ice/Stats.h ../Ice/Network.h -ThreadPool$(OBJEXT): ThreadPool.cpp ../../include/IceUtil/DisableWarnings.h ../Ice/ThreadPool.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Handle.h ../Ice/ThreadPoolF.h ../../include/Ice/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/InstanceF.h ../../include/Ice/LoggerF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/PropertiesF.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../Ice/EventHandlerF.h ../Ice/EventHandler.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../Ice/Network.h ../../include/Ice/LocalException.h ../../include/Ice/BuiltinSequences.h ../Ice/Instance.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Timer.h ../../include/Ice/StatsF.h ../Ice/TraceLevelsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../../include/Ice/LoggerUtil.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h ../Ice/ObjectAdapterFactory.h ../Ice/ObjectAdapterI.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../Ice/ConnectorF.h ../../include/Ice/Properties.h -TraceLevels$(OBJEXT): TraceLevels.cpp ../Ice/TraceLevels.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../Ice/TraceLevelsF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/PropertiesF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Properties.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../../include/Ice/BuiltinSequences.h -TraceUtil$(OBJEXT): TraceUtil.cpp ../../include/IceUtil/StaticMutex.h ../../include/IceUtil/Config.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/StringUtil.h ../Ice/TraceUtil.h ../../include/Ice/LoggerF.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../Ice/TraceLevelsF.h ../Ice/Instance.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/InstanceF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/StatsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../../include/Ice/ProxyFactoryF.h ../Ice/ThreadPoolF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/Proxy.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/StringConverter.h ../../include/Ice/BuiltinSequences.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/LocalException.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../Ice/TraceLevels.h ../../include/Ice/Logger.h ../Ice/ReplyStatus.h -Transceiver$(OBJEXT): Transceiver.cpp ../Ice/Transceiver.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../Ice/TransceiverF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h -UdpConnector$(OBJEXT): UdpConnector.cpp ../Ice/UdpConnector.h ../Ice/TransceiverF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/InstanceF.h ../Ice/Connector.h ../Ice/ConnectorF.h ../Ice/UdpTransceiver.h ../Ice/TraceLevelsF.h ../../include/Ice/LoggerF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/StatsF.h ../Ice/Transceiver.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../Ice/UdpEndpointI.h ../Ice/EndpointI.h ../../include/Ice/Endpoint.h ../../include/Ice/EndpointIF.h ../Ice/AcceptorF.h ../../include/Ice/EndpointFactory.h ../../include/Ice/EndpointFactoryF.h ../Ice/Network.h ../../include/Ice/PropertiesF.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/LocalException.h ../../include/Ice/BuiltinSequences.h -UdpEndpointI$(OBJEXT): UdpEndpointI.cpp ../Ice/UdpEndpointI.h ../Ice/EndpointI.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Endpoint.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/EndpointIF.h ../../include/Ice/InstanceF.h ../Ice/TransceiverF.h ../Ice/ConnectorF.h ../Ice/AcceptorF.h ../../include/Ice/EndpointFactory.h ../../include/Ice/EndpointFactoryF.h ../Ice/Network.h ../../include/Ice/PropertiesF.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/LoggerF.h ../Ice/UdpConnector.h ../Ice/Connector.h ../Ice/UdpTransceiver.h ../Ice/TraceLevelsF.h ../../include/Ice/StatsF.h ../Ice/Transceiver.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/LocalException.h ../../include/Ice/BuiltinSequences.h ../Ice/Instance.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../Ice/ThreadPoolF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../Ice/DefaultsAndOverrides.h -UdpTransceiver$(OBJEXT): UdpTransceiver.cpp ../Ice/UdpTransceiver.h ../../include/Ice/InstanceF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../Ice/TraceLevelsF.h ../../include/Ice/LoggerF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/StatsF.h ../Ice/Transceiver.h ../Ice/TransceiverF.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../Ice/Instance.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/CommunicatorF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../../include/Ice/ProxyFactoryF.h ../Ice/ThreadPoolF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/Proxy.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/StringConverter.h ../../include/Ice/BuiltinSequences.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/LocalException.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../Ice/TraceLevels.h ../../include/Ice/LoggerUtil.h ../../include/Ice/Stats.h ../Ice/Network.h ../../include/Ice/Properties.h -UnknownEndpointI$(OBJEXT): UnknownEndpointI.cpp ../Ice/UnknownEndpointI.h ../Ice/EndpointI.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Endpoint.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/EndpointIF.h ../../include/Ice/InstanceF.h ../Ice/TransceiverF.h ../Ice/ConnectorF.h ../Ice/AcceptorF.h ../../include/Ice/EndpointFactory.h ../../include/Ice/EndpointFactoryF.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../Ice/Instance.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/CommunicatorF.h ../../include/Ice/StatsF.h ../Ice/TraceLevelsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../../include/Ice/ProxyFactoryF.h ../Ice/ThreadPoolF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/Proxy.h ../../include/Ice/ConnectionIF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/LoggerF.h ../../include/Ice/BuiltinSequences.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/LocalException.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../../include/IceUtil/Base64.h -DLLMain$(OBJEXT): DLLMain.cpp ../Ice/EventLoggerI.h ../../include/Ice/Logger.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalException.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Service.h ../../include/Ice/Ice.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/InstanceF.h ../../include/Ice/LoggerF.h ../../include/Ice/StatsF.h ../../include/Ice/StringConverter.h ../../include/Ice/Properties.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../../include/Ice/LoggerUtil.h ../../include/Ice/Stats.h ../../include/Ice/Communicator.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/PluginF.h ../../include/Ice/ImplicitContextF.h ../../include/Ice/ObjectFactory.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/FacetMap.h ../../include/Ice/ServantLocator.h ../../include/Ice/OutgoingAsync.h ../../include/IceUtil/RecMutex.h ../../include/Ice/IncomingAsync.h ../../include/Ice/Process.h ../../include/Ice/Application.h ../../include/Ice/Connection.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h ../../include/Ice/Stream.h ../../include/Ice/Locator.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/FactoryTable.h ../../include/Ice/FactoryTableDef.h ../../include/IceUtil/StaticMutex.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/ProcessF.h ../../include/Ice/Router.h ../../include/Ice/DispatchInterceptor.h ../../include/Ice/IconvStringConverter.h -EventLoggerI$(OBJEXT): EventLoggerI.cpp ../Ice/EventLoggerI.h ../../include/Ice/Logger.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../Ice/EventLoggerMsg.h ../../include/Ice/LocalException.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/BuiltinSequences.h ../Ice/Network.h ../../include/Ice/PropertiesF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/LoggerF.h ../../include/IceUtil/StaticMutex.h +TcpAcceptor$(OBJEXT): TcpAcceptor.cpp ../Ice/TcpAcceptor.h ../Ice/TransceiverF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/InstanceF.h ../Ice/TraceLevelsF.h ../../include/Ice/LoggerF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../Ice/Acceptor.h ../Ice/AcceptorF.h ../Ice/TcpTransceiver.h ../../include/Ice/StatsF.h ../Ice/Transceiver.h ../Ice/Selector.h ../Ice/Instance.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/CommunicatorF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../../include/Ice/ProxyFactoryF.h ../Ice/ThreadPoolF.h ../Ice/SelectorThreadF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/Proxy.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/StringConverter.h ../../include/Ice/BuiltinSequences.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/LocalException.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../Ice/TraceLevels.h ../../include/Ice/LoggerUtil.h ../Ice/Network.h +TcpConnector$(OBJEXT): TcpConnector.cpp ../Ice/TcpConnector.h ../Ice/TransceiverF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/InstanceF.h ../Ice/TraceLevelsF.h ../../include/Ice/LoggerF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../Ice/Connector.h ../Ice/ConnectorF.h ../Ice/TcpTransceiver.h ../../include/Ice/StatsF.h ../Ice/Transceiver.h ../Ice/Selector.h ../Ice/TcpEndpointI.h ../Ice/EndpointI.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/Endpoint.h ../../include/Ice/EndpointIF.h ../Ice/AcceptorF.h ../../include/Ice/EndpointFactory.h ../../include/Ice/EndpointFactoryF.h ../Ice/Instance.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Timer.h ../../include/Ice/CommunicatorF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../../include/Ice/ProxyFactoryF.h ../Ice/ThreadPoolF.h ../Ice/SelectorThreadF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/Proxy.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/StringConverter.h ../../include/Ice/BuiltinSequences.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/LocalException.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../Ice/TraceLevels.h ../../include/Ice/LoggerUtil.h ../Ice/Network.h +TcpEndpointI$(OBJEXT): TcpEndpointI.cpp ../Ice/TcpEndpointI.h ../Ice/EndpointI.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/Endpoint.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/EndpointIF.h ../../include/Ice/InstanceF.h ../Ice/TransceiverF.h ../Ice/ConnectorF.h ../Ice/AcceptorF.h ../../include/Ice/EndpointFactory.h ../../include/Ice/EndpointFactoryF.h ../Ice/Network.h ../../include/Ice/PropertiesF.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/LoggerF.h ../Ice/TcpAcceptor.h ../Ice/TraceLevelsF.h ../Ice/Acceptor.h ../Ice/TcpConnector.h ../Ice/Connector.h ../Ice/TcpTransceiver.h ../../include/Ice/StatsF.h ../Ice/Transceiver.h ../Ice/Selector.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/LocalException.h ../../include/Ice/BuiltinSequences.h ../Ice/Instance.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Timer.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../Ice/ThreadPoolF.h ../Ice/SelectorThreadF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../Ice/DefaultsAndOverrides.h +TcpTransceiver$(OBJEXT): TcpTransceiver.cpp ../Ice/TcpTransceiver.h ../../include/Ice/InstanceF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../Ice/TraceLevelsF.h ../../include/Ice/LoggerF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/StatsF.h ../Ice/Transceiver.h ../Ice/TransceiverF.h ../Ice/Selector.h ../Ice/Instance.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/CommunicatorF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../../include/Ice/ProxyFactoryF.h ../Ice/ThreadPoolF.h ../Ice/SelectorThreadF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/Proxy.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/StringConverter.h ../../include/Ice/BuiltinSequences.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/LocalException.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../Ice/TraceLevels.h ../../include/Ice/LoggerUtil.h ../../include/Ice/Stats.h ../Ice/Network.h +ThreadPool$(OBJEXT): ThreadPool.cpp ../../include/IceUtil/DisableWarnings.h ../Ice/ThreadPool.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../Ice/ThreadPoolF.h ../../include/Ice/Handle.h ../../include/Ice/ProxyHandle.h ../../include/Ice/InstanceF.h ../../include/Ice/LoggerF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/PropertiesF.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../Ice/EventHandlerF.h ../Ice/Selector.h ../Ice/EventHandler.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../Ice/Network.h ../../include/Ice/LocalException.h ../../include/Ice/BuiltinSequences.h ../Ice/Instance.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Timer.h ../../include/Ice/StatsF.h ../Ice/TraceLevelsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../Ice/SelectorThreadF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../../include/Ice/LoggerUtil.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h ../Ice/ObjectAdapterFactory.h ../Ice/ObjectAdapterI.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../Ice/ConnectorF.h ../../include/Ice/Properties.h +TraceLevels$(OBJEXT): TraceLevels.cpp ../Ice/TraceLevels.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../Ice/TraceLevelsF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/PropertiesF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Properties.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/InstanceF.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../../include/Ice/BuiltinSequences.h +TraceUtil$(OBJEXT): TraceUtil.cpp ../../include/IceUtil/StaticMutex.h ../../include/IceUtil/Config.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/StringUtil.h ../Ice/TraceUtil.h ../../include/Ice/LoggerF.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Mutex.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../Ice/TraceLevelsF.h ../Ice/Instance.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/InstanceF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/StatsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../../include/Ice/ProxyFactoryF.h ../Ice/ThreadPoolF.h ../Ice/SelectorThreadF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/Proxy.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/StringConverter.h ../../include/Ice/BuiltinSequences.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/LocalException.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../Ice/TraceLevels.h ../../include/Ice/Logger.h ../Ice/ReplyStatus.h +Transceiver$(OBJEXT): Transceiver.cpp ../Ice/Transceiver.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../Ice/TransceiverF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../Ice/Selector.h ../../include/Ice/InstanceF.h +UdpConnector$(OBJEXT): UdpConnector.cpp ../Ice/UdpConnector.h ../Ice/TransceiverF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/InstanceF.h ../Ice/Connector.h ../Ice/ConnectorF.h ../Ice/UdpTransceiver.h ../Ice/TraceLevelsF.h ../../include/Ice/LoggerF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/StatsF.h ../Ice/Transceiver.h ../Ice/Selector.h ../Ice/UdpEndpointI.h ../Ice/EndpointI.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/Endpoint.h ../../include/Ice/EndpointIF.h ../Ice/AcceptorF.h ../../include/Ice/EndpointFactory.h ../../include/Ice/EndpointFactoryF.h ../Ice/Network.h ../../include/Ice/PropertiesF.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/LocalException.h ../../include/Ice/BuiltinSequences.h +UdpEndpointI$(OBJEXT): UdpEndpointI.cpp ../Ice/UdpEndpointI.h ../Ice/EndpointI.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/Endpoint.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/EndpointIF.h ../../include/Ice/InstanceF.h ../Ice/TransceiverF.h ../Ice/ConnectorF.h ../Ice/AcceptorF.h ../../include/Ice/EndpointFactory.h ../../include/Ice/EndpointFactoryF.h ../Ice/Network.h ../../include/Ice/PropertiesF.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/LoggerF.h ../Ice/UdpConnector.h ../Ice/Connector.h ../Ice/UdpTransceiver.h ../Ice/TraceLevelsF.h ../../include/Ice/StatsF.h ../Ice/Transceiver.h ../Ice/Selector.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/LocalException.h ../../include/Ice/BuiltinSequences.h ../Ice/Instance.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Timer.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../Ice/ThreadPoolF.h ../Ice/SelectorThreadF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../Ice/DefaultsAndOverrides.h +UdpTransceiver$(OBJEXT): UdpTransceiver.cpp ../Ice/UdpTransceiver.h ../../include/Ice/InstanceF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../Ice/TraceLevelsF.h ../../include/Ice/LoggerF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/StatsF.h ../Ice/Transceiver.h ../Ice/TransceiverF.h ../Ice/Selector.h ../Ice/Instance.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/CommunicatorF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../../include/Ice/ProxyFactoryF.h ../Ice/ThreadPoolF.h ../Ice/SelectorThreadF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/Proxy.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/StringConverter.h ../../include/Ice/BuiltinSequences.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/LocalException.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../Ice/TraceLevels.h ../../include/Ice/LoggerUtil.h ../../include/Ice/Stats.h ../Ice/Network.h ../../include/Ice/Properties.h +UnknownEndpointI$(OBJEXT): UnknownEndpointI.cpp ../Ice/UnknownEndpointI.h ../Ice/EndpointI.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/Endpoint.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/EndpointIF.h ../../include/Ice/InstanceF.h ../Ice/TransceiverF.h ../Ice/ConnectorF.h ../Ice/AcceptorF.h ../../include/Ice/EndpointFactory.h ../../include/Ice/EndpointFactoryF.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../Ice/Instance.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Timer.h ../../include/Ice/CommunicatorF.h ../../include/Ice/StatsF.h ../Ice/TraceLevelsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../../include/Ice/ProxyFactoryF.h ../Ice/ThreadPoolF.h ../Ice/SelectorThreadF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/Proxy.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/LoggerF.h ../../include/Ice/BuiltinSequences.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/LocalException.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../../include/IceUtil/Base64.h +DLLMain$(OBJEXT): DLLMain.cpp ../Ice/EventLoggerI.h ../../include/Ice/Logger.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalException.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Service.h ../../include/Ice/Ice.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/InstanceF.h ../../include/Ice/LoggerF.h ../../include/Ice/StatsF.h ../../include/Ice/StringConverter.h ../../include/Ice/Properties.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../../include/Ice/LoggerUtil.h ../../include/Ice/Stats.h ../../include/Ice/Communicator.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/PluginF.h ../../include/Ice/ImplicitContextF.h ../../include/Ice/ObjectFactory.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/FacetMap.h ../../include/Ice/ServantLocator.h ../../include/Ice/OutgoingAsync.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Thread.h ../../include/Ice/IncomingAsync.h ../../include/Ice/Process.h ../../include/Ice/Application.h ../../include/Ice/Connection.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h ../../include/Ice/Stream.h ../../include/Ice/Locator.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/FactoryTable.h ../../include/Ice/FactoryTableDef.h ../../include/IceUtil/StaticMutex.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/ProcessF.h ../../include/Ice/Router.h ../../include/Ice/DispatchInterceptor.h ../../include/Ice/IconvStringConverter.h +EventLoggerI$(OBJEXT): EventLoggerI.cpp ../Ice/EventLoggerI.h ../../include/Ice/Logger.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../Ice/EventLoggerMsg.h ../../include/Ice/LocalException.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/BuiltinSequences.h ../Ice/Network.h ../../include/Ice/PropertiesF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/LoggerF.h ../../include/IceUtil/StaticMutex.h BuiltinSequences.cpp: ../../../slice/Ice/BuiltinSequences.ice CommunicatorF.cpp: ../../../slice/Ice/CommunicatorF.ice Communicator.cpp: ../../../slice/Ice/Communicator.ice ../../../slice/Ice/LoggerF.ice ../../../slice/Ice/StatsF.ice ../../../slice/Ice/ObjectAdapterF.ice ../../../slice/Ice/PropertiesF.ice ../../../slice/Ice/ObjectFactoryF.ice ../../../slice/Ice/RouterF.ice ../../../slice/Ice/LocatorF.ice ../../../slice/Ice/PluginF.ice ../../../slice/Ice/ImplicitContextF.ice ../../../slice/Ice/Current.ice ../../../slice/Ice/ConnectionF.ice ../../../slice/Ice/Identity.ice diff --git a/cpp/src/Ice/ConnectRequestHandler.cpp b/cpp/src/Ice/ConnectRequestHandler.cpp new file mode 100644 index 00000000000..f306b6c26b6 --- /dev/null +++ b/cpp/src/Ice/ConnectRequestHandler.cpp @@ -0,0 +1,412 @@ +// ********************************************************************** +// +// Copyright (c) 2003-2007 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 <Ice/ConnectRequestHandler.h> +#include <Ice/ConnectionRequestHandler.h> +#include <Ice/Instance.h> +#include <Ice/Proxy.h> +#include <Ice/ConnectionI.h> +#include <Ice/RouterInfo.h> +#include <Ice/Outgoing.h> +#include <Ice/OutgoingAsync.h> +#include <Ice/Protocol.h> +#include <Ice/Properties.h> + +using namespace std; +using namespace IceInternal; + +ConnectRequestHandler::ConnectRequestHandler(const ReferencePtr& ref, + const Ice::ObjectPrx& proxy, + const Handle< ::IceDelegate::Ice::Object>& delegate) : + RequestHandler(ref), + _proxy(proxy), + _delegate(delegate), + _response(ref->getMode() == Reference::ModeTwoway), + _batchAutoFlush( + ref->getInstance()->initializationData().properties->getPropertyAsIntWithDefault("Ice.BatchAutoFlush", 1) > 0), + _initialized(false), + _flushing(false), + _batchRequestInProgress(false), + _batchRequestsSize(sizeof(requestBatchHdr)), + _batchStream(ref->getInstance().get(), _batchAutoFlush), + _updateRequestHandler(false) +{ +} + +ConnectRequestHandler::~ConnectRequestHandler() +{ +} + +RequestHandlerPtr +ConnectRequestHandler::connect() +{ + _reference->getConnection(this); + + Lock sync(*this); + if(_connection) + { + return new ConnectionRequestHandler(_reference, _connection, _compress); + } + else + { + _updateRequestHandler = true; // The proxy request handler will be updated when the connection is set. + return this; + } +} + +void +ConnectRequestHandler::prepareBatchRequest(BasicStream* os) +{ + { + Lock sync(*this); + while(_batchRequestInProgress) + { + wait(); + } + + if(!initialized()) + { + _batchRequestInProgress = true; + _batchStream.swap(*os); + return; + } + } + _connection->prepareBatchRequest(os); +} + +void +ConnectRequestHandler::finishBatchRequest(BasicStream* os) +{ + { + Lock sync(*this); + if(!initialized()) + { + assert(_batchRequestInProgress); + _batchRequestInProgress = false; + notifyAll(); + + _batchStream.swap(*os); + + if(!_batchAutoFlush && + _batchStream.b.size() + _batchRequestsSize > _reference->getInstance()->messageSizeMax()) + { + throw Ice::MemoryLimitException(__FILE__, __LINE__); + } + + _batchRequestsSize += _batchStream.b.size(); + + Request req; + req.os = new BasicStream(_reference->getInstance().get(), _batchAutoFlush); + req.os->swap(_batchStream); + _requests.push_back(req); + return; + } + } + _connection->finishBatchRequest(os, _compress); +} + +void +ConnectRequestHandler::abortBatchRequest() +{ + { + Lock sync(*this); + if(!initialized()) + { + assert(_batchRequestInProgress); + _batchRequestInProgress = false; + notifyAll(); + + BasicStream dummy(_reference->getInstance().get(), _batchAutoFlush); + _batchStream.swap(dummy); + _batchRequestsSize = sizeof(requestBatchHdr); + + return; + } + } + _connection->abortBatchRequest(); +} + +Ice::ConnectionI* +ConnectRequestHandler::sendRequest(Outgoing* out) +{ + return (!getConnection(true)->sendRequest(out, _compress, _response) || _response) ? _connection.get() : 0; +} + +void +ConnectRequestHandler::sendAsyncRequest(const OutgoingAsyncPtr& out) +{ + try + { + { + Lock sync(*this); + if(!initialized()) + { + Request req; + req.out = out; + _requests.push_back(req); + return; + } + } + _connection->sendAsyncRequest(out, _compress, _response); + } + catch(const LocalExceptionWrapper& ex) + { + out->__finished(ex); + } + catch(const Ice::LocalException& ex) + { + out->__finished(ex); + } +} + +bool +ConnectRequestHandler::flushBatchRequests(BatchOutgoing* out) +{ + return getConnection(true)->flushBatchRequests(out); +} + +void +ConnectRequestHandler::flushAsyncBatchRequests(const BatchOutgoingAsyncPtr& out) +{ + try + { + { + Lock sync(*this); + if(!initialized()) + { + Request req; + req.batchOut = out; + _requests.push_back(req); + return; + } + } + _connection->flushAsyncBatchRequests(out); + } + catch(const Ice::LocalException& ex) + { + out->__finished(ex); + } +} + +Ice::ConnectionIPtr +ConnectRequestHandler::getConnection(bool waitInit) +{ + if(waitInit) + { + // + // Wait for the connection establishment to complete or fail. + // + Lock sync(*this); + while(!_initialized && !_exception.get()) + { + wait(); + } + } + + if(_exception.get()) + { + _exception->ice_throw(); + return false; // Keep the compiler happy. + } + else + { + assert(!waitInit || _initialized); + return _connection; + } +} + +void +ConnectRequestHandler::setConnection(const Ice::ConnectionIPtr& connection, bool compress) +{ + { + Lock sync(*this); + _connection = connection; + _compress = compress; + } + + // + // If this proxy is for a non-local object, and we are using a router, then + // add this proxy to the router info object. + // + RouterInfoPtr ri = _reference->getRouterInfo(); + if(ri) + { + if(!ri->addProxy(_proxy, this)) + { + return; // The request handler will be initialized once addProxy returns. + } + } + + flushRequests(); +} + +void +ConnectRequestHandler::setException(const Ice::LocalException& ex) +{ + { + Lock sync(*this); + _exception.reset(dynamic_cast<Ice::LocalException*>(ex.ice_clone())); + _proxy = 0; // Break cyclic reference count. + _delegate = 0; // Break cyclic reference count. + notifyAll(); + } + + for(vector<Request>::const_iterator p = _requests.begin(); p != _requests.end(); ++p) + { + if(p->out) + { + p->out->__finished(ex); + } + else if(p->batchOut) + { + p->batchOut->__finished(ex); + } + else + { + assert(p->os); + delete p->os; + } + } + _requests.clear(); +} + +void +ConnectRequestHandler::addedProxy() +{ + flushRequests(); +} + +bool +ConnectRequestHandler::initialized() +{ + // Must be called with the mutex locked. + + if(_initialized) + { + assert(_connection); + return true; + } + else + { + while(_flushing) + { + wait(); + } + + if(_exception.get()) + { + _exception->ice_throw(); + return false; // Keep the compiler happy. + } + else + { + return _initialized; + } + } +} + +void +ConnectRequestHandler::flushRequests() +{ + { + Lock sync(*this); + assert(_connection); + + while(_batchRequestInProgress) + { + wait(); + } + + // + // We set the _flushing flag to true to prevent any additional queuing. Callers + // might block for a little while as the queued requests are being sent but this + // shouldn't be an issue as the request sends are non-blocking. + // + _flushing = true; + } + + for(vector<Request>::const_iterator p = _requests.begin(); p != _requests.end(); ++p) + { + // _requests is immutable when _flushing = true + if(p->out) + { + try + { + _connection->sendAsyncRequest(p->out, _compress, _response); + } + catch(const LocalExceptionWrapper& ex) + { + p->out->__finished(ex); + } + catch(const Ice::LocalException& ex) + { + p->out->__finished(ex); + } + } + else if(p->batchOut) + { + try + { + _connection->flushAsyncBatchRequests(p->batchOut); + } + catch(const Ice::LocalException& ex) + { + p->batchOut->__finished(ex); + } + } + else + { + assert(p->os); + if(_exception.get()) + { + delete p->os; + } + else + { + // + // TODO: Add sendBatchRequest() method to ConnectionI? + // + try + { + BasicStream os(p->os->instance()); + _connection->prepareBatchRequest(&os); + const Ice::Byte* bytes; + p->os->i = p->os->b.begin(); + p->os->readBlob(bytes, p->os->b.size()); + os.writeBlob(bytes, p->os->b.size()); + _connection->finishBatchRequest(&os, _compress); + delete p->os; + } + catch(const Ice::LocalException& ex) + { + delete p->os; + _connection->abortBatchRequest(); + _exception.reset(dynamic_cast<Ice::LocalException*>(ex.ice_clone())); + } + } + } + } + _requests.clear(); + + { + Lock sync(*this); + _initialized = true; + _flushing = false; + notifyAll(); + } + + if(_updateRequestHandler && !_exception.get()) + { + _proxy->__setRequestHandler(_delegate, new ConnectionRequestHandler(_reference, _connection, _compress)); + } + _proxy = 0; // Break cyclic reference count. + _delegate = 0; // Break cyclic reference count. +} + + diff --git a/cpp/src/Ice/ConnectRequestHandler.h b/cpp/src/Ice/ConnectRequestHandler.h new file mode 100644 index 00000000000..bdf8d1b3a16 --- /dev/null +++ b/cpp/src/Ice/ConnectRequestHandler.h @@ -0,0 +1,88 @@ +// ********************************************************************** +// +// Copyright (c) 2003-2007 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_CONNECT_REQUEST_HANDLER_H +#define ICE_CONNECT_REQUEST_HANDLER_H + +#include <IceUtil/Monitor.h> +#include <IceUtil/Mutex.h> + +#include <Ice/RequestHandler.h> +#include <Ice/Reference.h> +#include <Ice/RouterInfo.h> +#include <Ice/ProxyF.h> +#include <Ice/BasicStream.h> + +namespace IceInternal +{ + +class ConnectRequestHandler : public RequestHandler, + public Reference::GetConnectionCallback, + public RouterInfo::AddProxyCallback, + public IceUtil::Monitor<IceUtil::Mutex> +{ +public: + + ConnectRequestHandler(const ReferencePtr&, const Ice::ObjectPrx&, const Handle< ::IceDelegate::Ice::Object>&); + virtual ~ConnectRequestHandler(); + + RequestHandlerPtr connect(); + + virtual void prepareBatchRequest(BasicStream*); + virtual void finishBatchRequest(BasicStream*); + virtual void abortBatchRequest(); + + virtual Ice::ConnectionI* sendRequest(Outgoing*); + virtual void sendAsyncRequest(const OutgoingAsyncPtr&); + + virtual bool flushBatchRequests(BatchOutgoing*); + virtual void flushAsyncBatchRequests(const BatchOutgoingAsyncPtr&); + + virtual Ice::ConnectionIPtr getConnection(bool); + + virtual void setConnection(const Ice::ConnectionIPtr&, bool); + virtual void setException(const Ice::LocalException&); + + virtual void addedProxy(); + +private: + + bool initialized(); + void flushRequests(); + + struct Request + { + OutgoingAsyncPtr out; + BatchOutgoingAsyncPtr batchOut; + BasicStream* os; + }; + + Ice::ObjectPrx _proxy; + Handle< ::IceDelegate::Ice::Object> _delegate; + + const bool _response; + const bool _batchAutoFlush; + + Ice::ConnectionIPtr _connection; + bool _compress; + std::auto_ptr<Ice::LocalException> _exception; + bool _initialized; + bool _flushing; + + std::vector<Request> _requests; + bool _batchRequestInProgress; + size_t _batchRequestsSize; + BasicStream _batchStream; + bool _updateRequestHandler; +}; +typedef IceUtil::Handle<ConnectRequestHandler> ConnectRequestHandlerPtr; + +} + +#endif diff --git a/cpp/src/Ice/ConnectionFactory.cpp b/cpp/src/Ice/ConnectionFactory.cpp index af2b506193d..6d69a36cb84 100644 --- a/cpp/src/Ice/ConnectionFactory.cpp +++ b/cpp/src/Ice/ConnectionFactory.cpp @@ -38,6 +38,7 @@ IceUtil::Shared* IceInternal::upCast(IncomingConnectionFactory* p) { return p; } namespace { + struct RandomNumberGenerator : public std::unary_function<ptrdiff_t, ptrdiff_t> { ptrdiff_t operator()(ptrdiff_t d) @@ -45,6 +46,22 @@ struct RandomNumberGenerator : public std::unary_function<ptrdiff_t, ptrdiff_t> return IceUtil::random(static_cast<int>(d)); } }; + +} + +bool +IceInternal::OutgoingConnectionFactory::ConnectorInfo::operator<(const ConnectorInfo& other) const +{ + if(!threadPerConnection && other.threadPerConnection) + { + return true; + } + else if(other.threadPerConnection < threadPerConnection) + { + return false; + } + + return connector < other.connector; } void @@ -60,11 +77,11 @@ IceInternal::OutgoingConnectionFactory::destroy() #ifdef _STLP_BEGIN_NAMESPACE // voidbind2nd is an STLport extension for broken compilers in IceUtil/Functional.h for_each(_connections.begin(), _connections.end(), - voidbind2nd(Ice::secondVoidMemFun1<ConnectorPtr, ConnectionI, ConnectionI::DestructionReason> + voidbind2nd(Ice::secondVoidMemFun1<ConnectorInfo, ConnectionI, ConnectionI::DestructionReason> (&ConnectionI::destroy), ConnectionI::CommunicatorDestroyed)); #else for_each(_connections.begin(), _connections.end(), - bind2nd(Ice::secondVoidMemFun1<const ConnectorPtr, ConnectionI, ConnectionI::DestructionReason> + bind2nd(Ice::secondVoidMemFun1<const ConnectorInfo, ConnectionI, ConnectionI::DestructionReason> (&ConnectionI::destroy), ConnectionI::CommunicatorDestroyed)); #endif @@ -75,7 +92,7 @@ IceInternal::OutgoingConnectionFactory::destroy() void IceInternal::OutgoingConnectionFactory::waitUntilFinished() { - multimap<ConnectorPtr, ConnectionIPtr> connections; + multimap<ConnectorInfo, ConnectionIPtr> connections; { IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this); @@ -85,7 +102,7 @@ IceInternal::OutgoingConnectionFactory::waitUntilFinished() // until there are no pending connections anymore. Only then // we can be sure the _connections contains all connections. // - while(!_destroyed || !_pending.empty()) + while(!_destroyed || !_pending.empty() || !_pendingEndpoints.empty()) { wait(); } @@ -94,311 +111,187 @@ IceInternal::OutgoingConnectionFactory::waitUntilFinished() // We want to wait until all connections are finished outside the // thread synchronization. // - connections.swap(_connections); + connections = _connections; } for_each(connections.begin(), connections.end(), - Ice::secondVoidMemFun<const ConnectorPtr, ConnectionI>(&ConnectionI::waitUntilFinished)); + Ice::secondVoidMemFun<const ConnectorInfo, ConnectionI>(&ConnectionI::waitUntilFinished)); + + { + IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this); + _connections.clear(); + } } ConnectionIPtr -IceInternal::OutgoingConnectionFactory::create(const vector<EndpointIPtr>& endpts, bool moreEndpts, +IceInternal::OutgoingConnectionFactory::create(const vector<EndpointIPtr>& endpts, bool hasMore, bool threadPerConnection, Ice::EndpointSelectionType selType, bool& compress) { assert(!endpts.empty()); - vector<pair<ConnectorPtr, EndpointIPtr> > connectors; + + // + // Apply the overrides. + // + vector<EndpointIPtr> endpoints = applyOverrides(endpts); + // + // Try to find a connection to one of the given endpoints. + // + Ice::ConnectionIPtr connection = findConnection(endpoints, threadPerConnection, compress); + if(connection) { - IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this); + return connection; + } - if(_destroyed) - { - throw CommunicatorDestroyedException(__FILE__, __LINE__); - } + auto_ptr<Ice::LocalException> exception; + // + // If we didn't find a connection with the endpoints, we create the connectors + // for the endpoints. + // + vector<ConnectorInfo> connectors; + for(vector<EndpointIPtr>::const_iterator p = endpoints.begin(); p != endpoints.end(); ++p) + { // - // Reap connections for which destruction has completed. + // Create connectors for the endpoint. // - std::multimap<ConnectorPtr, ConnectionIPtr>::iterator p = _connections.begin(); - while(p != _connections.end()) - { - if(p->second->isFinished()) - { - _connections.erase(p++); - } - else - { - ++p; - } - } - - vector<EndpointIPtr> endpoints = endpts; - vector<EndpointIPtr>::iterator q; - for(q = endpoints.begin(); q != endpoints.end(); ++q) + try { - // - // Modify endpoints with overrides. - // - if(_instance->defaultsAndOverrides()->overrideTimeout) - { - *q = (*q)->timeout(_instance->defaultsAndOverrides()->overrideTimeoutValue); - } - - // - // Create connectors for the endpoints. - // - vector<ConnectorPtr> cons = (*q)->connectors(); - assert(cons.size() > 0); - - // - // Shuffle connectors is endpoint selection type is Random. - // + vector<ConnectorPtr> cons = (*p)->connectors(); + assert(!cons.empty()); + if(selType == Random) { RandomNumberGenerator rng; random_shuffle(cons.begin(), cons.end(), rng); } - - vector<ConnectorPtr>::const_iterator r; - for(r = cons.begin(); r != cons.end(); ++r) - { - connectors.push_back(make_pair(*r, *q)); - } - } - - // - // Search for existing connections. - // - vector<pair<ConnectorPtr, EndpointIPtr> >::const_iterator r; - for(r = connectors.begin(); r != connectors.end(); ++r) - { - pair<multimap<ConnectorPtr, ConnectionIPtr>::iterator, - multimap<ConnectorPtr, ConnectionIPtr>::iterator> pr = _connections.equal_range((*r).first); - while(pr.first != pr.second) + for(vector<ConnectorPtr>::const_iterator r = cons.begin(); r != cons.end(); ++r) { - // - // Don't return connections for which destruction has - // been initiated. The connection must also match the - // requested thread-per-connection setting. - // - if(!pr.first->second->isDestroyed() && - pr.first->second->threadPerConnection() == threadPerConnection) - { - if(_instance->defaultsAndOverrides()->overrideCompress) - { - compress = _instance->defaultsAndOverrides()->overrideCompressValue; - } - else - { - compress = (*r).second->compress(); - } - - return pr.first->second; - } - - ++pr.first; + assert(*r); + connectors.push_back(ConnectorInfo(*r, *p, threadPerConnection)); } } - - // - // If some other thread is currently trying to establish a - // connection to any of our endpoints, we wait until this - // thread is finished. - // - bool searchAgain = false; - while(!_destroyed) + catch(const Ice::LocalException& ex) { - for(r = connectors.begin(); r != connectors.end(); ++r) - { - if(_pending.find((*r).first) != _pending.end()) - { - break; - } - } - - if(r == connectors.end()) - { - break; - } - - searchAgain = true; - - wait(); - } - - if(_destroyed) - { - throw CommunicatorDestroyedException(__FILE__, __LINE__); - } - - // - // Search for existing connections again if we waited above, - // as new connections might have been added in the meantime. - // - if(searchAgain) - { - for(r = connectors.begin(); r != connectors.end(); ++r) - { - pair<multimap<ConnectorPtr, ConnectionIPtr>::iterator, - multimap<ConnectorPtr, ConnectionIPtr>::iterator> pr = _connections.equal_range((*r).first); - - while(pr.first != pr.second) - { - // - // Don't return connections for which destruction has - // been initiated. The connection must also match the - // requested thread-per-connection setting. - // - if(!pr.first->second->isDestroyed() && - pr.first->second->threadPerConnection() == threadPerConnection) - { - if(_instance->defaultsAndOverrides()->overrideCompress) - { - compress = _instance->defaultsAndOverrides()->overrideCompressValue; - } - else - { - compress = (*r).second->compress(); - } - - return pr.first->second; - } - - ++pr.first; - } - } - } - - // - // No connection to any of our endpoints exists yet, so we - // will try to create one. To avoid that other threads try to - // create connections to the same endpoints, we add our - // endpoints to _pending. - // - for(r = connectors.begin(); r != connectors.end(); ++r) - { - _pending.insert((*r).first); + exception.reset(dynamic_cast<Ice::LocalException*>(ex.ice_clone())); + handleException(ex, hasMore || p != endpoints.end() - 1); } } - ConnectorPtr connector; - ConnectionIPtr connection; - auto_ptr<LocalException> exception; + if(connectors.empty()) + { + assert(exception.get()); + exception->ice_throw(); + } - vector<pair<ConnectorPtr, EndpointIPtr> >::const_iterator q; - for(q = connectors.begin(); q != connectors.end(); ++q) + // + // Try to get a connection to one of the connectors. A null result indicates that no + // connection was found and that we should try to establish the connection (and that + // the connectors were added to _pending to prevent other threads from establishing + // the connection). + // + connection = getConnection(connectors, 0, compress); + if(connection) + { + return connection; + } + + // + // Try to establish the connection to the connectors. + // + DefaultsAndOverridesPtr defaultsAndOverrides = _instance->defaultsAndOverrides(); + for(vector<ConnectorInfo>::const_iterator p = connectors.begin(); p != connectors.end(); ++p) { - connector = (*q).first; - EndpointIPtr endpoint = (*q).second; - try { - int timeout; - if(_instance->defaultsAndOverrides()->overrideConnectTimeout) + if(defaultsAndOverrides->overrideConnectTimeout) { - timeout = _instance->defaultsAndOverrides()->overrideConnectTimeoutValue; + timeout = defaultsAndOverrides->overrideConnectTimeoutValue; } - // It is not necessary to check for overrideTimeout, - // the endpoint has already been modified with this - // override, if set. else { - timeout = endpoint->timeout(); + // + // It is not necessary to check for overrideTimeout, the endpoint has already + // been modified with this override, if set. + // + timeout = p->endpoint->timeout(); } - TransceiverPtr transceiver = connector->connect(timeout); - assert(transceiver); - - connection = new ConnectionI(_instance, transceiver, endpoint->compress(false), 0, threadPerConnection, - _instance->threadPerConnectionStackSize()); - connection->start(); - connection->validate(); + connection = createConnection(p->connector->connect(timeout), *p); + connection->start(0); - if(_instance->defaultsAndOverrides()->overrideCompress) + if(defaultsAndOverrides->overrideCompress) { - compress = _instance->defaultsAndOverrides()->overrideCompressValue; + compress = defaultsAndOverrides->overrideCompressValue; } else { - compress = endpoint->compress(); + compress = p->endpoint->compress(); } + break; } - catch(const LocalException& ex) + catch(const Ice::CommunicatorDestroyedException& ex) { - exception.reset(dynamic_cast<LocalException*>(ex.ice_clone())); - - // - // If a connection object was constructed, then validate() - // must have raised the exception. - // - if(connection) - { - connection->waitUntilFinished(); // We must call waitUntilFinished() for cleanup. - connection = 0; - } + exception.reset(dynamic_cast<Ice::LocalException*>(ex.ice_clone())); + handleException(*exception.get(), *p, connection, hasMore || p != connectors.end() - 1); + connection = 0; + break; // No need to continue } - - TraceLevelsPtr traceLevels = _instance->traceLevels(); - if(traceLevels->retry >= 2) + catch(const Ice::LocalException& ex) { - Trace out(_instance->initializationData().logger, traceLevels->retryCat); - - out << "connection to endpoint failed"; - if(moreEndpts || q + 1 != connectors.end()) - { - out << ", trying next endpoint\n"; - } - else - { - out << " and no more endpoints to try\n"; - } - out << *exception.get(); + exception.reset(dynamic_cast<Ice::LocalException*>(ex.ice_clone())); + handleException(*exception.get(), *p, connection, hasMore || p != connectors.end() - 1); + connection = 0; } } - - { - IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this); - - // - // Signal other threads that we are done with trying to - // establish connections to our endpoints. - // - for(q = connectors.begin(); q != connectors.end(); ++q) - { - _pending.erase((*q).first); - } - notifyAll(); - if(!connection) - { - assert(exception.get()); - exception->ice_throw(); - } - else - { - _connections.insert(_connections.end(), pair<const ConnectorPtr, ConnectionIPtr>(connector, connection)); + // + // Finish creating the connection (this removes the connectors from the _pending + // list and notifies any waiting threads). + // + finishGetConnection(connectors, 0, connection); - if(_destroyed) - { - connection->destroy(ConnectionI::CommunicatorDestroyed); - throw CommunicatorDestroyedException(__FILE__, __LINE__); - } - else - { - connection->activate(); - } - } + if(!connection) + { + assert(exception.get()); + exception->ice_throw(); } - assert(connection); return connection; } void +IceInternal::OutgoingConnectionFactory::create(const vector<EndpointIPtr>& endpts, bool hasMore, + bool tpc, Ice::EndpointSelectionType selType, + const CreateConnectionCallbackPtr& callback) +{ + assert(!endpts.empty()); + + // + // Apply the overrides. + // + vector<EndpointIPtr> endpoints = applyOverrides(endpts); + + // + // Try to find a connection to one of the given endpoints. + // + bool compress; + Ice::ConnectionIPtr connection = findConnection(endpoints, tpc, compress); + if(connection) + { + callback->setConnection(connection, compress); + return; + } + + ConnectCallbackPtr cb = new ConnectCallback(this, endpoints, hasMore, callback, selType, tpc); + cb->getConnection(); +} + +void IceInternal::OutgoingConnectionFactory::setRouterInfo(const RouterInfoPtr& routerInfo) { IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this); @@ -442,14 +335,14 @@ IceInternal::OutgoingConnectionFactory::setRouterInfo(const RouterInfoPtr& route // endpoint = endpoint->compress(false); - multimap<ConnectorPtr, ConnectionIPtr>::const_iterator q; + multimap<ConnectorInfo, ConnectionIPtr>::const_iterator q; for(q = _connections.begin(); q != _connections.end(); ++q) { - if((*q).second->endpoint() == endpoint) + if(q->second->endpoint() == endpoint) { try { - (*q).second->setAdapter(adapter); + q->second->setAdapter(adapter); } catch(const Ice::LocalException&) { @@ -472,7 +365,7 @@ IceInternal::OutgoingConnectionFactory::removeAdapter(const ObjectAdapterPtr& ad return; } - for(multimap<ConnectorPtr, ConnectionIPtr>::const_iterator p = _connections.begin(); p != _connections.end(); ++p) + for(multimap<ConnectorInfo, ConnectionIPtr>::const_iterator p = _connections.begin(); p != _connections.end(); ++p) { if(p->second->getAdapter() == adapter) { @@ -497,9 +390,7 @@ IceInternal::OutgoingConnectionFactory::flushBatchRequests() { IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this); - - for(std::multimap<ConnectorPtr, ConnectionIPtr>::const_iterator p = _connections.begin(); - p != _connections.end(); + for(multimap<ConnectorInfo, ConnectionIPtr>::const_iterator p = _connections.begin(); p != _connections.end(); ++p) { c.push_back(p->second); @@ -531,6 +422,668 @@ IceInternal::OutgoingConnectionFactory::~OutgoingConnectionFactory() assert(_connections.empty()); } +vector<EndpointIPtr> +IceInternal::OutgoingConnectionFactory::applyOverrides(const vector<EndpointIPtr>& endpts) +{ + DefaultsAndOverridesPtr defaultsAndOverrides = _instance->defaultsAndOverrides(); + vector<EndpointIPtr> endpoints = endpts; + for(vector<EndpointIPtr>::iterator p = endpoints.begin(); p != endpoints.end(); ++p) + { + // + // Modify endpoints with overrides. + // + if(defaultsAndOverrides->overrideTimeout) + { + *p = (*p)->timeout(defaultsAndOverrides->overrideTimeoutValue); + } + } + return endpoints; +} + +ConnectionIPtr +IceInternal::OutgoingConnectionFactory::findConnection(const vector<EndpointIPtr>& endpoints, bool tpc, bool& compress) +{ + IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this); + + DefaultsAndOverridesPtr defaultsAndOverrides = _instance->defaultsAndOverrides(); + assert(!endpoints.empty()); + for(vector<EndpointIPtr>::const_iterator p = endpoints.begin(); p != endpoints.end(); ++p) + { + pair<multimap<EndpointIPtr, ConnectionIPtr>::iterator, + multimap<EndpointIPtr, ConnectionIPtr>::iterator> pr = _connectionsByEndpoint.equal_range(*p); + + for(multimap<EndpointIPtr, ConnectionIPtr>::iterator q = pr.first; q != pr.second; ++q) + { + if(q->second->isActiveOrHolding() && + q->second->threadPerConnection() == tpc) // Don't return destroyed or un-validated connections + { + if(defaultsAndOverrides->overrideCompress) + { + compress = defaultsAndOverrides->overrideCompressValue; + } + else + { + compress = (*p)->compress(); + } + return q->second; + } + } + } + return 0; +} + +ConnectionIPtr +IceInternal::OutgoingConnectionFactory::findConnection(const vector<ConnectorInfo>& connectors, bool& compress) +{ + DefaultsAndOverridesPtr defaultsAndOverrides = _instance->defaultsAndOverrides(); + for(vector<ConnectorInfo>::const_iterator p = connectors.begin(); p != connectors.end(); ++p) + { + pair<multimap<ConnectorInfo, ConnectionIPtr>::iterator, + multimap<ConnectorInfo, ConnectionIPtr>::iterator> pr = _connections.equal_range(*p); + + if(pr.first == pr.second) + { + continue; + } + + for(multimap<ConnectorInfo, ConnectionIPtr>::iterator q = pr.first; q != pr.second; ++q) + { + if(q->second->isActiveOrHolding()) // Don't return destroyed or un-validated connections + { + if(q->second->endpoint() != p->endpoint) + { + _connectionsByEndpoint.insert(make_pair(p->endpoint, q->second)); + } + + if(defaultsAndOverrides->overrideCompress) + { + compress = defaultsAndOverrides->overrideCompressValue; + } + else + { + compress = p->endpoint->compress(); + } + return q->second; + } + } + } + + return 0; +} + +void +IceInternal::OutgoingConnectionFactory::addPendingEndpoints(const vector<EndpointIPtr>& endpoints) +{ + IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this); + if(_destroyed) + { + throw Ice::CommunicatorDestroyedException(__FILE__, __LINE__); + } + _pendingEndpoints.insert(endpoints.begin(), endpoints.end()); +} + +void +IceInternal::OutgoingConnectionFactory::removePendingEndpoints(const vector<EndpointIPtr>& endpoints) +{ + IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this); + for(vector<EndpointIPtr>::const_iterator p = endpoints.begin(); p != endpoints.end(); ++p) + { + assert(_pendingEndpoints.find(*p) != _pendingEndpoints.end()); + _pendingEndpoints.erase(_pendingEndpoints.find(*p)); + } + + if(_destroyed) + { + notifyAll(); + } +} + +ConnectionIPtr +IceInternal::OutgoingConnectionFactory::getConnection(const vector<ConnectorInfo>& connectors, + const ConnectCallbackPtr& cb, bool& compress) +{ + { + IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this); + if(_destroyed) + { + throw Ice::CommunicatorDestroyedException(__FILE__, __LINE__); + } + + // + // Reap connections for which destruction has completed. + // + multimap<ConnectorInfo, ConnectionIPtr>::iterator p = _connections.begin(); + while(p != _connections.end()) + { + if(p->second->isFinished()) + { + _connections.erase(p++); + } + else + { + ++p; + } + } + + multimap<EndpointIPtr, ConnectionIPtr>::iterator q = _connectionsByEndpoint.begin(); + while(q != _connectionsByEndpoint.end()) + { + if(q->second->isFinished()) + { + _connectionsByEndpoint.erase(q++); + } + else + { + ++q; + } + } + + // + // Try to get the connection. We may need to wait for other threads to + // finish if one of them is currently establishing a connection to one + // of our connectors. + // + while(!_destroyed) + { + // + // Search for a matching connection. If we find one, we're done. + // + Ice::ConnectionIPtr connection = findConnection(connectors, compress); + if(connection) + { + if(cb) + { + // + // This might not be the first getConnection call for the callback. We need + // to ensure that the callback isn't registered with any other pending + // connectors since we just found a connection and therefore don't need to + // wait anymore for other pending connectors. + // + for(vector<ConnectorInfo>::const_iterator p = connectors.begin(); p != connectors.end(); ++p) + { + map<ConnectorInfo, set<ConnectCallbackPtr> >::iterator q = _pending.find(*p); + if(q != _pending.end()) + { + q->second.erase(cb); + } + } + } + return connection; + } + + // + // Determine whether another thread is currently attempting to connect to one of our endpoints; + // if so we wait until it's done. + // + bool found = false; + for(vector<ConnectorInfo>::const_iterator p = connectors.begin(); p != connectors.end(); ++p) + { + map<ConnectorInfo, set<ConnectCallbackPtr> >::iterator q = _pending.find(*p); + if(q != _pending.end()) + { + found = true; + if(cb) + { + q->second.insert(cb); // Add the callback to each pending connector. + } + } + } + + if(!found) + { + // + // If no thread is currently establishing a connection to one of our connectors, + // we get out of this loop and start the connection establishment to one of the + // given connectors. + // + break; + } + else + { + // + // If a callback is not specified we wait until another thread notifies us about a + // change to the pending list. Otherwise, if a callback is provided we're done: + // when the pending list changes the callback will be notified and will try to + // get the connection again. + // + if(!cb) + { + wait(); + } + else + { + return 0; + } + } + } + + if(_destroyed) + { + throw Ice::CommunicatorDestroyedException(__FILE__, __LINE__); + } + + // + // No connection to any of our endpoints exists yet; we add the given connectors to + // the _pending set to indicate that we're attempting connection establishment to + // these connectors. + // + for(vector<ConnectorInfo>::const_iterator p = connectors.begin(); p != connectors.end(); ++p) + { + assert(_pending.find(*p) == _pending.end()); + _pending.insert(pair<ConnectorInfo, set<ConnectCallbackPtr> >(*p, set<ConnectCallbackPtr>())); + } + } + + // + // At this point, we're responsible for establishing the connection to one of + // the given connectors. If it's a non-blocking connect, calling nextConnector + // will start the connection establishment. Otherwise, we return null to get + // the caller to establish the connection. + // + if(cb) + { + cb->nextConnector(); + } + + return 0; +} + +ConnectionIPtr +IceInternal::OutgoingConnectionFactory::createConnection(const TransceiverPtr& transceiver, const ConnectorInfo& ci) +{ + IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this); + assert(_pending.find(ci) != _pending.end() && transceiver); + + // + // Create and add the connection to the connection map. Adding the connection to the map + // is necessary to support the interruption of the connection initialization and validation + // in case the communicator is destroyed. + // + try + { + if(_destroyed) + { + throw Ice::CommunicatorDestroyedException(__FILE__, __LINE__); + } + + Ice::ConnectionIPtr connection = new ConnectionI(_instance, transceiver, ci.endpoint->compress(false), + 0, ci.threadPerConnection, + _instance->threadPerConnectionStackSize()); + _connections.insert(make_pair(ci, connection)); + _connectionsByEndpoint.insert(make_pair(ci.endpoint, connection)); + return connection; + } + catch(const Ice::LocalException&) + { + try + { + transceiver->close(); + } + catch(const Ice::LocalException&) + { + // Ignore + } + throw; + } +} + +void +IceInternal::OutgoingConnectionFactory::finishGetConnection(const vector<ConnectorInfo>& connectors, + const ConnectCallbackPtr& cb, + const ConnectionIPtr& connection) +{ + vector<ConnectCallbackPtr> callbacks; + + { + IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this); + + // + // We're done trying to connect to the given connectors so we remove the + // connectors from the pending list and notify waiting threads. We also + // notify the pending connect callbacks (outside the synchronization). + // + + for(vector<ConnectorInfo>::const_iterator p = connectors.begin(); p != connectors.end(); ++p) + { + map<ConnectorInfo, set<ConnectCallbackPtr> >::iterator q = _pending.find(*p); + assert(q != _pending.end()); + callbacks.insert(callbacks.end(), q->second.begin(), q->second.end()); + _pending.erase(q); + } + notifyAll(); + + // + // If the connect attempt succeeded and the communicator is not destroyed, + // activate the connection! + // + if(connection && !_destroyed) + { + connection->activate(); + } + } + + // + // Notify any waiting callbacks. + // + for(vector<ConnectCallbackPtr>::const_iterator p = callbacks.begin(); p != callbacks.end(); ++p) + { + (*p)->getConnection(); + } +} + +void +IceInternal::OutgoingConnectionFactory::handleException(const LocalException& ex, const ConnectorInfo& ci, + const ConnectionIPtr& connection, bool hasMore) +{ + TraceLevelsPtr traceLevels = _instance->traceLevels(); + if(traceLevels->retry >= 2) + { + Trace out(_instance->initializationData().logger, traceLevels->retryCat); + + out << "connection to endpoint failed"; + if(dynamic_cast<const CommunicatorDestroyedException*>(&ex)) + { + out << "\n"; + } + else + { + if(hasMore) + { + out << ", trying next endpoint\n"; + } + else + { + out << " and no more endpoints to try\n"; + } + } + out << ex; + } + + if(connection && connection->isFinished()) + { + // + // If the connection is finished, we remove it right away instead of + // waiting for the reaping. + // + // NOTE: it's possible for the connection to not be finished yet. That's + // for instance the case when using thread per connection and if it's the + // thread which is calling back the outgoing connection factory to notify + // it of the failure. + // + { + IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this); + pair<multimap<ConnectorInfo, ConnectionIPtr>::iterator, + multimap<ConnectorInfo, ConnectionIPtr>::iterator> pr = _connections.equal_range(ci); + + for(multimap<ConnectorInfo, ConnectionIPtr>::iterator p = pr.first; p != pr.second; ++p) + { + if(p->second == connection) + { + _connections.erase(p); + break; + } + } + + pair<multimap<EndpointIPtr, ConnectionIPtr>::iterator, + multimap<EndpointIPtr, ConnectionIPtr>::iterator> qr = _connectionsByEndpoint.equal_range(ci.endpoint); + + for(multimap<EndpointIPtr, ConnectionIPtr>::iterator q = qr.first; q != qr.second; ++q) + { + if(q->second == connection) + { + _connectionsByEndpoint.erase(q); + break; + } + } + } + } +} + +void +IceInternal::OutgoingConnectionFactory::handleException(const LocalException& ex, bool hasMore) +{ + TraceLevelsPtr traceLevels = _instance->traceLevels(); + if(traceLevels->retry >= 2) + { + Trace out(_instance->initializationData().logger, traceLevels->retryCat); + + out << "couldn't resolve endpoint host"; + if(dynamic_cast<const CommunicatorDestroyedException*>(&ex)) + { + out << "\n"; + } + else + { + if(hasMore) + { + out << ", trying next endpoint\n"; + } + else + { + out << " and no more endpoints to try\n"; + } + } + out << ex; + } +} + +IceInternal::OutgoingConnectionFactory::ConnectCallback::ConnectCallback(const OutgoingConnectionFactoryPtr& factory, + const vector<EndpointIPtr>& endpoints, + bool hasMore, + const CreateConnectionCallbackPtr& cb, + Ice::EndpointSelectionType selType, + bool threadPerConnection) : + _factory(factory), + _selectorThread(_factory->_instance->selectorThread()), + _endpoints(endpoints), + _hasMore(hasMore), + _callback(cb), + _selType(selType), + _threadPerConnection(threadPerConnection) +{ + _endpointsIter = _endpoints.begin(); +} + +// +// Methods from ConnectionI.StartCallback +// +void +IceInternal::OutgoingConnectionFactory::ConnectCallback::connectionStartCompleted(const ConnectionIPtr& connection) +{ + assert(!_exception.get() && connection == _connection); + + bool compress; + DefaultsAndOverridesPtr defaultsAndOverrides = _factory->_instance->defaultsAndOverrides(); + if(defaultsAndOverrides->overrideCompress) + { + compress = defaultsAndOverrides->overrideCompressValue; + } + else + { + compress = _iter->endpoint->compress(); + } + + _factory->finishGetConnection(_connectors, this, connection); + _factory->removePendingEndpoints(_endpoints); + _callback->setConnection(connection, compress); +} + +void +IceInternal::OutgoingConnectionFactory::ConnectCallback::connectionStartFailed(const ConnectionIPtr& connection, + const LocalException& ex) +{ + assert(!_exception.get() && connection == _connection); + + _exception.reset(dynamic_cast<LocalException*>(ex.ice_clone())); + handleException(); +} + +// +// Methods from EndpointI_connectors +// +void +IceInternal::OutgoingConnectionFactory::ConnectCallback::connectors(const vector<ConnectorPtr>& connectors) +{ + vector<ConnectorPtr> cons = connectors; + if(_selType == Random) + { + RandomNumberGenerator rng; + random_shuffle(cons.begin(), cons.end(), rng); + } + + for(vector<ConnectorPtr>::const_iterator p = cons.begin(); p != cons.end(); ++p) + { + _connectors.push_back(ConnectorInfo(*p, *_endpointsIter, _threadPerConnection)); + } + + if(++_endpointsIter != _endpoints.end()) + { + (*_endpointsIter)->connectors_async(this); + } + else + { + assert(!_connectors.empty()); + + // + // We now have all the connectors for the given endpoints. We can try to obtain the + // connection. + // + _iter = _connectors.begin(); + getConnection(); + } +} + +void +IceInternal::OutgoingConnectionFactory::ConnectCallback::exception(const Ice::LocalException& ex) +{ + _factory->handleException(ex, _hasMore || _endpointsIter != _endpoints.end() - 1); + if(++_endpointsIter != _endpoints.end()) + { + (*_endpointsIter)->connectors_async(this); + } + else if(!_connectors.empty()) + { + // + // We now have all the connectors for the given endpoints. We can try to obtain the + // connection. + // + _iter = _connectors.begin(); + getConnection(); + } + else + { + _exception.reset(dynamic_cast<Ice::LocalException*>(ex.ice_clone())); + _factory->_instance->clientThreadPool()->execute(this); + } +} + +// +// Methods from ThreadPoolWorkItem +// +void +IceInternal::OutgoingConnectionFactory::ConnectCallback::execute(const ThreadPoolPtr& threadPool) +{ + threadPool->promoteFollower(); + assert(_exception.get()); + _factory->removePendingEndpoints(_endpoints); + _callback->setException(*_exception.get()); +} + +void +IceInternal::OutgoingConnectionFactory::ConnectCallback::getConnection() +{ + // + // First, get the connectors for all the endpoints. + // + if(_endpointsIter != _endpoints.end()) + { + try + { + _factory->addPendingEndpoints(_endpoints); + (*_endpointsIter)->connectors_async(this); + } + catch(const Ice::LocalException& ex) + { + _callback->setException(ex); + } + return; + } + + try + { + // + // If all the connectors have been created, we ask the factory to get a + // connection. + // + bool compress; + Ice::ConnectionIPtr connection = _factory->getConnection(_connectors, this, compress); + if(!connection) + { + // + // A null return value from getConnection indicates that the connection + // is being established and that everthing has been done to ensure that + // the callback will be notified when the connection establishment is + // done. + // + return; + } + + _factory->removePendingEndpoints(_endpoints); + _callback->setConnection(connection, compress); + } + catch(const Ice::LocalException& ex) + { + _exception.reset(dynamic_cast<Ice::LocalException*>(ex.ice_clone())); + _factory->_instance->clientThreadPool()->execute(this); + } +} + +void +IceInternal::OutgoingConnectionFactory::ConnectCallback::nextConnector() +{ + try + { + _exception.reset(0); + _connection = _factory->createConnection(_iter->connector->connect(0), *_iter); + _connection->start(this); + } + catch(const Ice::LocalException& ex) + { + _exception.reset(dynamic_cast<Ice::LocalException*>(ex.ice_clone())); + handleException(); + } +} + +void +IceInternal::OutgoingConnectionFactory::ConnectCallback::handleException() +{ + assert(_iter != _connectors.end() && _exception.get()); + + _factory->handleException(*_exception.get(), *_iter, _connection, _hasMore || _iter != _connectors.end() - 1); + if(dynamic_cast<Ice::CommunicatorDestroyedException*>(_exception.get())) // No need to continue. + { + _factory->finishGetConnection(_connectors, this, 0); + _factory->removePendingEndpoints(_endpoints); + _callback->setException(*_exception.get()); + } + else if(++_iter != _connectors.end()) // Try the next connector. + { + nextConnector(); + } + else + { + _factory->finishGetConnection(_connectors, this, 0); + _factory->removePendingEndpoints(_endpoints); + _callback->setException(*_exception.get()); + } +} + +bool +IceInternal::OutgoingConnectionFactory::ConnectCallback::operator<(const ConnectCallback& rhs) const +{ + return this < &rhs; +} + void IceInternal::IncomingConnectionFactory::activate() { @@ -612,7 +1165,7 @@ IceInternal::IncomingConnectionFactory::waitUntilFinished() // We want to wait until all connections are finished outside the // thread synchronization. // - connections.swap(_connections); + connections = _connections; } if(threadPerIncomingConnectionFactory) @@ -621,6 +1174,11 @@ IceInternal::IncomingConnectionFactory::waitUntilFinished() } for_each(connections.begin(), connections.end(), Ice::voidMemFun(&ConnectionI::waitUntilFinished)); + + { + IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this); + _connections.clear(); + } } EndpointIPtr @@ -641,7 +1199,7 @@ IceInternal::IncomingConnectionFactory::connections() const // Only copy connections which have not been destroyed. // remove_copy_if(_connections.begin(), _connections.end(), back_inserter(result), - Ice::constMemFun(&ConnectionI::isDestroyed)); + not1(Ice::constMemFun(&ConnectionI::isActiveOrHolding))); return result; } @@ -678,11 +1236,12 @@ IceInternal::IncomingConnectionFactory::readable() const return false; } -void +bool IceInternal::IncomingConnectionFactory::read(BasicStream&) { assert(!_threadPerConnection); // Only for use with a thread pool. - assert(false); // Must not be called. + assert(false); // Must not be called, readable() returns false. + return false; } class PromoteFollower @@ -772,10 +1331,23 @@ IceInternal::IncomingConnectionFactory::message(BasicStream&, const ThreadPoolPt { assert(!_threadPerConnection); connection = new ConnectionI(_instance, transceiver, _endpoint, _adapter, false, 0); - connection->start(); } - catch(const LocalException&) + catch(const LocalException& ex) { + try + { + transceiver->close(); + } + catch(const Ice::LocalException&) + { + // Ignore. + } + + if(_warn) + { + Warning out(_instance->initializationData().logger); + out << "connection exception:\n" << ex << '\n' << _acceptor->toString(); + } return; } @@ -784,23 +1356,7 @@ IceInternal::IncomingConnectionFactory::message(BasicStream&, const ThreadPoolPt assert(connection); - // - // We validate outside the thread synchronization, to not block - // the factory. - // - try - { - connection->validate(); - } - catch(const LocalException&) - { - IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this); - connection->waitUntilFinished(); // We must call waitUntilFinished() for cleanup. - _connections.remove(connection); - return; - } - - connection->activate(); + connection->start(this); } void @@ -844,6 +1400,48 @@ IceInternal::IncomingConnectionFactory::toString() const return _acceptor->toString(); } +void +IceInternal::IncomingConnectionFactory::connectionStartCompleted(const Ice::ConnectionIPtr& connection) +{ + IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this); + + // + // Initialy, connections are in the holding state. If the factory is active + // we activate the connection. + // + if(_state == StateActive) + { + connection->activate(); + } +} + +void +IceInternal::IncomingConnectionFactory::connectionStartFailed(const Ice::ConnectionIPtr& connection, + const Ice::LocalException& ex) +{ + IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this); + if(_state == StateClosed) + { + return; + } + + if(_warn) + { + Warning out(_instance->initializationData().logger); + out << "connection exception:\n" << ex << '\n' << _acceptor->toString(); + } + + // + // If the connection is finished, remove it right away from + // the connection map. Otherwise, we keep it in the map, it + // will eventually be reaped. + // + if(connection->isFinished()) + { + _connections.remove(connection); + } +} + IceInternal::IncomingConnectionFactory::IncomingConnectionFactory(const InstancePtr& instance, const EndpointIPtr& endpoint, const ObjectAdapterPtr& adapter, @@ -881,23 +1479,22 @@ IceInternal::IncomingConnectionFactory::IncomingConnectionFactory(const Instance { connection = new ConnectionI(_instance, _transceiver, _endpoint, _adapter, _threadPerConnection, _threadPerConnectionStackSize); - connection->start(); - connection->validate(); } catch(const LocalException&) { - // - // If a connection object was constructed, then validate() - // must have raised the exception. - // - if(connection) + try { - connection->waitUntilFinished(); // We must call waitUntilFinished() for cleanup. + _transceiver->close(); } - - return; + catch(const Ice::LocalException&) + { + // Ignore + } + throw; } + connection->start(0); + _connections.push_back(connection); } else @@ -1148,33 +1745,44 @@ IceInternal::IncomingConnectionFactory::run() // // Create a connection object for the connection. // - if(transceiver) + if(!transceiver) + { + continue; + } + + try + { + connection = new ConnectionI(_instance, transceiver, _endpoint, _adapter, _threadPerConnection, + _threadPerConnectionStackSize); + } + catch(const LocalException& ex) { try { - connection = new ConnectionI(_instance, transceiver, _endpoint, _adapter, _threadPerConnection, - _threadPerConnectionStackSize); - connection->start(); + transceiver->close(); } - catch(const LocalException&) + catch(const Ice::LocalException&) { - return; } - _connections.push_back(connection); + if(_warn) + { + Warning out(_instance->initializationData().logger); + out << "connection exception:\n" << ex << '\n' << _acceptor->toString(); + } + continue; } + + _connections.push_back(connection); } // - // In thread per connection mode, the connection's thread will - // take care of connection validation and activation (for - // non-datagram connections). We don't want to block this - // thread waiting until validation is complete, because in - // contrast to thread pool mode, it is the only thread that - // can accept connections with this factory's - // acceptor. Therefore we don't call validate() and activate() - // from the connection factory in thread per connection mode. + // In thread-per-connection mode and regardless of the background mode, + // start() doesn't block. The connection thread is started and takes + // care of the connection validation and notifies the factory through + // the callback when it's done. // + connection->start(this); } } diff --git a/cpp/src/Ice/ConnectionFactory.h b/cpp/src/Ice/ConnectionFactory.h index e1351e976a7..1c2c3349a42 100644 --- a/cpp/src/Ice/ConnectionFactory.h +++ b/cpp/src/Ice/ConnectionFactory.h @@ -14,7 +14,7 @@ #include <IceUtil/Monitor.h> #include <IceUtil/Thread.h> // For ThreadPerIncomingConnectionFactory. #include <Ice/ConnectionFactoryF.h> -#include <Ice/ConnectionIF.h> +#include <Ice/ConnectionI.h> #include <Ice/InstanceF.h> #include <Ice/ObjectAdapterF.h> #include <Ice/EndpointIF.h> @@ -24,6 +24,7 @@ #include <Ice/TransceiverF.h> #include <Ice/RouterInfoF.h> #include <Ice/EventHandler.h> +#include <Ice/EndpointI.h> #include <list> #include <set> @@ -38,15 +39,26 @@ class ObjectAdapterI; namespace IceInternal { -class OutgoingConnectionFactory : public IceUtil::Shared, public IceUtil::Monitor<IceUtil::Mutex> +class OutgoingConnectionFactory : virtual public IceUtil::Shared, public IceUtil::Monitor<IceUtil::Mutex> { public: + class CreateConnectionCallback : virtual public IceUtil::Shared + { + public: + + virtual void setConnection(const Ice::ConnectionIPtr&, bool) = 0; + virtual void setException(const Ice::LocalException&) = 0; + }; + typedef IceUtil::Handle<CreateConnectionCallback> CreateConnectionCallbackPtr; + void destroy(); void waitUntilFinished(); Ice::ConnectionIPtr create(const std::vector<EndpointIPtr>&, bool, bool, Ice::EndpointSelectionType, bool&); + void create(const std::vector<EndpointIPtr>&, bool, bool, Ice::EndpointSelectionType, + const CreateConnectionCallbackPtr&); void setRouterInfo(const RouterInfoPtr&); void removeAdapter(const Ice::ObjectAdapterPtr&); void flushBatchRequests(); @@ -57,13 +69,87 @@ private: virtual ~OutgoingConnectionFactory(); friend class Instance; + struct ConnectorInfo + { + ConnectorInfo(const ConnectorPtr& c, const EndpointIPtr& e, bool t) : + connector(c), endpoint(e), threadPerConnection(t) + { + } + + bool operator<(const ConnectorInfo& other) const; + + ConnectorPtr connector; + EndpointIPtr endpoint; + bool threadPerConnection; + }; + + class ConnectCallback : public Ice::ConnectionI::StartCallback, public IceInternal::EndpointI_connectors, + public IceInternal::ThreadPoolWorkItem + { + public: + + ConnectCallback(const OutgoingConnectionFactoryPtr&, const std::vector<EndpointIPtr>&, bool, + const CreateConnectionCallbackPtr&, Ice::EndpointSelectionType, bool); + + virtual void connectionStartCompleted(const Ice::ConnectionIPtr&); + virtual void connectionStartFailed(const Ice::ConnectionIPtr&, const Ice::LocalException&); + + virtual void connectors(const std::vector<ConnectorPtr>&); + virtual void exception(const Ice::LocalException&); + + virtual void execute(const ThreadPoolPtr&); + + void getConnection(); + void nextConnector(); + + bool operator<(const ConnectCallback&) const; + + private: + + void handleException(); + + const OutgoingConnectionFactoryPtr _factory; + const SelectorThreadPtr _selectorThread; + const std::vector<EndpointIPtr> _endpoints; + const bool _hasMore; + const CreateConnectionCallbackPtr _callback; + const Ice::EndpointSelectionType _selType; + const bool _threadPerConnection; + std::vector<EndpointIPtr>::const_iterator _endpointsIter; + std::vector<ConnectorInfo> _connectors; + std::vector<ConnectorInfo>::const_iterator _iter; + std::auto_ptr<Ice::LocalException> _exception; + Ice::ConnectionIPtr _connection; + }; + typedef IceUtil::Handle<ConnectCallback> ConnectCallbackPtr; + friend class ConnectCallback; + + std::vector<EndpointIPtr> applyOverrides(const std::vector<EndpointIPtr>&); + Ice::ConnectionIPtr findConnection(const std::vector<EndpointIPtr>&, bool, bool&); + void addPendingEndpoints(const std::vector<EndpointIPtr>&); + void removePendingEndpoints(const std::vector<EndpointIPtr>&); + Ice::ConnectionIPtr getConnection(const std::vector<ConnectorInfo>&, const ConnectCallbackPtr&, bool&); + void finishGetConnection(const std::vector<ConnectorInfo>&, const ConnectCallbackPtr&, const Ice::ConnectionIPtr&); + Ice::ConnectionIPtr findConnection(const std::vector<ConnectorInfo>&, bool&); + Ice::ConnectionIPtr createConnection(const TransceiverPtr&, const ConnectorInfo&); + + void handleException(const Ice::LocalException&, bool); + void handleException(const Ice::LocalException&, const ConnectorInfo&, const Ice::ConnectionIPtr&, bool); + const InstancePtr _instance; bool _destroyed; - std::multimap<ConnectorPtr, Ice::ConnectionIPtr> _connections; - std::set<ConnectorPtr> _pending; // Connectors for which connection establishment is pending. + + std::multimap<ConnectorInfo, Ice::ConnectionIPtr> _connections; + std::map<ConnectorInfo, std::set<ConnectCallbackPtr> > _pending; + + std::multimap<EndpointIPtr, Ice::ConnectionIPtr> _connectionsByEndpoint; + std::multiset<EndpointIPtr> _pendingEndpoints; }; -class IncomingConnectionFactory : public EventHandler, public IceUtil::Monitor<IceUtil::Mutex> +class IncomingConnectionFactory : public EventHandler, + public Ice::ConnectionI::StartCallback, + public IceUtil::Monitor<IceUtil::Mutex> + { public: @@ -83,11 +169,14 @@ public: // virtual bool datagram() const; virtual bool readable() const; - virtual void read(BasicStream&); + virtual bool read(BasicStream&); virtual void message(BasicStream&, const ThreadPoolPtr&); virtual void finished(const ThreadPoolPtr&); virtual void exception(const Ice::LocalException&); virtual std::string toString() const; + + virtual void connectionStartCompleted(const Ice::ConnectionIPtr&); + virtual void connectionStartFailed(const Ice::ConnectionIPtr&, const Ice::LocalException&); private: diff --git a/cpp/src/Ice/ConnectionI.cpp b/cpp/src/Ice/ConnectionI.cpp index cdf3dce6b80..ccc6d5236e7 100644 --- a/cpp/src/Ice/ConnectionI.cpp +++ b/cpp/src/Ice/ConnectionI.cpp @@ -34,195 +34,226 @@ using namespace IceInternal; Ice::LocalObject* IceInternal::upCast(ConnectionI* p) { return p; } void -Ice::ConnectionI::validate() +Ice::ConnectionI::OutgoingMessage::adopt(BasicStream* str) { - bool active = false; + if(adopted) + { + if(str) + { + delete stream; + stream = 0; + adopted = false; + } + else + { + return; // Stream is already adopted. + } + } + else if(!str) + { + if(out || outAsync) + { + return; // Adopting request stream is not necessary. + } + else + { + str = stream; // Adopt this stream + stream = 0; + } + } - if(!_endpoint->datagram()) // Datagram connections are always implicitly validated. + assert(str); + stream = new BasicStream(str->instance()); + stream->swap(*str); + adopted = true; +} + +void +Ice::ConnectionI::OutgoingMessage::sent(ConnectionI* connection, bool notify) +{ + if(out) + { + out->sent(notify); // true = notify the waiting thread that the request was sent. + } + else if(outAsync) + { + outAsync->__sent(connection); + } + + if(adopted) + { + delete stream; + stream = 0; + } +} + +void +Ice::ConnectionI::OutgoingMessage::finished(const Ice::LocalException& ex) +{ + if(!response) + { + // + // Only notify oneway requests. The connection keeps track of twoway + // requests in the _requests/_asyncRequests maps and will notify them + // of the connection exceptions. + // + if(out) + { + out->finished(ex); + } + else if(outAsync) + { + outAsync->__finished(ex); + } + } + + if(adopted) + { + delete stream; + stream = 0; + } +} + +void +Ice::ConnectionI::start(const StartCallbackPtr& callback) +{ + try { { IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this); - - if(_thread && _thread->getThreadControl() != IceUtil::ThreadControl()) - { - // - // In thread per connection mode, this connection's thread - // will take care of connection validation. Therefore all we - // have to do here is to wait until this thread has completed - // validation. - // - while(_state == StateNotValidated) - { - wait(); - } - - if(_state >= StateClosing) - { - assert(_exception.get()); - _exception->ice_throw(); - } - - return; - } - + _startCallback = callback; + // - // The connection might already be closed (e.g.: the communicator - // was destroyed or object adapter deactivated.) + // The connection might already be closed if the communicator was destroyed. // - assert(_state == StateNotValidated || _state == StateClosed); if(_state == StateClosed) { assert(_exception.get()); _exception->ice_throw(); } - - if(_adapter) - { - active = true; // The server side has the active role for connection validation. - } - else - { - active = false; // The client side has the passive role for connection validation. - } - } - - try - { - Int timeout; - if(_instance->defaultsAndOverrides()->overrideConnectTimeout) - { - timeout = _instance->defaultsAndOverrides()->overrideConnectTimeoutValue; - } - else - { - timeout = _endpoint->timeout(); - } - - if(active) - { - IceUtil::Mutex::Lock sendSync(_sendMutex); - if(!_transceiver) // Has the transceiver already been closed? - { - assert(_exception.get()); - _exception->ice_throw(); // The exception is immutable at this point. - } - - BasicStream os(_instance.get()); - os.write(magic[0]); - os.write(magic[1]); - os.write(magic[2]); - os.write(magic[3]); - os.write(protocolMajor); - os.write(protocolMinor); - os.write(encodingMajor); - os.write(encodingMinor); - os.write(validateConnectionMsg); - os.write(static_cast<Byte>(0)); // Compression status (always zero for validate connection). - os.write(headerSize); // Message size. - os.i = os.b.begin(); - traceHeader("sending validate connection", os, _logger, _traceLevels); - try - { - _transceiver->initialize(timeout); - _transceiver->write(os, timeout); - } - catch(const TimeoutException&) - { - throw ConnectTimeoutException(__FILE__, __LINE__); - } - } - else + // + // In thread per connection mode, we create the thread for the connection. The + // intialization and validation of the connection is taken care of by the thread + // per connection. If a callback is given, no need to wait, the thread will notify + // the callback, otherwise wait until the connection is validated. + // + if(_threadPerConnection) { - BasicStream is(_instance.get()); - is.b.resize(headerSize); - is.i = is.b.begin(); try { - _transceiver->initialize(timeout); - _transceiver->read(is, timeout); + _thread = new ThreadPerConnection(this); + _thread->start(_threadPerConnectionStackSize); } - catch(const TimeoutException&) + catch(const IceUtil::Exception& ex) { - throw ConnectTimeoutException(__FILE__, __LINE__); - } - assert(is.i == is.b.end()); - is.i = is.b.begin(); - Byte m[4]; - is.read(m[0]); - is.read(m[1]); - is.read(m[2]); - is.read(m[3]); - if(m[0] != magic[0] || m[1] != magic[1] || m[2] != magic[2] || m[3] != magic[3]) - { - BadMagicException ex(__FILE__, __LINE__); - ex.badMagic = Ice::ByteSeq(&m[0], &m[0] + sizeof(magic)); - throw ex; - } - Byte pMajor; - Byte pMinor; - is.read(pMajor); - is.read(pMinor); - if(pMajor != protocolMajor) - { - UnsupportedProtocolException ex(__FILE__, __LINE__); - ex.badMajor = static_cast<unsigned char>(pMajor); - ex.badMinor = static_cast<unsigned char>(pMinor); - ex.major = static_cast<unsigned char>(protocolMajor); - ex.minor = static_cast<unsigned char>(protocolMinor); - throw ex; - } - Byte eMajor; - Byte eMinor; - is.read(eMajor); - is.read(eMinor); - if(eMajor != encodingMajor) - { - UnsupportedEncodingException ex(__FILE__, __LINE__); - ex.badMajor = static_cast<unsigned char>(eMajor); - ex.badMinor = static_cast<unsigned char>(eMinor); - ex.major = static_cast<unsigned char>(encodingMajor); - ex.minor = static_cast<unsigned char>(encodingMinor); - throw ex; - } - Byte messageType; - is.read(messageType); - if(messageType != validateConnectionMsg) - { - throw ConnectionNotValidatedException(__FILE__, __LINE__); + { + Error out(_logger); + out << "cannot create thread for connection:\n" << ex; + } + + // + // Clean up. + // + _thread = 0; + _state = StateClosed; + + ex.ice_throw(); } - Byte compress; - is.read(compress); // Ignore compression status for validate connection. - Int size; - is.read(size); - if(size != headerSize) + + if(!callback) // Wait for the connection to be validated. { - throw IllegalMessageSizeException(__FILE__, __LINE__); + while(_state <= StateNotValidated) + { + wait(); + } + + if(_state >= StateClosing) + { + assert(_exception.get()); + _exception->ice_throw(); + } } - traceHeader("received validate connection", is, _logger, _traceLevels); + return; // We're done. } } - catch(const LocalException& ex) + + SocketStatus status = initialize(); + if(status == Finished) + { + status = validate(); + } + + if(status == Finished) + { + finishStart(); + return; // We're done! + } + + assert(callback); + + IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this); + if(_state == StateClosed) { - IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this); - setState(StateClosed, ex); assert(_exception.get()); _exception->ice_throw(); } - } - { - IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this); + int timeout; + DefaultsAndOverridesPtr defaultsAndOverrides = _instance->defaultsAndOverrides(); + if(defaultsAndOverrides->overrideConnectTimeout) + { + timeout = defaultsAndOverrides->overrideConnectTimeoutValue; + } + else + { + timeout = _endpoint->timeout(); + } - if(_acmTimeout > 0) + _sendInProgress = true; + _selectorThread->_register(_transceiver->fd(), this, status, timeout); + return; + } + catch(const Ice::LocalException& ex) + { { - _acmAbsoluteTimeout = IceUtil::Time::now(IceUtil::Time::Monotonic) + IceUtil::Time::seconds(_acmTimeout); + IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this); + setState(StateClosed, ex); + + // + // If start is called with a callback, the callback is notified either by the + // thread per conncetion or the thread pool. + // + if(callback) + { + if(!_threadPerConnection) + { + registerWithPool(); + unregisterWithPool(); // Let finished do the close. + } + return; + } + + // + // Close the transceiver if there's no thread per connection, otherwise, the + // thread per connection takes care of it. + // + if(!_thread && _transceiver) + { + try + { + _transceiver->close(); + } + catch(const Ice::LocalException&) + { + // Here we ignore any exceptions in close(). + } + _transceiver = 0; + } } - // - // We start out in holding state. - // - setState(StateHolding); + waitUntilFinished(); + throw; } } @@ -230,10 +261,14 @@ void Ice::ConnectionI::activate() { IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this); + if(_state <= StateNotValidated) + { + return; + } - while(_state == StateNotValidated) + if(_acmTimeout > 0) { - wait(); + _acmAbsoluteTimeout = IceUtil::Time::now(IceUtil::Time::Monotonic) + IceUtil::Time::seconds(_acmTimeout); } setState(StateActive); @@ -243,10 +278,9 @@ void Ice::ConnectionI::hold() { IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this); - - while(_state == StateNotValidated) + if(_state <= StateNotValidated) { - wait(); + return; } setState(StateHolding); @@ -255,20 +289,35 @@ Ice::ConnectionI::hold() void Ice::ConnectionI::destroy(DestructionReason reason) { - IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this); - - switch(reason) + bool send = false; + { + IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this); + + switch(reason) + { + case ObjectAdapterDeactivated: + { + send = setState(StateClosing, ObjectAdapterDeactivatedException(__FILE__, __LINE__)); + break; + } + + case CommunicatorDestroyed: + { + send = setState(StateClosing, CommunicatorDestroyedException(__FILE__, __LINE__)); + break; + } + } + } + + if(send) // Send the close connection message { - case ObjectAdapterDeactivated: + try { - setState(StateClosing, ObjectAdapterDeactivatedException(__FILE__, __LINE__)); - break; + finishSendMessage(); } - - case CommunicatorDestroyed: + catch(const Ice::LocalException&) { - setState(StateClosing, CommunicatorDestroyedException(__FILE__, __LINE__)); - break; + // Ignore. } } } @@ -276,32 +325,47 @@ Ice::ConnectionI::destroy(DestructionReason reason) void Ice::ConnectionI::close(bool force) { - IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this); - - if(force) + bool send = false; { - setState(StateClosed, ForcedCloseConnectionException(__FILE__, __LINE__)); + IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this); + + if(force) + { + setState(StateClosed, ForcedCloseConnectionException(__FILE__, __LINE__)); + } + else + { + // + // If we do a graceful shutdown, then we wait until all + // outstanding requests have been completed. Otherwise, the + // CloseConnectionException will cause all outstanding + // requests to be retried, regardless of whether the server + // has processed them or not. + // + while(!_requests.empty() || !_asyncRequests.empty()) + { + wait(); + } + + send = setState(StateClosing, CloseConnectionException(__FILE__, __LINE__)); + } } - else + + if(send) // Send the close connection message { - // - // If we do a graceful shutdown, then we wait until all - // outstanding requests have been completed. Otherwise, the - // CloseConnectionException will cause all outstanding - // requests to be retried, regardless of whether the server - // has processed them or not. - // - while(!_requests.empty() || !_asyncRequests.empty()) + try { - wait(); + finishSendMessage(); + } + catch(const Ice::LocalException&) + { + // Ignore. } - - setState(StateClosing, CloseConnectionException(__FILE__, __LINE__)); } } bool -Ice::ConnectionI::isDestroyed() const +Ice::ConnectionI::isActiveOrHolding() const { // // We can not use trylock here, otherwise the outgoing connection @@ -310,7 +374,7 @@ Ice::ConnectionI::isDestroyed() const // IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this); - return _state >= StateClosing; + return _state > StateNotValidated && _state < StateClosing; } bool @@ -460,56 +524,55 @@ Ice::ConnectionI::waitUntilFinished() void Ice::ConnectionI::monitor() { - IceUtil::Monitor<IceUtil::Mutex>::TryLock sync(*this); - - if(!sync.acquired()) + bool send = false; { - return; - } + IceUtil::Monitor<IceUtil::Mutex>::TryLock sync(*this); + if(!sync.acquired()) + { + return; + } - if(_state != StateActive) - { - return; - } + if(_state != StateActive) + { + return; + } - // - // Check for timed out async requests. - // - for(map<Int, AsyncRequest>::iterator p = _asyncRequests.begin(); p != _asyncRequests.end(); ++p) - { - if(p->second.t > IceUtil::Time() && p->second.t <= IceUtil::Time::now(IceUtil::Time::Monotonic)) + // + // Active connection management for idle connections. + // + if(_acmTimeout <= 0 || + !_requests.empty() || !_asyncRequests.empty() || + _batchStreamInUse || !_batchStream.b.empty() || + _sendInProgress || _dispatchCount > 0) { - setState(StateClosed, TimeoutException(__FILE__, __LINE__)); return; } + + if(IceUtil::Time::now(IceUtil::Time::Monotonic) >= _acmAbsoluteTimeout) + { + send = setState(StateClosing, ConnectionTimeoutException(__FILE__, __LINE__)); + } } - - // - // Active connection management for idle connections. - // - if(_acmTimeout > 0 && - _requests.empty() && _asyncRequests.empty() && - !_batchStreamInUse && _batchStream.b.empty() && - _dispatchCount == 0) + + if(send) { - if(IceUtil::Time::now(IceUtil::Time::Monotonic) >= _acmAbsoluteTimeout) + try + { + finishSendMessage(); + } + catch(const Ice::LocalException&) { - setState(StateClosing, ConnectionTimeoutException(__FILE__, __LINE__)); - return; } } } -void -Ice::ConnectionI::sendRequest(BasicStream* os, Outgoing* out, bool compress) +bool +Ice::ConnectionI::sendRequest(Outgoing* out, bool compress, bool response) { - Int requestId; - + BasicStream* os = out->os(); + bool send = false; { IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this); - - assert(!(out && _endpoint->datagram())); // Twoway requests cannot be datagrams. - if(_exception.get()) { // @@ -523,10 +586,8 @@ Ice::ConnectionI::sendRequest(BasicStream* os, Outgoing* out, bool compress) assert(_state > StateNotValidated); assert(_state < StateClosing); - // - // Only add to the request map if this is a twoway call. - // - if(out) + Int requestId; + if(response) { // // Create a new unique request ID. @@ -547,134 +608,65 @@ Ice::ConnectionI::sendRequest(BasicStream* os, Outgoing* out, bool compress) #else copy(p, p + sizeof(Int), os->b.begin() + headerSize); #endif - - // - // Add to the requests map. - // - _requestsHint = _requests.insert(_requests.end(), pair<const Int, Outgoing*>(requestId, out)); } - - if(_acmTimeout > 0) + + // + // Send the message. If it can't be sent without blocking the message is added + // to _sendStreams and it will be sent by the selector thread or by this thread + // if flush is true. + // + try { - _acmAbsoluteTimeout = IceUtil::Time::now(IceUtil::Time::Monotonic) + IceUtil::Time::seconds(_acmTimeout); + OutgoingMessage message(out, os, compress, response); + send = sendMessage(message); } - } - - try - { - IceUtil::Mutex::Lock sendSync(_sendMutex); - - if(!_transceiver) // Has the transceiver already been closed? + catch(const LocalException& ex) { - assert(_exception.get()); - _exception->ice_throw(); // The exception is immutable at this point. + setState(StateClosed, ex); + assert(_exception.get()); + _exception->ice_throw(); } - - if(compress && os->b.size() >= 100) // Only compress messages larger than 100 bytes. + + if(response) { // - // Message compressed. Request compressed response, if any. - // - os->b[9] = 2; - - // - // Do compression. - // - BasicStream cstream(_instance.get()); - doCompress(*os, cstream); - - // - // Send the request. + // Add to the requests map. // - os->i = os->b.begin(); - traceRequest("sending request", *os, _logger, _traceLevels); - cstream.i = cstream.b.begin(); - _transceiver->write(cstream, _endpoint->timeout()); + _requestsHint = _requests.insert(_requests.end(), pair<const Int, Outgoing*>(requestId, out)); } - else - { - if(compress) - { - // - // Message not compressed. Request compressed response, if any. - // - os->b[9] = 1; - } - // - // No compression, just fill in the message size. - // - Int sz = static_cast<Int>(os->b.size()); - const Byte* p = reinterpret_cast<const Byte*>(&sz); -#ifdef ICE_BIG_ENDIAN - reverse_copy(p, p + sizeof(Int), os->b.begin() + 10); -#else - copy(p, p + sizeof(Int), os->b.begin() + 10); -#endif - - // - // Send the request. - // - os->i = os->b.begin(); - traceRequest("sending request", *os, _logger, _traceLevels); - _transceiver->write(*os, _endpoint->timeout()); + if(!send) + { + return !_sendInProgress && _queuedStreams.empty(); // The request was sent if it's not queued! } } - catch(const LocalException& ex) - { - IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this); - setState(StateClosed, ex); - assert(_exception.get()); - if(out) + if(send) + { + try { - // - // If the request has already been removed from the - // request map, we are out of luck. It would mean that - // finished() has been called already, and therefore the - // exception has been set using the Outgoing::finished() - // callback. In this case, we cannot throw the exception - // here, because we must not both raise an exception and - // have Outgoing::finished() called with an - // exception. This means that in some rare cases, a - // request will not be retried even though it could. But I - // honestly don't know how I could avoid this, without a - // very elaborate and complex design, which would be bad - // for performance. - // - map<Int, Outgoing*>::iterator p = _requests.find(requestId); - if(p != _requests.end()) - { - if(p == _requestsHint) - { - _requests.erase(p++); - _requestsHint = p; - } - else - { - _requests.erase(p); - } - - _exception->ice_throw(); - } + finishSendMessage(); } - else + catch(const Ice::LocalException&) { - _exception->ice_throw(); + assert(_exception.get()); + if(!response) // Twoway calls are notified through finished() + { + throw; + } } } + return true; // The request was sent. } void -Ice::ConnectionI::sendAsyncRequest(BasicStream* os, const OutgoingAsyncPtr& out, bool compress) +Ice::ConnectionI::sendAsyncRequest(const OutgoingAsyncPtr& out, bool compress, bool response) { - Int requestId; + BasicStream* os = out->__getOs(); + bool send = false; { IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this); - - assert(!_endpoint->datagram()); // Twoway requests cannot be datagrams, and async implies twoway. - if(_exception.get()) { // @@ -687,140 +679,66 @@ Ice::ConnectionI::sendAsyncRequest(BasicStream* os, const OutgoingAsyncPtr& out, assert(_state > StateNotValidated); assert(_state < StateClosing); - - // - // Create a new unique request ID. - // - requestId = _nextRequestId++; - if(requestId <= 0) + + Int requestId; + if(response) { - _nextRequestId = 1; + // + // Create a new unique request ID. + // requestId = _nextRequestId++; - } - - // - // Fill in the request ID. - // - const Byte* p = reinterpret_cast<const Byte*>(&requestId); + if(requestId <= 0) + { + _nextRequestId = 1; + requestId = _nextRequestId++; + } + + // + // Fill in the request ID. + // + const Byte* p = reinterpret_cast<const Byte*>(&requestId); #ifdef ICE_BIG_ENDIAN - reverse_copy(p, p + sizeof(Int), os->b.begin() + headerSize); + reverse_copy(p, p + sizeof(Int), os->b.begin() + headerSize); #else - copy(p, p + sizeof(Int), os->b.begin() + headerSize); + copy(p, p + sizeof(Int), os->b.begin() + headerSize); #endif - - // - // Add to the async requests map. - // - struct AsyncRequest asyncRequest; - asyncRequest.p = out; - if(_endpoint->timeout() > 0) - { - asyncRequest.t = - IceUtil::Time::now(IceUtil::Time::Monotonic) + IceUtil::Time::milliSeconds(_endpoint->timeout()); } - _asyncRequestsHint = _asyncRequests.insert(_asyncRequests.end(), - pair<const Int, AsyncRequest>(requestId, asyncRequest)); - - if(_acmTimeout > 0) + + try { - _acmAbsoluteTimeout = IceUtil::Time::now(IceUtil::Time::Monotonic) + IceUtil::Time::seconds(_acmTimeout); + OutgoingMessage message(out, os, compress, response); + send = sendMessage(message); } - } - - try - { - IceUtil::Mutex::Lock sendSync(_sendMutex); - - if(!_transceiver) // Has the transceiver already been closed? + catch(const LocalException& ex) { + setState(StateClosed, ex); assert(_exception.get()); - _exception->ice_throw(); // The exception is immutable at this point. + _exception->ice_throw(); } - if(compress && os->b.size() >= 100) // Only compress messages larger than 100 bytes. - { - // - // Message compressed. Request compressed response, if any. - // - os->b[9] = 2; - - // - // Do compression. - // - BasicStream cstream(_instance.get()); - doCompress(*os, cstream); - - // - // Send the request. - // - os->i = os->b.begin(); - traceRequest("sending asynchronous request", *os, _logger, _traceLevels); - cstream.i = cstream.b.begin(); - _transceiver->write(cstream, _endpoint->timeout()); - } - else + if(response) { - if(compress) - { - // - // Message not compressed. Request compressed response, if any. - // - os->b[9] = 1; - } - - // - // No compression, just fill in the message size. - // - Int sz = static_cast<Int>(os->b.size()); - const Byte* p = reinterpret_cast<const Byte*>(&sz); -#ifdef ICE_BIG_ENDIAN - reverse_copy(p, p + sizeof(Int), os->b.begin() + 10); -#else - copy(p, p + sizeof(Int), os->b.begin() + 10); -#endif - // - // Send the request. + // Add to the async requests map. // - os->i = os->b.begin(); - traceRequest("sending asynchronous request", *os, _logger, _traceLevels); - _transceiver->write(*os, _endpoint->timeout()); + _asyncRequestsHint = _asyncRequests.insert(_asyncRequests.end(), + pair<const Int, OutgoingAsyncPtr>(requestId, out)); } } - catch(const LocalException& ex) + + if(send) { - IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this); - setState(StateClosed, ex); - assert(_exception.get()); - - // - // If the request has already been removed from the async - // request map, we are out of luck. It would mean that - // finished() has been called already, and therefore the - // exception has been set using the - // OutgoingAsync::__finished() callback. In this case, we - // cannot throw the exception here, because we must not both - // raise an exception and have OutgoingAsync::__finished() - // called with an exception. This means that in some rare - // cases, a request will not be retried even though it - // could. But I honestly don't know how I could avoid this, - // without a very elaborate and complex design, which would be - // bad for performance. - // - map<Int, AsyncRequest>::iterator p = _asyncRequests.find(requestId); - if(p != _asyncRequests.end()) + try { - if(p == _asyncRequestsHint) - { - _asyncRequests.erase(p++); - _asyncRequestsHint = p; - } - else + finishSendMessage(); + } + catch(const Ice::LocalException&) + { + assert(_exception.get()); + if(!response) // Twoway calls are notified through finished(). { - _asyncRequests.erase(p); - } - - _exception->ice_throw(); + throw; + } } } } @@ -872,9 +790,8 @@ Ice::ConnectionI::prepareBatchRequest(BasicStream* os) void Ice::ConnectionI::finishBatchRequest(BasicStream* os, bool compress) { - bool autoflush = false; - vector<Ice::Byte> lastRequest; - + bool send = false; + try { IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this); @@ -882,16 +799,15 @@ Ice::ConnectionI::finishBatchRequest(BasicStream* os, bool compress) // Get the batch stream back. // _batchStream.swap(*os); - + + if(_exception.get()) + { + _exception->ice_throw(); + } + + bool flush = false; if(_batchAutoFlush) { - IceUtil::Mutex::Lock sendSync(_sendMutex); - if(!_transceiver) - { - assert(_exception.get()); - _exception->ice_throw(); // The exception is immutable at this point. - } - // // Throw memory limit exception if the first message added causes us to // go over limit. Otherwise put aside the marshalled message that caused @@ -903,122 +819,152 @@ Ice::ConnectionI::finishBatchRequest(BasicStream* os, bool compress) } catch(const Ice::Exception&) { - if(_batchRequestNum == 0) + if(_batchRequestNum > 0) + { + flush = true; + } + else { - resetBatch(true); throw; } - vector<Ice::Byte>(_batchStream.b.begin() + _batchMarker, _batchStream.b.end()).swap(lastRequest); - _batchStream.b.resize(_batchMarker); - autoflush = true; } } - if(!autoflush) + if(flush) { // - // Increment the number of requests in the batch. + // Temporarily save the last request. + // + vector<Ice::Byte> lastRequest(_batchStream.b.begin() + _batchMarker, _batchStream.b.end()); + _batchStream.b.resize(_batchMarker); + + // + // Send the batch stream without the last request. + // + try + { + // + // Fill in the number of requests in the batch. + // + const Byte* p = reinterpret_cast<const Byte*>(&_batchRequestNum); +#ifdef ICE_BIG_ENDIAN + reverse_copy(p, p + sizeof(Int), _batchStream.b.begin() + headerSize); +#else + copy(p, p + sizeof(Int), _batchStream.b.begin() + headerSize); +#endif + + OutgoingMessage message(&_batchStream, _batchRequestCompress); + send = sendMessage(message); + if(send) + { + // + // If the request can't be sent immediately and this is a foreground send, + // we adopt the stream to be able to re-use _batchStream immediately. + // + assert(!_sendStreams.empty()); + _sendStreams.back().adopt(0); + } + } + catch(const Ice::LocalException& ex) + { + setState(StateClosed, ex); + assert(_exception.get()); + _exception->ice_throw(); + } + + // + // Reset the batch. // - ++_batchRequestNum; + BasicStream dummy(_instance.get(), _batchAutoFlush); + _batchStream.swap(dummy); + _batchRequestNum = 0; + _batchRequestCompress = false; + _batchMarker = 0; // - // We compress the whole batch if there is at least one compressed - // message. + // Check again if the last request doesn't exceed what we can send with the auto flush // - if(compress) + if(sizeof(requestBatchHdr) + lastRequest.size() > _instance->messageSizeMax()) { - _batchRequestCompress = true; + throw MemoryLimitException(__FILE__, __LINE__); } - + // - // Notify about the batch stream not being in use anymore. + // Start a new batch with the last message that caused us to go over the limit. // - assert(_batchStreamInUse); - _batchStreamInUse = false; - notifyAll(); + _batchStream.writeBlob(requestBatchHdr, sizeof(requestBatchHdr)); + _batchStream.writeBlob(&lastRequest[0], lastRequest.size()); } - } - - if(autoflush) - { - // - // We have to keep _batchStreamInUse set until after we insert the - // saved marshalled data into a new stream. - // - flushBatchRequestsInternal(true); - - IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this); // - // Throw memory limit exception if the message that caused us to go over - // limit causes us to exceed the limit by itself. + // Increment the number of requests in the batch. // - if(sizeof(requestBatchHdr) + lastRequest.size() > _instance->messageSizeMax()) - { - resetBatch(true); - throw MemoryLimitException(__FILE__, __LINE__); - } - + ++_batchRequestNum; + // - // Start a new batch with the last message that caused us to - // go over the limit. + // We compress the whole batch if there is at least one compressed + // message. // - try - { - _batchStream.writeBlob(requestBatchHdr, sizeof(requestBatchHdr)); - _batchStream.writeBlob(&lastRequest[0], lastRequest.size()); - } - catch(const LocalException& ex) - { - setState(StateClosed, ex); - ex.ice_throw(); - } - if(compress) { _batchRequestCompress = true; } - + // - // Notify that the batch stream not in use anymore. + // Notify about the batch stream not being in use anymore. // - ++_batchRequestNum; + assert(_batchStreamInUse); _batchStreamInUse = false; notifyAll(); } + catch(const Ice::LocalException&) + { + abortBatchRequest(); + if(send) + { + finishSendMessage(); // Let exceptions go through to report auto-flush failures to the caller. + } + throw; + } + + if(send) + { + finishSendMessage(); // Let exceptions go through to report auto-flush failures to the caller. + } } void Ice::ConnectionI::abortBatchRequest() { IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this); - - // - // Reset the batch stream. We cannot save old requests - // in the batch stream, as they might be corrupted due to - // incomplete marshaling. - // - resetBatch(true); + + BasicStream dummy(_instance.get(), _batchAutoFlush); + _batchStream.swap(dummy); + _batchRequestNum = 0; + _batchRequestCompress = false; + _batchMarker = 0; + + assert(_batchStreamInUse); + _batchStreamInUse = false; + notifyAll(); } void Ice::ConnectionI::flushBatchRequests() { - flushBatchRequestsInternal(false); + BatchOutgoing out(this, _instance.get()); + out.invoke(); } -void -Ice::ConnectionI::flushBatchRequestsInternal(bool ignoreInUse) +bool +Ice::ConnectionI::flushBatchRequests(BatchOutgoing* out) { + bool send = false; { IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this); - - if(!ignoreInUse) + while(_batchStreamInUse && !_exception.get()) { - while(_batchStreamInUse && !_exception.get()) - { - wait(); - } + wait(); } if(_exception.get()) @@ -1026,36 +972,78 @@ Ice::ConnectionI::flushBatchRequestsInternal(bool ignoreInUse) _exception->ice_throw(); } - if(_batchStream.b.empty()) + if(_batchRequestNum == 0) { - return; // Nothing to do. + return true; } - assert(_state > StateNotValidated); - assert(_state < StateClosing); - - _batchStream.i = _batchStream.b.begin(); + // + // Fill in the number of requests in the batch. + // + const Byte* p = reinterpret_cast<const Byte*>(&_batchRequestNum); +#ifdef ICE_BIG_ENDIAN + reverse_copy(p, p + sizeof(Int), _batchStream.b.begin() + headerSize); +#else + copy(p, p + sizeof(Int), _batchStream.b.begin() + headerSize); +#endif + _batchStream.swap(*out->os()); - if(_acmTimeout > 0) + // + // Send the batch stream. + // + try { - _acmAbsoluteTimeout = IceUtil::Time::now(IceUtil::Time::Monotonic) + IceUtil::Time::seconds(_acmTimeout); + OutgoingMessage message(out, out->os(), _batchRequestCompress, false); + send = sendMessage(message); + } + catch(const Ice::LocalException& ex) + { + setState(StateClosed, ex); + assert(_exception.get()); + _exception->ice_throw(); } // - // Prevent that new batch requests are added while we are - // flushing. + // Reset the batch stream. // - _batchStreamInUse = true; + BasicStream dummy(_instance.get(), _batchAutoFlush); + _batchStream.swap(dummy); + _batchRequestNum = 0; + _batchRequestCompress = false; + _batchMarker = 0; + + if(!send) + { + return !_sendInProgress && _queuedStreams.empty(); // The request was sent if it's not queued! + } } - - try + + if(send) + { + finishSendMessage(); + } + return true; +} + +void +Ice::ConnectionI::flushAsyncBatchRequests(const BatchOutgoingAsyncPtr& outAsync) +{ + bool send = false; { - IceUtil::Mutex::Lock sendSync(_sendMutex); + IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this); + while(_batchStreamInUse && !_exception.get()) + { + wait(); + } + + if(_exception.get()) + { + _exception->ice_throw(); + } - if(!_transceiver) // Has the transceiver already been closed? + if(_batchRequestNum == 0) { - assert(_exception.get()); - _exception->ice_throw(); // The exception is immutable at this point. + return; } // @@ -1067,195 +1055,123 @@ Ice::ConnectionI::flushBatchRequestsInternal(bool ignoreInUse) #else copy(p, p + sizeof(Int), _batchStream.b.begin() + headerSize); #endif - - if(_batchRequestCompress && _batchStream.b.size() >= 100) // Only compress messages larger than 100 bytes. + _batchStream.swap(*outAsync->__getOs()); + + // + // Send the batch stream. + // + try { - // - // Message compressed. Request compressed response, if any. - // - _batchStream.b[9] = 2; - - // - // Do compression. - // - BasicStream cstream(_instance.get()); - doCompress(_batchStream, cstream); - - // - // Send the batch request. - // - _batchStream.i = _batchStream.b.begin(); - traceBatchRequest("sending batch request", _batchStream, _logger, _traceLevels); - cstream.i = cstream.b.begin(); - _transceiver->write(cstream, _endpoint->timeout()); + OutgoingMessage message(outAsync, outAsync->__getOs(), _batchRequestCompress, false); + send = sendMessage(message); } - else + catch(const Ice::LocalException& ex) { - if(_batchRequestCompress) - { - // - // Message not compressed. Request compressed response, if any. - // - _batchStream.b[9] = 1; - } - - // - // No compression, just fill in the message size. - // - Int sz = static_cast<Int>(_batchStream.b.size()); - const Byte* q = reinterpret_cast<const Byte*>(&sz); -#ifdef ICE_BIG_ENDIAN - reverse_copy(q, q + sizeof(Int), _batchStream.b.begin() + 10); -#else - copy(q, q + sizeof(Int), _batchStream.b.begin() + 10); -#endif - - // - // Send the batch request. - // - _batchStream.i = _batchStream.b.begin(); - traceBatchRequest("sending batch request", _batchStream, _logger, _traceLevels); - _transceiver->write(_batchStream, _endpoint->timeout()); + setState(StateClosed, ex); + assert(_exception.get()); + _exception->ice_throw(); } - } - catch(const LocalException& ex) - { - IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this); - setState(StateClosed, ex); - assert(_exception.get()); // - // Since batch requests are all oneways (or datagrams), we - // must report the exception to the caller. + // Reset the batch stream. // - _exception->ice_throw(); + BasicStream dummy(_instance.get(), _batchAutoFlush); + _batchStream.swap(dummy); + _batchRequestNum = 0; + _batchRequestCompress = false; + _batchMarker = 0; } + if(send) { - IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this); - - // - // Reset the batch stream, and notify that flushing is over. - // - resetBatch(!ignoreInUse); - } -} - -void -Ice::ConnectionI::resetBatch(bool resetInUse) -{ - BasicStream dummy(_instance.get(), _batchAutoFlush); - _batchStream.swap(dummy); - _batchRequestNum = 0; - _batchRequestCompress = false; - _batchMarker = 0; - - // - // Notify about the batch stream not being in use - // anymore. - // - if(resetInUse) - { - assert(_batchStreamInUse); - _batchStreamInUse = false; - notifyAll(); + finishSendMessage(); } } void Ice::ConnectionI::sendResponse(BasicStream* os, Byte compressFlag) { - try + bool send = false; { - IceUtil::Mutex::Lock sendSync(_sendMutex); - - if(!_transceiver) // Has the transceiver already been closed? - { - assert(_exception.get()); - _exception->ice_throw(); // The exception is immutable at this point. - } + IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this); + assert(_state > StateNotValidated); - // - // Only compress if compression was requested by the client, - // and if the message is larger than 100 bytes. - // - if(compressFlag > 0 && os->b.size() >= 100) + try { - // - // Message compressed. Request compressed response, if any. - // - os->b[9] = 2; + if(--_dispatchCount == 0) + { + notifyAll(); + } - // - // Do compression. - // - BasicStream cstream(_instance.get()); - doCompress(*os, cstream); + if(_state == StateClosed) + { + assert(_exception.get()); + _exception->ice_throw(); + } - // - // Send the reply. - // - os->i = os->b.begin(); - traceReply("sending reply", *os, _logger, _traceLevels); - cstream.i = cstream.b.begin(); - _transceiver->write(cstream, _endpoint->timeout()); - } - else - { - if(compressFlag > 0) + OutgoingMessage message(os, compressFlag > 0); + send = sendMessage(message); + + if(_state == StateClosing && _dispatchCount == 0) { - // - // Message not compressed. Request compressed response, if any. - // - os->b[9] = 1; + send = initiateShutdown(send); } - // - // No compression, just fill in the message size. - // - Int sz = static_cast<Int>(os->b.size()); - const Byte* p = reinterpret_cast<const Byte*>(&sz); -#ifdef ICE_BIG_ENDIAN - reverse_copy(p, p + sizeof(Int), os->b.begin() + 10); -#else - copy(p, p + sizeof(Int), os->b.begin() + 10); -#endif - - // - // Send the reply. - // - os->i = os->b.begin(); - traceReply("sending reply", *os, _logger, _traceLevels); - _transceiver->write(*os, _endpoint->timeout()); + if(_acmTimeout > 0) + { + _acmAbsoluteTimeout = IceUtil::Time::now(IceUtil::Time::Monotonic) + + IceUtil::Time::seconds(_acmTimeout); + } + } + catch(const LocalException& ex) + { + setState(StateClosed, ex); } } - catch(const LocalException& ex) + + if(send) { - IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this); - setState(StateClosed, ex); + try + { + finishSendMessage(); + } + catch(Ice::LocalException&) + { + // Ignore. + } } +} +void +Ice::ConnectionI::sendNoResponse() +{ + bool send = false; { IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this); - assert(_state > StateNotValidated); - + try { if(--_dispatchCount == 0) { notifyAll(); } - + + if(_state == StateClosed) + { + assert(_exception.get()); + _exception->ice_throw(); + } + if(_state == StateClosing && _dispatchCount == 0) { - initiateShutdown(); + send = initiateShutdown(false); } - + if(_acmTimeout > 0) { - _acmAbsoluteTimeout = - IceUtil::Time::now(IceUtil::Time::Monotonic) + IceUtil::Time::seconds(_acmTimeout); + _acmAbsoluteTimeout = IceUtil::Time::now(IceUtil::Time::Monotonic) + + IceUtil::Time::seconds(_acmTimeout); } } catch(const LocalException& ex) @@ -1263,31 +1179,18 @@ Ice::ConnectionI::sendResponse(BasicStream* os, Byte compressFlag) setState(StateClosed, ex); } } -} -void -Ice::ConnectionI::sendNoResponse() -{ - IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this); - - assert(_state > StateNotValidated); - - try + if(send) { - if(--_dispatchCount == 0) + try { - notifyAll(); + finishSendMessage(); } - - if(_state == StateClosing && _dispatchCount == 0) + catch(Ice::LocalException&) { - initiateShutdown(); + // Ignore. } } - catch(const LocalException& ex) - { - setState(StateClosed, ex); - } } EndpointIPtr @@ -1307,12 +1210,15 @@ Ice::ConnectionI::setAdapter(const ObjectAdapterPtr& adapter) { IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this); - if(_exception.get()) + if(_state == StateClosing || _state == StateClosed) { + assert(_exception.get()); _exception->ice_throw(); } - - assert(_state < StateClosing); + else if(_state <= StateNotValidated) + { + return; + } _adapter = adapter; @@ -1370,12 +1276,12 @@ Ice::ConnectionI::readable() const return true; } -void +bool Ice::ConnectionI::read(BasicStream& stream) { assert(!_threadPerConnection); // Only for use with a thread pool. - _transceiver->read(stream, 0); + return _transceiver->read(stream, 0); // // Updating _acmAbsoluteTimeout is too expensive here, because we @@ -1446,9 +1352,6 @@ Ice::ConnectionI::finished(const ThreadPoolPtr& threadPool) threadPool->promoteFollower(); auto_ptr<LocalException> localEx; - - map<Int, Outgoing*> requests; - map<Int, AsyncRequest> asyncRequests; { IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this); @@ -1456,49 +1359,48 @@ Ice::ConnectionI::finished(const ThreadPoolPtr& threadPool) --_finishedCount; assert(threadPool.get() == _threadPool.get()); - if(_finishedCount == 0 && _state == StateClosed) + if(_finishedCount > 0 || _state != StateClosed || _sendInProgress) { - _threadPool->decFdsInUse(); + return; + } - // - // We must make sure that nobody is sending when we close - // the transceiver. - // - IceUtil::Mutex::Lock sendSync(_sendMutex); + _threadPool->decFdsInUse(); + _selectorThread->decFdsInUse(); - try - { - _transceiver->close(); - } - catch(const LocalException& ex) - { - localEx.reset(dynamic_cast<LocalException*>(ex.ice_clone())); - } - - _transceiver = 0; - notifyAll(); + try + { + _transceiver->close(); } - - if(_state == StateClosed || _state == StateClosing) + catch(const LocalException& ex) { - requests.swap(_requests); - _requestsHint = _requests.end(); - - asyncRequests.swap(_asyncRequests); - _asyncRequestsHint = _asyncRequests.end(); + localEx.reset(dynamic_cast<LocalException*>(ex.ice_clone())); } + + _transceiver = 0; + notifyAll(); } - for(map<Int, Outgoing*>::iterator p = requests.begin(); p != requests.end(); ++p) + finishStart(*_exception.get()); + + // Note: the streams must be cleared first because they expect the Outgoing objects to still be valid. + for(deque<OutgoingMessage>::iterator o = _queuedStreams.begin(); o != _queuedStreams.end(); ++o) { - p->second->finished(*_exception.get()); // The exception is immutable at this point. + o->finished(*_exception.get()); } + _queuedStreams.clear(); - for(map<Int, AsyncRequest>::iterator q = asyncRequests.begin(); q != asyncRequests.end(); ++q) + for(map<Int, Outgoing*>::iterator p = _requests.begin(); p != _requests.end(); ++p) { - q->second.p->__finished(*_exception.get()); // The exception is immutable at this point. + p->second->finished(*_exception.get()); // The exception is immutable at this point. } + _requests.clear(); + for(map<Int, OutgoingAsyncPtr>::iterator q = _asyncRequests.begin(); q != _asyncRequests.end(); ++q) + { + q->second->__finished(*_exception.get()); // The exception is immutable at this point. + } + _asyncRequests.clear(); + if(localEx.get()) { localEx->ice_throw(); @@ -1554,6 +1456,139 @@ Ice::ConnectionI::toString() const } // +// Operations from SocketReadyCallback +// +SocketStatus +Ice::ConnectionI::socketReady(bool finished) +{ + if(!finished) + { + try + { + // + // First, we check if there's something to send. If that's the case, the connection + // must be active and the only thing to do is send the queued streams. + // + if(!_sendStreams.empty()) + { + if(!send(0)) + { + return NeedWrite; + } + assert(_sendStreams.empty()); + } + else + { + // + // If there's nothing to send, we're still validating the connection. + // + int state; + { + IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this); + assert(_state == StateClosed || _state <= StateNotValidated); + + state = _state; + + if(_state == StateClosed) + { + assert(_exception.get()); + _exception->ice_throw(); + } + } + + if(state == StateNotInitialized) + { + SocketStatus status = initialize(); + if(status != Finished) + { + return status; + } + } + + if(state <= StateNotValidated) + { + SocketStatus status = validate(); + if(status != Finished) + { + return status; + } + } + + finishStart(); + } + } + catch(const Ice::LocalException& ex) + { + IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this); + setState(StateClosed, ex); + } + } + + // + // If there's no more data to send or if connection validation is finished, we checkout + // the connection state to figure out whether or not it's time to unregister with the + // selector thread. + // + + IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this); + assert(_sendInProgress); + if(_state == StateClosed) + { + assert(!_startCallback || (!_threadPerConnection && !_registeredWithPool)); + + _queuedStreams.insert(_queuedStreams.begin(), _sendStreams.begin(), _sendStreams.end()); + _sendStreams.clear(); + _sendInProgress = false; + + if(_threadPerConnection) + { + _transceiver->shutdownReadWrite(); + } + else + { + registerWithPool(); + unregisterWithPool(); // Let finished() do the close. + } + notifyAll(); + return Finished; + } + else if(_waitingForSend > 0) // If there's synchronous calls waiting to be sent, unregister. + { + _sendInProgress = false; + notifyAll(); + return Finished; + } + else if(_queuedStreams.empty()) + { + _sendInProgress = false; + if(_acmTimeout > 0) + { + _acmAbsoluteTimeout = IceUtil::Time::now(IceUtil::Time::Monotonic) + IceUtil::Time::seconds(_acmTimeout); + } + return Finished; + } + else + { + _sendStreams.swap(_queuedStreams); + return NeedWrite; // We're not finished yet, there's more data to send! + } +} + +void +Ice::ConnectionI::socketTimeout() +{ + IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this); + if(_state <= StateNotValidated) + { + setState(StateClosed, ConnectTimeoutException(__FILE__, __LINE__)); + } + else if(_state <= StateClosing) + { + setState(StateClosed, TimeoutException(__FILE__, __LINE__)); + } +} + +// // Only used by the SSL plug-in. // // The external party has to synchronize the connection, since the @@ -1596,8 +1631,10 @@ Ice::ConnectionI::ConnectionI(const InstancePtr& instance, _batchRequestNum(0), _batchRequestCompress(false), _batchMarker(0), + _sendInProgress(false), + _waitingForSend(0), _dispatchCount(0), - _state(StateNotValidated), + _state(StateNotInitialized), _stateTime(IceUtil::Time::now(IceUtil::Time::Monotonic)) { Int& acmTimeout = const_cast<Int&>(_acmTimeout); @@ -1635,17 +1672,17 @@ Ice::ConnectionI::ConnectionI(const InstancePtr& instance, _servantManager = adapterImpl->getServantManager(); } - if(!threadPerConnection) + __setNoDelete(true); + try { - // - // Only set _threadPool if we really need it, i.e., if we are - // not in thread per connection mode. Thread pools have lazy - // initialization in Instance, and we don't want them to be - // created if they are not needed. - // - __setNoDelete(true); - try + if(!threadPerConnection) { + // + // Only set _threadPool if we really need it, i.e., if we are + // not in thread per connection mode. Thread pools have lazy + // initialization in Instance, and we don't want them to be + // created if they are not needed. + // if(adapterImpl) { const_cast<ThreadPoolPtr&>(_threadPool) = adapterImpl->getThreadPool(); @@ -1656,76 +1693,34 @@ Ice::ConnectionI::ConnectionI(const InstancePtr& instance, } _threadPool->incFdsInUse(); } - catch(const IceUtil::Exception& ex) - { - try - { - _transceiver->close(); - } - catch(const LocalException&) - { - // Here we ignore any exceptions in close(). - } - __setNoDelete(false); - ex.ice_throw(); - } + // + // Only set selector thread if we really need it. + // + const_cast<SelectorThreadPtr&>(_selectorThread) = _instance->selectorThread(); + _selectorThread->incFdsInUse(); + } + catch(const IceUtil::Exception&) + { __setNoDelete(false); + throw; } + __setNoDelete(false); } Ice::ConnectionI::~ConnectionI() { + assert(!_startCallback); assert(_state == StateClosed); assert(!_transceiver); assert(_dispatchCount == 0); assert(!_thread); + assert(_queuedStreams.empty()); + assert(_requests.empty()); + assert(_asyncRequests.empty()); } -void -Ice::ConnectionI::start() -{ - // - // If we are in thread per connection mode, create the thread for this connection. - // We can't start the thread in the constructor because it can cause a race condition - // (see bug 1718). - // - if(_threadPerConnection) - { - try - { - _thread = new ThreadPerConnection(this); - _thread->start(_threadPerConnectionStackSize); - } - catch(const IceUtil::Exception& ex) - { - { - Error out(_logger); - out << "cannot create thread for connection:\n" << ex; - } - - try - { - _transceiver->close(); - } - catch(const LocalException&) - { - // Here we ignore any exceptions in close(). - } - - // - // Clean up. - // - _transceiver = 0; - _thread = 0; - _state = StateClosed; - - ex.ice_throw(); - } - } -} - -void +bool Ice::ConnectionI::setState(State state, const LocalException& ex) { // @@ -1736,7 +1731,7 @@ Ice::ConnectionI::setState(State state, const LocalException& ex) if(_state == state) // Don't switch twice. { - return; + return false; } if(!_exception.get()) @@ -1777,10 +1772,10 @@ Ice::ConnectionI::setState(State state, const LocalException& ex) // exceptions. Otherwise new requests may retry on a connection // that is not yet marked as closed or closing. // - setState(state); + return setState(state); } -void +bool Ice::ConnectionI::setState(State state) { // @@ -1795,135 +1790,122 @@ Ice::ConnectionI::setState(State state) // // Skip graceful shutdown if we are destroyed before validation. // - if(_state == StateNotValidated && state == StateClosing) + if(_state <= StateNotValidated && state == StateClosing) { state = StateClosed; } if(_state == state) // Don't switch twice. { - return; + return false; } switch(state) { - case StateNotValidated: + case StateNotInitialized: + { + assert(false); + break; + } + + case StateNotValidated: + { + if(_state != StateNotInitialized) { - assert(false); - break; + assert(_state == StateClosed); + return false; } + break; + } - case StateActive: + case StateActive: + { + // + // Can only switch from holding or not validated to + // active. + // + if(_state != StateHolding && _state != StateNotValidated) { - // - // Can only switch from holding or not validated to - // active. - // - if(_state != StateHolding && _state != StateNotValidated) - { - return; - } - if(!_threadPerConnection) - { - registerWithPool(); - } - break; + return false; + } + if(!_threadPerConnection) + { + registerWithPool(); + } + break; + } + + case StateHolding: + { + // + // Can only switch from active or not validated to + // holding. + // + if(_state != StateActive && _state != StateNotValidated) + { + return false; + } + if(!_threadPerConnection) + { + unregisterWithPool(); + } + break; + } + + case StateClosing: + { + // + // Can't change back from closed. + // + if(_state == StateClosed) + { + return false; } + if(!_threadPerConnection) + { + registerWithPool(); // We need to continue to read in closing state. + } + break; + } - case StateHolding: + case StateClosed: + { + if(_sendInProgress) { // - // Can only switch from active or not validated to - // holding. + // Unregister with both the pool and the selector thread. We unregister with + // the pool to ensure that it stops reading on the socket (otherwise, if the + // socket is closed the thread pool would spin always reading 0 from the FD). + // The selector thread will register again the FD with the pool once it's + // done. // - if(_state != StateActive && _state != StateNotValidated) - { - return; - } + _selectorThread->unregister(_transceiver->fd()); if(!_threadPerConnection) { unregisterWithPool(); } - break; - } - case StateClosing: + _transceiver->shutdownWrite(); // Prevent further writes. + } + else if(_state <= StateNotValidated || _threadPerConnection) { // - // Can't change back from closed. + // If we are in thread per connection mode or we're initializing + // the connection in blocking mode, we shutdown both for reading + // and writing. This will unblock and read call with an exception. + // The thread per connection then closes the transceiver. // - if(_state == StateClosed) - { - return; - } - if(!_threadPerConnection) - { - registerWithPool(); // We need to continue to read in closing state. - } - break; + _transceiver->shutdownReadWrite(); } - - case StateClosed: + else { - if(_threadPerConnection) - { - // - // If we are in thread per connection mode, we - // shutdown both for reading and writing. This will - // unblock and read call with an exception. The thread - // per connection then closes the transceiver. - // - _transceiver->shutdownReadWrite(); - } - else if(_state == StateNotValidated) - { - // - // If we change from not validated we can close right - // away. - // - assert(!_registeredWithPool); - - _threadPool->decFdsInUse(); - - // - // We must make sure that nobody is sending when we - // close the transceiver. - // - IceUtil::Mutex::Lock sendSync(_sendMutex); - - try - { - _transceiver->close(); - } - catch(const LocalException&) - { - // Here we ignore any exceptions in close(). - } - - _transceiver = 0; - //notifyAll(); // We notify already below. - } - else - { - // - // Otherwise we first must make sure that we are - // registered, then we unregister, and let finished() - // do the close. - // - registerWithPool(); - unregisterWithPool(); + registerWithPool(); + unregisterWithPool(); // Let finished() do the close. - // - // We must prevent any further writes when _state == StateClosed. - // However, functions such as sendResponse cannot acquire the main - // mutex in order to check _state. Therefore we shut down the write - // end of the transceiver, which causes subsequent write attempts - // to fail with an exception. - // - _transceiver->shutdownWrite(); - } - break; + _transceiver->shutdownWrite(); // Prevent further writes. } + break; + } } // @@ -1954,25 +1936,25 @@ Ice::ConnectionI::setState(State state) { try { - initiateShutdown(); + return initiateShutdown(false); } catch(const LocalException& ex) { setState(StateClosed, ex); } } + + return false; } -void -Ice::ConnectionI::initiateShutdown() const +bool +Ice::ConnectionI::initiateShutdown(bool queue) { assert(_state == StateClosing); assert(_dispatchCount == 0); if(!_endpoint->datagram()) { - IceUtil::Mutex::Lock sendSync(_sendMutex); - // // Before we shut down, we send a close connection message. // @@ -1989,12 +1971,9 @@ Ice::ConnectionI::initiateShutdown() const os.write((Byte)1); // Compression status: compression supported but not used. os.write(headerSize); // Message size. - // - // Send the message. - // - os.i = os.b.begin(); - traceHeader("sending close connection", os, _logger, _traceLevels); - _transceiver->write(os, _endpoint->timeout()); + OutgoingMessage message(&os, false); + return sendMessage(message, queue); + // // The CloseConnection message should be sufficient. Closing the write // end of the socket is probably an artifact of how things were done @@ -2005,6 +1984,610 @@ Ice::ConnectionI::initiateShutdown() const // //_transceiver->shutdownWrite(); } + + return false; +} + +SocketStatus +Ice::ConnectionI::initialize() +{ + int timeout = 0; + if(!_startCallback || _threadPerConnection) + { + DefaultsAndOverridesPtr defaultsAndOverrides = _instance->defaultsAndOverrides(); + if(defaultsAndOverrides->overrideConnectTimeout) + { + timeout = defaultsAndOverrides->overrideConnectTimeoutValue; + } + else + { + timeout = _endpoint->timeout(); + } + } + + try + { + SocketStatus status = _transceiver->initialize(timeout); + if(status != Finished) + { + if(!_startCallback || _threadPerConnection) + { + throw TimeoutException(__FILE__, __LINE__); + } + return status; + } + } + catch(const TimeoutException&) + { + throw ConnectTimeoutException(__FILE__, __LINE__); + } + + { + IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this); + if(_state == StateClosed) + { + assert(_exception.get()); + _exception->ice_throw(); + } + + // + // Update the connection description once the transceiver is initialized. + // + const_cast<string&>(_desc) = _transceiver->toString(); + + setState(StateNotValidated); + } + + return Finished; +} + +SocketStatus +Ice::ConnectionI::validate() +{ + if(!_endpoint->datagram()) // Datagram connections are always implicitly validated. + { + Int timeout = 0; + if(!_startCallback || _threadPerConnection) + { + if(_instance->defaultsAndOverrides()->overrideConnectTimeout) + { + timeout = _instance->defaultsAndOverrides()->overrideConnectTimeoutValue; + } + else + { + timeout = _endpoint->timeout(); + } + } + + if(_adapter) // The server side has the active role for connection validation. + { + BasicStream& os = _stream; + if(os.b.empty()) + { + os.write(magic[0]); + os.write(magic[1]); + os.write(magic[2]); + os.write(magic[3]); + os.write(protocolMajor); + os.write(protocolMinor); + os.write(encodingMajor); + os.write(encodingMinor); + os.write(validateConnectionMsg); + os.write(static_cast<Byte>(0)); // Compression status (always zero for validate connection). + os.write(headerSize); // Message size. + os.i = os.b.begin(); + traceSend(os, _logger, _traceLevels); + } + else + { + // The stream can only be non-empty if we're doing a non-blocking connection validation. + assert(_startCallback && !_threadPerConnection); + } + + try + { + if(!_transceiver->write(os, timeout)) + { + if(!_startCallback || _threadPerConnection) + { + throw TimeoutException(__FILE__, __LINE__); + } + return NeedWrite; + } + } + catch(const TimeoutException&) + { + throw ConnectTimeoutException(__FILE__, __LINE__); + } + } + else // The client side has the passive role for connection validation. + { + BasicStream& is = _stream; + if(is.b.empty()) + { + is.b.resize(headerSize); + is.i = is.b.begin(); + } + else + { + // The stream can only be non-empty if we're doing a non-blocking connection validation. + assert(_startCallback && !_threadPerConnection); + } + + try + { + if(!_transceiver->read(is, timeout)) + { + if(!_startCallback || _threadPerConnection) + { + throw TimeoutException(__FILE__, __LINE__); + } + return NeedRead; + } + } + catch(const TimeoutException&) + { + throw ConnectTimeoutException(__FILE__, __LINE__); + } + + assert(is.i == is.b.end()); + is.i = is.b.begin(); + Byte m[4]; + is.read(m[0]); + is.read(m[1]); + is.read(m[2]); + is.read(m[3]); + if(m[0] != magic[0] || m[1] != magic[1] || m[2] != magic[2] || m[3] != magic[3]) + { + BadMagicException ex(__FILE__, __LINE__); + ex.badMagic = Ice::ByteSeq(&m[0], &m[0] + sizeof(magic)); + throw ex; + } + Byte pMajor; + Byte pMinor; + is.read(pMajor); + is.read(pMinor); + if(pMajor != protocolMajor) + { + UnsupportedProtocolException ex(__FILE__, __LINE__); + ex.badMajor = static_cast<unsigned char>(pMajor); + ex.badMinor = static_cast<unsigned char>(pMinor); + ex.major = static_cast<unsigned char>(protocolMajor); + ex.minor = static_cast<unsigned char>(protocolMinor); + throw ex; + } + Byte eMajor; + Byte eMinor; + is.read(eMajor); + is.read(eMinor); + if(eMajor != encodingMajor) + { + UnsupportedEncodingException ex(__FILE__, __LINE__); + ex.badMajor = static_cast<unsigned char>(eMajor); + ex.badMinor = static_cast<unsigned char>(eMinor); + ex.major = static_cast<unsigned char>(encodingMajor); + ex.minor = static_cast<unsigned char>(encodingMinor); + throw ex; + } + Byte messageType; + is.read(messageType); + if(messageType != validateConnectionMsg) + { + throw ConnectionNotValidatedException(__FILE__, __LINE__); + } + Byte compress; + is.read(compress); // Ignore compression status for validate connection. + Int size; + is.read(size); + if(size != headerSize) + { + throw IllegalMessageSizeException(__FILE__, __LINE__); + } + traceRecv(is, _logger, _traceLevels); + } + } + + { + IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this); + _stream.resize(0); + _stream.i = _stream.b.begin(); + + if(_state == StateClosed) + { + assert(_exception.get()); + _exception->ice_throw(); + } + + // + // We start out in holding state. + // + setState(StateHolding); + } + + return Finished; +} + +bool +Ice::ConnectionI::send(int timeout) +{ + assert(_transceiver); + assert(!_sendStreams.empty()); + + while(!_sendStreams.empty()) + { + OutgoingMessage* message = &_sendStreams.front(); + + // + // Prepare the message stream for writing if necessary. + // + if(!message->stream->i) + { + message->stream->i = message->stream->b.begin(); + if(message->compress && message->stream->b.size() >= 100) // Only compress messages larger than 100 bytes. + { + // + // Message compressed. Request compressed response, if any. + // + message->stream->b[9] = 2; + + // + // Do compression. + // + BasicStream stream(_instance.get()); + doCompress(*message->stream, stream); + + if(message->outAsync) + { + trace("sending asynchronous request", *message->stream, _logger, _traceLevels); + } + else + { + traceSend(*message->stream, _logger, _traceLevels); + } + + message->adopt(&stream); // Adopt the compressed stream. + message->stream->i = message->stream->b.begin(); + } + else + { + if(message->compress) + { + // + // Message not compressed. Request compressed response, if any. + // + message->stream->b[9] = 1; + } + + // + // No compression, just fill in the message size. + // + Int sz = static_cast<Int>(message->stream->b.size()); + const Byte* p = reinterpret_cast<const Byte*>(&sz); +#ifdef ICE_BIG_ENDIAN + reverse_copy(p, p + sizeof(Int), message->stream->b.begin() + 10); +#else + copy(p, p + sizeof(Int), message->stream->b.begin() + 10); +#endif + message->stream->i = message->stream->b.begin(); + + if(message->outAsync) + { + trace("sending asynchronous request", *message->stream, _logger, _traceLevels); + } + else + { + traceSend(*message->stream, _logger, _traceLevels); + } + } + } + + // + // Send the first message. + // + assert(message->stream->i); + if(!_transceiver->write(*message->stream, timeout)) + { + assert(timeout == 0); + return false; + } + + // + // Notify the message that it was sent. + // + message->sent(this, timeout == 0); // timeout == 0 indicates that this is called by the selector thread. + _sendStreams.pop_front(); + } + + return true; +} + +bool +Ice::ConnectionI::sendMessage(OutgoingMessage& message, bool queue) +{ + assert(_state != StateClosed); + + // + // TODO: Remove support for foreground send? If set to true, messages are sent + // by the calling thread. Foreground send might still be useful for transports + // that don't support non-blocking send. + // + bool foreground = false; + + message.stream->i = 0; // Reset the message stream iterator before starting sending the message. + + // + // If another thread is currently sending messages, we queue the message in _queuedStreams + // if we're not required to send the message in the foreground. If we're required to send + // the request in the foreground we wait until no more threads send messages. + // + if(_sendInProgress) + { + if(!foreground) + { + _queuedStreams.push_back(message); + _queuedStreams.back().adopt(0); + return false; + } + else if(queue) + { + // + // Add the message to _sendStreams if requested, this is useful for sendResponse() to + // send the close connection message after sending the response. + // + _sendStreams.push_back(message); + return true; // The calling thread must send the messages by calling finishSendMessage() + } + else + { + ++_waitingForSend; + while(_sendInProgress) + { + wait(); + } + --_waitingForSend; + + if(_state == StateClosed) + { + assert(_exception.get()); + _exception->ice_throw(); + } + } + } + + assert(!_sendInProgress); + + // + // Attempt to send the message without blocking. If the send blocks, we register + // the connection with the selector thread or we request the caller to call + // finishSendMessage() outside the synchronization. + // + + message.stream->i = message.stream->b.begin(); + + if(message.compress && message.stream->b.size() >= 100) // Only compress messages larger than 100 bytes. + { + // + // Message compressed. Request compressed response, if any. + // + message.stream->b[9] = 2; + + // + // Do compression. + // + BasicStream stream(_instance.get()); + doCompress(*message.stream, stream); + stream.i = stream.b.begin(); + + if(message.outAsync) + { + trace("sending asynchronous request", *message.stream, _logger, _traceLevels); + } + else + { + traceSend(*message.stream, _logger, _traceLevels); + } + + // + // Send the message without blocking. + // + if(!foreground && _transceiver->write(stream, 0)) + { + message.sent(this, false); + if(_acmTimeout > 0) + { + _acmAbsoluteTimeout = + IceUtil::Time::now(IceUtil::Time::Monotonic) + IceUtil::Time::seconds(_acmTimeout); + } + return false; + } + + _sendStreams.push_back(message); + _sendStreams.back().adopt(&stream); + } + else + { + if(message.compress) + { + // + // Message not compressed. Request compressed response, if any. + // + message.stream->b[9] = 1; + } + + // + // No compression, just fill in the message size. + // + Int sz = static_cast<Int>(message.stream->b.size()); + const Byte* p = reinterpret_cast<const Byte*>(&sz); +#ifdef ICE_BIG_ENDIAN + reverse_copy(p, p + sizeof(Int), message.stream->b.begin() + 10); +#else + copy(p, p + sizeof(Int), message.stream->b.begin() + 10); +#endif + message.stream->i = message.stream->b.begin(); + + if(message.outAsync) + { + trace("sending asynchronous request", *message.stream, _logger, _traceLevels); + } + else + { + traceSend(*message.stream, _logger, _traceLevels); + } + + // + // Send the message without blocking. + // + if(!foreground && _transceiver->write(*message.stream, 0)) + { + message.sent(this, false); + if(_acmTimeout > 0) + { + _acmAbsoluteTimeout = + IceUtil::Time::now(IceUtil::Time::Monotonic) + IceUtil::Time::seconds(_acmTimeout); + } + return false; + } + + _sendStreams.push_back(message); + if(!foreground) + { + _sendStreams.back().adopt(0); + } + } + + _sendInProgress = true; + if(!foreground) + { + _selectorThread->_register(_transceiver->fd(), this, NeedWrite, _endpoint->timeout()); + return false; // The selector thread will send the message. + } + else + { + return true; // The calling thread must send the message by calling finishSendMessage() + } +} + +void +Ice::ConnectionI::finishSendMessage() +{ + try + { + // + // Send the send messages with a blocking write(). + // + send(_endpoint->timeout()); + } + catch(const Ice::LocalException& ex) + { + IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this); + setState(StateClosed, ex); + + for(deque<OutgoingMessage>::const_iterator p = _sendStreams.begin(); p != _sendStreams.end(); ++p) + { + if(p->adopted) + { + delete p->stream; + } + } + _sendStreams.clear(); + _sendInProgress = false; + + if(_threadPerConnection) + { + _transceiver->shutdownReadWrite(); + } + else + { + registerWithPool(); + unregisterWithPool(); // Let finished() do the close. + } + + notifyAll(); + + assert(_exception.get()); + _exception->ice_throw(); + } + + + // + // Clear the _sendInProgress flag and notify waiting threads that we're not + // sending anymore data. + // + IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this); + assert(_sendStreams.empty()); + + if(_state == StateClosed) + { + _sendInProgress = false; + if(_threadPerConnection) + { + _transceiver->shutdownReadWrite(); + } + else + { + registerWithPool(); + unregisterWithPool(); // Let finished() do the close. + } + notifyAll(); + } + else if(_waitingForSend > 0) + { + _sendInProgress = false; + notifyAll(); + } + else if(_queuedStreams.empty()) + { + if(_acmTimeout > 0) + { + _acmAbsoluteTimeout = IceUtil::Time::now(IceUtil::Time::Monotonic) + IceUtil::Time::seconds(_acmTimeout); + } + _sendInProgress = false; + } + else + { + _selectorThread->_register(_transceiver->fd(), this, NeedWrite, _endpoint->timeout()); + } +} + +void +Ice::ConnectionI::finishStart() +{ + // + // We set _startCallback to null to break potential cyclic reference count + // and because the destructor checks for it to ensure that we always invoke + // on the callback. + // + + StartCallbackPtr callback; + { + IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this); + swap(callback, _startCallback); + } + if(callback) + { + callback->connectionStartCompleted(this); + } +} + +void +Ice::ConnectionI::finishStart(const Ice::LocalException& ex) +{ + // + // We set _startCallback to null to break potential cyclic reference count + // and because the destructor checks for it to ensure that we always invoke + // on the callback. + // + + StartCallbackPtr callback; + { + IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this); + swap(callback, _startCallback); + } + if(callback) + { + callback->connectionStartFailed(this, ex); + } } void @@ -2213,7 +2796,7 @@ Ice::ConnectionI::parseMessage(BasicStream& stream, Int& invokeNum, Int& request { case closeConnectionMsg: { - traceHeader("received close connection", stream, _logger, _traceLevels); + traceRecv(stream, _logger, _traceLevels); if(_endpoint->datagram()) { if(_warn) @@ -2233,13 +2816,12 @@ Ice::ConnectionI::parseMessage(BasicStream& stream, Int& invokeNum, Int& request { if(_state == StateClosing) { - traceRequest("received request during closing\n" - "(ignored by server, client will retry)", - stream, _logger, _traceLevels); + trace("received request during closing\n(ignored by server, client will retry)", stream, _logger, + _traceLevels); } else { - traceRequest("received request", stream, _logger, _traceLevels); + traceRecv(stream, _logger, _traceLevels); stream.read(requestId); invokeNum = 1; servantManager = _servantManager; @@ -2253,13 +2835,12 @@ Ice::ConnectionI::parseMessage(BasicStream& stream, Int& invokeNum, Int& request { if(_state == StateClosing) { - traceBatchRequest("received batch request during closing\n" - "(ignored by server, client will retry)", - stream, _logger, _traceLevels); + trace("received batch request during closing\n(ignored by server, client will retry)", stream, + _logger, _traceLevels); } else { - traceBatchRequest("received batch request", stream, _logger, _traceLevels); + traceRecv(stream, _logger, _traceLevels); stream.read(invokeNum); if(invokeNum < 0) { @@ -2275,12 +2856,12 @@ Ice::ConnectionI::parseMessage(BasicStream& stream, Int& invokeNum, Int& request case replyMsg: { - traceReply("received reply", stream, _logger, _traceLevels); + traceRecv(stream, _logger, _traceLevels); stream.read(requestId); map<Int, Outgoing*>::iterator p = _requests.end(); - map<Int, AsyncRequest>::iterator q = _asyncRequests.end(); + map<Int, OutgoingAsyncPtr>::iterator q = _asyncRequests.end(); if(_requestsHint != _requests.end()) { @@ -2334,7 +2915,7 @@ Ice::ConnectionI::parseMessage(BasicStream& stream, Int& invokeNum, Int& request { assert(q != _asyncRequests.end()); - outAsync = q->second.p; + outAsync = q->second; if(q == _asyncRequestsHint) { @@ -2352,7 +2933,7 @@ Ice::ConnectionI::parseMessage(BasicStream& stream, Int& invokeNum, Int& request case validateConnectionMsg: { - traceHeader("received validate connection", stream, _logger, _traceLevels); + traceRecv(stream, _logger, _traceLevels); if(_warn) { Warning out(_logger); @@ -2363,9 +2944,7 @@ Ice::ConnectionI::parseMessage(BasicStream& stream, Int& invokeNum, Int& request default: { - traceHeader("received unknown message\n" - "(invalid, closing connection)", - stream, _logger, _traceLevels); + trace("received unknown message\n(invalid, closing connection)", stream, _logger, _traceLevels); throw UnknownMessageException(__FILE__, __LINE__); break; } @@ -2448,30 +3027,26 @@ Ice::ConnectionI::invokeAll(BasicStream& stream, Int invokeNum, Int requestId, B void Ice::ConnectionI::run() { - // - // For non-datagram connections, the thread-per-connection must - // validate and activate this connection, and not in the - // connection factory. Please see the comments in the connection - // factory for details. - // - if(!_endpoint->datagram()) + try + { + // + // Initialize the connection transceiver and validate the connection using + // blocking operations. + // + SocketStatus status; + + status = initialize(); + assert(status == Finished); + + status = validate(); + assert(status == Finished); + } + catch(const LocalException& ex) { - try - { - validate(); - } - catch(const LocalException&) { IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this); - - assert(_state == StateClosed); - - // - // We must make sure that nobody is sending when we close - // the transceiver. - // - IceUtil::Mutex::Lock sendSync(_sendMutex); - + setState(StateClosed, ex); + if(_transceiver) { try @@ -2482,15 +3057,17 @@ Ice::ConnectionI::run() { // Here we ignore any exceptions in close(). } - + _transceiver = 0; } notifyAll(); - return; } - - activate(); + + finishStart(ex); + return; } + + finishStart(); const bool warnUdp = _instance->initializationData().properties->getPropertyAsInt("Ice.Warn.Datagrams") > 0; @@ -2615,9 +3192,6 @@ Ice::ConnectionI::run() OutgoingAsyncPtr outAsync; auto_ptr<LocalException> localEx; - - map<Int, Outgoing*> requests; - map<Int, AsyncRequest> asyncRequests; { IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this); @@ -2638,12 +3212,24 @@ Ice::ConnectionI::run() // if(_state == StateClosed) { + if(_sendInProgress) + { + _selectorThread->unregister(_transceiver->fd()); + } + // - // We must make sure that nobody is sending when we close - // the transceiver. + // Prevent further writes. // - IceUtil::Mutex::Lock sendSync(_sendMutex); - + _transceiver->shutdownWrite(); + + // + // We must make sure that nobody is sending before closing the transceiver. + // + while(_sendInProgress) + { + wait(); + } + try { _transceiver->close(); @@ -2652,26 +3238,15 @@ Ice::ConnectionI::run() { localEx.reset(dynamic_cast<LocalException*>(ex.ice_clone())); } - _transceiver = 0; notifyAll(); // - // We cannot simply return here. We have to make sure - // that all requests (regular and async) are notified - // about the closed connection below. + // We cannot simply return here. We have to make sure that all requests (regular and + // async) are notified about the closed connection below. // closed = true; } - - if(_state == StateClosed || _state == StateClosing) - { - requests.swap(_requests); - _requestsHint = _requests.end(); - - asyncRequests.swap(_asyncRequests); - _asyncRequestsHint = _asyncRequests.end(); - } } // @@ -2690,21 +3265,33 @@ Ice::ConnectionI::run() // invokeAll(stream, invokeNum, requestId, compress, servantManager, adapter); - for(map<Int, Outgoing*>::iterator p = requests.begin(); p != requests.end(); ++p) - { - p->second->finished(*_exception.get()); // The exception is immutable at this point. - } - - for(map<Int, AsyncRequest>::iterator q = asyncRequests.begin(); q != asyncRequests.end(); ++q) + if(closed) { - q->second.p->__finished(*_exception.get()); // The exception is immutable at this point. - } + // Note: the streams must be cleared first because they expect the Outgoing objects to still be valid. + for(deque<OutgoingMessage>::iterator o = _queuedStreams.begin(); o != _queuedStreams.end(); ++o) + { + o->finished(*_exception.get()); + } + _queuedStreams.clear(); + + for(map<Int, Outgoing*>::iterator p = _requests.begin(); p != _requests.end(); ++p) + { + p->second->finished(*_exception.get()); // The exception is immutable at this point. + } + _requests.clear(); + for(map<Int, OutgoingAsyncPtr>::iterator q = _asyncRequests.begin(); q != _asyncRequests.end(); ++q) + { + q->second->__finished(*_exception.get()); // The exception is immutable at this point. + } + _asyncRequests.clear(); + } + if(localEx.get()) { assert(closed); localEx->ice_throw(); - } + } } } diff --git a/cpp/src/Ice/ConnectionI.h b/cpp/src/Ice/ConnectionI.h index 8e712cb3b42..9d7b9cc15af 100644 --- a/cpp/src/Ice/ConnectionI.h +++ b/cpp/src/Ice/ConnectionI.h @@ -26,11 +26,16 @@ #include <Ice/TraceLevelsF.h> #include <Ice/OutgoingAsyncF.h> #include <Ice/EventHandler.h> +#include <Ice/SelectorThread.h> + +#include <deque> namespace IceInternal { class Outgoing; +class BatchOutgoing; +class OutgoingMessageCallback; } @@ -39,23 +44,35 @@ namespace Ice class LocalException; -class ICE_API ConnectionI : public Connection, public IceInternal::EventHandler, +class ICE_API ConnectionI : public Connection, + public IceInternal::EventHandler, + public IceInternal::SocketReadyCallback, public IceUtil::Monitor<IceUtil::Mutex> { public: - void validate(); + class StartCallback : virtual public IceUtil::Shared + { + public: + + virtual void connectionStartCompleted(const ConnectionIPtr&) = 0; + virtual void connectionStartFailed(const ConnectionIPtr&, const Ice::LocalException&) = 0; + }; + typedef IceUtil::Handle<StartCallback> StartCallbackPtr; + enum DestructionReason { ObjectAdapterDeactivated, CommunicatorDestroyed }; + + void start(const StartCallbackPtr&); void activate(); void hold(); void destroy(DestructionReason); virtual void close(bool); // From Connection. - bool isDestroyed() const; + bool isActiveOrHolding() const; bool isFinished() const; void throwException() const; // Throws the connection exception if destroyed. @@ -65,14 +82,18 @@ public: void monitor(); - void sendRequest(IceInternal::BasicStream*, IceInternal::Outgoing*, bool); - void sendAsyncRequest(IceInternal::BasicStream*, const IceInternal::OutgoingAsyncPtr&, bool); + bool sendRequest(IceInternal::Outgoing*, bool, bool); + void sendAsyncRequest(const IceInternal::OutgoingAsyncPtr&, bool, bool); void prepareBatchRequest(IceInternal::BasicStream*); void finishBatchRequest(IceInternal::BasicStream*, bool); void abortBatchRequest(); + virtual void flushBatchRequests(); // From Connection. + bool flushBatchRequests(IceInternal::BatchOutgoing*); + void flushAsyncBatchRequests(const IceInternal::BatchOutgoingAsyncPtr&); + void sendResponse(IceInternal::BasicStream*, Byte); void sendNoResponse(); @@ -88,7 +109,7 @@ public: // virtual bool datagram() const; virtual bool readable() const; - virtual void read(IceInternal::BasicStream&); + virtual bool read(IceInternal::BasicStream&); virtual void message(IceInternal::BasicStream&, const IceInternal::ThreadPoolPtr&); virtual void finished(const IceInternal::ThreadPoolPtr&); virtual void exception(const LocalException&); @@ -97,6 +118,12 @@ public: virtual Ice::Int timeout() const; // From Connection. virtual std::string toString() const; // From Connection and EvantHandler. + // + // Operations from SocketReadyCallback + // + virtual IceInternal::SocketStatus socketReady(bool); + virtual void socketTimeout(); + // SSL plug-in needs to be able to get the transceiver. IceInternal::TransceiverPtr getTransceiver() const; @@ -105,12 +132,13 @@ private: ConnectionI(const IceInternal::InstancePtr&, const IceInternal::TransceiverPtr&, const IceInternal::EndpointIPtr&, const ObjectAdapterPtr&, bool, size_t); virtual ~ConnectionI(); - void start(); + friend class IceInternal::IncomingConnectionFactory; friend class IceInternal::OutgoingConnectionFactory; enum State { + StateNotInitialized, StateNotValidated, StateActive, StateHolding, @@ -118,13 +146,53 @@ private: StateClosed }; - void resetBatch(bool); - void flushBatchRequestsInternal(bool); + bool setState(State, const LocalException&); + bool setState(State); + + bool initiateShutdown(bool); + + struct OutgoingMessage + { + OutgoingMessage() + { + } + + OutgoingMessage(IceInternal::BasicStream* str, bool comp) : + stream(str), out(0), compress(comp), response(false), adopted(false) + { + } + + OutgoingMessage(IceInternal::OutgoingMessageCallback* o, IceInternal::BasicStream* str, bool comp, bool resp) : + stream(str), out(o), compress(comp), response(resp), adopted(false) + { + } + + OutgoingMessage(const IceInternal::OutgoingAsyncMessageCallbackPtr& o, IceInternal::BasicStream* str, + bool comp, bool resp) : + stream(str), out(0), outAsync(o), compress(comp), response(resp), adopted(false) + { + } + + void adopt(IceInternal::BasicStream*); + void sent(ConnectionI*, bool); + void finished(const Ice::LocalException&); + + IceInternal::BasicStream* stream; + IceInternal::OutgoingMessageCallback* out; + IceInternal::OutgoingAsyncMessageCallbackPtr outAsync; + bool compress; + bool response; + bool adopted; + }; - void setState(State, const LocalException&); - void setState(State); + IceInternal::SocketStatus initialize(); + IceInternal::SocketStatus validate(); + bool send(int); + bool sendMessage(OutgoingMessage&, bool = false); + void finishSendMessage(); - void initiateShutdown() const; + void finishStart(); + void finishStart(const Ice::LocalException&); void registerWithPool(); void unregisterWithPool(); @@ -171,6 +239,10 @@ private: int _finishedCount; const IceInternal::ThreadPoolPtr _threadPool; + const IceInternal::SelectorThreadPtr _selectorThread; + + StartCallbackPtr _startCallback; + const bool _warn; const int _acmTimeout; @@ -183,13 +255,8 @@ private: std::map<Int, IceInternal::Outgoing*> _requests; std::map<Int, IceInternal::Outgoing*>::iterator _requestsHint; - struct AsyncRequest - { - IceInternal::OutgoingAsyncPtr p; - IceUtil::Time t; - }; - std::map<Int, AsyncRequest> _asyncRequests; - std::map<Int, AsyncRequest>::iterator _asyncRequestsHint; + std::map<Int, IceInternal::OutgoingAsyncPtr> _asyncRequests; + std::map<Int, IceInternal::OutgoingAsyncPtr>::iterator _asyncRequestsHint; std::auto_ptr<LocalException> _exception; @@ -200,16 +267,15 @@ private: bool _batchRequestCompress; size_t _batchMarker; + std::deque<OutgoingMessage> _queuedStreams; + std::deque<OutgoingMessage> _sendStreams; + bool _sendInProgress; + int _waitingForSend; + int _dispatchCount; State _state; // The current state. IceUtil::Time _stateTime; // The last time when the state was changed. - - // - // We have a separate mutex for sending, so that we don't block - // the whole connection when we do a blocking send. - // - IceUtil::Mutex _sendMutex; }; } diff --git a/cpp/src/Ice/ConnectionMonitor.cpp b/cpp/src/Ice/ConnectionMonitor.cpp index cf4104e805d..a462251679b 100644 --- a/cpp/src/Ice/ConnectionMonitor.cpp +++ b/cpp/src/Ice/ConnectionMonitor.cpp @@ -69,7 +69,7 @@ IceInternal::ConnectionMonitor::~ConnectionMonitor() } void -IceInternal::ConnectionMonitor::run() +IceInternal::ConnectionMonitor::runTimerTask() { set<ConnectionIPtr> connections; diff --git a/cpp/src/Ice/ConnectionMonitor.h b/cpp/src/Ice/ConnectionMonitor.h index bfd7954dc4c..63f4be8457e 100644 --- a/cpp/src/Ice/ConnectionMonitor.h +++ b/cpp/src/Ice/ConnectionMonitor.h @@ -36,7 +36,7 @@ private: virtual ~ConnectionMonitor(); friend class Instance; - virtual void run(); + virtual void runTimerTask(); InstancePtr _instance; std::set<Ice::ConnectionIPtr> _connections; diff --git a/cpp/src/Ice/ConnectionRequestHandler.cpp b/cpp/src/Ice/ConnectionRequestHandler.cpp new file mode 100644 index 00000000000..dffab29e69b --- /dev/null +++ b/cpp/src/Ice/ConnectionRequestHandler.cpp @@ -0,0 +1,107 @@ +// ********************************************************************** +// +// Copyright (c) 2003-2007 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 <Ice/ConnectionRequestHandler.h> +#include <Ice/Proxy.h> +#include <Ice/Reference.h> +#include <Ice/ConnectionI.h> +#include <Ice/RouterInfo.h> +#include <Ice/Outgoing.h> +#include <Ice/OutgoingAsync.h> + +using namespace std; +using namespace IceInternal; + +ConnectionRequestHandler::ConnectionRequestHandler(const ReferencePtr& reference, const Ice::ObjectPrx& proxy) : + RequestHandler(reference), + _response(reference->getMode() == Reference::ModeTwoway) +{ + _connection = _reference->getConnection(_compress); + RouterInfoPtr ri = reference->getRouterInfo(); + if(ri) + { + ri->addProxy(proxy); + } +} + +ConnectionRequestHandler::ConnectionRequestHandler(const ReferencePtr& reference, + const Ice::ConnectionIPtr& connection, + bool compress) : + RequestHandler(reference), + _response(reference->getMode() == Reference::ModeTwoway), + _connection(connection), + _compress(compress) +{ +} + +void +ConnectionRequestHandler::prepareBatchRequest(BasicStream* out) +{ + _connection->prepareBatchRequest(out); +} + +void +ConnectionRequestHandler::finishBatchRequest(BasicStream* out) +{ + _connection->finishBatchRequest(out, _compress); +} + +void +ConnectionRequestHandler::abortBatchRequest() +{ + _connection->abortBatchRequest(); +} + +Ice::ConnectionI* +ConnectionRequestHandler::sendRequest(Outgoing* out) +{ + return (!_connection->sendRequest(out, _compress, _response) || _response) ? _connection.get() : 0; +} + +void +ConnectionRequestHandler::sendAsyncRequest(const OutgoingAsyncPtr& out) +{ + try + { + _connection->sendAsyncRequest(out, _compress, _response); + } + catch(const LocalExceptionWrapper& ex) + { + out->__finished(ex); + } + catch(const Ice::LocalException& ex) + { + out->__finished(ex); + } +} + +bool +ConnectionRequestHandler::flushBatchRequests(BatchOutgoing* out) +{ + return _connection->flushBatchRequests(out); +} + +void +ConnectionRequestHandler::flushAsyncBatchRequests(const BatchOutgoingAsyncPtr& out) +{ + try + { + _connection->flushAsyncBatchRequests(out); + } + catch(const Ice::LocalException& ex) + { + out->__finished(ex); + } +} + +Ice::ConnectionIPtr +ConnectionRequestHandler::getConnection(bool wait) +{ + return _connection; +} diff --git a/cpp/src/Ice/ConnectionRequestHandler.h b/cpp/src/Ice/ConnectionRequestHandler.h new file mode 100644 index 00000000000..785cda3b5b6 --- /dev/null +++ b/cpp/src/Ice/ConnectionRequestHandler.h @@ -0,0 +1,48 @@ +// ********************************************************************** +// +// Copyright (c) 2003-2007 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_CONNECTION_REQUEST_HANDLER_H +#define ICE_CONNECTION_REQUEST_HANDLER_H + +#include <Ice/RequestHandler.h> +#include <Ice/ReferenceF.h> +#include <Ice/ProxyF.h> + +namespace IceInternal +{ + +class ConnectionRequestHandler : public RequestHandler +{ +public: + + ConnectionRequestHandler(const ReferencePtr&, const Ice::ObjectPrx&); + ConnectionRequestHandler(const ReferencePtr&, const Ice::ConnectionIPtr&, bool); + + virtual void prepareBatchRequest(BasicStream*); + virtual void finishBatchRequest(BasicStream*); + virtual void abortBatchRequest(); + + virtual Ice::ConnectionI* sendRequest(Outgoing*); + virtual void sendAsyncRequest(const OutgoingAsyncPtr&); + + virtual bool flushBatchRequests(BatchOutgoing*); + virtual void flushAsyncBatchRequests(const BatchOutgoingAsyncPtr&); + + virtual Ice::ConnectionIPtr getConnection(bool); + +private: + + const bool _response; + Ice::ConnectionIPtr _connection; + bool _compress; +}; + +} + +#endif diff --git a/cpp/src/Ice/Connector.h b/cpp/src/Ice/Connector.h index 347997afbce..825afa86383 100644 --- a/cpp/src/Ice/Connector.h +++ b/cpp/src/Ice/Connector.h @@ -14,6 +14,12 @@ #include <Ice/ConnectorF.h> #include <Ice/TransceiverF.h> +#ifdef _WIN32 +# include <winsock2.h> +#else +# define SOCKET int +#endif + namespace IceInternal { @@ -22,6 +28,7 @@ class ICE_API Connector : public ::IceUtil::Shared public: virtual TransceiverPtr connect(int) = 0; + virtual Ice::Short type() const = 0; virtual std::string toString() const = 0; diff --git a/cpp/src/Ice/EndpointFactoryManager.cpp b/cpp/src/Ice/EndpointFactoryManager.cpp index a2a7900c26d..9b1a126a1d6 100644 --- a/cpp/src/Ice/EndpointFactoryManager.cpp +++ b/cpp/src/Ice/EndpointFactoryManager.cpp @@ -66,8 +66,6 @@ IceInternal::EndpointFactoryManager::get(Short type) const EndpointIPtr IceInternal::EndpointFactoryManager::create(const string& str, bool oaEndpoint) const { - IceUtil::Mutex::Lock sync(*this); // TODO: Necessary? - const string delim = " \t\n\r"; string::size_type beg = str.find_first_not_of(delim); @@ -91,30 +89,40 @@ IceInternal::EndpointFactoryManager::create(const string& str, bool oaEndpoint) protocol = _instance->defaultsAndOverrides()->defaultProtocol; } - // - // TODO: Optimize with a map? - // - for(vector<EndpointFactoryPtr>::size_type i = 0; i < _factories.size(); i++) + EndpointFactoryPtr factory; { - if(_factories[i]->protocol() == protocol) + IceUtil::Mutex::Lock sync(*this); // TODO: Necessary? + + // + // TODO: Optimize with a map? + // + for(vector<EndpointFactoryPtr>::size_type i = 0; i < _factories.size(); i++) { + if(_factories[i]->protocol() == protocol) + { + factory = _factories[i]; + } + } + } + + if(factory) + { #if 1 - return _factories[i]->create(str.substr(end), oaEndpoint); + return factory->create(str.substr(end), oaEndpoint); #else - // Code below left in place for debugging. - - EndpointIPtr e = _factories[i]->create(str.substr(end), oaEndpoint); - BasicStream bs(_instance.get()); - e->streamWrite(&bs); - bs.i = bs.b.begin(); - short type; - bs.read(type); - EndpointIPtr ue = new IceInternal::UnknownEndpointI(type, &bs); - cerr << "Normal: " << e->toString() << endl; - cerr << "Opaque: " << ue->toString() << endl; - return e; + // Code below left in place for debugging. + + EndpointIPtr e = factory->create(str.substr(end), oaEndpoint); + BasicStream bs(_instance.get()); + e->streamWrite(&bs); + bs.i = bs.b.begin(); + short type; + bs.read(type); + EndpointIPtr ue = new IceInternal::UnknownEndpointI(type, &bs); + cerr << "Normal: " << e->toString() << endl; + cerr << "Opaque: " << ue->toString() << endl; + return e; #endif - } } // @@ -124,22 +132,20 @@ IceInternal::EndpointFactoryManager::create(const string& str, bool oaEndpoint) if(protocol == "opaque") { EndpointIPtr ue = new UnknownEndpointI(str.substr(end)); - for(vector<EndpointFactoryPtr>::size_type i = 0; i < _factories.size(); i++) + factory = get(ue->type()); + if(factory) { - if(_factories[i]->type() == ue->type()) - { - // - // Make a temporary stream, write the opaque endpoint data into the stream, - // and ask the factory to read the endpoint data from that stream to create - // the actual endpoint. - // - BasicStream bs(_instance.get()); - ue->streamWrite(&bs); - bs.i = bs.b.begin(); - short type; - bs.read(type); - return _factories[i]->read(&bs); - } + // + // Make a temporary stream, write the opaque endpoint data into the stream, + // and ask the factory to read the endpoint data from that stream to create + // the actual endpoint. + // + BasicStream bs(_instance.get()); + ue->streamWrite(&bs); + bs.i = bs.b.begin(); + short type; + bs.read(type); + return factory->read(&bs); } return ue; // Endpoint is opaque, but we don't have a factory for its type. } @@ -150,20 +156,13 @@ IceInternal::EndpointFactoryManager::create(const string& str, bool oaEndpoint) EndpointIPtr IceInternal::EndpointFactoryManager::read(BasicStream* s) const { - IceUtil::Mutex::Lock sync(*this); // TODO: Necessary? - Short type; s->read(type); - // - // TODO: Optimize with a map? - // - for(vector<EndpointFactoryPtr>::size_type i = 0; i < _factories.size(); i++) + EndpointFactoryPtr factory = get(type); + if(factory) { - if(_factories[i]->type() == type) - { - return _factories[i]->read(s); - } + return factory->read(s); } return new UnknownEndpointI(type, s); diff --git a/cpp/src/Ice/EndpointI.cpp b/cpp/src/Ice/EndpointI.cpp index 45f88a6cde8..f3505005f28 100644 --- a/cpp/src/Ice/EndpointI.cpp +++ b/cpp/src/Ice/EndpointI.cpp @@ -8,7 +8,110 @@ // ********************************************************************** #include <Ice/EndpointI.h> +#include <Ice/Instance.h> +#include <Ice/LocalException.h> +#include <Ice/Network.h> -using namespace Ice; +using namespace std; +using namespace IceInternal; Ice::LocalObject* IceInternal::upCast(EndpointI* p) { return p; } +IceUtil::Shared* IceInternal::upCast(EndpointHostResolver* p) { return p; } + +vector<ConnectorPtr> +IceInternal::EndpointI::connectors(const vector<struct sockaddr_in>& addrs) const +{ + // + // This method must be extended by endpoints which use the EndpointHostResolver to create + // connectors from IP addresses. + // + assert(false); + return vector<ConnectorPtr>(); +} + +IceInternal::EndpointHostResolver::EndpointHostResolver(const InstancePtr& instance) : + _instance(instance), + _destroyed(false) +{ + start(); +} + +void +IceInternal::EndpointHostResolver::resolve(const string& host, int port, const EndpointIPtr& endpoint, + const EndpointI_connectorsPtr& callback) +{ + // + // Try to get the addresses without DNS lookup. If this doesn't work, we queue a resolve + // entry and the thread will take care of getting the endpoint addresses. + // + vector<struct sockaddr_in> addrs = getAddresses(host, port, false); + if(!addrs.empty()) + { + callback->connectors(endpoint->connectors(addrs)); + return; + } + + Lock sync(*this); + assert(!_destroyed); + + ResolveEntry entry; + entry.host = host; + entry.port = port; + entry.endpoint = endpoint; + entry.callback = callback; + _queue.push_back(entry); + notify(); +} + +void +IceInternal::EndpointHostResolver::destroy() +{ + Lock sync(*this); + assert(!_destroyed); + _destroyed = true; + notify(); +} + +void +IceInternal::EndpointHostResolver::run() +{ + if(_instance->initializationData().threadHook) + { + _instance->initializationData().threadHook->start(); + } + + while(true) + { + ResolveEntry resolve; + + { + Lock sync(*this); + + while(!_destroyed && _queue.empty()) + { + wait(); + } + + if(_destroyed) + { + break; + } + + resolve = _queue.front(); + _queue.pop_front(); + } + + resolve.callback->connectors(resolve.endpoint->connectors(getAddresses(resolve.host, resolve.port))); + } + + for(deque<ResolveEntry>::const_iterator p = _queue.begin(); p != _queue.end(); ++p) + { + p->callback->exception(Ice::CommunicatorDestroyedException(__FILE__, __LINE__)); + } + _queue.clear(); + + if(_instance->initializationData().threadHook) + { + _instance->initializationData().threadHook->stop(); + } +} diff --git a/cpp/src/Ice/EndpointI.h b/cpp/src/Ice/EndpointI.h index 9470d0e4468..1d5eff2df76 100644 --- a/cpp/src/Ice/EndpointI.h +++ b/cpp/src/Ice/EndpointI.h @@ -11,6 +11,8 @@ #define ICE_ENDPOINT_I_H #include <IceUtil/Shared.h> +#include <IceUtil/Thread.h> +#include <IceUtil/Monitor.h> #include <Ice/Endpoint.h> #include <Ice/EndpointIF.h> #include <Ice/InstanceF.h> @@ -18,11 +20,30 @@ #include <Ice/ConnectorF.h> #include <Ice/AcceptorF.h> +#ifdef _WIN32 +# include <winsock2.h> +#else +# include <netinet/in.h> // For struct sockaddr_in +#endif + +#include <deque> + namespace IceInternal { class BasicStream; +class ICE_API EndpointI_connectors : public virtual IceUtil::Shared +{ +public: + + virtual ~EndpointI_connectors() { } + + virtual void connectors(const std::vector<ConnectorPtr>&) = 0; + virtual void exception(const Ice::LocalException&) = 0; +}; +typedef IceUtil::Handle<EndpointI_connectors> EndpointI_connectorsPtr; + class ICE_API EndpointI : public Ice::Endpoint { public: @@ -97,6 +118,7 @@ public: // connector is available. // virtual std::vector<ConnectorPtr> connectors() const = 0; + virtual void connectors_async(const EndpointI_connectorsPtr&) const = 0; // // Return an acceptor for this endpoint, or null if no acceptors @@ -114,9 +136,9 @@ public: virtual std::vector<EndpointIPtr> expand() const = 0; // - // Check whether the endpoint is equivalent to a specific Connector. + // Check whether the endpoint is equivalent to another one. // - virtual bool equivalent(const ConnectorPtr&) const = 0; + virtual bool equivalent(const EndpointIPtr&) const = 0; // // Compare endpoints for sorting purposes. @@ -127,6 +149,9 @@ public: private: + virtual std::vector<ConnectorPtr> connectors(const std::vector<struct sockaddr_in>&) const; + friend class EndpointHostResolver; + #if defined(__SUNPRO_CC) || defined(__HP_aCC) // // COMPILERFIX: prevent the compiler from emitting a warning about @@ -137,6 +162,32 @@ private: #endif }; +class ICE_API EndpointHostResolver : public IceUtil::Thread, public IceUtil::Monitor<IceUtil::Mutex> +{ +public: + + EndpointHostResolver(const InstancePtr&); + + void resolve(const std::string&, int, const EndpointIPtr&, const EndpointI_connectorsPtr&); + void destroy(); + + virtual void run(); + +private: + + struct ResolveEntry + { + std::string host; + int port; + EndpointIPtr endpoint; + EndpointI_connectorsPtr callback; + }; + + const InstancePtr _instance; + bool _destroyed; + std::deque<ResolveEntry> _queue; +}; + } #endif diff --git a/cpp/src/Ice/EventHandler.cpp b/cpp/src/Ice/EventHandler.cpp index 6a92e51788d..c14576855b8 100644 --- a/cpp/src/Ice/EventHandler.cpp +++ b/cpp/src/Ice/EventHandler.cpp @@ -15,6 +15,7 @@ using namespace Ice; using namespace IceInternal; IceUtil::Shared* IceInternal::upCast(EventHandler* p) { return p; } +IceUtil::Shared* IceInternal::upCast(ThreadPoolWorkItem* p) { return p; } InstancePtr IceInternal::EventHandler::instance() const diff --git a/cpp/src/Ice/EventHandler.h b/cpp/src/Ice/EventHandler.h index 03c34bc3fe0..88111ce545b 100644 --- a/cpp/src/Ice/EventHandler.h +++ b/cpp/src/Ice/EventHandler.h @@ -46,7 +46,7 @@ public: // Read data via the event handler. May only be called if // readable() returns true. // - virtual void read(BasicStream&) = 0; + virtual bool read(BasicStream&) = 0; // // A complete message has been received. @@ -77,15 +77,21 @@ protected: const InstancePtr _instance; -private: - // - // The _stream data member is for use by ThreadPool only + // The _stream data member is for use by ThreadPool or by the + // connection for connection validation only. // BasicStream _stream; friend class ThreadPool; }; +class ThreadPoolWorkItem : virtual public IceUtil::Shared +{ +public: + + virtual void execute(const ThreadPoolPtr&) = 0; +}; + } #endif diff --git a/cpp/src/Ice/EventHandlerF.h b/cpp/src/Ice/EventHandlerF.h index 576fbaac575..d15b1ff96da 100644 --- a/cpp/src/Ice/EventHandlerF.h +++ b/cpp/src/Ice/EventHandlerF.h @@ -21,6 +21,10 @@ class EventHandler; IceUtil::Shared* upCast(EventHandler*); typedef Handle<EventHandler> EventHandlerPtr; +class ThreadPoolWorkItem; +IceUtil::Shared* upCast(ThreadPoolWorkItem*); +typedef Handle<ThreadPoolWorkItem> ThreadPoolWorkItemPtr; + } #endif diff --git a/cpp/src/Ice/Instance.cpp b/cpp/src/Ice/Instance.cpp index ef5a4b2f167..9349990bb63 100644 --- a/cpp/src/Ice/Instance.cpp +++ b/cpp/src/Ice/Instance.cpp @@ -18,6 +18,7 @@ #include <Ice/ReferenceFactory.h> #include <Ice/ProxyFactory.h> #include <Ice/ThreadPool.h> +#include <Ice/SelectorThread.h> #include <Ice/ConnectionFactory.h> #include <Ice/ConnectionMonitor.h> #include <Ice/ObjectFactoryManager.h> @@ -235,6 +236,42 @@ IceInternal::Instance::serverThreadPool() return _serverThreadPool; } +SelectorThreadPtr +IceInternal::Instance::selectorThread() +{ + IceUtil::RecMutex::Lock sync(*this); + + if(_state == StateDestroyed) + { + throw CommunicatorDestroyedException(__FILE__, __LINE__); + } + + if(!_selectorThread) // Lazy initialization. + { + _selectorThread = new SelectorThread(this); + } + + return _selectorThread; +} + +EndpointHostResolverPtr +IceInternal::Instance::endpointHostResolver() +{ + IceUtil::RecMutex::Lock sync(*this); + + if(_state == StateDestroyed) + { + throw CommunicatorDestroyedException(__FILE__, __LINE__); + } + + if(!_endpointHostResolver) // Lazy initialization. + { + _endpointHostResolver = new EndpointHostResolver(this); + } + + return _endpointHostResolver; +} + IceUtil::TimerPtr IceInternal::Instance::timer() { @@ -914,6 +951,8 @@ IceInternal::Instance::~Instance() assert(!_objectAdapterFactory); assert(!_clientThreadPool); assert(!_serverThreadPool); + assert(!_selectorThread); + assert(!_endpointHostResolver); assert(!_timer); assert(!_routerManager); assert(!_locatorManager); @@ -1077,6 +1116,8 @@ IceInternal::Instance::destroy() ThreadPoolPtr serverThreadPool; ThreadPoolPtr clientThreadPool; + SelectorThreadPtr selectorThread; + EndpointHostResolverPtr endpointHostResolver; { IceUtil::RecMutex::Lock sync(*this); @@ -1102,6 +1143,18 @@ IceInternal::Instance::destroy() std::swap(_clientThreadPool, clientThreadPool); } + if(_selectorThread) + { + _selectorThread->destroy(); + std::swap(selectorThread, _selectorThread); + } + + if(_endpointHostResolver) + { + _endpointHostResolver->destroy(); + std::swap(endpointHostResolver, _endpointHostResolver); + } + if(_timer) { _timer->destroy(); @@ -1169,6 +1222,14 @@ IceInternal::Instance::destroy() { serverThreadPool->joinWithAllThreads(); } + if(selectorThread) + { + selectorThread->joinWithThread(); + } + if(endpointHostResolver) + { + endpointHostResolver->getThreadControl().join(); + } if(_initData.properties->getPropertyAsInt("Ice.Warn.UnusedProperties") > 0) { diff --git a/cpp/src/Ice/Instance.h b/cpp/src/Ice/Instance.h index f3aa41fb58e..cbf6ad36ecf 100644 --- a/cpp/src/Ice/Instance.h +++ b/cpp/src/Ice/Instance.h @@ -24,6 +24,7 @@ #include <Ice/ReferenceFactoryF.h> #include <Ice/ProxyFactoryF.h> #include <Ice/ThreadPoolF.h> +#include <Ice/SelectorThreadF.h> #include <Ice/ConnectionFactoryF.h> #include <Ice/ConnectionMonitorF.h> #include <Ice/ObjectFactoryManagerF.h> @@ -67,6 +68,8 @@ public: ObjectAdapterFactoryPtr objectAdapterFactory() const; ThreadPoolPtr clientThreadPool(); ThreadPoolPtr serverThreadPool(); + SelectorThreadPtr selectorThread(); + EndpointHostResolverPtr endpointHostResolver(); IceUtil::TimerPtr timer(); bool threadPerConnection() const; size_t threadPerConnectionStackSize() const; @@ -122,6 +125,8 @@ private: ObjectAdapterFactoryPtr _objectAdapterFactory; ThreadPoolPtr _clientThreadPool; ThreadPoolPtr _serverThreadPool; + SelectorThreadPtr _selectorThread; + EndpointHostResolverPtr _endpointHostResolver; IceUtil::TimerPtr _timer; const bool _threadPerConnection; const size_t _threadPerConnectionStackSize; diff --git a/cpp/src/Ice/LocatorInfo.cpp b/cpp/src/Ice/LocatorInfo.cpp index 606d7557fdd..f14561fef20 100644 --- a/cpp/src/Ice/LocatorInfo.cpp +++ b/cpp/src/Ice/LocatorInfo.cpp @@ -375,92 +375,149 @@ IceInternal::LocatorInfo::getEndpoints(const IndirectReferencePtr& ref, int ttl, cached = objectCached || endpointsCached; } } - catch(const AdapterNotFoundException&) + catch(const Ice::Exception& ex) { - if(ref->getInstance()->traceLevels()->location >= 1) - { - Trace out(ref->getInstance()->initializationData().logger, - ref->getInstance()->traceLevels()->locationCat); - out << "adapter not found" << "\n"; - out << "adapter = " << ref->getAdapterId(); - } - - NotRegisteredException ex(__FILE__, __LINE__); - ex.kindOfObject = "object adapter"; - ex.id = ref->getAdapterId(); - throw ex; + getEndpointsException(ref, ex); } - catch(const ObjectNotFoundException&) - { - if(ref->getInstance()->traceLevels()->location >= 1) - { - Trace out(ref->getInstance()->initializationData().logger, - ref->getInstance()->traceLevels()->locationCat); - out << "object not found" << "\n"; - out << "object = " << ref->getInstance()->identityToString(ref->getIdentity()); - } - NotRegisteredException ex(__FILE__, __LINE__); - ex.kindOfObject = "object"; - ex.id = ref->getInstance()->identityToString(ref->getIdentity()); - throw ex; - } - catch(const NotRegisteredException&) + if(ref->getInstance()->traceLevels()->location >= 1) { - throw; + getEndpointsTrace(ref, endpoints, cached); } - catch(const LocalException& ex) + + return endpoints; +} + +void +IceInternal::LocatorInfo::getEndpoints(const IndirectReferencePtr& ref, int ttl, + const GetEndpointsCallbackPtr& callback) +{ + string adapterId = ref->getAdapterId(); + Ice::Identity identity = ref->getIdentity(); + InstancePtr instance = ref->getInstance(); + if(!adapterId.empty()) { - if(ref->getInstance()->traceLevels()->location >= 1) + vector<EndpointIPtr> endpoints; + if(!_table->getAdapterEndpoints(adapterId, ttl, endpoints)) { - Trace out(ref->getInstance()->initializationData().logger, - ref->getInstance()->traceLevels()->locationCat); - out << "couldn't contact the locator to retrieve adapter endpoints\n"; - if(ref->getAdapterId().empty()) + if(instance->traceLevels()->location >= 1) { - out << "object = " << ref->getInstance()->identityToString(ref->getIdentity()) << "\n"; + Trace out(instance->initializationData().logger, instance->traceLevels()->locationCat); + out << "searching for adapter by id" << "\nadapter = " << adapterId; } - else + + class Callback : public AMI_Locator_findAdapterById { - out << "adapter = " << ref->getAdapterId() << "\n"; + public: + + virtual void + ice_response(const Ice::ObjectPrx& object) + { + vector<EndpointIPtr> endpoints; + if(object) + { + endpoints = object->__reference()->getEndpoints(); + if(!endpoints.empty()) + { + _table->addAdapterEndpoints(_reference->getAdapterId(), endpoints); + } + } + + if(_reference->getInstance()->traceLevels()->location >= 1) + { + _locatorInfo->getEndpointsTrace(_reference, endpoints, false); + } + + _callback->setEndpoints(endpoints, false); + } + + virtual void + ice_exception(const Ice::Exception& ex) + { + _locatorInfo->getEndpointsException(_reference, ex, _callback); + } + + Callback(const LocatorInfoPtr& locatorInfo, const LocatorTablePtr& table, + const IndirectReferencePtr& reference, const GetEndpointsCallbackPtr& callback) : + _locatorInfo(locatorInfo), _table(table), _reference(reference), _callback(callback) + { + } + + private: + + const LocatorInfoPtr _locatorInfo; + const LocatorTablePtr _table; + const IndirectReferencePtr _reference; + const GetEndpointsCallbackPtr _callback; + }; + + // + // Search the adapter in the location service if we didn't + // find it in the cache. + // + _locator->findAdapterById_async(new Callback(this, _table, ref, callback), adapterId); + return; + } + else + { + if(instance->traceLevels()->location >= 1) + { + getEndpointsTrace(ref, endpoints, true); } - out << "reason = " << ex; + callback->setEndpoints(endpoints, true); + return; } - throw; } - - - if(ref->getInstance()->traceLevels()->location >= 1) + else { - if(!endpoints.empty()) + Ice::ObjectPrx object; + if(!_table->getProxy(identity, ttl, object)) { - if(cached) + if(instance->traceLevels()->location >= 1) { - trace("found endpoints in locator table", ref, endpoints); + Trace out(instance->initializationData().logger, instance->traceLevels()->locationCat); + out << "searching for object by id" << "\nobject = " << instance->identityToString(ref->getIdentity()); } - else + + class Callback : public Ice::AMI_Locator_findObjectById { - trace("retrieved endpoints from locator, adding to locator table", ref, endpoints); - } + public: + + virtual void + ice_response(const Ice::ObjectPrx& object) + { + _locatorInfo->getWellKnownObjectEndpoints(_reference, object, _ttl, false, _callback); + } + + virtual void + ice_exception(const Ice::Exception& ex) + { + _locatorInfo->getEndpointsException(_reference, ex, _callback); + } + + Callback(const LocatorInfoPtr& locatorInfo, const IndirectReferencePtr& reference, int ttl, + const GetEndpointsCallbackPtr& callback) : + _locatorInfo(locatorInfo), _reference(reference), _ttl(ttl), _callback(callback) + { + } + + private: + + const LocatorInfoPtr _locatorInfo; + const IndirectReferencePtr _reference; + int _ttl; + const GetEndpointsCallbackPtr _callback; + }; + + _locator->findObjectById_async(new Callback(this, ref, ttl, callback), identity); + return; } else { - Trace out(ref->getInstance()->initializationData().logger, ref->getInstance()->traceLevels()->locationCat); - out << "no endpoints configured for "; - if(ref->getAdapterId().empty()) - { - out << "object\n"; - out << "object = " << ref->getInstance()->identityToString(ref->getIdentity()); - } - else - { - out << "adapter\n"; - out << "adapter = " << ref->getAdapterId(); - } + getWellKnownObjectEndpoints(ref, object, ttl, true, callback); + return; } } - - return endpoints; } void @@ -548,3 +605,195 @@ IceInternal::LocatorInfo::trace(const string& msg, Ice::constMemFun(&Endpoint::toString)); out << "endpoints = " << o.str(); } + +void +IceInternal::LocatorInfo::getEndpointsException(const IndirectReferencePtr& ref, const Ice::Exception& exc) +{ + try + { + exc.ice_throw(); + } + catch(const AdapterNotFoundException&) + { + if(ref->getInstance()->traceLevels()->location >= 1) + { + Trace out(ref->getInstance()->initializationData().logger, + ref->getInstance()->traceLevels()->locationCat); + out << "adapter not found" << "\n"; + out << "adapter = " << ref->getAdapterId(); + } + + NotRegisteredException ex(__FILE__, __LINE__); + ex.kindOfObject = "object adapter"; + ex.id = ref->getAdapterId(); + throw ex; + } + catch(const ObjectNotFoundException&) + { + if(ref->getInstance()->traceLevels()->location >= 1) + { + Trace out(ref->getInstance()->initializationData().logger, + ref->getInstance()->traceLevels()->locationCat); + out << "object not found" << "\n"; + out << "object = " << ref->getInstance()->identityToString(ref->getIdentity()); + } + + NotRegisteredException ex(__FILE__, __LINE__); + ex.kindOfObject = "object"; + ex.id = ref->getInstance()->identityToString(ref->getIdentity()); + throw ex; + } + catch(const NotRegisteredException&) + { + throw; + } + catch(const LocalException& ex) + { + if(ref->getInstance()->traceLevels()->location >= 1) + { + Trace out(ref->getInstance()->initializationData().logger, + ref->getInstance()->traceLevels()->locationCat); + out << "couldn't contact the locator to retrieve adapter endpoints\n"; + if(ref->getAdapterId().empty()) + { + out << "object = " << ref->getInstance()->identityToString(ref->getIdentity()) << "\n"; + } + else + { + out << "adapter = " << ref->getAdapterId() << "\n"; + } + out << "reason = " << ex; + } + throw; + } +} + +void +IceInternal::LocatorInfo::getEndpointsException(const IndirectReferencePtr& ref, const Ice::Exception& exc, + const GetEndpointsCallbackPtr& callback) +{ + try + { + getEndpointsException(ref, exc); + } + catch(const Ice::LocalException& ex) + { + callback->setException(ex); + } +} + +void +IceInternal::LocatorInfo::getWellKnownObjectEndpoints(const IndirectReferencePtr& ref, + const Ice::ObjectPrx& object, + int ttl, + bool objectCached, + const GetEndpointsCallbackPtr& callback) +{ + class Callback : public GetEndpointsCallback + { + public: + + virtual void + setEndpoints(const vector<EndpointIPtr>& endpoints, bool endpointsCached) + { + if(!_objectCached && !endpoints.empty()) + { + _table->addProxy(_reference->getIdentity(), _object); + } + + if(_reference->getInstance()->traceLevels()->location >= 1) + { + _locatorInfo->getEndpointsTrace(_reference, endpoints, _objectCached || endpointsCached); + } + + _callback->setEndpoints(endpoints, _objectCached || endpointsCached); + } + + virtual void + setException(const Ice::LocalException& ex) + { + _callback->setException(ex); + } + + Callback(const LocatorInfoPtr& locatorInfo, const LocatorTablePtr& table, + const IndirectReferencePtr& reference, const Ice::ObjectPrx& object, + bool objectCached, const GetEndpointsCallbackPtr& callback) : + _locatorInfo(locatorInfo), _table(table), _reference(reference), _object(object), + _objectCached(objectCached), _callback(callback) + { + } + + private: + + const LocatorInfoPtr _locatorInfo; + const LocatorTablePtr _table; + const IndirectReferencePtr _reference; + const Ice::ObjectPrx _object; + const bool _objectCached; + const GetEndpointsCallbackPtr _callback; + }; + + vector<EndpointIPtr> endpoints; + if(object) + { + DirectReferencePtr odr = DirectReferencePtr::dynamicCast(object->__reference()); + if(odr) + { + endpoints = odr->getEndpoints(); + } + else + { + IndirectReferencePtr oir = IndirectReferencePtr::dynamicCast(object->__reference()); + assert(oir); + if(!oir->getAdapterId().empty()) + { + getEndpoints(oir, ttl, new Callback(this, _table, ref, object, objectCached, callback)); + return; + } + } + } + + if(!objectCached && !endpoints.empty()) + { + _table->addProxy(ref->getIdentity(), object); + } + + if(ref->getInstance()->traceLevels()->location >= 1) + { + getEndpointsTrace(ref, endpoints, objectCached); + } + + callback->setEndpoints(endpoints, objectCached); +} + +void +IceInternal::LocatorInfo::getEndpointsTrace(const IndirectReferencePtr& ref, const vector<EndpointIPtr>& endpoints, + bool cached) +{ + if(!endpoints.empty()) + { + if(cached) + { + trace("found endpoints in locator table", ref, endpoints); + } + else + { + trace("retrieved endpoints from locator, adding to locator table", ref, endpoints); + } + } + else + { + Trace out(ref->getInstance()->initializationData().logger, ref->getInstance()->traceLevels()->locationCat); + out << "no endpoints configured for "; + if(ref->getAdapterId().empty()) + { + out << "object\n"; + out << "object = " << ref->getInstance()->identityToString(ref->getIdentity()); + } + else + { + out << "adapter\n"; + out << "adapter = " << ref->getAdapterId(); + } + } +} diff --git a/cpp/src/Ice/LocatorInfo.h b/cpp/src/Ice/LocatorInfo.h index 4811030d97c..f0a1032fa05 100644 --- a/cpp/src/Ice/LocatorInfo.h +++ b/cpp/src/Ice/LocatorInfo.h @@ -71,6 +71,15 @@ class LocatorInfo : public IceUtil::Shared, public IceUtil::Mutex { public: + class GetEndpointsCallback : virtual public IceUtil::Shared + { + public: + + virtual void setEndpoints(const std::vector<EndpointIPtr>&, bool) = 0; + virtual void setException(const Ice::LocalException&) = 0; + }; + typedef IceUtil::Handle<GetEndpointsCallback> GetEndpointsCallbackPtr; + LocatorInfo(const Ice::LocatorPrx&, const LocatorTablePtr&); void destroy(); @@ -83,6 +92,7 @@ public: Ice::LocatorRegistryPrx getLocatorRegistry(); std::vector<EndpointIPtr> getEndpoints(const IndirectReferencePtr&, int, bool&); + void getEndpoints(const IndirectReferencePtr&, int, const GetEndpointsCallbackPtr&); void clearCache(const IndirectReferencePtr&); void clearObjectCache(const IndirectReferencePtr&); @@ -90,6 +100,12 @@ private: void trace(const std::string&, const IndirectReferencePtr&, const std::vector<EndpointIPtr>&); + void getEndpointsException(const IndirectReferencePtr&, const Ice::Exception&); + void getWellKnownObjectEndpoints(const IndirectReferencePtr&, const Ice::ObjectPrx&, int, bool, + const GetEndpointsCallbackPtr&); + void getEndpointsException(const IndirectReferencePtr&, const Ice::Exception&, const GetEndpointsCallbackPtr&); + void getEndpointsTrace(const IndirectReferencePtr&, const std::vector<EndpointIPtr>&, bool); + const Ice::LocatorPrx _locator; Ice::LocatorRegistryPrx _locatorRegistry; const LocatorTablePtr _table; diff --git a/cpp/src/Ice/Makefile b/cpp/src/Ice/Makefile index ebecec755eb..2c7c06d5238 100644 --- a/cpp/src/Ice/Makefile +++ b/cpp/src/Ice/Makefile @@ -22,10 +22,12 @@ OBJS = Acceptor.o \ BuiltinSequences.o \ CommunicatorI.o \ Communicator.o \ + ConnectRequestHandler.o \ ConnectionFactory.o \ ConnectionI.o \ ConnectionMonitor.o \ Connection.o \ + ConnectionRequestHandler.o \ Connector.o \ Current.o \ DefaultsAndOverrides.o \ @@ -78,8 +80,11 @@ OBJS = Acceptor.o \ Proxy.o \ ReferenceFactory.o \ Reference.o \ + RequestHandler.o \ RouterInfo.o \ Router.o \ + Selector.o \ + SelectorThread.o \ ServantLocator.o \ ServantManager.o \ Service.o \ diff --git a/cpp/src/Ice/Makefile.mak b/cpp/src/Ice/Makefile.mak index 80c69167223..6b4d6ee0318 100644 --- a/cpp/src/Ice/Makefile.mak +++ b/cpp/src/Ice/Makefile.mak @@ -21,11 +21,13 @@ OBJS = Acceptor.obj \ BuiltinSequences.obj \ CommunicatorI.obj \ Communicator.obj \ + ConnectRequestHandler.obj \ ConnectionFactory.obj \ ConnectionI.obj \ ConnectionMonitor.obj \ Connection.obj \ Connector.obj \ + ConnectionRequestHandler.obj \ Current.obj \ DefaultsAndOverrides.obj \ Direct.obj \ @@ -79,8 +81,11 @@ OBJS = Acceptor.obj \ Proxy.obj \ ReferenceFactory.obj \ Reference.obj \ + RequestHandler.obj \ RouterInfo.obj \ Router.obj \ + Selector.obj \ + SelectorThread.obj \ ServantLocator.obj \ ServantManager.obj \ Service.obj \ diff --git a/cpp/src/Ice/Network.cpp b/cpp/src/Ice/Network.cpp index 0ee86c6472d..1fb9491e479 100644 --- a/cpp/src/Ice/Network.cpp +++ b/cpp/src/Ice/Network.cpp @@ -190,6 +190,8 @@ IceInternal::notConnected() { #ifdef _WIN32 return WSAGetLastError() == WSAENOTCONN; +#elif defined(__APPLE__) || defined(__FreeBSD__) + return errno == ENOTCONN || errno == EINVAL; #else return errno == ENOTCONN; #endif @@ -293,7 +295,7 @@ IceInternal::shutdownSocketWrite(SOCKET fd) { return; } -#elif defined(__APPLE__) +#elif defined(__APPLE__) || defined(__FreeBSD__) if(errno == ENOTCONN || errno == EINVAL) { return; @@ -329,7 +331,7 @@ IceInternal::shutdownSocketReadWrite(SOCKET fd) { return; } -#elif defined(__APPLE__) +#elif defined(__APPLE__) || defined(__FreeBSD__) if(errno == ENOTCONN || errno == EINVAL) { return; @@ -568,44 +570,9 @@ repeatListen: } } -void +bool IceInternal::doConnect(SOCKET fd, struct sockaddr_in& addr, int timeout) { -#ifdef _WIN32 - // - // Set larger send buffer size to avoid performance problems on - // WIN32. - // - setSendBufferSize(fd, 64 * 1024); - - // - // Under WinCE its not possible to find out the connection failure - // reason with SO_ERROR, so its necessary to use the WSAEVENT - // mechanism. We use the same mechanism for any Winsock platform. - // - WSAEVENT event = WSACreateEvent(); - if(event == 0) - { - closeSocketNoThrow(fd); - - SocketException ex(__FILE__, __LINE__); - ex.error = WSAGetLastError(); - throw ex; - } - - if(WSAEventSelect(fd, event, FD_CONNECT) == SOCKET_ERROR) - { - int error = WSAGetLastError(); - - WSACloseEvent(event); - closeSocketNoThrow(fd); - - SocketException ex(__FILE__, __LINE__); - ex.error = error; - throw ex; - } -#endif - repeatConnect: if(::connect(fd, reinterpret_cast<struct sockaddr*>(&addr), int(sizeof(addr))) == SOCKET_ERROR) { @@ -616,125 +583,141 @@ repeatConnect: if(connectInProgress()) { - int val; -#ifdef _WIN32 - WSAEVENT events[1]; - events[0] = event; - long tout = (timeout >= 0) ? timeout : WSA_INFINITE; - DWORD rc = WSAWaitForMultipleEvents(1, events, FALSE, tout, FALSE); - if(rc == WSA_WAIT_FAILED) + if(timeout == 0) { - int error = WSAGetLastError(); - - WSACloseEvent(event); - closeSocketNoThrow(fd); - - SocketException ex(__FILE__, __LINE__); - ex.error = error; - throw ex; + return false; } - if(rc == WSA_WAIT_TIMEOUT) + try { - WSACloseEvent(event); - closeSocketNoThrow(fd); - - assert(timeout >= 0); - throw ConnectTimeoutException(__FILE__, __LINE__); + doFinishConnect(fd, timeout); } - assert(rc == WSA_WAIT_EVENT_0); - - WSANETWORKEVENTS nevents; - if(WSAEnumNetworkEvents(fd, event, &nevents) == SOCKET_ERROR) + catch(const Ice::LocalException&) { - int error = WSAGetLastError(); - WSACloseEvent(event); closeSocketNoThrow(fd); - - SocketException ex(__FILE__, __LINE__); - ex.error = error; - throw ex; + throw; } + return true; + } + + closeSocketNoThrow(fd); + if(connectionRefused()) + { + ConnectionRefusedException ex(__FILE__, __LINE__); + ex.error = getSocketErrno(); + throw ex; + } + else if(connectFailed()) + { + ConnectFailedException ex(__FILE__, __LINE__); + ex.error = getSocketErrno(); + throw ex; + } + else + { + SocketException ex(__FILE__, __LINE__); + ex.error = getSocketErrno(); + throw ex; + } + } - // - // Now we close the event, because we're finished and - // this code be repeated. - // - WSACloseEvent(event); +#if defined(__linux) + // + // Prevent self connect (self connect happens on Linux when a client tries to connect to + // a server which was just deactivated if the client socket re-uses the same ephemeral + // port as the server). + // + struct sockaddr_in localAddr; + fdToLocalAddress(fd, localAddr); + if(compareAddress(addr, localAddr) == 0) + { + ConnectionRefusedException ex(__FILE__, __LINE__); + ex.error = 0; // No appropriate errno + throw ex; + } +#endif + return true; +} - assert(nevents.lNetworkEvents & FD_CONNECT); - val = nevents.iErrorCode[FD_CONNECT_BIT]; +void +IceInternal::doFinishConnect(SOCKET fd, int timeout) +{ + // + // Note: we don't close the socket if there's an exception. It's the responsability + // of the caller to do so. + // + + if(timeout != 0) + { + repeatSelect: +#ifdef _WIN32 + fd_set wFdSet; + fd_set eFdSet; + FD_ZERO(&wFdSet); + FD_ZERO(&eFdSet); + FD_SET(fd, &wFdSet); + FD_SET(fd, &eFdSet); + + int ret; + if(timeout >= 0) + { + struct timeval tv; + tv.tv_sec = timeout / 1000; + tv.tv_usec = (timeout - tv.tv_sec * 1000) * 1000; + ret = ::select(static_cast<int>(fd + 1), 0, &wFdSet, &eFdSet, &tv); + } + else + { + ret = ::select(static_cast<int>(fd + 1), 0, &wFdSet, &eFdSet, 0); + } #else - repeatPoll: - struct pollfd pollFd[1]; - pollFd[0].fd = fd; - pollFd[0].events = POLLOUT; - int ret = ::poll(pollFd, 1, timeout); - if(ret == 0) + struct pollfd pollFd[1]; + pollFd[0].fd = fd; + pollFd[0].events = POLLOUT; + int ret = ::poll(pollFd, 1, timeout); +#endif + if(ret == 0) + { + throw ConnectTimeoutException(__FILE__, __LINE__); + } + else if(ret == SOCKET_ERROR) + { + if(interrupted()) { - closeSocketNoThrow(fd); - throw ConnectTimeoutException(__FILE__, __LINE__); + goto repeatSelect; } - else if(ret == SOCKET_ERROR) - { - if(interrupted()) - { - goto repeatPoll; - } - SocketException ex(__FILE__, __LINE__); - ex.error = getSocketErrno(); - throw ex; - } - - // - // Strange windows bug: The following call to Sleep() is - // necessary, otherwise no error is reported through - // getsockopt. - // - //Sleep(0); - socklen_t len = static_cast<socklen_t>(sizeof(int)); - if(getsockopt(fd, SOL_SOCKET, SO_ERROR, reinterpret_cast<char*>(&val), &len) == SOCKET_ERROR) - { - closeSocketNoThrow(fd); - SocketException ex(__FILE__, __LINE__); - ex.error = getSocketErrno(); - throw ex; - } + SocketException ex(__FILE__, __LINE__); + ex.error = getSocketErrno(); + throw ex; + } + } + + int val; + + // + // Strange windows bug: The following call to Sleep() is + // necessary, otherwise no error is reported through + // getsockopt. + // +#ifdef _WIN32 + Sleep(0); #endif + socklen_t len = static_cast<socklen_t>(sizeof(int)); + if(getsockopt(fd, SOL_SOCKET, SO_ERROR, reinterpret_cast<char*>(&val), &len) == SOCKET_ERROR) + { + SocketException ex(__FILE__, __LINE__); + ex.error = getSocketErrno(); + throw ex; + } - if(val > 0) - { - closeSocketNoThrow(fd); + if(val > 0) + { #ifdef _WIN32 - WSASetLastError(val); + WSASetLastError(val); #else - errno = val; + errno = val; #endif - if(connectionRefused()) - { - ConnectionRefusedException ex(__FILE__, __LINE__); - ex.error = getSocketErrno(); - throw ex; - } - else if(connectFailed()) - { - ConnectFailedException ex(__FILE__, __LINE__); - ex.error = getSocketErrno(); - throw ex; - } - else - { - SocketException ex(__FILE__, __LINE__); - ex.error = getSocketErrno(); - throw ex; - } - } - - return; - } - - closeSocketNoThrow(fd); if(connectionRefused()) { ConnectionRefusedException ex(__FILE__, __LINE__); @@ -754,6 +737,23 @@ repeatConnect: throw ex; } } + +#if defined(__linux) + // + // Prevent self connect (self connect happens on Linux when a client tries to connect to + // a server which was just deactivated if the client socket re-uses the same ephemeral + // port as the server). + // + struct sockaddr_in localAddr; + fdToLocalAddress(fd, localAddr); + struct sockaddr_in remoteAddr; + if(fdToRemoteAddress(fd, remoteAddr) && compareAddress(remoteAddr, localAddr) == 0) + { + ConnectionRefusedException ex(__FILE__, __LINE__); + ex.error = 0; // No appropriate errno + throw ex; + } +#endif } SOCKET @@ -826,15 +826,6 @@ repeatAccept: setTcpNoDelay(ret); setKeepAlive(ret); - -#ifdef _WIN32 - // - // Set larger send buffer size to avoid performance problems on - // WIN32. - // - setSendBufferSize(ret, 64 * 1024); -#endif - return ret; } @@ -848,41 +839,44 @@ IceInternal::getAddress(const string& host, int port, struct sockaddr_in& addr) if(addr.sin_addr.s_addr == INADDR_NONE) { -#ifdef _WIN32 - // - // Windows XP has getaddrinfo(), but we don't want to require XP to run Ice. + // We now use getaddrinfo() on Windows. // +// #ifdef _WIN32 + +// // +// // Windows XP has getaddrinfo(), but we don't want to require XP to run Ice. +// // - // - // gethostbyname() is thread safe on Windows, with a separate hostent per thread - // - struct hostent* entry; - int retry = 5; - do - { - entry = gethostbyname(host.c_str()); - } - while(entry == 0 && WSAGetLastError() == WSATRY_AGAIN && --retry >= 0); +// // +// // gethostbyname() is thread safe on Windows, with a separate hostent per thread +// // +// struct hostent* entry; +// int retry = 5; +// do +// { +// entry = gethostbyname(host.c_str()); +// } +// while(entry == 0 && WSAGetLastError() == WSATRY_AGAIN && --retry >= 0); - if(entry == 0) - { - DNSException ex(__FILE__, __LINE__); +// if(entry == 0) +// { +// DNSException ex(__FILE__, __LINE__); - ex.error = WSAGetLastError(); - ex.host = host; - throw ex; - } - memcpy(&addr.sin_addr, entry->h_addr, entry->h_length); +// ex.error = WSAGetLastError(); +// ex.host = host; +// throw ex; +// } +// memcpy(&addr.sin_addr, entry->h_addr, entry->h_length); -#else +// #else struct addrinfo* info = 0; int retry = 5; struct addrinfo hints = { 0 }; hints.ai_family = PF_INET; - + int rs = 0; do { @@ -903,8 +897,6 @@ IceInternal::getAddress(const string& host, int port, struct sockaddr_in& addr) addr.sin_addr.s_addr = sin->sin_addr.s_addr; freeaddrinfo(info); - -#endif } } @@ -1346,7 +1338,7 @@ IceInternal::addrToString(const struct sockaddr_in& addr) } vector<struct sockaddr_in> -IceInternal::getAddresses(const string& host, int port) +IceInternal::getAddresses(const string& host, int port, bool blocking) { vector<struct sockaddr_in> result; @@ -1367,47 +1359,54 @@ IceInternal::getAddresses(const string& host, int port) addr.sin_family = AF_INET; addr.sin_port = htons(port); -#ifdef _WIN32 - - // - // Windows XP has getaddrinfo(), but we don't want to require XP to run Ice. - // - // - // gethostbyname() is thread safe on Windows, with a separate hostent per thread + // We now use getaddrinfo() on Windows. // - struct hostent* entry = 0; - int retry = 5; +// #ifdef _WIN32 - do - { - entry = gethostbyname(host.c_str()); - } - while(entry == 0 && h_errno == TRY_AGAIN && --retry >= 0); +// // +// // Windows XP has getaddrinfo(), but we don't want to require XP to run Ice. +// // + +// // +// // gethostbyname() is thread safe on Windows, with a separate hostent per thread +// // +// struct hostent* entry = 0; +// int retry = 5; + +// do +// { +// entry = gethostbyname(host.c_str()); +// } +// while(entry == 0 && h_errno == TRY_AGAIN && --retry >= 0); - if(entry == 0) - { - DNSException ex(__FILE__, __LINE__); - ex.error = h_errno; - ex.host = host; - throw ex; - } - - char** p = entry->h_addr_list; - while(*p) - { - memcpy(&addr.sin_addr, *p, entry->h_length); - result.push_back(addr); - p++; - } - -#else +// if(entry == 0) +// { +// DNSException ex(__FILE__, __LINE__); +// ex.error = h_errno; +// ex.host = host; +// throw ex; +// } + +// char** p = entry->h_addr_list; +// while(*p) +// { +// memcpy(&addr.sin_addr, *p, entry->h_length); +// result.push_back(addr); +// p++; +// } + +// #else struct addrinfo* info = 0; int retry = 5; struct addrinfo hints = { 0 }; hints.ai_family = PF_INET; + if(!blocking) + { + hints.ai_flags = AI_NUMERICHOST; + } int rs = 0; do @@ -1451,7 +1450,7 @@ IceInternal::getAddresses(const string& host, int port) freeaddrinfo(info); -#endif +//#endif } return result; diff --git a/cpp/src/Ice/Network.h b/cpp/src/Ice/Network.h index 178e08a6e1a..5936a2cd2c0 100644 --- a/cpp/src/Ice/Network.h +++ b/cpp/src/Ice/Network.h @@ -96,7 +96,8 @@ ICE_API void setReuseAddress(SOCKET, bool); ICE_API void doBind(SOCKET, struct sockaddr_in&); ICE_API void doListen(SOCKET, int); -ICE_API void doConnect(SOCKET, struct sockaddr_in&, int); +ICE_API bool doConnect(SOCKET, struct sockaddr_in&, int); +ICE_API void doFinishConnect(SOCKET, int); ICE_API SOCKET doAccept(SOCKET, int); ICE_API void getAddress(const std::string&, int, struct sockaddr_in&); @@ -114,7 +115,7 @@ ICE_API void fdToLocalAddress(SOCKET, struct sockaddr_in&); ICE_API bool fdToRemoteAddress(SOCKET, struct sockaddr_in&); ICE_API std::string addrToString(const struct sockaddr_in&); -ICE_API std::vector<struct sockaddr_in> getAddresses(const std::string&, int); +ICE_API std::vector<struct sockaddr_in> getAddresses(const std::string&, int, bool = true); ICE_API std::vector<std::string> getLocalHosts(); ICE_API void setTcpBufSize(SOCKET, const Ice::PropertiesPtr&, const Ice::LoggerPtr&); ICE_API int getSocketErrno(); diff --git a/cpp/src/Ice/ObjectAdapterFactory.cpp b/cpp/src/Ice/ObjectAdapterFactory.cpp index a6009d658e3..5d7f1d131f9 100644 --- a/cpp/src/Ice/ObjectAdapterFactory.cpp +++ b/cpp/src/Ice/ObjectAdapterFactory.cpp @@ -79,7 +79,7 @@ IceInternal::ObjectAdapterFactory::waitForShutdown() _waitForShutdown = true; adapters = _adapters; } - + // // Now we wait for deactivation of each object adapter. // diff --git a/cpp/src/Ice/ObjectAdapterI.cpp b/cpp/src/Ice/ObjectAdapterI.cpp index 9d7cf4c7d5c..ccd571147ec 100644 --- a/cpp/src/Ice/ObjectAdapterI.cpp +++ b/cpp/src/Ice/ObjectAdapterI.cpp @@ -256,7 +256,6 @@ Ice::ObjectAdapterI::waitForDeactivate() { IceUtil::Monitor<IceUtil::RecMutex>::Lock sync(*this); - if(_destroyed) { return; @@ -365,7 +364,6 @@ Ice::ObjectAdapterI::destroy() _routerInfo = 0; _publishedEndpoints.clear(); _locatorInfo = 0; - _connectors.clear(); objectAdapterFactory = _objectAdapterFactory; _objectAdapterFactory = 0; @@ -583,14 +581,6 @@ Ice::ObjectAdapterI::refreshPublishedEndpoints() oldPublishedEndpoints = _publishedEndpoints; _publishedEndpoints = parsePublishedEndpoints(); - _connectors.clear(); - vector<IncomingConnectionFactoryPtr>::const_iterator p; - for(p = _incomingConnectionFactories.begin(); p != _incomingConnectionFactories.end(); ++p) - { - vector<ConnectorPtr> cons = (*p)->endpoint()->connectors(); - _connectors.insert(_connectors.end(), cons.begin(), cons.end()); - } - locatorInfo = _locatorInfo; if(!_noConfig) { @@ -671,10 +661,18 @@ Ice::ObjectAdapterI::isLocal(const ObjectPrx& proxy) const // for(p = endpoints.begin(); p != endpoints.end(); ++p) { - vector<ConnectorPtr>::const_iterator q; - for(q = _connectors.begin(); q != _connectors.end(); ++q) + vector<IncomingConnectionFactoryPtr>::const_iterator q; + for(q = _incomingConnectionFactories.begin(); q != _incomingConnectionFactories.end(); ++q) + { + if((*p)->equivalent((*q)->endpoint())) + { + return true; + } + } + vector<EndpointIPtr>::const_iterator r; + for(r = _publishedEndpoints.begin(); r != _publishedEndpoints.end(); ++r) { - if((*p)->equivalent(*q)) + if((*p)->equivalent(*r)) { return true; } @@ -944,9 +942,6 @@ Ice::ObjectAdapterI::ObjectAdapterI(const InstancePtr& instance, const Communica { IncomingConnectionFactoryPtr factory = new IncomingConnectionFactory(instance, *p, this, _name); _incomingConnectionFactories.push_back(factory); - - vector<ConnectorPtr> cons = factory->endpoint()->connectors(); - _connectors.insert(_connectors.end(), cons.begin(), cons.end()); } if(endpoints.empty()) { diff --git a/cpp/src/Ice/Outgoing.cpp b/cpp/src/Ice/Outgoing.cpp index 8eedeffe6a1..14fb41c7afd 100644 --- a/cpp/src/Ice/Outgoing.cpp +++ b/cpp/src/Ice/Outgoing.cpp @@ -9,6 +9,7 @@ #include <Ice/Outgoing.h> #include <Ice/Object.h> +#include <Ice/RequestHandler.h> #include <Ice/ConnectionI.h> #include <Ice/Reference.h> #include <Ice/Endpoint.h> @@ -78,16 +79,15 @@ IceInternal::LocalExceptionWrapper::retry() const return _retry; } -IceInternal::Outgoing::Outgoing(ConnectionI* connection, Reference* ref, const string& operation, - OperationMode mode, const Context* context, bool compress) : - _connection(connection), - _reference(ref), +IceInternal::Outgoing::Outgoing(RequestHandler* handler, const string& operation, OperationMode mode, + const Context* context) : + _handler(handler), _state(StateUnsent), - _is(ref->getInstance().get()), - _os(ref->getInstance().get()), - _compress(compress) + _is(handler->getReference()->getInstance().get()), + _os(handler->getReference()->getInstance().get()), + _sent(false) { - switch(_reference->getMode()) + switch(_handler->getReference()->getMode()) { case Reference::ModeTwoway: case Reference::ModeOneway: @@ -100,25 +100,25 @@ IceInternal::Outgoing::Outgoing(ConnectionI* connection, Reference* ref, const s case Reference::ModeBatchOneway: case Reference::ModeBatchDatagram: { - _connection->prepareBatchRequest(&_os); + _handler->prepareBatchRequest(&_os); break; } } try { - _reference->getIdentity().__write(&_os); + _handler->getReference()->getIdentity().__write(&_os); // // For compatibility with the old FacetPath. // - if(_reference->getFacet().empty()) + if(_handler->getReference()->getFacet().empty()) { _os.write(static_cast<string*>(0), static_cast<string*>(0)); } else { - string facet = _reference->getFacet(); + string facet = _handler->getReference()->getFacet(); _os.write(&facet, &facet + 1); } @@ -138,11 +138,8 @@ IceInternal::Outgoing::Outgoing(ConnectionI* connection, Reference* ref, const s // // Implicit context // - const ImplicitContextIPtr& implicitContext = - _reference->getInstance()->getImplicitContext(); - - const Context& prxContext = _reference->getContext()->getValue(); - + const ImplicitContextIPtr& implicitContext = _handler->getReference()->getInstance()->getImplicitContext(); + const Context& prxContext = _handler->getReference()->getContext()->getValue(); if(implicitContext == 0) { __writeContext(&_os, prxContext); @@ -173,42 +170,33 @@ IceInternal::Outgoing::invoke() _os.endWriteEncaps(); - switch(_reference->getMode()) + switch(_handler->getReference()->getMode()) { case Reference::ModeTwoway: { - // - // We let all exceptions raised by sending directly - // propagate to the caller, because they can be retried - // without violating "at-most-once". In case of such - // exceptions, the connection object does not call back on - // this object, so we don't need to lock the mutex, keep - // track of state, or save exceptions. - // - _connection->sendRequest(&_os, this, _compress); - - // - // Wait until the request has completed, or until the - // request times out. - // + _state = StateInProgress; - bool timedOut = false; + Ice::ConnectionI* connection = _handler->sendRequest(this); + bool timedOut = false; + { IceUtil::Monitor<IceUtil::Mutex>::Lock sync(_monitor); // - // It's possible that the request has already - // completed, due to a regular response, or because of - // an exception. So we only change the state to "in - // progress" if it is still "unsent". + // If the request is being sent in the background we first wait for the + // sent notification. // - if(_state == StateUnsent) + while(_state != StateFailed && !_sent) { - _state = StateInProgress; + _monitor.wait(); } - - Int timeout = _connection->timeout(); + + // + // Wait until the request has completed, or until the request times out. + // + + Int timeout = connection->timeout(); while(_state == StateInProgress && !timedOut) { if(timeout >= 0) @@ -233,7 +221,7 @@ IceInternal::Outgoing::invoke() // Must be called outside the synchronization of this // object. // - _connection->exception(TimeoutException(__FILE__, __LINE__)); + connection->exception(TimeoutException(__FILE__, __LINE__)); // // We must wait until the exception set above has @@ -241,7 +229,6 @@ IceInternal::Outgoing::invoke() // { IceUtil::Monitor<IceUtil::Mutex>::Lock sync(_monitor); - while(_state == StateInProgress) { _monitor.wait(); @@ -262,7 +249,8 @@ IceInternal::Outgoing::invoke() // An ObjectNotExistException can always be retried as // well without violating "at-most-once". // - if(dynamic_cast<CloseConnectionException*>(_exception.get()) || + if(!_sent || + dynamic_cast<CloseConnectionException*>(_exception.get()) || dynamic_cast<ObjectNotExistException*>(_exception.get())) { _exception->ice_throw(); @@ -281,25 +269,35 @@ IceInternal::Outgoing::invoke() { return false; } - - assert(_state == StateOK); - break; + else + { + assert(_state == StateOK); + return true; + } } - + case Reference::ModeOneway: case Reference::ModeDatagram: { - // - // For oneway and datagram requests, the connection object - // never calls back on this object. Therefore we don't - // need to lock the mutex or save exceptions. We simply - // let all exceptions from sending propagate to the - // caller, because such exceptions can be retried without - // violating "at-most-once". - // _state = StateInProgress; - _connection->sendRequest(&_os, 0, _compress); - break; + if(_handler->sendRequest(this)) + { + // + // If the handler returns the connection, we must wait for the sent callback. + // + IceUtil::Monitor<IceUtil::Mutex>::Lock sync(_monitor); + while(_state != StateFailed && !_sent) + { + _monitor.wait(); + } + + if(_exception.get()) + { + assert(!_sent); + _exception->ice_throw(); + } + } + return true; } case Reference::ModeBatchOneway: @@ -311,12 +309,13 @@ IceInternal::Outgoing::invoke() // apply. // _state = StateInProgress; - _connection->finishBatchRequest(&_os, _compress); - break; + _handler->finishBatchRequest(&_os); + return true; } } - return true; + assert(false); + return false; } void @@ -329,9 +328,10 @@ IceInternal::Outgoing::abort(const LocalException& ex) // notify the connection about that we give up ownership of the // batch stream. // - if(_reference->getMode() == Reference::ModeBatchOneway || _reference->getMode() == Reference::ModeBatchDatagram) + if(_handler->getReference()->getMode() == Reference::ModeBatchOneway || + _handler->getReference()->getMode() == Reference::ModeBatchDatagram) { - _connection->abortBatchRequest(); + _handler->abortBatchRequest(); // // If we abort a batch requests, we cannot retry, because not @@ -345,11 +345,30 @@ IceInternal::Outgoing::abort(const LocalException& ex) } void +IceInternal::Outgoing::sent(bool notify) +{ + if(notify) + { + IceUtil::Monitor<IceUtil::Mutex>::Lock sync(_monitor); + _sent = true; + _monitor.notify(); + } + else + { + // + // No synchronization is necessary if called from sendRequest() because the connection + // send mutex is locked and no other threads can call on Outgoing until it's released. + // + _sent = true; + } +} + +void IceInternal::Outgoing::finished(BasicStream& is) { IceUtil::Monitor<IceUtil::Mutex>::Lock sync(_monitor); - assert(_reference->getMode() == Reference::ModeTwoway); // Can only be called for twoways. + assert(_handler->getReference()->getMode() == Reference::ModeTwoway); // Can only be called for twoways. assert(_state <= StateInProgress); @@ -514,12 +533,68 @@ void IceInternal::Outgoing::finished(const LocalException& ex) { IceUtil::Monitor<IceUtil::Mutex>::Lock sync(_monitor); - - assert(_reference->getMode() == Reference::ModeTwoway); // Can only be called for twoways. - assert(_state <= StateInProgress); - _state = StateLocalException; + _state = StateFailed; + _exception.reset(dynamic_cast<LocalException*>(ex.ice_clone())); + _monitor.notify(); +} + +IceInternal::BatchOutgoing::BatchOutgoing(RequestHandler* handler) : + _handler(handler), + _connection(0), + _sent(false), + _os(handler->getReference()->getInstance().get()) +{ +} + +IceInternal::BatchOutgoing::BatchOutgoing(ConnectionI* connection, Instance* instance) : + _handler(0), + _connection(connection), + _sent(false), + _os(instance) +{ +} + +void +IceInternal::BatchOutgoing::invoke() +{ + assert(_handler || _connection); + if(_handler && !_handler->flushBatchRequests(this) || _connection && !_connection->flushBatchRequests(this)) + { + IceUtil::Monitor<IceUtil::Mutex>::Lock sync(_monitor); + while(!_exception.get() && !_sent) + { + _monitor.wait(); + } + + if(_exception.get()) + { + assert(!_sent); + _exception->ice_throw(); + } + } +} + +void +IceInternal::BatchOutgoing::sent(bool notify) +{ + if(notify) + { + IceUtil::Monitor<IceUtil::Mutex>::Lock sync(_monitor); + _sent = true; + _monitor.notify(); + } + else + { + _sent = true; + } +} + +void +IceInternal::BatchOutgoing::finished(const Ice::LocalException& ex) +{ + IceUtil::Monitor<IceUtil::Mutex>::Lock sync(_monitor); _exception.reset(dynamic_cast<LocalException*>(ex.ice_clone())); _monitor.notify(); } diff --git a/cpp/src/Ice/OutgoingAsync.cpp b/cpp/src/Ice/OutgoingAsync.cpp index 40cb5336c23..4286cc1949c 100644 --- a/cpp/src/Ice/OutgoingAsync.cpp +++ b/cpp/src/Ice/OutgoingAsync.cpp @@ -10,6 +10,7 @@ #include <Ice/OutgoingAsync.h> #include <Ice/Object.h> #include <Ice/ConnectionI.h> +#include <Ice/RequestHandler.h> #include <Ice/Reference.h> #include <Ice/Instance.h> #include <Ice/LocalException.h> @@ -27,9 +28,12 @@ using namespace std; using namespace Ice; using namespace IceInternal; +IceUtil::Shared* IceInternal::upCast(OutgoingAsyncMessageCallback* p) { return p; } IceUtil::Shared* IceInternal::upCast(OutgoingAsync* p) { return p; } +IceUtil::Shared* IceInternal::upCast(BatchOutgoingAsync* p) { return p; } IceUtil::Shared* IceInternal::upCast(AMI_Object_ice_invoke* p) { return p; } IceUtil::Shared* IceInternal::upCast(AMI_Array_Object_ice_invoke* p) { return p; } +IceUtil::Shared* IceInternal::upCast(AMI_Object_ice_flushBatchRequests* p) { return p; } IceInternal::OutgoingAsync::OutgoingAsync() : __is(0), @@ -44,17 +48,52 @@ IceInternal::OutgoingAsync::~OutgoingAsync() } void +IceInternal::OutgoingAsync::__sent(Ice::ConnectionI* connection) +{ + IceUtil::Monitor<IceUtil::Mutex>::Lock sync(_monitor); + _sent = true; + + if(!_proxy->ice_isTwoway()) + { + cleanup(); // No response expected, we're done with the OutgoingAsync. + } + else if(_response) + { + _monitor.notifyAll(); // If the response was already received notify finished() which is waiting. + } + else if(connection->timeout() > 0) + { + assert(!_timerTaskConnection); + _timerTaskConnection = connection; + IceUtil::Time timeout = IceUtil::Time::milliSeconds(connection->timeout()); + _proxy->__reference()->getInstance()->timer()->schedule(this, timeout); + } +} + +void IceInternal::OutgoingAsync::__finished(BasicStream& is) { - IceUtil::Monitor<IceUtil::RecMutex>::Lock sync(_monitor); + assert(_proxy->ice_isTwoway()); // Can only be called for twoways. Ice::Byte replyStatus; - try { + IceUtil::Monitor<IceUtil::Mutex>::Lock sync(_monitor); + assert(__os); + _response = true; + + if(_timerTaskConnection && _proxy->__reference()->getInstance()->timer()->cancel(this)) + { + _timerTaskConnection = 0; // Timer cancelled. + } + + while(!_sent || _timerTaskConnection) + { + _monitor.wait(); + } + __is->swap(is); __is->read(replyStatus); - switch(replyStatus) { @@ -190,43 +229,65 @@ IceInternal::OutgoingAsync::__finished(BasicStream& is) warning(); } + + IceUtil::Monitor<IceUtil::Mutex>::Lock sync(_monitor); cleanup(); } void IceInternal::OutgoingAsync::__finished(const LocalException& exc) { - IceUtil::Monitor<IceUtil::RecMutex>::Lock sync(_monitor); - - if(__os) // Don't retry if cleanup() was already called. + bool retry = false; { - // - // A CloseConnectionException indicates graceful server - // shutdown, and is therefore always repeatable without - // violating "at-most-once". That's because by sending a close - // connection message, the server guarantees that all - // outstanding requests can safely be repeated. Otherwise, we - // can also retry if the operation mode is Nonmutating or - // Idempotent. - // - // An ObjectNotExistException can always be retried as - // well without violating "at-most-once". - // - if(_mode == Nonmutating || _mode == Idempotent || dynamic_cast<const CloseConnectionException*>(&exc) || - dynamic_cast<const ObjectNotExistException*>(&exc)) + IceUtil::Monitor<IceUtil::Mutex>::Lock sync(_monitor); + + if(__os) // Might be called from __prepare or before __prepare { - try + if(_timerTaskConnection && _proxy->__reference()->getInstance()->timer()->cancel(this)) { - _proxy->__handleException(_delegate, exc, _cnt); - __send(); - return; + _timerTaskConnection = 0; // Timer cancelled. } - catch(const LocalException&) + + while(_timerTaskConnection) + { + _monitor.wait(); + } + + // + // A CloseConnectionException indicates graceful server + // shutdown, and is therefore always repeatable without + // violating "at-most-once". That's because by sending a close + // connection message, the server guarantees that all + // outstanding requests can safely be repeated. Otherwise, we + // can also retry if the operation mode is Nonmutating or + // Idempotent. + // + // An ObjectNotExistException can always be retried as + // well without violating "at-most-once". + // + if(!_sent || + _mode == Nonmutating || _mode == Idempotent || + dynamic_cast<const CloseConnectionException*>(&exc) || + dynamic_cast<const ObjectNotExistException*>(&exc)) { + retry = true; } } } + if(retry) + { + try + { + _proxy->__handleException(_delegate, exc, _cnt); + __send(); + return; + } + catch(const LocalException&) + { + } + } + try { ice_exception(exc); @@ -240,14 +301,58 @@ IceInternal::OutgoingAsync::__finished(const LocalException& exc) warning(); } + IceUtil::Monitor<IceUtil::Mutex>::Lock sync(_monitor); cleanup(); } void +IceInternal::OutgoingAsync::__finished(const LocalExceptionWrapper& ex) +{ + // + // NOTE: This is called if sendRequest/sendAsyncRequest fails with + // a LocalExceptionWrapper exception. It's not possible for the + // timer to be set at this point because the request couldn't be + // sent. + // + assert(!_sent && !_timerTaskConnection); + + try + { + if(_mode == Nonmutating || _mode == Idempotent) + { + _proxy->__handleExceptionWrapperRelaxed(_delegate, ex, _cnt); + } + else + { + _proxy->__handleExceptionWrapper(_delegate, ex); + } + __send(); + } + catch(const Ice::LocalException& exc) + { + try + { + ice_exception(exc); + } + catch(const std::exception& ex) + { + warning(ex); + } + catch(...) + { + warning(); + } + + IceUtil::Monitor<IceUtil::Mutex>::Lock sync(_monitor); + cleanup(); + } +} + +void IceInternal::OutgoingAsync::__prepare(const ObjectPrx& prx, const string& operation, OperationMode mode, const Context* context) { - IceUtil::Monitor<IceUtil::RecMutex>::Lock sync(_monitor); + IceUtil::Monitor<IceUtil::Mutex>::Lock sync(_monitor); try { @@ -258,16 +363,20 @@ IceInternal::OutgoingAsync::__prepare(const ObjectPrx& prx, const string& operat { _monitor.wait(); } - + // - // Can't call async via a oneway proxy. + // Can't call async via a batch proxy. // - prx->__checkTwowayOnly(operation); - _proxy = prx; + if(_proxy->ice_isBatchOneway() || _proxy->ice_isBatchDatagram()) + { + throw Ice::FeatureNotSupportedException(__FILE__, __LINE__, "can't send batch requests with AMI"); + } _delegate = 0; _cnt = 0; _mode = mode; + _sent = false; + _response = false; ReferencePtr ref = _proxy->__reference(); assert(!__is); @@ -308,11 +417,8 @@ IceInternal::OutgoingAsync::__prepare(const ObjectPrx& prx, const string& operat // // Implicit context // - const ImplicitContextIPtr& implicitContext = - ref->getInstance()->getImplicitContext(); - + const ImplicitContextIPtr& implicitContext = ref->getInstance()->getImplicitContext(); const Context& prxContext = ref->getContext()->getValue(); - if(implicitContext == 0) { __writeContext(__os, prxContext); @@ -335,41 +441,45 @@ IceInternal::OutgoingAsync::__prepare(const ObjectPrx& prx, const string& operat void IceInternal::OutgoingAsync::__send() { - IceUtil::Monitor<IceUtil::RecMutex>::Lock sync(_monitor); - + // + // NOTE: no synchronization needed. At this point, no other threads can be calling on this object. + // + RequestHandler* handler; try { - while(true) + _delegate = _proxy->__getDelegate(true); + handler = _delegate->__getRequestHandler().get(); + } + catch(const Ice::LocalException& ex) + { + __finished(ex); + return; + } + + _sent = false; + _response = false; + handler->sendAsyncRequest(this); +} + +void +IceInternal::OutgoingAsync::runTimerTask() // Implementation of TimerTask::runTimerTask() +{ + Ice::ConnectionIPtr connection; + { + IceUtil::Monitor<IceUtil::Mutex>::Lock sync(_monitor); + assert(_timerTaskConnection && _sent); // Can only be set once the request is sent. + + if(!_response) // If the response was just received, don't close the connection. { - bool compress; - _delegate = _proxy->__getDelegate(); - Ice::ConnectionIPtr connection = _delegate->__getConnection(compress); - try - { - connection->sendAsyncRequest(__os, this, compress); - - // - // Don't do anything after sendAsyncRequest() returned - // without an exception. I such case, there will be - // callbacks, i.e., calls to the __finished() - // functions. Since there is no mutex protection, we - // cannot modify state here and in such callbacks. - // - return; - } - catch(const LocalExceptionWrapper& ex) - { - _proxy->__handleExceptionWrapper(_delegate, ex); - } - catch(const LocalException& ex) - { - _proxy->__handleException(_delegate, ex, _cnt); - } + connection = _timerTaskConnection; } + _timerTaskConnection = 0; + _monitor.notifyAll(); } - catch(const LocalException& ex) + + if(connection) { - __finished(ex); + connection->exception(Ice::TimeoutException(__FILE__, __LINE__)); } } @@ -414,6 +524,8 @@ IceInternal::OutgoingAsync::warning() const void IceInternal::OutgoingAsync::cleanup() { + assert(!_timerTaskConnection); + delete __is; __is = 0; delete __os; @@ -422,6 +534,91 @@ IceInternal::OutgoingAsync::cleanup() _monitor.notify(); } +IceInternal::BatchOutgoingAsync::BatchOutgoingAsync() : _os(0) +{ +} + +void +IceInternal::BatchOutgoingAsync::__prepare(const InstancePtr& instance) +{ + IceUtil::Monitor<IceUtil::Mutex>::Lock sync(_monitor); + while(_os) + { + _monitor.wait(); + } + _os = new BasicStream(instance.get()); +} + +void +IceInternal::BatchOutgoingAsync::__sent(Ice::ConnectionI* connection) +{ + IceUtil::Monitor<IceUtil::Mutex>::Lock sync(_monitor); + cleanup(); +} + +void +IceInternal::BatchOutgoingAsync::__finished(const Ice::LocalException& exc) +{ + try + { + ice_exception(exc); + } + catch(const std::exception& ex) + { + warning(ex); + } + catch(...) + { + warning(); + } + + IceUtil::Monitor<IceUtil::Mutex>::Lock sync(_monitor); + cleanup(); +} + +void +IceInternal::BatchOutgoingAsync::warning(const std::exception& exc) const +{ + if(_os) // Don't print anything if cleanup() was already called. + { + if(_os->instance()->initializationData().properties->getPropertyAsIntWithDefault("Ice.Warn.AMICallback", 1) > 0) + { + Warning out(_os->instance()->initializationData().logger); + const Exception* ex = dynamic_cast<const ObjectNotExistException*>(&exc); + if(ex) + { + out << "Ice::Exception raised by AMI callback:\n" << ex; + } + else + { + out << "std::exception raised by AMI callback:\n" << exc.what(); + } + } + } +} + +void +IceInternal::BatchOutgoingAsync::warning() const +{ + if(_os) // Don't print anything if cleanup() was already called. + { + if(_os->instance()->initializationData().properties->getPropertyAsIntWithDefault("Ice.Warn.AMICallback", 1) > 0) + { + Warning out(_os->instance()->initializationData().logger); + out << "unknown exception raised by AMI callback"; + } + } +} + +void +IceInternal::BatchOutgoingAsync::cleanup() +{ + delete _os; + _os = 0; + + _monitor.notify(); +} + void Ice::AMI_Object_ice_invoke::__invoke(const ObjectPrx& prx, const string& operation, OperationMode mode, const vector<Byte>& inParams, const Context* context) @@ -492,3 +689,24 @@ Ice::AMI_Array_Object_ice_invoke::__response(bool ok) // ok == true means no use } ice_response(ok, outParams); } + +void +Ice::AMI_Object_ice_flushBatchRequests::__invoke(const ObjectPrx& prx) +{ + Handle< ::IceDelegate::Ice::Object> delegate; + RequestHandler* handler; + try + { + __prepare(prx->__reference()->getInstance()); + delegate = prx->__getDelegate(true); + handler = delegate->__getRequestHandler().get(); + } + catch(const Ice::LocalException& ex) + { + __finished(ex); + return; + } + + handler->flushAsyncBatchRequests(this); +} + diff --git a/cpp/src/Ice/PropertyNames.cpp b/cpp/src/Ice/PropertyNames.cpp index 82b47e23ac6..f72db807b30 100644 --- a/cpp/src/Ice/PropertyNames.cpp +++ b/cpp/src/Ice/PropertyNames.cpp @@ -7,7 +7,7 @@ // // ********************************************************************** // -// Generated by makeprops.py from file ../config/PropertyNames.xml, Thu Nov 22 20:40:28 2007 +// Generated by makeprops.py from file ../config/PropertyNames.xml, Mon Nov 26 11:29:02 2007 // IMPORTANT: Do not edit this file -- any edits made here will be lost! diff --git a/cpp/src/Ice/PropertyNames.h b/cpp/src/Ice/PropertyNames.h index e326b32c07f..eeb33e1fb30 100644 --- a/cpp/src/Ice/PropertyNames.h +++ b/cpp/src/Ice/PropertyNames.h @@ -7,7 +7,7 @@ // // ********************************************************************** // -// Generated by makeprops.py from file ../config/PropertyNames.xml, Thu Nov 22 20:40:28 2007 +// Generated by makeprops.py from file ../config/PropertyNames.xml, Mon Nov 26 11:29:02 2007 // IMPORTANT: Do not edit this file -- any edits made here will be lost! diff --git a/cpp/src/Ice/ProtocolPluginFacade.cpp b/cpp/src/Ice/ProtocolPluginFacade.cpp index f8ff17e63e9..2134bdd6ec1 100644 --- a/cpp/src/Ice/ProtocolPluginFacade.cpp +++ b/cpp/src/Ice/ProtocolPluginFacade.cpp @@ -50,12 +50,24 @@ IceInternal::ProtocolPluginFacade::getNetworkTraceCategory() const return _instance->traceLevels()->networkCat; } +EndpointHostResolverPtr +IceInternal::ProtocolPluginFacade::getEndpointHostResolver() const +{ + return _instance->endpointHostResolver(); +} + void IceInternal::ProtocolPluginFacade::addEndpointFactory(const EndpointFactoryPtr& factory) const { _instance->endpointFactoryManager()->add(factory); } +EndpointFactoryPtr +IceInternal::ProtocolPluginFacade::getEndpointFactory(Ice::Short type) const +{ + return _instance->endpointFactoryManager()->get(type); +} + IceInternal::ProtocolPluginFacade::ProtocolPluginFacade(const CommunicatorPtr& communicator) : _instance(getInstance(communicator)), _communicator(communicator) diff --git a/cpp/src/Ice/Proxy.cpp b/cpp/src/Ice/Proxy.cpp index 4d986ef0abc..845d40ffee5 100644 --- a/cpp/src/Ice/Proxy.cpp +++ b/cpp/src/Ice/Proxy.cpp @@ -14,6 +14,8 @@ #include <Ice/ObjectAdapterFactory.h> #include <Ice/Outgoing.h> #include <Ice/OutgoingAsync.h> +#include <Ice/ConnectRequestHandler.h> +#include <Ice/ConnectionRequestHandler.h> #include <Ice/Direct.h> #include <Ice/Reference.h> #include <Ice/EndpointI.h> @@ -123,7 +125,7 @@ IceProxy::Ice::Object::ice_isA(const string& typeId, const Context* context) try { __checkTwowayOnly("ice_isA"); - __del = __getDelegate(); + __del = __getDelegate(false); return __del->ice_isA(typeId, context); } catch(const LocalExceptionWrapper& __ex) @@ -146,7 +148,7 @@ IceProxy::Ice::Object::ice_ping(const Context* context) Handle< ::IceDelegate::Ice::Object> __del; try { - __del = __getDelegate(); + __del = __getDelegate(false); __del->ice_ping(context); return; } @@ -171,7 +173,7 @@ IceProxy::Ice::Object::ice_ids(const Context* context) try { __checkTwowayOnly("ice_ids"); - __del = __getDelegate(); + __del = __getDelegate(false); return __del->ice_ids(context); } catch(const LocalExceptionWrapper& __ex) @@ -195,7 +197,7 @@ IceProxy::Ice::Object::ice_id(const Context* context) try { __checkTwowayOnly("ice_id"); - __del = __getDelegate(); + __del = __getDelegate(false); return __del->ice_id(context); } catch(const LocalExceptionWrapper& __ex) @@ -244,7 +246,7 @@ IceProxy::Ice::Object::ice_invoke(const string& operation, Handle< ::IceDelegate::Ice::Object> __del; try { - __del = __getDelegate(); + __del = __getDelegate(false); return __del->ice_invoke(operation, mode, inParams, outParams, context); } catch(const LocalExceptionWrapper& __ex) @@ -824,9 +826,8 @@ IceProxy::Ice::Object::ice_getConnection() Handle< ::IceDelegate::Ice::Object> __del; try { - __del = __getDelegate(); - bool compress; - return __del->__getConnection(compress); + __del = __getDelegate(false); + return __del->__getRequestHandler()->getConnection(true); } catch(const LocalException& __ex) { @@ -848,8 +849,7 @@ IceProxy::Ice::Object::ice_getCachedConnection() const { try { - bool compress; - return __del->__getConnection(compress); + return __del->__getRequestHandler()->getConnection(false); } catch(const CollocationOptimizationException&) { @@ -858,6 +858,36 @@ IceProxy::Ice::Object::ice_getCachedConnection() const return 0; } +void +IceProxy::Ice::Object::ice_flushBatchRequests() +{ + int __cnt; + while(true) + { + Handle< ::IceDelegate::Ice::Object> __del; + try + { + __del = __getDelegate(false); + __del->ice_flushBatchRequests(); + return; + } + catch(const LocalExceptionWrapper& __ex) + { + __handleExceptionWrapper(__del, __ex); + } + catch(const LocalException& __ex) + { + __handleException(__del, __ex, __cnt); + } + } +} + +void +IceProxy::Ice::Object::ice_flushBatchRequests_async(const AMI_Object_ice_flushBatchRequestsPtr& cb) +{ + cb->__invoke(this); +} + ReferencePtr IceProxy::Ice::Object::__reference() const { @@ -1024,7 +1054,7 @@ operator<<(ostream& os, const ::IceProxy::Ice::Object& p) } Handle< ::IceDelegate::Ice::Object> -IceProxy::Ice::Object::__getDelegate() +IceProxy::Ice::Object::__getDelegate(bool async) { IceUtil::Mutex::Lock sync(*this); @@ -1048,19 +1078,8 @@ IceProxy::Ice::Object::__getDelegate() if(!delegate) { Handle< ::IceDelegateM::Ice::Object> d = __createDelegateM(); - d->setup(_reference); + d->setup(_reference, this, async); delegate = d; - - // - // If this proxy is for a non-local object, and we are - // using a router, then add this proxy to the router info - // object. - // - RouterInfoPtr ri = _reference->getRouterInfo(); - if(ri) - { - ri->addProxy(this); - } } if(_reference->getCacheConnection()) @@ -1076,6 +1095,26 @@ IceProxy::Ice::Object::__getDelegate() return delegate; } +void +IceProxy::Ice::Object::__setRequestHandler(const Handle< ::IceDelegate::Ice::Object>& delegate, + const ::IceInternal::RequestHandlerPtr& handler) +{ + IceUtil::Mutex::Lock sync(*this); + if(_delegate.get() == delegate.get()) + { + if(dynamic_cast< ::IceDelegateM::Ice::Object*>(_delegate.get())) + { + _delegate = __createDelegateM(); + _delegate->__setRequestHandler(handler); + } + else if(dynamic_cast< ::IceDelegateD::Ice::Object*>(_delegate.get())) + { + _delegate = __createDelegateD(); + _delegate->__setRequestHandler(handler); + } + } +} + Handle< ::IceDelegateM::Ice::Object> IceProxy::Ice::Object::__createDelegateM() { @@ -1116,7 +1155,7 @@ bool IceDelegateM::Ice::Object::ice_isA(const string& __id, const Context* context) { static const string __operation("ice_isA"); - Outgoing __og(__connection.get(), __reference.get(), __operation, ::Ice::Nonmutating, context, __compress); + Outgoing __og(__handler.get(), __operation, ::Ice::Nonmutating, context); try { BasicStream* __os = __og.os(); @@ -1155,7 +1194,7 @@ void IceDelegateM::Ice::Object::ice_ping(const Context* context) { static const string __operation("ice_ping"); - Outgoing __og(__connection.get(), __reference.get(), __operation, ::Ice::Nonmutating, context, __compress); + Outgoing __og(__handler.get(), __operation, ::Ice::Nonmutating, context); bool __ok = __og.invoke(); try { @@ -1182,7 +1221,7 @@ vector<string> IceDelegateM::Ice::Object::ice_ids(const Context* context) { static const string __operation("ice_ids"); - Outgoing __og(__connection.get(), __reference.get(), __operation, ::Ice::Nonmutating, context, __compress); + Outgoing __og(__handler.get(), __operation, ::Ice::Nonmutating, context); vector<string> __ret; bool __ok = __og.invoke(); try @@ -1212,7 +1251,7 @@ string IceDelegateM::Ice::Object::ice_id(const Context* context) { static const string __operation("ice_id"); - Outgoing __og(__connection.get(), __reference.get(), __operation, ::Ice::Nonmutating, context, __compress); + Outgoing __og(__handler.get(), __operation, ::Ice::Nonmutating, context); string __ret; bool __ok = __og.invoke(); try @@ -1245,7 +1284,7 @@ IceDelegateM::Ice::Object::ice_invoke(const string& operation, vector<Byte>& outParams, const Context* context) { - Outgoing __og(__connection.get(), __reference.get(), operation, mode, context, __compress); + Outgoing __og(__handler.get(), operation, mode, context); try { BasicStream* __os = __og.os(); @@ -1256,7 +1295,7 @@ IceDelegateM::Ice::Object::ice_invoke(const string& operation, __og.abort(__ex); } bool ok = __og.invoke(); - if(__reference->getMode() == Reference::ModeTwoway) + if(__handler->getReference()->getMode() == Reference::ModeTwoway) { try { @@ -1272,11 +1311,35 @@ IceDelegateM::Ice::Object::ice_invoke(const string& operation, return ok; } -ConnectionIPtr -IceDelegateM::Ice::Object::__getConnection(bool& compress) const +void +IceDelegateM::Ice::Object::ice_flushBatchRequests() { - compress = __compress; - return __connection; + BatchOutgoing __og(__handler.get()); + try + { + __og.invoke(); + } + catch(const ::Ice::LocalException& __ex) + { + // + // We never retry flusing the batch requests as the connection batched + // requests were discarded and the caller needs to be notified of the + // failure. + // + throw ::IceInternal::LocalExceptionWrapper(__ex, false); + } +} + +RequestHandlerPtr +IceDelegateM::Ice::Object::__getRequestHandler() const +{ + return __handler; +} + +void +IceDelegateM::Ice::Object::__setRequestHandler(const RequestHandlerPtr& handler) +{ + __handler = handler; } void @@ -1291,28 +1354,36 @@ IceDelegateM::Ice::Object::__copyFrom(const ::IceInternal::Handle< ::IceDelegate // No need to synchronize "*this", as this operation is only // called upon initialization. // - - assert(!__reference); - assert(!__connection); - - __reference = from->__reference; - __connection = from->__connection; - __compress = from->__compress; + + assert(!__handler); + + __handler = from->__handler; } void -IceDelegateM::Ice::Object::setup(const ReferencePtr& ref) +IceDelegateM::Ice::Object::setup(const ReferencePtr& ref, const ::Ice::ObjectPrx& proxy, bool async) { // // No need to synchronize "*this", as this operation is only // called upon initialization. // - assert(!__reference); - assert(!__connection); + assert(!__handler); - __reference = ref; - __connection = __reference->getConnection(__compress); + // + // If the delegate is created as a result of an AMI call or if the proxy is + // a batch proxy we use the connect request handler to connect the in the + // background. + // + if(async || ref->getMode() == Reference::ModeBatchOneway || ref->getMode() == Reference::ModeBatchDatagram) + { + IceInternal::ConnectRequestHandlerPtr handler = new ::IceInternal::ConnectRequestHandler(ref, proxy, this); + __handler = handler->connect(); + } + else + { + __handler = new ::IceInternal::ConnectionRequestHandler(ref, proxy); + } } bool @@ -1577,14 +1648,26 @@ IceDelegateD::Ice::Object::ice_invoke(const string&, return false; } -ConnectionIPtr -IceDelegateD::Ice::Object::__getConnection(bool&) const +void +IceDelegateD::Ice::Object::ice_flushBatchRequests() +{ + throw CollocationOptimizationException(__FILE__, __LINE__); +} + +RequestHandlerPtr +IceDelegateD::Ice::Object::__getRequestHandler() const { throw CollocationOptimizationException(__FILE__, __LINE__); return 0; } void +IceDelegateD::Ice::Object::__setRequestHandler(const RequestHandlerPtr&) +{ + throw CollocationOptimizationException(__FILE__, __LINE__); +} + +void IceDelegateD::Ice::Object::__copyFrom(const ::IceInternal::Handle< ::IceDelegateD::Ice::Object>& from) { // diff --git a/cpp/src/Ice/Reference.cpp b/cpp/src/Ice/Reference.cpp index b9e1d534836..3fe7eee422d 100644 --- a/cpp/src/Ice/Reference.cpp +++ b/cpp/src/Ice/Reference.cpp @@ -625,6 +625,20 @@ IceInternal::FixedReference::getConnection(bool& compress) const return connection; } +void +IceInternal::FixedReference::getConnection(const GetConnectionCallbackPtr& callback) const +{ + try + { + bool compress; + callback->setConnection(getConnection(compress), compress); + } + catch(const Ice::LocalException& ex) + { + callback->setException(ex); + } +} + bool IceInternal::FixedReference::operator==(const Reference& r) const { @@ -743,20 +757,6 @@ IceInternal::FixedReference::filterConnections(const vector<ConnectionIPtr>& all IceUtil::Shared* IceInternal::upCast(IceInternal::RoutableReference* p) { return p; } -vector<EndpointIPtr> -IceInternal::RoutableReference::getRoutedEndpoints() const -{ - if(_routerInfo) - { - // - // If we route, we send everything to the router's client - // proxy endpoints. - // - return _routerInfo->getClientEndpoints(); - } - return vector<EndpointIPtr>(); -} - bool IceInternal::RoutableReference::getSecure() const { @@ -1093,6 +1093,232 @@ IceInternal::RoutableReference::operator<(const Reference& r) const return false; } +ConnectionIPtr +IceInternal::RoutableReference::createConnection(const vector<EndpointIPtr>& allEndpoints, bool& comp) const +{ + vector<EndpointIPtr> endpoints = filterEndpoints(allEndpoints); + if(endpoints.empty()) + { + throw Ice::NoEndpointException(__FILE__, __LINE__, toString()); + } + + OutgoingConnectionFactoryPtr factory = getInstance()->outgoingConnectionFactory(); + Ice::ConnectionIPtr connection; + if(getCacheConnection() || endpoints.size() == 1) + { + // + // Get an existing connection or create one if there's no + // existing connection to one of the given endpoints. + // + connection = factory->create(endpoints, false, _threadPerConnection, getEndpointSelection(), comp); + } + else + { + // + // Go through the list of endpoints and try to create the + // connection until it succeeds. This is different from just + // calling create() with the given endpoints since this might + // create a new connection even if there's an existing + // connection for one of the endpoints. + // + + auto_ptr<LocalException> exception; + vector<EndpointIPtr> endpoint; + endpoint.push_back(0); + + for(vector<EndpointIPtr>::const_iterator p = endpoints.begin(); p != endpoints.end(); ++p) + { + try + { + endpoint.back() = *p; + connection = factory->create(endpoint, p + 1 == endpoints.end(), _threadPerConnection, + getEndpointSelection(), comp); + break; + } + catch(const LocalException& ex) + { + exception.reset(dynamic_cast<LocalException*>(ex.ice_clone())); + } + } + + if(!connection) + { + assert(exception.get()); + exception->ice_throw(); + } + } + + assert(connection); + + // + // If we have a router, set the object adapter for this router + // (if any) to the new connection, so that callbacks from the + // router can be received over this new connection. + // + if(_routerInfo) + { + connection->setAdapter(_routerInfo->getAdapter()); + } + + return connection; +} + +void +IceInternal::RoutableReference::createConnection(const vector<EndpointIPtr>& allEndpoints, + const GetConnectionCallbackPtr& callback) const +{ + vector<EndpointIPtr> endpoints = filterEndpoints(allEndpoints); + if(endpoints.empty()) + { + callback->setException(Ice::NoEndpointException(__FILE__, __LINE__, toString())); + return; + } + + // + // Finally, create the connection. + // + OutgoingConnectionFactoryPtr factory = getInstance()->outgoingConnectionFactory(); + if(getCacheConnection() || endpoints.size() == 1) + { + class CB1 : public OutgoingConnectionFactory::CreateConnectionCallback + { + public: + + virtual void + setConnection(const Ice::ConnectionIPtr& connection, bool compress) + { + // + // If we have a router, set the object adapter for this router + // (if any) to the new connection, so that callbacks from the + // router can be received over this new connection. + // + if(_routerInfo) + { + connection->setAdapter(_routerInfo->getAdapter()); + } + _callback->setConnection(connection, compress); + } + + virtual void + setException(const Ice::LocalException& ex) + { + _callback->setException(ex); + } + + CB1(const RouterInfoPtr& routerInfo, const GetConnectionCallbackPtr& callback) : + _routerInfo(routerInfo), _callback(callback) + { + } + + private: + + const RouterInfoPtr _routerInfo; + const GetConnectionCallbackPtr _callback; + }; + + // + // Get an existing connection or create one if there's no + // existing connection to one of the given endpoints. + // + factory->create(endpoints, false, _threadPerConnection, getEndpointSelection(), new CB1(_routerInfo, callback)); + return; + } + else + { + class CB2 : public OutgoingConnectionFactory::CreateConnectionCallback + { + public: + + virtual void + setConnection(const Ice::ConnectionIPtr& connection, bool compress) + { + // + // If we have a router, set the object adapter for this router + // (if any) to the new connection, so that callbacks from the + // router can be received over this new connection. + // + if(_reference->getRouterInfo()) + { + connection->setAdapter(_reference->getRouterInfo()->getAdapter()); + } + _callback->setConnection(connection, compress); + } + + virtual void + setException(const Ice::LocalException& ex) + { + if(!_exception.get()) + { + _exception.reset(dynamic_cast<Ice::LocalException*>(ex.ice_clone())); + } + + if(++_i == _endpoints.size()) + { + _callback->setException(*_exception.get()); + return; + } + + bool more = _i != _endpoints.size() - 1; + vector<EndpointIPtr> endpoint; + endpoint.push_back(_endpoints[_i]); + + OutgoingConnectionFactoryPtr factory = _reference->getInstance()->outgoingConnectionFactory(); + bool threadPerConnection = _reference->getThreadPerConnection(); + EndpointSelectionType sel = _reference->getEndpointSelection(); + factory->create(endpoint, more, threadPerConnection, sel, this); + } + + CB2(const RoutableReferencePtr& reference, const vector<EndpointIPtr>& endpoints, + const GetConnectionCallbackPtr& callback) : + _reference(reference), + _endpoints(endpoints), + _callback(callback), + _i(0) + { + } + + private: + + const RoutableReferencePtr _reference; + const vector<EndpointIPtr> _endpoints; + const GetConnectionCallbackPtr _callback; + size_t _i; + std::auto_ptr<Ice::LocalException> _exception; + }; + + // + // Go through the list of endpoints and try to create the + // connection until it succeeds. This is different from just + // calling create() with the given endpoints since this might + // create a new connection even if there's an existing + // connection for one of the endpoints. + // + + vector<EndpointIPtr> endpt; + endpt.push_back(endpoints[0]); + RoutableReference* self = const_cast<RoutableReference*>(this); + factory->create(endpt, true, _threadPerConnection, getEndpointSelection(), new CB2(self, endpoints, callback)); + return; + } +} + +void +IceInternal::RoutableReference::applyOverrides(vector<EndpointIPtr>& endpoints) const +{ + for(vector<EndpointIPtr>::iterator p = endpoints.begin(); p != endpoints.end(); ++p) + { + *p = (*p)->connectionId(_connectionId); + if(_overrideCompress) + { + *p = (*p)->compress(_compress); + } + if(_overrideTimeout) + { + *p = (*p)->timeout(_timeout); + } + } +} + IceInternal::RoutableReference::RoutableReference(const InstancePtr& inst, const CommunicatorPtr& com, const Identity& ident, const SharedContextPtr& ctx, const string& fs, Mode md, bool sec, bool prefSec, const RouterInfoPtr& rtrInfo, @@ -1130,8 +1356,8 @@ IceInternal::RoutableReference::RoutableReference(const RoutableReference& r) : { } -ConnectionIPtr -IceInternal::RoutableReference::createConnection(const vector<EndpointIPtr>& allEndpoints, bool& comp) const +vector<EndpointIPtr> +IceInternal::RoutableReference::filterEndpoints(const vector<EndpointIPtr>& allEndpoints) const { vector<EndpointIPtr> endpoints = allEndpoints; @@ -1224,75 +1450,8 @@ IceInternal::RoutableReference::createConnection(const vector<EndpointIPtr>& all // stable_partition(endpoints.begin(), endpoints.end(), not1(Ice::constMemFun(&EndpointI::secure))); } - - if(endpoints.empty()) - { - NoEndpointException ex(__FILE__, __LINE__); - ex.proxy = toString(); - throw ex; - } - - // - // Finally, create the connection. - // - OutgoingConnectionFactoryPtr factory = getInstance()->outgoingConnectionFactory(); - if(getCacheConnection() || endpoints.size() == 1) - { - // - // Get an existing connection or create one if there's no - // existing connection to one of the given endpoints. - // - return factory->create(endpoints, false, _threadPerConnection, getEndpointSelection(), comp); - } - else - { - // - // Go through the list of endpoints and try to create the - // connection until it succeeds. This is different from just - // calling create() with the given endpoints since this might - // create a new connection even if there's an existing - // connection for one of the endpoints. - // - - auto_ptr<LocalException> exception; - vector<EndpointIPtr> endpoint; - endpoint.push_back(0); - - for(vector<EndpointIPtr>::const_iterator p = endpoints.begin(); p != endpoints.end(); ++p) - { - try - { - endpoint.back() = *p; - return factory->create(endpoint, p + 1 == endpoints.end(), _threadPerConnection, - getEndpointSelection(), comp); - } - catch(const LocalException& ex) - { - exception.reset(dynamic_cast<LocalException*>(ex.ice_clone())); - } - } - - assert(exception.get()); - exception->ice_throw(); - return 0; // Keeps the compiler happy. - } -} - -void -IceInternal::RoutableReference::applyOverrides(vector<EndpointIPtr>& endpoints) const -{ - for(vector<EndpointIPtr>::iterator p = endpoints.begin(); p != endpoints.end(); ++p) - { - *p = (*p)->connectionId(_connectionId); - if(_overrideCompress) - { - *p = (*p)->compress(_compress); - } - if(_overrideTimeout) - { - *p = (*p)->timeout(_timeout); - } - } + + return endpoints; } IceUtil::Shared* IceInternal::upCast(IceInternal::DirectReference* p) { return p; } @@ -1403,7 +1562,8 @@ IceInternal::DirectReference::changeAdapterId(const string& newAdapterId) const getSecure(), getPreferSecure(), newAdapterId, getRouterInfo(), locatorInfo, getCollocationOptimization(), getCacheConnection(), getEndpointSelection(), - getThreadPerConnection(), getLocatorCacheTimeout()); + getThreadPerConnection(), + getLocatorCacheTimeout()); } else { @@ -1472,28 +1632,68 @@ IceInternal::DirectReference::toString() const ConnectionIPtr IceInternal::DirectReference::getConnection(bool& comp) const { - vector<EndpointIPtr> endpts = RoutableReference::getRoutedEndpoints(); - applyOverrides(endpts); - - if(endpts.empty()) + if(getRouterInfo()) { - endpts = _endpoints; // Endpoint overrides are already applied on these endpoints. + vector<EndpointIPtr> endpts = getRouterInfo()->getClientEndpoints(); + if(!endpts.empty()) + { + applyOverrides(endpts); + return createConnection(endpts, comp); + } } - ConnectionIPtr connection = createConnection(endpts, comp); + return createConnection(_endpoints, comp); +} + +void +IceInternal::DirectReference::getConnection(const GetConnectionCallbackPtr& callback) const +{ + class Callback : public RouterInfo::GetClientEndpointsCallback + { + public: + + virtual void + setEndpoints(const vector<EndpointIPtr>& endpoints) + { + vector<EndpointIPtr> endpts = endpoints; + if(!endpts.empty()) + { + _reference->applyOverrides(endpts); + _reference->createConnection(endpts, _callback); + return; + } + + _reference->createConnection(_reference->getEndpoints(), _callback); + } + + virtual void + setException(const Ice::LocalException& ex) + { + _callback->setException(ex); + } + + Callback(const DirectReferencePtr& reference, const GetConnectionCallbackPtr& callback) : + _reference(reference), _callback(callback) + { + } + + private: + + const DirectReferencePtr _reference; + const GetConnectionCallbackPtr _callback; + }; - // - // If we have a router, set the object adapter for this router - // (if any) to the new connection, so that callbacks from the - // router can be received over this new connection. - // if(getRouterInfo()) { - connection->setAdapter(getRouterInfo()->getAdapter()); + // + // If we route, we send everything to the router's client + // proxy endpoints. + // + getRouterInfo()->getClientEndpoints(new Callback(const_cast<DirectReference*>(this), callback)); + return; } - assert(connection); - return connection; + createConnection(_endpoints, callback); } bool @@ -1699,77 +1899,223 @@ IceInternal::IndirectReference::toString() const ConnectionIPtr IceInternal::IndirectReference::getConnection(bool& comp) const { - ConnectionIPtr connection; + if(getRouterInfo()) + { + // + // If we route, we send everything to the router's client + // proxy endpoints. + // + vector<EndpointIPtr> endpts = getRouterInfo()->getClientEndpoints(); + if(!endpts.empty()) + { + applyOverrides(endpts); + return createConnection(endpts, comp); + } + } while(true) { - vector<EndpointIPtr> endpts = RoutableReference::getRoutedEndpoints(); bool cached = false; - if(endpts.empty() && _locatorInfo) + vector<EndpointIPtr> endpts; + if(_locatorInfo) { - const IndirectReferencePtr self = const_cast<IndirectReference*>(this); - endpts = _locatorInfo->getEndpoints(self, _locatorCacheTimeout, cached); + endpts = _locatorInfo->getEndpoints(const_cast<IndirectReference*>(this), _locatorCacheTimeout, cached); + applyOverrides(endpts); } - applyOverrides(endpts); + if(endpts.empty()) + { + throw Ice::NoEndpointException(__FILE__, __LINE__, toString()); + } try { - connection = createConnection(endpts, comp); - assert(connection); + return createConnection(endpts, comp); } - catch(const NoEndpointException& ex) + catch(const NoEndpointException&) { - throw ex; // No need to retry if there's no endpoints. + throw; // No need to retry if there's no endpoints. } catch(const LocalException& ex) { - if(!getRouterInfo()) + assert(_locatorInfo); + _locatorInfo->clearCache(const_cast<IndirectReference*>(this)); + + if(cached) { - assert(_locatorInfo); - - // COMPILERFIX: Braces needed to prevent BCB from causing Reference refCount from + // COMPILERFIX: Braces needed to prevent BCB from causing TraceLevels refCount from // being decremented twice when loop continues. { - const IndirectReferencePtr self = const_cast<IndirectReference*>(this); - _locatorInfo->clearCache(self); + TraceLevelsPtr traceLevels = getInstance()->traceLevels(); + if(traceLevels->retry >= 2) + { + Trace out(getInstance()->initializationData().logger, traceLevels->retryCat); + out << "connection to cached endpoints failed\n" + << "removing endpoints from cache and trying one more time\n" << ex; + } } + continue; + } + throw; + } + } + + assert(false); + return 0; +} + +void +IceInternal::IndirectReference::getConnection(const GetConnectionCallbackPtr& callback) const +{ + class Callback : public RouterInfo::GetClientEndpointsCallback + { + public: + + virtual void + setEndpoints(const vector<EndpointIPtr>& endpoints) + { + vector<EndpointIPtr> endpts = endpoints; + if(!endpts.empty()) + { + _reference->applyOverrides(endpts); + _reference->createConnection(endpts, _callback); + return; + } + + _reference->getConnectionNoRouterInfo(_callback); + } + + virtual void + setException(const Ice::LocalException& ex) + { + _callback->setException(ex); + } + + Callback(const IndirectReferencePtr& reference, const GetConnectionCallbackPtr& callback) : + _reference(reference), _callback(callback) + { + } + + private: + + const IndirectReferencePtr _reference; + const GetConnectionCallbackPtr _callback; + }; - if(cached) + if(getRouterInfo()) + { + // + // If we route, we send everything to the router's client + // proxy endpoints. + // + getRouterInfo()->getClientEndpoints(new Callback(const_cast<IndirectReference*>(this), callback)); + return; + } + + getConnectionNoRouterInfo(callback); +} + +void +IceInternal::IndirectReference::getConnectionNoRouterInfo(const GetConnectionCallbackPtr& callback) const +{ + class Callback2 : public Reference::GetConnectionCallback + { + public: + + virtual void + setConnection(const Ice::ConnectionIPtr& connection, bool compress) + { + _callback->setConnection(connection, compress); + } + + virtual void + setException(const Ice::LocalException& exc) + { + try + { + exc.ice_throw(); + } + catch(const Ice::NoEndpointException& ex) + { + _callback->setException(ex); // No need to retry if there's no endpoints. + } + catch(const Ice::LocalException& ex) + { + LocatorInfoPtr locatorInfo = _reference->getLocatorInfo(); + assert(locatorInfo); + locatorInfo->clearCache(_reference); + if(_cached) { - // COMPILERFIX: Braces needed to prevent BCB from causing TraceLevels refCount from - // being decremented twice when loop continues. + TraceLevelsPtr traceLvls = _reference->getInstance()->traceLevels(); + if(traceLvls->retry >= 2) { - TraceLevelsPtr traceLevels = getInstance()->traceLevels(); - if(traceLevels->retry >= 2) - { - Trace out(getInstance()->initializationData().logger, traceLevels->retryCat); - out << "connection to cached endpoints failed\n" - << "removing endpoints from cache and trying one more time\n" << ex; - } + Trace out(_reference->getInstance()->initializationData().logger, traceLvls->retryCat); + out << "connection to cached endpoints failed\n" + << "removing endpoints from cache and trying one more time\n" << ex; } - continue; + _reference->getConnectionNoRouterInfo(_callback); // Retry. + return; } + _callback->setException(ex); } + } - throw; + Callback2(const IndirectReferencePtr& reference, const GetConnectionCallbackPtr& callback, bool cached): + _reference(reference), _callback(callback), _cached(cached) + { } + + private: + + const IndirectReferencePtr _reference; + const GetConnectionCallbackPtr _callback; + const bool _cached; + }; + + class Callback : public LocatorInfo::GetEndpointsCallback + { + public: - break; - } + virtual void + setEndpoints(const vector<EndpointIPtr>& endpoints, bool cached) + { + if(endpoints.empty()) + { + _callback->setException(Ice::NoEndpointException(__FILE__, __LINE__, _reference->toString())); + return; + } + + vector<EndpointIPtr> endpts = endpoints; + _reference->applyOverrides(endpts); + _reference->createConnection(endpts, new Callback2(_reference, _callback, cached)); + } + + virtual void + setException(const Ice::LocalException& ex) + { + _callback->setException(ex); + } - // - // If we have a router, set the object adapter for this router - // (if any) to the new connection, so that callbacks from the - // router can be received over this new connection. - // - if(getRouterInfo()) + Callback(const IndirectReferencePtr& reference, const GetConnectionCallbackPtr& callback) : + _reference(reference), _callback(callback) + { + } + + private: + + const IndirectReferencePtr _reference; + const GetConnectionCallbackPtr _callback; + }; + + if(_locatorInfo) { - connection->setAdapter(getRouterInfo()->getAdapter()); + IndirectReference* self = const_cast<IndirectReference*>(this); + _locatorInfo->getEndpoints(self, _locatorCacheTimeout, new Callback(self, callback)); + } + else + { + callback->setException(Ice::NoEndpointException(__FILE__, __LINE__, toString())); } - - assert(connection); - return connection; } int diff --git a/cpp/src/Ice/Reference.h b/cpp/src/Ice/Reference.h index 1430ebf7278..95715300787 100644 --- a/cpp/src/Ice/Reference.h +++ b/cpp/src/Ice/Reference.h @@ -33,6 +33,15 @@ class Reference : public IceUtil::Shared { public: + class GetConnectionCallback : virtual public IceUtil::Shared + { + public: + + virtual void setConnection(const Ice::ConnectionIPtr&, bool) = 0; + virtual void setException(const Ice::LocalException&) = 0; + }; + typedef IceUtil::Handle<GetConnectionCallback> GetConnectionCallbackPtr; + enum Type { TypeDirect, @@ -115,6 +124,7 @@ public: // Get a suitable connection for this reference. // virtual Ice::ConnectionIPtr getConnection(bool&) const = 0; + virtual void getConnection(const GetConnectionCallbackPtr&) const = 0; virtual bool operator==(const Reference&) const = 0; virtual bool operator!=(const Reference&) const = 0; @@ -180,6 +190,7 @@ public: virtual std::string toString() const; virtual Ice::ConnectionIPtr getConnection(bool&) const; + virtual void getConnection(const GetConnectionCallbackPtr&) const; virtual bool operator==(const Reference&) const; virtual bool operator!=(const Reference&) const; @@ -203,7 +214,6 @@ class RoutableReference : public Reference public: virtual RouterInfoPtr getRouterInfo() const { return _routerInfo; } - std::vector<EndpointIPtr> getRoutedEndpoints() const; virtual bool getSecure() const; virtual bool getPreferSecure() const; @@ -223,8 +233,6 @@ public: virtual ReferencePtr changeEndpointSelection(Ice::EndpointSelectionType) const; virtual ReferencePtr changeThreadPerConnection(bool) const; - virtual Ice::ConnectionIPtr getConnection(bool&) const = 0; - virtual int hash() const; virtual bool operator==(const Reference&) const = 0; @@ -233,6 +241,10 @@ public: virtual ReferencePtr clone() const = 0; + Ice::ConnectionIPtr createConnection(const std::vector<EndpointIPtr>&, bool&) const; + void createConnection(const std::vector<EndpointIPtr>&, const GetConnectionCallbackPtr&) const; + void applyOverrides(std::vector<EndpointIPtr>&) const; + protected: RoutableReference(const InstancePtr&, const Ice::CommunicatorPtr&, const Ice::Identity&, const SharedContextPtr&, @@ -240,8 +252,7 @@ protected: Ice::EndpointSelectionType, bool); RoutableReference(const RoutableReference&); - Ice::ConnectionIPtr createConnection(const std::vector<EndpointIPtr>&, bool&) const; - void applyOverrides(std::vector<EndpointIPtr>&) const; + std::vector<EndpointIPtr> filterEndpoints(const std::vector<EndpointIPtr>&) const; private: @@ -284,6 +295,7 @@ public: virtual void streamWrite(BasicStream*) const; virtual std::string toString() const; virtual Ice::ConnectionIPtr getConnection(bool&) const; + virtual void getConnection(const GetConnectionCallbackPtr&) const; virtual bool operator==(const Reference&) const; virtual bool operator!=(const Reference&) const; @@ -323,6 +335,8 @@ public: virtual void streamWrite(BasicStream*) const; virtual std::string toString() const; virtual Ice::ConnectionIPtr getConnection(bool&) const; + virtual void getConnection(const GetConnectionCallbackPtr&) const; + virtual void getConnectionNoRouterInfo(const GetConnectionCallbackPtr&) const; virtual int hash() const; // Conceptually const. diff --git a/cpp/src/Ice/ReferenceFactory.cpp b/cpp/src/Ice/ReferenceFactory.cpp index 4c055017f68..0e894056597 100644 --- a/cpp/src/Ice/ReferenceFactory.cpp +++ b/cpp/src/Ice/ReferenceFactory.cpp @@ -623,8 +623,7 @@ IceInternal::ReferenceFactory::createFromProperties(const string& propertyPrefix } else { - ref = ref->changeRouter( - RouterPrx::uncheckedCast(_communicator->propertyToProxy(property))); + ref = ref->changeRouter(RouterPrx::uncheckedCast(_communicator->propertyToProxy(property))); } } diff --git a/cpp/src/Ice/RequestHandler.cpp b/cpp/src/Ice/RequestHandler.cpp new file mode 100644 index 00000000000..cf2845c77ae --- /dev/null +++ b/cpp/src/Ice/RequestHandler.cpp @@ -0,0 +1,23 @@ +// ********************************************************************** +// +// Copyright (c) 2003-2007 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 <Ice/RequestHandler.h> + +using namespace std; +using namespace IceInternal; + +IceUtil::Shared* IceInternal::upCast(RequestHandler* obj) { return obj; } + +RequestHandler::~RequestHandler() +{ +} + +RequestHandler::RequestHandler(const ReferencePtr& reference) : _reference(reference) +{ +} diff --git a/cpp/src/Ice/RequestHandler.h b/cpp/src/Ice/RequestHandler.h new file mode 100644 index 00000000000..1b22794930c --- /dev/null +++ b/cpp/src/Ice/RequestHandler.h @@ -0,0 +1,55 @@ +// ********************************************************************** +// +// Copyright (c) 2003-2007 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_REQUEST_HANDLER_H +#define ICE_REQUEST_HANDLER_H + +#include <IceUtil/Shared.h> + +#include <Ice/RequestHandlerF.h> +#include <Ice/ReferenceF.h> +#include <Ice/OutgoingAsyncF.h> +#include <Ice/ConnectionIF.h> + +namespace IceInternal +{ + +class BasicStream; +class Outgoing; +class BatchOutgoing; + +class RequestHandler : virtual public ::IceUtil::Shared +{ +public: + + virtual ~RequestHandler(); + + virtual void prepareBatchRequest(BasicStream*) = 0; + virtual void finishBatchRequest(BasicStream*) = 0; + virtual void abortBatchRequest() = 0; + + virtual Ice::ConnectionI* sendRequest(Outgoing*) = 0; + virtual void sendAsyncRequest(const OutgoingAsyncPtr&) = 0; + + virtual bool flushBatchRequests(BatchOutgoing*) = 0; + virtual void flushAsyncBatchRequests(const BatchOutgoingAsyncPtr&) = 0; + + const ReferencePtr& getReference() const { return _reference; } // Inlined for performances. + + virtual Ice::ConnectionIPtr getConnection(bool) = 0; + +protected: + + RequestHandler(const ReferencePtr&); + const ReferencePtr _reference; +}; + +} + +#endif diff --git a/cpp/src/Ice/RouterInfo.cpp b/cpp/src/Ice/RouterInfo.cpp index fd2e9ea5300..4ab5323593a 100644 --- a/cpp/src/Ice/RouterInfo.cpp +++ b/cpp/src/Ice/RouterInfo.cpp @@ -154,12 +154,168 @@ IceInternal::RouterInfo::getRouter() const vector<EndpointIPtr> IceInternal::RouterInfo::getClientEndpoints() { + { + IceUtil::Mutex::Lock sync(*this); + if(!_clientEndpoints.empty()) + { + return _clientEndpoints; + } + } + + return setClientEndpoints(_router->getClientProxy()); +} + +void +IceInternal::RouterInfo::getClientEndpoints(const GetClientEndpointsCallbackPtr& callback) +{ + vector<EndpointIPtr> clientEndpoints; + { + IceUtil::Mutex::Lock sync(*this); + clientEndpoints = _clientEndpoints; + } + + if(!clientEndpoints.empty()) + { + callback->setEndpoints(clientEndpoints); + return; + } + + class Callback : public AMI_Router_getClientProxy + { + public: + + virtual void + ice_response(const Ice::ObjectPrx& clientProxy) + { + _callback->setEndpoints(_routerInfo->setClientEndpoints(clientProxy)); + } + + virtual void + ice_exception(const Ice::Exception& ex) + { + _callback->setException(dynamic_cast<const Ice::LocalException&>(ex)); + } + + Callback(const RouterInfoPtr& routerInfo, const GetClientEndpointsCallbackPtr& callback) : + _routerInfo(routerInfo), _callback(callback) + { + } + + private: + + const RouterInfoPtr _routerInfo; + const GetClientEndpointsCallbackPtr _callback; + }; + + _router->getClientProxy_async(new Callback(this, callback)); +} + +vector<EndpointIPtr> +IceInternal::RouterInfo::getServerEndpoints() +{ + { + IceUtil::Mutex::Lock sync(*this); + if(!_serverEndpoints.empty()) + { + return _serverEndpoints; + } + } + + return setServerEndpoints(_router->getServerProxy()); +} + +void +IceInternal::RouterInfo::addProxy(const ObjectPrx& proxy) +{ + assert(proxy); // Must not be called for null proxies. + + { + IceUtil::Mutex::Lock sync(*this); + if(_identities.find(proxy->ice_getIdentity()) != _identities.end()) + { + // + // Only add the proxy to the router if it's not already in our local map. + // + return; + } + } + + ObjectProxySeq proxies; + proxies.push_back(proxy); + addAndEvictProxies(proxy, _router->addProxies(proxies)); +} + +bool +IceInternal::RouterInfo::addProxy(const Ice::ObjectPrx& proxy, const AddProxyCallbackPtr& callback) +{ + assert(proxy); + { + IceUtil::Mutex::Lock sync(*this); + if(_identities.find(proxy->ice_getIdentity()) == _identities.end()) + { + // + // Only add the proxy to the router if it's not already in our local map. + // + return true; + } + } + + class Callback : public AMI_Router_addProxies + { + public: + + virtual void + ice_response(const Ice::ObjectProxySeq& evictedProxies) + { + _routerInfo->addAndEvictProxies(_proxy, evictedProxies); + _callback->addedProxy(); + } + + virtual void + ice_exception(const Ice::Exception& ex) + { + _callback->setException(dynamic_cast<const Ice::LocalException&>(ex)); + } + + Callback(const RouterInfoPtr& routerInfo, const Ice::ObjectPrx& proxy, const AddProxyCallbackPtr& callback) : + _routerInfo(routerInfo), _proxy(proxy), _callback(callback) + { + } + + private: + + const RouterInfoPtr _routerInfo; + const Ice::ObjectPrx _proxy; + const AddProxyCallbackPtr _callback; + }; + + Ice::ObjectProxySeq proxies; + proxies.push_back(proxy); + _router->addProxies_async(new Callback(this, proxy, callback), proxies); + return false; +} + +void +IceInternal::RouterInfo::setAdapter(const ObjectAdapterPtr& adapter) +{ IceUtil::Mutex::Lock sync(*this); - - if(_clientEndpoints.size() == 0) // Lazy initialization. + _adapter = adapter; +} + +ObjectAdapterPtr +IceInternal::RouterInfo::getAdapter() const +{ + IceUtil::Mutex::Lock sync(*this); + return _adapter; +} + +vector<EndpointIPtr> +IceInternal::RouterInfo::setClientEndpoints(const Ice::ObjectPrx& proxy) +{ + IceUtil::Mutex::Lock sync(*this); + if(_clientEndpoints.empty()) { - ObjectPrx clientProxy = _router->getClientProxy(); - if(!clientProxy) + if(!proxy) { // // If getClientProxy() return nil, use router endpoints. @@ -168,7 +324,7 @@ IceInternal::RouterInfo::getClientEndpoints() } else { - clientProxy = clientProxy->ice_router(0); // The client proxy cannot be routed. + Ice::ObjectPrx clientProxy = proxy->ice_router(0); // The client proxy cannot be routed. // // In order to avoid creating a new connection to the router, @@ -187,16 +343,15 @@ IceInternal::RouterInfo::getClientEndpoints() _clientEndpoints = clientProxy->__reference()->getEndpoints(); } } - return _clientEndpoints; } + vector<EndpointIPtr> -IceInternal::RouterInfo::getServerEndpoints() +IceInternal::RouterInfo::setServerEndpoints(const Ice::ObjectPrx& serverProxy) { IceUtil::Mutex::Lock sync(*this); - - if(_serverEndpoints.size() == 0) // Lazy initialization. + if(_serverEndpoints.empty()) // Lazy initialization. { ObjectPrx serverProxy = _router->getServerProxy(); if(!serverProxy) @@ -208,53 +363,45 @@ IceInternal::RouterInfo::getServerEndpoints() _serverEndpoints = serverProxy->__reference()->getEndpoints(); } - return _serverEndpoints; } void -IceInternal::RouterInfo::addProxy(const ObjectPrx& proxy) +IceInternal::RouterInfo::addAndEvictProxies(const Ice::ObjectPrx& proxy, const Ice::ObjectProxySeq& evictedProxies) { - assert(proxy); // Must not be called for null proxies. - IceUtil::Mutex::Lock sync(*this); - set<Identity>::iterator p = _identities.find(proxy->ice_getIdentity()); - - if(p == _identities.end()) + // + // Check if the proxy hasn't already been evicted by a concurrent addProxies call. + // If it's the case, don't add it to our local map. + // + multiset<Identity>::iterator p = _evictedIdentities.find(proxy->ice_getIdentity()); + if(p != _evictedIdentities.end()) + { + _evictedIdentities.erase(p); + } + else { // - // Only add the proxy to the router if it's not already in our local map. - // - ObjectProxySeq proxies; - proxies.push_back(proxy); - ObjectProxySeq evictedProxies = _router->addProxies(proxies); - - // - // If we successfully added the proxy to the router, we add it to our local map. - // - _identities.insert(_identities.begin(), proxy->ice_getIdentity()); - - // - // We also must remove whatever proxies the router evicted. + // If we successfully added the proxy to the router, + // we add it to our local map. // - for(ObjectProxySeq::iterator q = evictedProxies.begin(); q != evictedProxies.end(); ++q) + _identities.insert(proxy->ice_getIdentity()); + } + + // + // We also must remove whatever proxies the router evicted. + // + for(Ice::ObjectProxySeq::const_iterator q = evictedProxies.begin(); q != evictedProxies.end(); ++q) + { + if(_identities.erase((*q)->ice_getIdentity()) == 0) { - _identities.erase((*q)->ice_getIdentity()); + // + // It's possible for the proxy to not have been + // added yet in the local map if two threads + // concurrently call addProxies. + // + _evictedIdentities.insert((*q)->ice_getIdentity()); } } } - -void -IceInternal::RouterInfo::setAdapter(const ObjectAdapterPtr& adapter) -{ - IceUtil::Mutex::Lock sync(*this); - _adapter = adapter; -} - -ObjectAdapterPtr -IceInternal::RouterInfo::getAdapter() const -{ - IceUtil::Mutex::Lock sync(*this); - return _adapter; -} diff --git a/cpp/src/Ice/RouterInfo.h b/cpp/src/Ice/RouterInfo.h index f7a6d9d773f..7a05dacddd2 100644 --- a/cpp/src/Ice/RouterInfo.h +++ b/cpp/src/Ice/RouterInfo.h @@ -16,6 +16,7 @@ #include <Ice/RouterF.h> #include <Ice/ProxyF.h> #include <Ice/EndpointIF.h> +#include <Ice/BuiltinSequences.h> #include <set> @@ -47,6 +48,24 @@ class RouterInfo : public IceUtil::Shared, public IceUtil::Mutex { public: + class GetClientEndpointsCallback : virtual public IceUtil::Shared + { + public: + + virtual void setEndpoints(const std::vector<EndpointIPtr>&) = 0; + virtual void setException(const Ice::LocalException&) = 0; + }; + typedef IceUtil::Handle<GetClientEndpointsCallback> GetClientEndpointsCallbackPtr; + + class AddProxyCallback : virtual public IceUtil::Shared + { + public: + + virtual void addedProxy() = 0; + virtual void setException(const Ice::LocalException&) = 0; + }; + typedef IceUtil::Handle<AddProxyCallback> AddProxyCallbackPtr; + RouterInfo(const Ice::RouterPrx&); void destroy(); @@ -56,19 +75,27 @@ public: bool operator<(const RouterInfo&) const; Ice::RouterPrx getRouter() const; - std::vector<IceInternal::EndpointIPtr> getClientEndpoints(); - std::vector<IceInternal::EndpointIPtr> getServerEndpoints(); + std::vector<EndpointIPtr> getClientEndpoints(); + void getClientEndpoints(const GetClientEndpointsCallbackPtr&); + std::vector<EndpointIPtr> getServerEndpoints(); void addProxy(const Ice::ObjectPrx&); + bool addProxy(const Ice::ObjectPrx&, const AddProxyCallbackPtr&); + void setAdapter(const Ice::ObjectAdapterPtr&); Ice::ObjectAdapterPtr getAdapter() const; private: + std::vector<EndpointIPtr> setClientEndpoints(const Ice::ObjectPrx&); + std::vector<EndpointIPtr> setServerEndpoints(const Ice::ObjectPrx&); + void addAndEvictProxies(const Ice::ObjectPrx&, const Ice::ObjectProxySeq&); + const Ice::RouterPrx _router; - std::vector<IceInternal::EndpointIPtr> _clientEndpoints; - std::vector<IceInternal::EndpointIPtr> _serverEndpoints; + std::vector<EndpointIPtr> _clientEndpoints; + std::vector<EndpointIPtr> _serverEndpoints; Ice::ObjectAdapterPtr _adapter; std::set<Ice::Identity> _identities; + std::multiset<Ice::Identity> _evictedIdentities; }; } diff --git a/cpp/src/Ice/Selector.cpp b/cpp/src/Ice/Selector.cpp new file mode 100644 index 00000000000..5e82c2f7ee3 --- /dev/null +++ b/cpp/src/Ice/Selector.cpp @@ -0,0 +1,497 @@ +// ********************************************************************** +// +// Copyright (c) 2003-2007 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/DisableWarnings.h> +#include <Ice/Selector.h> +#include <Ice/Network.h> +#include <Ice/Instance.h> +#include <Ice/LoggerUtil.h> + +using namespace std; +using namespace Ice; +using namespace IceInternal; + +IceInternal::Selector::Selector(const InstancePtr& instance, int timeout) : + _instance(instance), + _timeout(timeout) +{ +#if defined(_WIN32) + _fdsInUse = 0; + FD_ZERO(&_readFdSet); + FD_ZERO(&_writeFdSet); + FD_ZERO(&_errorFdSet); +#elif defined(ICE_USE_EPOLL) + _epollFd = epoll_create(1); + if(_epollFd < 0) + { + SocketException ex(__FILE__, __LINE__); + ex.error = getSocketErrno(); + throw ex; + } +#elif defined(__APPLE__) + _kqueueFd = kqueue(); + if(_kqueueFd < 0) + { + SocketException ex(__FILE__, __LINE__); + ex.error = getSocketErrno(); + throw ex; + } +#endif + + SOCKET fds[2]; + createPipe(fds); + _fdIntrRead = fds[0]; + _fdIntrWrite = fds[1]; + setBlock(_fdIntrRead, false); + _maxFd = _fdIntrRead; + add(_fdIntrRead, NeedRead); +#if defined(_WIN32) + ++_fdsInUse; +#endif + + _lastFd = _fdIntrRead; +} + +IceInternal::Selector::~Selector() +{ +#if defined(ICE_USE_EPOLL) + try + { + closeSocket(_epollFd); + } + catch(const LocalException& ex) + { + Error out(_instance->initializationData().logger); + out << "exception in selector while calling closeSocket():\n" << ex; + } +#elif defined(__APPLE__) + try + { + closeSocket(_kqueueFd); + } + catch(const LocalException& ex) + { + Error out(_instance->initializationData().logger); + out << "exception in selector while calling closeSocket():\n" << ex; + } +#endif + + + try + { + closeSocket(_fdIntrWrite); + } + catch(const LocalException& ex) + { + Error out(_instance->initializationData().logger); + out << "exception in selector while calling closeSocket():\n" << ex; + } + + try + { + closeSocket(_fdIntrRead); + } + catch(const LocalException& ex) + { + Error out(_instance->initializationData().logger); + out << "exception in selector while calling closeSocket():\n" << ex; + } +} + +void +IceInternal::Selector::add(SOCKET fd, SocketStatus status) +{ + if(fd > _maxFd) + { + _maxFd = fd; + } +#if defined(_WIN32) + switch(status) + { + case NeedRead: + FD_SET(fd, &_readFdSet); + break; + case NeedWrite: + FD_SET(fd, &_writeFdSet); + break; + case NeedConnect: + FD_SET(fd, &_writeFdSet); + FD_SET(fd, &_errorFdSet); + break; + case Finished: + assert(false); + } +#elif defined(ICE_USE_EPOLL) + epoll_event event; + switch(status) + { + case NeedRead: + event.events = EPOLLIN; + break; + case NeedWrite: + case NeedConnect: + event.events = EPOLLOUT; + break; + case Finished: + assert(false); + } + event.data.fd = fd; + if(epoll_ctl(_epollFd, EPOLL_CTL_ADD, fd, &event) != 0) + { + Error out(_instance->initializationData().logger); + out << "error while adding filedescriptor to epoll set:\n"; + out << errorToString(getSocketErrno()); + } + _events.resize(_events.size() + 1); +#elif defined(__APPLE__) + struct kevent event; + switch(status) + { + case NeedRead: + EV_SET(&event, fd, EVFILT_READ, EV_ADD, 0, 0, 0); + break; + case NeedWrite: + case NeedConnect: + EV_SET(&event, fd, EVFILT_WRITE, EV_ADD, 0, 0, 0); + break; + case Finished: + assert(false); + } + if(kevent(_kqueueFd, &event, 1, 0, 0, 0) < 0) + { + Error out(_instance->initializationData().logger); + out << "error while adding filedescriptor to kqueue:\n"; + out << errorToString(getSocketErrno()); + } + _events.resize(_events.size() + 1); +#else + struct pollfd pollFd; + pollFd.fd = fd; + switch(status) + { + case NeedRead: + pollFd.events = POLLIN; + break; + case NeedWrite: + case NeedConnect: + pollFd.events = POLLOUT; + break; + case Finished: + assert(false); + } + _pollFdSet.push_back(pollFd); +#endif +} + +void +Selector::remove(SOCKET fd, SocketStatus status) +{ +#if defined(_WIN32) + switch(status) + { + case NeedRead: + FD_CLR(fd, &_readFdSet); + break; + case NeedWrite: + FD_CLR(fd, &_writeFdSet); + break; + case NeedConnect: + FD_CLR(fd, &_writeFdSet); + FD_CLR(fd, &_errorFdSet); + break; + case Finished: + assert(false); + } +#elif defined(ICE_USE_EPOLL) + epoll_event event; + event.events = 0; + int rs = epoll_ctl(_epollFd, EPOLL_CTL_DEL, fd, &event); + if(rs < 0) + { + // + // It's possible for the socket to already be closed at this point. + // +// Error out(_instance->initializationData().logger); +// out << "error while removing filedescriptor from epoll set:\n"; +// out << errorToString(getSocketErrno()); + } + _events.resize(_events.size() - 1); +#elif defined(__APPLE__) + struct kevent event; + switch(status) + { + case NeedRead: + EV_SET(&event, fd, EVFILT_READ, EV_DELETE, 0, 0, 0); + break; + case NeedWrite: + case NeedConnect: + EV_SET(&event, fd, EVFILT_WRITE, EV_DELETE, 0, 0, 0); + break; + case Finished: + assert(false); + } + int rs = kevent(_kqueueFd, &event, 1, 0, 0, 0); + if(rs < 0) + { + // + // It's possible for the socket to already be closed at this point. + // +// Error out(_instance->initializationData().logger); +// out << "error while removing filedescriptor from kqueue:\n"; +// out << errorToString(getSocketErrno()); + } + _events.resize(_events.size() - 1); +#else + for(vector<struct pollfd>::iterator p = _pollFdSet.begin(); p != _pollFdSet.end(); ++p) + { + if(p->fd == fd) + { + _pollFdSet.erase(p); + break; + } + } +#endif +} + +SOCKET +IceInternal::Selector::getNextSelected() +{ + assert(_nSelected > 0); + if(_nSelectedReturned == _nSelected) + { + return INVALID_SOCKET; + } + + // + // Round robin for the filedescriptors. + // + SOCKET largerFd = _maxFd + 1; + SOCKET smallestFd = _maxFd + 1; +#if defined(_WIN32) + if(_selectedReadFdSet.fd_count == 0 && _selectedWriteFdSet.fd_count == 0 && _selectedErrorFdSet.fd_count == 0) + { + Error out(_instance->initializationData().logger); + out << "select() in selector returned " << _nSelected << " but no filedescriptor is ready"; + return INVALID_SOCKET; + } + + const fd_set* fdSet; + if(_nSelectedReturned < _selectedReadFdSet.fd_count) + { + fdSet = &_selectedReadFdSet; + } + else if(_nSelectedReturned < _selectedWriteFdSet.fd_count + _selectedReadFdSet.fd_count) + { + fdSet = &_selectedWriteFdSet; + } + else + { + fdSet = &_selectedErrorFdSet; + } + + for(u_short i = 0; i < fdSet->fd_count; ++i) + { + SOCKET fd = fdSet->fd_array[i]; +#elif defined(ICE_USE_EPOLL) + for(unsigned int i = 0; i < _nSelected; ++i) + { + SOCKET fd = _events[i].data.fd; +#elif defined(__APPLE__) + for(unsigned int i = 0; i < _nSelected; ++i) + { + SOCKET fd = _events[i].ident; +#else + for(vector<struct pollfd>::const_iterator p = _pollFdSet.begin(); p != _pollFdSet.end(); ++p) + { + if(p->revents == 0) + { + continue; + } + SOCKET fd = p->fd; +#endif + assert(fd != INVALID_SOCKET); + if(fd > _lastFd) + { + largerFd = min(largerFd, fd); + } + + smallestFd = min(smallestFd, fd); + } +#ifdef never // To match ICE_USE_EPOLL __APPLE + }}} +#endif + + if(largerFd <= _maxFd) + { + _lastFd = largerFd; + } + else + { + assert(smallestFd <= _maxFd); + _lastFd = smallestFd; + } + ++_nSelectedReturned; + return _lastFd; +} + +int +IceInternal::Selector::select() +{ + while(true) + { + int ret; + _nSelectedReturned = 0; + _nSelected = 0; +#if defined(_WIN32) + fd_set* rFdSet = fdSetCopy(_selectedReadFdSet, _readFdSet); + fd_set* wFdSet = fdSetCopy(_selectedWriteFdSet, _writeFdSet); + fd_set* eFdSet = fdSetCopy(_selectedErrorFdSet, _errorFdSet); + + if(_timeout > 0) + { + struct timeval tv; + tv.tv_sec = _timeout; + tv.tv_usec = 0; + ret = ::select(0, rFdSet, wFdSet, eFdSet, &tv); // The first parameter is ignored on Windows + } + else + { + ret = ::select(0, rFdSet, wFdSet, eFdSet, 0); // The first parameter is ignored on Windows + } +#elif defined(ICE_USE_EPOLL) + ret = epoll_wait(_epollFd, &_events[0], _events.size(), _timeout > 0 ? _timeout * 1000 : -1); +#elif defined(__APPLE__) + assert(!_events.empty()); + if(_timeout > 0) + { + struct timespec ts; + ts.tv_sec = _timeout; + ts.tv_nsec = 0; + ret = kevent(_kqueueFd, 0, 0, &_events[0], _events.size(), &ts); + } + else + { + ret = kevent(_kqueueFd, 0, 0, &_events[0], _events.size(), 0); + } +#else + ret = poll(&_pollFdSet[0], _pollFdSet.size(), _timeout > 0 ? _timeout * 1000 : -1); +#endif + if(ret == SOCKET_ERROR) + { + if(interrupted()) + { + continue; + } + + SocketException ex(__FILE__, __LINE__); + ex.error = getSocketErrno(); + throw ex; + } + + assert(ret >= 0); + _nSelected = static_cast<unsigned int>(ret); + if(_nSelected == 0) + { + assert(_timeout > 0); + _timeout = 0; + } + return _nSelected; + } +} + +void +IceInternal::Selector::setInterrupt() +{ + char c = 0; + while(true) + { +#ifdef _WIN32 + if(::send(_fdIntrWrite, &c, 1, 0) == SOCKET_ERROR) +#else + if(::write(_fdIntrWrite, &c, 1) == SOCKET_ERROR) +#endif + { + if(interrupted()) + { + continue; + } + + SocketException ex(__FILE__, __LINE__); + ex.error = getSocketErrno(); + throw ex; + } + break; + } +} + +void +IceInternal::Selector::clearInterrupt() +{ + char c; + + while(true) + { + ssize_t ret; +#ifdef _WIN32 + ret = ::recv(_fdIntrRead, &c, 1, 0); +#else + ret = ::read(_fdIntrRead, &c, 1); +#endif + if(ret == SOCKET_ERROR) + { + if(interrupted()) + { + continue; + } + + SocketException ex(__FILE__, __LINE__); + ex.error = getSocketErrno(); + throw ex; + } + break; + } +} + +#ifdef _WIN32 +void +IceInternal::Selector::incFdsInUse() +{ + // This is windows specific since every other platform uses an API + // that doesn't have a specific FD limit. + if(_fdsInUse + 1 > FD_SETSIZE) + { + Warning warn(_instance->initializationData().logger); + warn << "maximum number of connections exceeded"; + + // + // No appropriate errno. + // + SocketException ex(__FILE__, __LINE__); + ex.error = 0; + throw ex; + } + ++_fdsInUse; +} +#endif + +#ifdef _WIN32 +void +IceInternal::Selector::decFdsInUse() +{ + // This is windows specific since every other platform uses an API + // that doesn't have a specific FD limit. + if(_fdsInUse <= 1) + { + Trace trace(_instance->initializationData().logger, "ThreadPool"); + trace << "selector: about to assert"; + } + --_fdsInUse; +} +#endif + diff --git a/cpp/src/Ice/Selector.h b/cpp/src/Ice/Selector.h new file mode 100644 index 00000000000..4d680f14302 --- /dev/null +++ b/cpp/src/Ice/Selector.h @@ -0,0 +1,137 @@ +// ********************************************************************** +// +// Copyright (c) 2003-2007 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_SELECTOR_H +#define ICE_SELECTOR_H + +#include <Ice/Config.h> +#include <Ice/InstanceF.h> + +#if defined(_WIN32) +# include <winsock2.h> +#else +# define SOCKET int +# if defined(ICE_USE_EPOLL) +# include <sys/epoll.h> +# elif defined(__APPLE__) +# include <sys/event.h> +# else +# include <sys/poll.h> +# endif +#endif + + +namespace IceInternal +{ + +enum SocketStatus +{ + Finished, + NeedConnect, + NeedRead, + NeedWrite +}; + +class Selector +{ +public: + + Selector(const InstancePtr&, int = 0); + ~Selector(); + + void add(SOCKET, SocketStatus); + void remove(SOCKET, SocketStatus); + + int select(); + SOCKET getNextSelected(); + + bool isInterrupted() + { + assert(_nSelected > 0); +#if defined(_WIN32) + return FD_ISSET(_fdIntrRead, &_selectedReadFdSet); +#elif defined(ICE_USE_EPOLL) + for(unsigned int i = 0; i < _nSelected; ++i) + { + if(_events[i].data.fd == _fdIntrRead) + { + return true; + } + } + return false; +#elif defined(__APPLE__) + for(unsigned int i = 0; i < _nSelected; ++i) + { + if(_events[i].ident == static_cast<unsigned int>(_fdIntrRead)) + { + return true; + } + } + return false; +#else + assert(_pollFdSet[0]->fd == _fdIntrRead); + return _pollFdSet[0]->revents != 0; +#endif + } + void setInterrupt(); + void clearInterrupt(); + + void updateMinMax(SOCKET minFd, SOCKET maxFd); + void clearMinMax(); + +#if defined(_WIN32) + void incFdsInUse(); + void decFdsInUse(); +#endif + +private: + + InstancePtr _instance; + int _timeout; + SOCKET _maxFd; + SOCKET _lastFd; + unsigned int _nSelected; + unsigned int _nSelectedReturned; + SOCKET _fdIntrRead; + SOCKET _fdIntrWrite; +#if defined(_WIN32) + fd_set _readFdSet; + fd_set _writeFdSet; + fd_set _errorFdSet; + fd_set _selectedReadFdSet; + fd_set _selectedWriteFdSet; + fd_set _selectedErrorFdSet; + int _fdsInUse; + + fd_set* + fdSetCopy(fd_set& dest, fd_set& src) + { + if(src.fd_count > 0) + { + dest.fd_count = src.fd_count; + memcpy(dest.fd_array, src.fd_array, sizeof(SOCKET) * src.fd_count); + return &dest; + } + return 0; + } + +#elif defined(ICE_USE_EPOLL) + int _epollFd; + std::vector<struct epoll_event> _events; +#elif defined(__APPLE__) + int _kqueueFd; + std::vector<struct kevent> _events; +#else + std::vector<struct pollfd> _pollFdSet; +#endif +}; + +} + +#endif diff --git a/cpp/src/Ice/SelectorThread.cpp b/cpp/src/Ice/SelectorThread.cpp new file mode 100644 index 00000000000..b0eb5007257 --- /dev/null +++ b/cpp/src/Ice/SelectorThread.cpp @@ -0,0 +1,309 @@ +// ********************************************************************** +// +// Copyright (c) 2003-2007 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/DisableWarnings.h> +#include <Ice/SelectorThread.h> +#include <Ice/Network.h> +#include <Ice/Instance.h> +#include <Ice/LoggerUtil.h> + +using namespace std; +using namespace Ice; +using namespace IceInternal; + +IceUtil::Shared* IceInternal::upCast(SelectorThread* p) { return p; } + +IceInternal::SelectorThread::SelectorThread(const InstancePtr& instance) : + _instance(instance), + _destroyed(false), + _selector(instance), + _timer(_instance->timer()) +{ + + __setNoDelete(true); + try + { + _thread = new HelperThread(this); + _thread->start(); + } + catch(const IceUtil::Exception& ex) + { + { + Error out(_instance->initializationData().logger); + out << "cannot create thread for selector thread:\n" << ex; + } + __setNoDelete(false); + throw; + } + catch(...) + { + __setNoDelete(false); + throw; + } + __setNoDelete(false); +} + +IceInternal::SelectorThread::~SelectorThread() +{ + assert(_destroyed); +} + +void +IceInternal::SelectorThread::destroy() +{ + IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this); + assert(!_destroyed); + _destroyed = true; + _selector.setInterrupt(); +} + +void +IceInternal::SelectorThread::incFdsInUse() +{ + // This is windows specific since every other platform uses an API + // that doesn't have a specific FD limit. +#ifdef _WIN32 + IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this); + assert(!_destroyed); + _selector.incFdsInUse(); +#endif +} + +void +IceInternal::SelectorThread::decFdsInUse() +{ + // This is windows specific since every other platform uses an API + // that doesn't have a specific FD limit. +#ifdef _WIN32 + IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this); + assert(!_destroyed); + _selector.decFdsInUse(); +#endif +} + +void +IceInternal::SelectorThread::_register(SOCKET fd, const SocketReadyCallbackPtr& cb, SocketStatus status, int timeout) +{ + IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this); + assert(!_destroyed); // The selector thread is destroyed after the incoming/outgoing connection factories. + assert(status != Finished); + SocketInfo info(fd, cb, status, timeout); + _changes.push_back(info); + if(info.timeout >= 0) + { + _timer->schedule(info.cb, IceUtil::Time::milliSeconds(info.timeout)); + } + _selector.setInterrupt(); +} + +void +IceInternal::SelectorThread::unregister(SOCKET fd) +{ + IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this); + assert(!_destroyed); // The selector thread is destroyed after the incoming/outgoing connection factories. + _changes.push_back(SocketInfo(fd, 0, Finished, 0)); + _selector.setInterrupt(); +} + +void +IceInternal::SelectorThread::joinWithThread() +{ + assert(_destroyed); + if(_thread) + { + _thread->getThreadControl().join(); + } +} + +void +IceInternal::SelectorThread::run() +{ + std::map<SOCKET, SocketInfo> socketMap; + vector<SocketInfo*> readyList; + vector<SocketInfo*> finishedList; + while(true) + { + try + { + _selector.select(); + } + catch(const Ice::LocalException& ex) + { + Error out(_instance->initializationData().logger); + out << "exception in selector thread:\n" << ex; + continue; + } + + assert(readyList.empty() && finishedList.empty()); + + { + if(_selector.isInterrupted()) + { + IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this); + + // + // There are two possiblities for an interrupt: + // + // 1. The selector thread has been destroyed. + // 2. A socket was registered or unregistered. + // + + // + // Thread destroyed? + // + if(_destroyed) + { + break; + } + + _selector.clearInterrupt(); + + SocketInfo& change = _changes.front(); + if(change.cb) // Registration + { + _selector.add(change.fd, change.status); + assert(socketMap.find(change.fd) == socketMap.end()); + socketMap.insert(make_pair(change.fd, change)); + _maxFd = max(_maxFd, change.fd); + _minFd = min(_minFd, change.fd); + } + else // Unregistration + { + map<SOCKET, SocketInfo>::iterator r = socketMap.find(change.fd); + if(r != socketMap.end() && r->second.status != Finished) + { + if(r->second.timeout >= 0) + { + _timer->cancel(r->second.cb); + } + assert(r->second.status != Finished); + _selector.remove(r->second.fd, r->second.status); + r->second.status = Finished; + readyList.push_back(&(r->second)); + } + } + _changes.pop_front(); + } + else + { + + // + // Examine the selection key set. + // + SOCKET fd; + while((fd = _selector.getNextSelected()) != INVALID_SOCKET) + { + map<SOCKET, SocketInfo>::iterator r = socketMap.find(fd); + if(r != socketMap.end()) + { + if(r->second.timeout >= 0) + { + _timer->cancel(r->second.cb); + } + + readyList.push_back(&(r->second)); + } + } + } + } + + for(vector<SocketInfo*>::iterator p = readyList.begin(); p != readyList.end(); ++p) + { + SocketInfo* info = *p; + SocketStatus status; + try + { + status = info->cb->socketReady(info->status == Finished); + } + catch(const std::exception& ex) + { + Error out(_instance->initializationData().logger); + out << "exception in selector thread while calling socketReady():\n" << ex.what(); + status = Finished; + } + catch(...) + { + Error out(_instance->initializationData().logger); + out << "unknown exception in selector thread while calling socketReady()"; + status = Finished; + } + + if(status == Finished) + { + finishedList.push_back(info); + } + else if(status != info->status) + { + assert(info->status != Finished); + _selector.remove(info->fd, info->status); + info->status = status; + _selector.add(info->fd, info->status); + if(info->timeout >= 0) + { + _timer->schedule(info->cb, IceUtil::Time::milliSeconds(info->timeout)); + } + } + } + + readyList.clear(); + + if(finishedList.empty()) + { + continue; + } + + for(vector<SocketInfo*>::const_iterator p = finishedList.begin(); p != finishedList.end(); ++p) + { + if((*p)->status != Finished) + { + _selector.remove((*p)->fd, (*p)->status); + } + socketMap.erase((*p)->fd); + } + finishedList.clear(); + } + + assert(_destroyed); +} + +IceInternal::SelectorThread::HelperThread::HelperThread(const SelectorThreadPtr& selectorThread) : + _selectorThread(selectorThread) +{ +} + +void +IceInternal::SelectorThread::HelperThread::run() +{ + if(_selectorThread->_instance->initializationData().threadHook) + { + _selectorThread->_instance->initializationData().threadHook->start(); + } + + try + { + _selectorThread->run(); + } + catch(const std::exception& ex) + { + Error out(_selectorThread->_instance->initializationData().logger); + out << "exception in selector thread:\n" << ex.what(); + } + catch(...) + { + Error out(_selectorThread->_instance->initializationData().logger); + out << "unknown exception in selector thread"; + } + + if(_selectorThread->_instance->initializationData().threadHook) + { + _selectorThread->_instance->initializationData().threadHook->stop(); + } + + _selectorThread = 0; // Break cyclic dependency. +} diff --git a/cpp/src/Ice/SelectorThread.h b/cpp/src/Ice/SelectorThread.h new file mode 100644 index 00000000000..ccf5423984e --- /dev/null +++ b/cpp/src/Ice/SelectorThread.h @@ -0,0 +1,137 @@ +// ********************************************************************** +// +// Copyright (c) 2003-2007 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_SELECTOR_THREAD_H +#define ICE_SELECTOR_THREAD_H + +#include <IceUtil/Shared.h> +#include <IceUtil/Handle.h> +#include <IceUtil/Mutex.h> +#include <IceUtil/Monitor.h> +#include <IceUtil/Thread.h> +#include <IceUtil/Timer.h> + +#include <Ice/Config.h> +#include <Ice/SelectorThreadF.h> +#include <Ice/InstanceF.h> +#include <Ice/Selector.h> + +#if defined(_WIN32) +# include <winsock2.h> +#else +# define SOCKET int +# if defined(ICE_USE_EPOLL) +# include <sys/epoll.h> +# elif defined(__APPLE__) +# include <sys/event.h> +# else +# include <sys/poll.h> +# endif +#endif + +#include <deque> + +namespace IceInternal +{ + +class SocketReadyCallback : public IceUtil::TimerTask +{ +public: + + // + // The selector thread unregisters the callback when socketReady returns SocketStatus.Finished. + // + virtual SocketStatus socketReady(bool) = 0; + + // + // The selector thread doesn't unregister the callback when sockectTimeout is called; socketTimeout + // must unregister the callback either explicitly with unregister() or by shutting down the socket + // (if necessary). + // + virtual void socketTimeout() = 0; + +private: + + void + runTimerTask() + { + this->socketTimeout(); + } + + friend class SelectorThread; +}; +typedef IceUtil::Handle<SocketReadyCallback> SocketReadyCallbackPtr; + +class SelectorThread : public IceUtil::Shared, public IceUtil::Monitor<IceUtil::Mutex> +{ +public: + + SelectorThread(const InstancePtr&); + virtual ~SelectorThread(); + + void destroy(); + + void incFdsInUse(); + void decFdsInUse(); + + void _register(SOCKET, const SocketReadyCallbackPtr&, SocketStatus status, int timeout); + void unregister(SOCKET); + void joinWithThread(); + +private: + + void run(); + + struct SocketInfo + { + SOCKET fd; + SocketReadyCallbackPtr cb; + SocketStatus status; + int timeout; + + SocketInfo(SOCKET fd, const SocketReadyCallbackPtr& cb, SocketStatus status, int timeout) + { + this->fd = fd; + this->cb = cb; + this->status = status; + this->timeout = timeout; + } + }; + + class HelperThread : public IceUtil::Thread + { + public: + + HelperThread(const SelectorThreadPtr&); + virtual void run(); + + private: + + SelectorThreadPtr _selectorThread; + }; + friend class HelperThread; + + InstancePtr _instance; + bool _destroyed; + + SOCKET _maxFd; + SOCKET _minFd; + SOCKET _fdIntrRead; + SOCKET _fdIntrWrite; + Selector _selector; + + std::deque<SocketInfo> _changes; + + IceUtil::ThreadPtr _thread; + IceUtil::TimerPtr _timer; +}; + +} + +#endif diff --git a/cpp/src/Ice/SelectorThreadF.h b/cpp/src/Ice/SelectorThreadF.h new file mode 100644 index 00000000000..1e80b87a8b0 --- /dev/null +++ b/cpp/src/Ice/SelectorThreadF.h @@ -0,0 +1,26 @@ +// ********************************************************************** +// +// Copyright (c) 2003-2007 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_SELECTOR_THREAD_F_H +#define ICE_SELECTOR_THREAD_F_H + +#include <IceUtil/Shared.h> + +#include <Ice/Handle.h> + +namespace IceInternal +{ + +class SelectorThread; +IceUtil::Shared* upCast(SelectorThread*); +typedef Handle<SelectorThread> SelectorThreadPtr; + +} + +#endif diff --git a/cpp/src/Ice/TcpAcceptor.cpp b/cpp/src/Ice/TcpAcceptor.cpp index fd233738286..baa93aa594a 100644 --- a/cpp/src/Ice/TcpAcceptor.cpp +++ b/cpp/src/Ice/TcpAcceptor.cpp @@ -72,7 +72,7 @@ IceInternal::TcpAcceptor::accept(int timeout) out << "accepted tcp connection\n" << fdToString(fd); } - return new TcpTransceiver(_instance, fd); + return new TcpTransceiver(_instance, fd, true); } void diff --git a/cpp/src/Ice/TcpConnector.cpp b/cpp/src/Ice/TcpConnector.cpp index 5979914fedd..a4394598ba9 100644 --- a/cpp/src/Ice/TcpConnector.cpp +++ b/cpp/src/Ice/TcpConnector.cpp @@ -32,15 +32,16 @@ IceInternal::TcpConnector::connect(int timeout) SOCKET fd = createSocket(false); setBlock(fd, false); setTcpBufSize(fd, _instance->initializationData().properties, _logger); - doConnect(fd, _addr, timeout); - - if(_traceLevels->network >= 1) + bool connected = doConnect(fd, _addr, timeout); + if(connected) { - Trace out(_logger, _traceLevels->networkCat); - out << "tcp connection established\n" << fdToString(fd); + if(_traceLevels->network >= 1) + { + Trace out(_logger, _traceLevels->networkCat); + out << "tcp connection established\n" << fdToString(fd); + } } - - return new TcpTransceiver(_instance, fd); + return new TcpTransceiver(_instance, fd, connected); } Short @@ -118,21 +119,6 @@ IceInternal::TcpConnector::operator<(const Connector& r) const return compareAddress(_addr, p->_addr) == -1; } -bool -IceInternal::TcpConnector::equivalent(const string& host, int port) const -{ - struct sockaddr_in addr; - try - { - getAddress(host, port, addr); - } - catch(const DNSException&) - { - return false; - } - return compareAddress(addr, _addr) == 0; -} - IceInternal::TcpConnector::TcpConnector(const InstancePtr& instance, const struct sockaddr_in& addr, Ice::Int timeout, const string& connectionId) : _instance(instance), diff --git a/cpp/src/Ice/TcpConnector.h b/cpp/src/Ice/TcpConnector.h index ae0bc1a72a8..2147f30cccc 100644 --- a/cpp/src/Ice/TcpConnector.h +++ b/cpp/src/Ice/TcpConnector.h @@ -16,8 +16,8 @@ #include <Ice/LoggerF.h> #include <Ice/Connector.h> -#ifdef _WIN32
-# include <winsock2.h>
+#ifdef _WIN32 +# include <winsock2.h> #else # include <netinet/in.h> // For struct sockaddr_in #endif @@ -30,6 +30,7 @@ class TcpConnector : public Connector public: virtual TransceiverPtr connect(int); + virtual Ice::Short type() const; virtual std::string toString() const; @@ -37,8 +38,6 @@ public: virtual bool operator!=(const Connector&) const; virtual bool operator<(const Connector&) const; - bool equivalent(const std::string&, int) const; - private: TcpConnector(const InstancePtr&, const struct sockaddr_in&, Ice::Int, const std::string&); diff --git a/cpp/src/Ice/TcpEndpointI.cpp b/cpp/src/Ice/TcpEndpointI.cpp index 073ece450a4..0cab29774ad 100644 --- a/cpp/src/Ice/TcpEndpointI.cpp +++ b/cpp/src/Ice/TcpEndpointI.cpp @@ -292,13 +292,13 @@ IceInternal::TcpEndpointI::transceiver(EndpointIPtr& endp) const vector<ConnectorPtr> IceInternal::TcpEndpointI::connectors() const { - vector<ConnectorPtr> connectors; - vector<struct sockaddr_in> addresses = getAddresses(_host, _port); - for(unsigned int i = 0; i < addresses.size(); ++i) - { - connectors.push_back(new TcpConnector(_instance, addresses[i], _timeout, _connectionId)); - } - return connectors; + return connectors(getAddresses(_host, _port)); +} + +void +IceInternal::TcpEndpointI::connectors_async(const EndpointI_connectorsPtr& callback) const +{ + _instance->endpointHostResolver()->resolve(_host, _port, const_cast<TcpEndpointI*>(this), callback); } AcceptorPtr @@ -333,14 +333,14 @@ IceInternal::TcpEndpointI::expand() const } bool -IceInternal::TcpEndpointI::equivalent(const ConnectorPtr& connector) const +IceInternal::TcpEndpointI::equivalent(const EndpointIPtr& endpoint) const { - const TcpConnector* tcpConnector = dynamic_cast<const TcpConnector*>(connector.get()); - if(!tcpConnector) + const TcpEndpointI* tcpEndpointI = dynamic_cast<const TcpEndpointI*>(endpoint.get()); + if(!tcpEndpointI) { return false; } - return tcpConnector->equivalent(_host, _port); + return tcpEndpointI->_host == _host && tcpEndpointI->_port == _port; } bool @@ -453,6 +453,17 @@ IceInternal::TcpEndpointI::operator<(const EndpointI& r) const return false; } +vector<ConnectorPtr> +IceInternal::TcpEndpointI::connectors(const vector<struct sockaddr_in>& addresses) const +{ + vector<ConnectorPtr> connectors; + for(unsigned int i = 0; i < addresses.size(); ++i) + { + connectors.push_back(new TcpConnector(_instance, addresses[i], _timeout, _connectionId)); + } + return connectors; +} + IceInternal::TcpEndpointFactory::TcpEndpointFactory(const InstancePtr& instance) : _instance(instance) { diff --git a/cpp/src/Ice/TcpEndpointI.h b/cpp/src/Ice/TcpEndpointI.h index 7ea83d790d9..361d7150de8 100644 --- a/cpp/src/Ice/TcpEndpointI.h +++ b/cpp/src/Ice/TcpEndpointI.h @@ -39,9 +39,10 @@ public: virtual bool unknown() const; virtual TransceiverPtr transceiver(EndpointIPtr&) const; virtual std::vector<ConnectorPtr> connectors() const; + virtual void connectors_async(const EndpointI_connectorsPtr&) const; virtual AcceptorPtr acceptor(EndpointIPtr&, const std::string&) const; virtual std::vector<EndpointIPtr> expand() const; - virtual bool equivalent(const ConnectorPtr&) const; + virtual bool equivalent(const EndpointIPtr&) const; virtual bool operator==(const EndpointI&) const; virtual bool operator!=(const EndpointI&) const; @@ -49,6 +50,8 @@ public: private: + virtual std::vector<ConnectorPtr> connectors(const std::vector<struct sockaddr_in>&) const; + #if defined(__SUNPRO_CC) // // COMPILERFIX: prevent the compiler from emitting a warning about diff --git a/cpp/src/Ice/TcpTransceiver.cpp b/cpp/src/Ice/TcpTransceiver.cpp index 200778293c6..09f54e846fa 100644 --- a/cpp/src/Ice/TcpTransceiver.cpp +++ b/cpp/src/Ice/TcpTransceiver.cpp @@ -52,6 +52,11 @@ IceInternal::TcpTransceiver::close() void IceInternal::TcpTransceiver::shutdownWrite() { + if(_state < StateConnected) + { + return; + } + if(_traceLevels->network >= 2) { Trace out(_logger, _traceLevels->networkCat); @@ -65,6 +70,11 @@ IceInternal::TcpTransceiver::shutdownWrite() void IceInternal::TcpTransceiver::shutdownReadWrite() { + if(_state < StateConnected) + { + return; + } + if(_traceLevels->network >= 2) { Trace out(_logger, _traceLevels->networkCat); @@ -75,7 +85,7 @@ IceInternal::TcpTransceiver::shutdownReadWrite() shutdownSocketReadWrite(_fd); } -void +bool IceInternal::TcpTransceiver::write(Buffer& buf, int timeout) { // Its impossible for the packetSize to be more than an Int. @@ -118,6 +128,11 @@ IceInternal::TcpTransceiver::write(Buffer& buf, int timeout) if(wouldBlock()) { + if(timeout == 0) + { + return false; + } + repeatSelect: int rs; @@ -194,9 +209,11 @@ IceInternal::TcpTransceiver::write(Buffer& buf, int timeout) packetSize = static_cast<int>(buf.b.end() - buf.i); } } + + return true; } -void +bool IceInternal::TcpTransceiver::read(Buffer& buf, int timeout) { // Its impossible for the packetSize to be more than an Int. @@ -240,6 +257,11 @@ IceInternal::TcpTransceiver::read(Buffer& buf, int timeout) if(wouldBlock()) { + if(timeout == 0) + { + return false; + } + repeatSelect: int rs; @@ -324,6 +346,8 @@ IceInternal::TcpTransceiver::read(Buffer& buf, int timeout) packetSize = static_cast<int>(buf.b.end() - buf.i); } } + + return true; } string @@ -338,9 +362,27 @@ IceInternal::TcpTransceiver::toString() const return _desc; } -void -IceInternal::TcpTransceiver::initialize(int) +SocketStatus +IceInternal::TcpTransceiver::initialize(int timeout) { + if(_state == StateNeedConnect && timeout == 0) + { + _state = StateConnectPending; + return NeedConnect; + } + else if(_state <= StateConnectPending) + { + doFinishConnect(_fd, timeout); + _state = StateConnected; + _desc = fdToString(_fd); + if(_traceLevels->network >= 1) + { + Trace out(_logger, _traceLevels->networkCat); + out << "tcp connection established\n" << _desc; + } + } + assert(_state == StateConnected); + return Finished; } void @@ -352,12 +394,13 @@ IceInternal::TcpTransceiver::checkSendSize(const Buffer& buf, size_t messageSize } } -IceInternal::TcpTransceiver::TcpTransceiver(const InstancePtr& instance, SOCKET fd) : +IceInternal::TcpTransceiver::TcpTransceiver(const InstancePtr& instance, SOCKET fd, bool connected) : _traceLevels(instance->traceLevels()), _logger(instance->initializationData().logger), _stats(instance->initializationData().stats), _fd(fd), - _desc(fdToString(fd)) + _state(connected ? StateConnected : StateNeedConnect), + _desc(fdToString(_fd)) { FD_ZERO(&_rFdSet); FD_ZERO(&_wFdSet); diff --git a/cpp/src/Ice/TcpTransceiver.h b/cpp/src/Ice/TcpTransceiver.h index fe4f78d1724..e86464df408 100644 --- a/cpp/src/Ice/TcpTransceiver.h +++ b/cpp/src/Ice/TcpTransceiver.h @@ -24,22 +24,29 @@ class TcpAcceptor; class TcpTransceiver : public Transceiver { + enum State + { + StateNeedConnect, + StateConnectPending, + StateConnected + }; + public: virtual SOCKET fd(); virtual void close(); virtual void shutdownWrite(); virtual void shutdownReadWrite(); - virtual void write(Buffer&, int); - virtual void read(Buffer&, int); + virtual bool write(Buffer&, int); + virtual bool read(Buffer&, int); virtual std::string type() const; virtual std::string toString() const; - virtual void initialize(int); + virtual SocketStatus initialize(int); virtual void checkSendSize(const Buffer&, size_t); private: - TcpTransceiver(const InstancePtr&, SOCKET); + TcpTransceiver(const InstancePtr&, SOCKET, bool); virtual ~TcpTransceiver(); friend class TcpConnector; friend class TcpAcceptor; @@ -51,8 +58,8 @@ private: SOCKET _fd; fd_set _rFdSet; fd_set _wFdSet; - - const std::string _desc; + State _state; + std::string _desc; #ifdef _WIN32 int _maxPacketSize; #endif diff --git a/cpp/src/Ice/ThreadPool.cpp b/cpp/src/Ice/ThreadPool.cpp index 9d2cd3bff6a..3f192fe2e7e 100644 --- a/cpp/src/Ice/ThreadPool.cpp +++ b/cpp/src/Ice/ThreadPool.cpp @@ -29,8 +29,7 @@ IceInternal::ThreadPool::ThreadPool(const InstancePtr& instance, const string& p _instance(instance), _destroyed(false), _prefix(prefix), - _lastFd(INVALID_SOCKET), - _timeout(timeout), + _selector(instance, timeout), _size(0), _sizeMax(0), _sizeWarn(0), @@ -41,59 +40,6 @@ IceInternal::ThreadPool::ThreadPool(const InstancePtr& instance, const string& p _promote(true), _warnUdp(_instance->initializationData().properties->getPropertyAsInt("Ice.Warn.Datagrams") > 0) { - SOCKET fds[2]; - createPipe(fds); - _fdIntrRead = fds[0]; - _fdIntrWrite = fds[1]; - setBlock(_fdIntrRead, false); - _maxFd = _fdIntrRead; - _minFd = _fdIntrRead; - -#if defined(_WIN32) - _fdsInUse = 1; // _fdIntrRead is always in use. - FD_ZERO(&_fdSet); - FD_SET(_fdIntrRead, &_fdSet); -#elif defined(ICE_USE_EPOLL) - _epollFd = epoll_create(1); - if(_epollFd < 0) - { - SocketException ex(__FILE__, __LINE__); - ex.error = getSocketErrno(); - throw ex; - } - _events.resize(1); - struct epoll_event event; - event.events = EPOLLIN; - event.data.fd = _fdIntrRead; - if(epoll_ctl(_epollFd, EPOLL_CTL_ADD, _fdIntrRead, &event) != 0) - { - SocketException ex(__FILE__, __LINE__); - ex.error = getSocketErrno(); - throw ex; - } -#elif defined(__APPLE__) - _kqueueFd = kqueue(); - if(_kqueueFd < 0) - { - SocketException ex(__FILE__, __LINE__); - ex.error = getSocketErrno(); - throw ex; - } - _events.resize(1); - struct kevent event; - EV_SET(&event, _fdIntrRead, EVFILT_READ, EV_ADD, 0, 0, 0); - if(kevent(_kqueueFd, &event, 1, 0, 0, 0) < 0) - { - SocketException ex(__FILE__, __LINE__); - ex.error = getSocketErrno(); - throw ex; - } -#else - _pollFdSet.resize(1); - _pollFdSet[0].fd = _fdIntrRead; - _pollFdSet[0].events = POLLIN; -#endif - // // We use just one thread as the default. This is the fastest // possible setting, still allows one level of nesting, and @@ -172,48 +118,6 @@ IceInternal::ThreadPool::ThreadPool(const InstancePtr& instance, const string& p IceInternal::ThreadPool::~ThreadPool() { assert(_destroyed); - - try - { - closeSocket(_fdIntrWrite); - } - catch(const LocalException& ex) - { - Error out(_instance->initializationData().logger); - out << "exception in `" << _prefix << "' while calling closeSocket():\n" << ex; - } - - try - { - closeSocket(_fdIntrRead); - } - catch(const LocalException& ex) - { - Error out(_instance->initializationData().logger); - out << "exception in `" << _prefix << "' while calling closeSocket():\n" << ex; - } - -#if defined(ICE_USE_EPOLL) - try - { - closeSocket(_epollFd); - } - catch(const LocalException& ex) - { - Error out(_instance->initializationData().logger); - out << "exception in `" << _prefix << "' while calling closeSocket():\n" << ex; - } -#elif defined(__APPLE__) - try - { - closeSocket(_kqueueFd); - } - catch(const LocalException& ex) - { - Error out(_instance->initializationData().logger); - out << "exception in `" << _prefix << "' while calling closeSocket():\n" << ex; - } -#endif } void @@ -223,8 +127,9 @@ IceInternal::ThreadPool::destroy() assert(!_destroyed); assert(_handlerMap.empty()); assert(_changes.empty()); + assert(_workItems.empty()); _destroyed = true; - setInterrupt(); + _selector.setInterrupt(); } void @@ -234,20 +139,7 @@ IceInternal::ThreadPool::incFdsInUse() // that doesn't have a specific FD limit. #ifdef _WIN32 IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this); - assert(!_destroyed); - if(_fdsInUse + 1 > FD_SETSIZE) - { - Warning warn(_instance->initializationData().logger); - warn << "maximum number of connections exceeded"; - - // - // No appropriate errno. - // - SocketException ex(__FILE__, __LINE__); - ex.error = 0; - throw ex; - } - ++_fdsInUse; + _selector.incFdsInUse(); #endif } @@ -258,14 +150,7 @@ IceInternal::ThreadPool::decFdsInUse() // that doesn't have a specific FD limit. #ifdef _WIN32 IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this); - assert(!_destroyed); - if(_fdsInUse <= 1) - { - Trace trace(_instance->initializationData().logger, "ThreadPool"); - trace << _prefix << ": about to assert"; - } - assert(_fdsInUse > 1); // _fdIntrRead is always in use. - --_fdsInUse; + _selector.decFdsInUse(); #endif } @@ -275,7 +160,7 @@ IceInternal::ThreadPool::_register(SOCKET fd, const EventHandlerPtr& handler) IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this); assert(!_destroyed); _changes.push_back(make_pair(fd, handler)); - setInterrupt(); + _selector.setInterrupt(); } void @@ -284,7 +169,16 @@ IceInternal::ThreadPool::unregister(SOCKET fd) IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this); assert(!_destroyed); _changes.push_back(make_pair(fd, EventHandlerPtr(0))); - setInterrupt(); + _selector.setInterrupt(); +} + +void +IceInternal::ThreadPool::execute(const ThreadPoolWorkItemPtr& workItem) +{ + IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this); + assert(!_destroyed); + _workItems.push_back(workItem); + _selector.setInterrupt(); } void @@ -352,74 +246,6 @@ IceInternal::ThreadPool::prefix() const return _prefix; } -void -IceInternal::ThreadPool::clearInterrupt() -{ - char c; - -repeat: - -#ifdef _WIN32 - if(::recv(_fdIntrRead, &c, 1, 0) == SOCKET_ERROR) - { - if(interrupted()) - { - goto repeat; - } - - SocketException ex(__FILE__, __LINE__); - ex.error = getSocketErrno(); - throw ex; - } -#else - if(::read(_fdIntrRead, &c, 1) == -1) - { - if(interrupted()) - { - goto repeat; - } - - SyscallException ex(__FILE__, __LINE__); - ex.error = getSystemErrno(); - throw ex; - } -#endif -} - -void -IceInternal::ThreadPool::setInterrupt() -{ - char c = 0; - -repeat: - -#ifdef _WIN32 - if(::send(_fdIntrWrite, &c, 1, 0) == SOCKET_ERROR) - { - if(interrupted()) - { - goto repeat; - } - - SocketException ex(__FILE__, __LINE__); - ex.error = getSocketErrno(); - throw ex; - } -#else - if(::write(_fdIntrWrite, &c, 1) == -1) - { - if(interrupted()) - { - goto repeat; - } - - SyscallException ex(__FILE__, __LINE__); - ex.error = getSystemErrno(); - throw ex; - } -#endif -} - bool IceInternal::ThreadPool::run() { @@ -440,54 +266,19 @@ IceInternal::ThreadPool::run() while(true) { int ret; -#if defined(_WIN32) - fd_set fdSet; - memcpy(&fdSet, &_fdSet, sizeof(fd_set)); - if(_timeout > 0) - { - struct timeval tv; - tv.tv_sec = _timeout; - tv.tv_usec = 0; - ret = ::select(static_cast<int>(_maxFd + 1), &fdSet, 0, 0, &tv); - } - else - { - ret = ::select(static_cast<int>(_maxFd + 1), &fdSet, 0, 0, 0); - } -#elif defined(ICE_USE_EPOLL) - ret = epoll_wait(_epollFd, &_events[0], _events.size(), _timeout > 0 ? _timeout * 1000 : -1); -#elif defined(__APPLE__) - if(_timeout > 0) + try { - struct timespec ts; - ts.tv_sec = _timeout; - ts.tv_nsec = 0; - ret = kevent(_kqueueFd, 0, 0, &_events[0], _events.size(), &ts); + ret = _selector.select(); } - else + catch(const Ice::LocalException& ex) { - ret = kevent(_kqueueFd, 0, 0, &_events[0], _events.size(), 0); - } -#else - ret = poll(&_pollFdSet[0], _pollFdSet.size(), _timeout > 0 ? _timeout * 1000 : -1); -#endif - - if(ret == SOCKET_ERROR) - { - if(interrupted()) - { - continue; - } - - SocketException ex(__FILE__, __LINE__); - ex.error = getSocketErrno(); - //throw ex; Error out(_instance->initializationData().logger); out << "exception in `" << _prefix << "':\n" << ex; continue; } - + EventHandlerPtr handler; + ThreadPoolWorkItemPtr workItem; bool finished = false; bool shutdown = false; @@ -496,38 +287,11 @@ IceInternal::ThreadPool::run() if(ret == 0) // We initiate a shutdown if there is a thread pool timeout. { - assert(_timeout > 0); - _timeout = 0; shutdown = true; } else { - bool interrupted = false; -#if defined(_WIN32) - interrupted = FD_ISSET(_fdIntrRead, &fdSet); -#elif defined(ICE_USE_EPOLL) - for(int i = 0; i < ret; ++i) - { - if(_events[i].data.fd == _fdIntrRead) - { - interrupted = true; - break; - } - } -#elif defined(__APPLE__) - for(int i = 0; i < ret; ++i) - { - if(_events[i].ident == static_cast<unsigned int>(_fdIntrRead)) - { - interrupted = true; - break; - } - } -#else - assert(_pollFdSet[0].fd == _fdIntrRead); - interrupted = _pollFdSet[0].revents != 0; -#endif - if(interrupted) + if(_selector.isInterrupted()) { // // There are two possiblities for an interrupt: @@ -536,7 +300,9 @@ IceInternal::ThreadPool::run() // // 2. An event handler was registered or unregistered. // - + // 3. A work item has been schedulded. + // + // // Thread pool destroyed? // @@ -549,169 +315,52 @@ IceInternal::ThreadPool::run() return true; } - clearInterrupt(); + _selector.clearInterrupt(); // // An event handler must have been registered or // unregistered. // - assert(!_changes.empty()); - pair<SOCKET, EventHandlerPtr> change = _changes.front(); - _changes.pop_front(); - - if(change.second) // Addition if handler is set. + if(_changes.empty()) { - _handlerMap.insert(change); -#if defined(_WIN32) - FD_SET(change.first, &_fdSet); -#elif defined(ICE_USE_EPOLL) - epoll_event event; - event.events = EPOLLIN; - event.data.fd = change.first; - if(epoll_ctl(_epollFd, EPOLL_CTL_ADD, change.first, &event) != 0) - { - Error out(_instance->initializationData().logger); - out << "error while adding filedescriptor to epoll set:\n"; - out << errorToString(getSocketErrno()); - continue; - } - _events.resize(_handlerMap.size() + 1); -#elif defined(__APPLE__) - struct kevent event; - EV_SET(&event, change.first, EVFILT_READ, EV_ADD, 0, 0, 0); - if(kevent(_kqueueFd, &event, 1, 0, 0, 0) < 0) - { - Error out(_instance->initializationData().logger); - out << "error while adding filedescriptor to kqueue:\n"; - out << errorToString(getSocketErrno()); - continue; - } - _events.resize(_handlerMap.size() + 1); -#else - struct pollfd pollFd; - pollFd.fd = change.first; - pollFd.events = POLLIN; - _pollFdSet.push_back(pollFd); -#endif - _maxFd = max(_maxFd, change.first); - _minFd = min(_minFd, change.first); - continue; + assert(!_workItems.empty()); + workItem = _workItems.front(); + _workItems.pop_front(); } - else // Removal if handler is not set. + else { - map<SOCKET, EventHandlerPtr>::iterator p = _handlerMap.find(change.first); - assert(p != _handlerMap.end()); - handler = p->second; - finished = true; - _handlerMap.erase(p); -#if defined(_WIN32) - FD_CLR(change.first, &_fdSet); -#elif defined(ICE_USE_EPOLL) - epoll_event event; - event.events = 0; - if(epoll_ctl(_epollFd, EPOLL_CTL_DEL, change.first, &event) != 0) + assert(!_changes.empty()); + pair<SOCKET, EventHandlerPtr> change = _changes.front(); + _changes.pop_front(); + + if(change.second) // Addition if handler is set. { - Error out(_instance->initializationData().logger); - out << "error while adding filedescriptor from epoll set:\n"; - out << errorToString(getSocketErrno()); + _handlerMap.insert(change); + _selector.add(change.first, NeedRead); continue; } - _events.resize(_handlerMap.size() + 1); -#elif defined(__APPLE__) - struct kevent event; - EV_SET(&event, change.first, EVFILT_READ, EV_DELETE, 0, 0, 0); - if(kevent(_kqueueFd, &event, 1, 0, 0, 0) < 0) - { - Error out(_instance->initializationData().logger); - out << "error while removing filedescriptor from kqueue:\n"; - out << errorToString(getSocketErrno()); - continue; - } - _events.resize(_handlerMap.size() + 1); -#else - for(vector<struct pollfd>::iterator p = _pollFdSet.begin(); p != _pollFdSet.end(); ++p) - { - if(p->fd == change.first) - { - _pollFdSet.erase(p); - break; - } - } -#endif - _maxFd = _fdIntrRead; - _minFd = _fdIntrRead; - if(!_handlerMap.empty()) + else // Removal if handler is not set. { - _maxFd = max(_maxFd, (--_handlerMap.end())->first); - _minFd = min(_minFd, _handlerMap.begin()->first); + map<SOCKET, EventHandlerPtr>::iterator p = _handlerMap.find(change.first); + assert(p != _handlerMap.end()); + handler = p->second; + finished = true; + _handlerMap.erase(p); + _selector.remove(change.first, NeedRead); + // Don't continue; we have to call + // finished() on the event handler below, outside + // the thread synchronization. } - // Don't continue; we have to call - // finished() on the event handler below, outside - // the thread synchronization. } } else { - // - // Round robin for the filedescriptors. - // - SOCKET largerFd = _maxFd + 1; - SOCKET smallestFd = _maxFd + 1; -#if defined(_WIN32) - if(fdSet.fd_count == 0) - { - Error out(_instance->initializationData().logger); - out << "select() in `" << _prefix << "' returned " << ret - << " but no filedescriptor is readable"; - continue; - } - for(u_short i = 0; i < fdSet.fd_count; ++i) - { - SOCKET fd = fdSet.fd_array[i]; -#elif defined(ICE_USE_EPOLL) - for(int i = 0; i < ret; ++i) - { - SOCKET fd = _events[i].data.fd; -#elif defined(__APPLE__) - for(int i = 0; i < ret; ++i) - { - SOCKET fd = _events[i].ident; -#else - for(vector<struct pollfd>::const_iterator p = _pollFdSet.begin(); p != _pollFdSet.end(); ++p) - { - if(p->revents == 0) - { - continue; - } - SOCKET fd = p->fd; -#endif - assert(fd != INVALID_SOCKET); - if(fd > _lastFd || _lastFd == INVALID_SOCKET) - { - largerFd = min(largerFd, fd); - } - - smallestFd = min(smallestFd, fd); - } -#ifdef never // To match ICE_USE_EPOLL __APPLE - }}} -#endif - if(largerFd <= _maxFd) - { - assert(largerFd >= _minFd); - _lastFd = largerFd; - } - else - { - assert(smallestFd >= _minFd && smallestFd <= _maxFd); - _lastFd = smallestFd; - } - assert(_lastFd != _fdIntrRead); - map<SOCKET, EventHandlerPtr>::iterator p = _handlerMap.find(_lastFd); + SOCKET fd = _selector.getNextSelected(); + map<SOCKET, EventHandlerPtr>::iterator p = _handlerMap.find(fd); if(p == _handlerMap.end()) { Error out(_instance->initializationData().logger); - out << "filedescriptor " << _lastFd << " not registered with `" << _prefix << "'"; + out << "filedescriptor " << fd << " not registered with `" << _prefix << "'"; continue; } @@ -747,6 +396,29 @@ IceInternal::ThreadPool::run() // promoteFollower(). // } + else if(workItem) + { + try + { + // + // "self" is faster than "this", as the reference + // count is not modified. + // + workItem->execute(self); + } + catch(const LocalException& ex) + { + Error out(_instance->initializationData().logger); + out << "exception in `" << _prefix << "' while calling execute():\n" << ex; + } + + // + // No "continue", because we want execute() to be + // called in its own thread from this pool. Note that + // this means that execute() must call + // promoteFollower(). + // + } else { assert(handler); @@ -790,10 +462,14 @@ IceInternal::ThreadPool::run() { try { - read(handler); + if(!read(handler)) + { + continue; // Can't read without blocking. + } } - catch(const TimeoutException&) // Expected. + catch(const TimeoutException&) { + assert(false); // This shouldn't occur as we only perform non-blocking reads. continue; } catch(const DatagramLimitException&) // Expected. @@ -809,8 +485,7 @@ IceInternal::ThreadPool::run() { if(handler->datagram()) { - if(_instance->initializationData().properties-> - getPropertyAsInt("Ice.Warn.Connections") > 0) + if(_instance->initializationData().properties->getPropertyAsInt("Ice.Warn.Connections") > 0) { Warning out(_instance->initializationData().logger); out << "datagram connection exception:\n" << ex << '\n' << handler->toString(); @@ -939,7 +614,7 @@ IceInternal::ThreadPool::run() } } -void +bool IceInternal::ThreadPool::read(const EventHandlerPtr& handler) { BasicStream& stream = handler->_stream; @@ -952,7 +627,10 @@ IceInternal::ThreadPool::read(const EventHandlerPtr& handler) if(stream.i != stream.b.end()) { - handler->read(stream); + if(!handler->read(stream)) + { + return false; + } assert(stream.i == stream.b.end()); } @@ -1036,10 +714,15 @@ IceInternal::ThreadPool::read(const EventHandlerPtr& handler) } else { - handler->read(stream); + if(!handler->read(stream)) + { + return false; + } assert(stream.i == stream.b.end()); } } + + return true; } IceInternal::ThreadPool::EventHandlerThread::EventHandlerThread(const ThreadPoolPtr& pool) : diff --git a/cpp/src/Ice/ThreadPool.h b/cpp/src/Ice/ThreadPool.h index 7f7aae48e19..9e520d60ec9 100644 --- a/cpp/src/Ice/ThreadPool.h +++ b/cpp/src/Ice/ThreadPool.h @@ -15,31 +15,15 @@ #include <IceUtil/Monitor.h> #include <IceUtil/Thread.h> +#include <Ice/Config.h> #include <Ice/ThreadPoolF.h> #include <Ice/InstanceF.h> #include <Ice/LoggerF.h> #include <Ice/PropertiesF.h> #include <Ice/EventHandlerF.h> +#include <Ice/Selector.h> #include <list> -#if defined(__linux) && !defined(ICE_NO_EPOLL) -# define ICE_USE_EPOLL 1 -#endif - -#if defined(_WIN32) -# include <winsock2.h> -#else -# define SOCKET int -# if defined(ICE_USE_EPOLL) -# include <sys/epoll.h> -# elif defined(__APPLE__) -# include <sys/event.h> -# else -# include <sys/poll.h> -# endif -#endif - - namespace IceInternal { @@ -59,6 +43,7 @@ public: void _register(SOCKET, const EventHandlerPtr&); void unregister(SOCKET); + void execute(const ThreadPoolWorkItemPtr&); void promoteFollower(); void joinWithAllThreads(); @@ -66,40 +51,19 @@ public: private: - void clearInterrupt(); - void setInterrupt(); - bool run(); // Returns true if a follower should be promoted. - void read(const EventHandlerPtr&); + bool read(const EventHandlerPtr&); InstancePtr _instance; bool _destroyed; const std::string _prefix; - SOCKET _maxFd; - SOCKET _minFd; - SOCKET _lastFd; - SOCKET _fdIntrRead; - SOCKET _fdIntrWrite; -#if defined(_WIN32) - fd_set _fdSet; - int _fdsInUse; -#elif defined(ICE_USE_EPOLL) - int _epollFd; - std::vector<struct epoll_event> _events; -#elif defined(__APPLE__) - int _kqueueFd; - std::vector<struct kevent> _events; -#else - std::vector<struct pollfd> _pollFdSet; -#endif + Selector _selector; std::list<std::pair<SOCKET, EventHandlerPtr> > _changes; // Event handler set for addition; null for removal. - + std::list<ThreadPoolWorkItemPtr> _workItems; std::map<SOCKET, EventHandlerPtr> _handlerMap; - int _timeout; - class EventHandlerThread : public IceUtil::Thread { public: diff --git a/cpp/src/Ice/TraceUtil.cpp b/cpp/src/Ice/TraceUtil.cpp index cb371f4e35a..b8c4d1f10b1 100644 --- a/cpp/src/Ice/TraceUtil.cpp +++ b/cpp/src/Ice/TraceUtil.cpp @@ -44,6 +44,26 @@ printIdentityFacetOperation(ostream& s, BasicStream& stream) s << "\noperation = " << operation; } +static string +getMessageTypeAsString(Byte type) +{ + switch(type) + { + case requestMsg: + return "request"; + case requestBatchMsg: + return "batch request"; + case replyMsg: + return "reply"; + case closeConnectionMsg: + return "close connection"; + case validateConnectionMsg: + return "validate connection"; + default: + return "unknown"; + } +} + static void printRequestHeader(ostream& s, BasicStream& stream) { @@ -95,7 +115,7 @@ printRequestHeader(ostream& s, BasicStream& stream) } } -static void +static Byte printHeader(ostream& s, BasicStream& stream) { Byte magicNumber; @@ -120,105 +140,238 @@ printHeader(ostream& s, BasicStream& stream) Byte type; stream.read(type); - s << "\nmessage type = " << static_cast<int>(type) << ' '; + s << "\nmessage type = " << static_cast<int>(type) << " (" << getMessageTypeAsString(type) << ')'; - switch(type) + Byte compress; + stream.read(compress); + s << "\ncompression status = " << static_cast<int>(compress) << ' '; + + switch(compress) { - case requestMsg: + case 0: { - s << "(request)"; + s << "(not compressed; do not compress response, if any)"; break; } - case requestBatchMsg: + case 1: { - s << "(batch request)"; + s << "(not compressed; compress response, if any)"; break; } - case replyMsg: + case 2: { - s << "(reply)"; + s << "(compressed; compress response, if any)"; break; } - case closeConnectionMsg: + default: { - s << "(close connection)"; + s << "(unknown)"; break; } + } - case validateConnectionMsg: + Int size; + stream.read(size); + s << "\nmessage size = " << size; + + return type; +} + +static void +printRequest(ostream& s, BasicStream& stream) +{ + Int requestId; + stream.read(requestId); + s << "\nrequest id = " << requestId; + if(requestId == 0) + { + s << " (oneway)"; + } + + printRequestHeader(s, stream); +} + +static void +printBatchRequest(ostream& s, BasicStream& stream) +{ + int batchRequestNum; + stream.read(batchRequestNum); + s << "\nnumber of requests = " << batchRequestNum; + + for(int i = 0; i < batchRequestNum; ++i) + { + s << "\nrequest #" << i << ':'; + printRequestHeader(s, stream); + stream.skipEncaps(); + } +} + +static void +printReply(ostream& s, BasicStream& stream) +{ + Int requestId; + stream.read(requestId); + s << "\nrequest id = " << requestId; + + Byte replyStatus; + stream.read(replyStatus); + s << "\nreply status = " << static_cast<int>(replyStatus) << ' '; + switch(replyStatus) + { + case replyOK: + { + s << "(ok)"; + break; + } + + case replyUserException: + { + s << "(user exception)"; + break; + } + + case replyObjectNotExist: + case replyFacetNotExist: + case replyOperationNotExist: + { + switch(replyStatus) + { + case replyObjectNotExist: + { + s << "(object not exist)"; + break; + } + + case replyFacetNotExist: + { + s << "(facet not exist)"; + break; + } + + case replyOperationNotExist: { - s << "(validate connection)"; + s << "(operation not exist)"; break; } default: { - s << "(unknown)"; + assert(false); break; } - } + } - Byte compress; - stream.read(compress); - s << "\ncompression status = " << static_cast<int>(compress) << ' '; + printIdentityFacetOperation(s, stream); + break; + } - switch(compress) + case replyUnknownException: + case replyUnknownLocalException: + case replyUnknownUserException: { - case 0: + switch(replyStatus) { - s << "(not compressed; do not compress response, if any)"; + case replyUnknownException: + { + s << "(unknown exception)"; break; } - case 1: + case replyUnknownLocalException: { - s << "(not compressed; compress response, if any)"; + s << "(unknown local exception)"; break; } - case 2: + case replyUnknownUserException: { - s << "(compressed; compress response, if any)"; + s << "(unknown user exception)"; break; } default: { - s << "(unknown)"; + assert(false); break; } + } + + string unknown; + stream.read(unknown, false); + s << "\nunknown = " << unknown; + break; } - Int size; - stream.read(size); - s << "\nmessage size = " << size; + default: + { + s << "(unknown)"; + break; + } + } } -void -IceInternal::traceHeader(const char* heading, const BasicStream& str, const LoggerPtr& logger, - const TraceLevelsPtr& tl) +static Byte +printMessage(ostream& s, BasicStream& stream) { - if(tl->protocol >= 1) + Byte type = printHeader(s, stream); + + switch(type) { - BasicStream& stream = const_cast<BasicStream&>(str); - BasicStream::Container::iterator p = stream.i; - stream.i = stream.b.begin(); + case closeConnectionMsg: + case validateConnectionMsg: + { + // We're done. + break; + } + + case requestMsg: + { + printRequest(s, stream); + break; + } + + case requestBatchMsg: + { + printBatchRequest(s, stream); + break; + } + + case replyMsg: + { + printReply(s, stream); + break; + } + + default: + { + break; + } + } - ostringstream s; - s << heading; - printHeader(s, stream); + return type; +} - logger->trace(tl->protocolCat, s.str()); - stream.i = p; +static IceUtil::StaticMutex slicingMutex = ICE_STATIC_MUTEX_INITIALIZER; + +void +IceInternal::traceSlicing(const char* kind, const string& typeId, const char* slicingCat, const LoggerPtr& logger) +{ + IceUtil::StaticMutex::Lock lock(slicingMutex); + static set<string> slicingIds; + if(slicingIds.insert(typeId).second) + { + string s("unknown "); + s += kind; + s += " type `" + typeId + "'"; + logger->trace(slicingCat, s); } } void -IceInternal::traceRequest(const char* heading, const BasicStream& str, const LoggerPtr& logger, - const TraceLevelsPtr& tl) +IceInternal::traceSend(const BasicStream& str, const LoggerPtr& logger, const TraceLevelsPtr& tl) { if(tl->protocol >= 1) { @@ -227,27 +380,15 @@ IceInternal::traceRequest(const char* heading, const BasicStream& str, const Log stream.i = stream.b.begin(); ostringstream s; - s << heading; - printHeader(s, stream); + Byte type = printMessage(s, stream); - Int requestId; - stream.read(requestId); - s << "\nrequest id = " << requestId; - if(requestId == 0) - { - s << " (oneway)"; - } - - printRequestHeader(s, stream); - - logger->trace(tl->protocolCat, s.str()); + logger->trace(tl->protocolCat, "sending " + getMessageTypeAsString(type) + " " + s.str()); stream.i = p; } } void -IceInternal::traceBatchRequest(const char* heading, const BasicStream& str, const LoggerPtr& logger, - const TraceLevelsPtr& tl) +IceInternal::traceRecv(const BasicStream& str, const LoggerPtr& logger, const TraceLevelsPtr& tl) { if(tl->protocol >= 1) { @@ -256,28 +397,15 @@ IceInternal::traceBatchRequest(const char* heading, const BasicStream& str, cons stream.i = stream.b.begin(); ostringstream s; - s << heading; - printHeader(s, stream); + Byte type = printMessage(s, stream); - int batchRequestNum; - stream.read(batchRequestNum); - s << "\nnumber of requests = " << batchRequestNum; - - for(int i = 0; i < batchRequestNum; ++i) - { - s << "\nrequest #" << i << ':'; - printRequestHeader(s, stream); - stream.skipEncaps(); - } - - logger->trace(tl->protocolCat, s.str()); + logger->trace(tl->protocolCat, "received " + getMessageTypeAsString(type) + " " + s.str()); stream.i = p; } } void -IceInternal::traceReply(const char* heading, const BasicStream& str, const LoggerPtr& logger, - const TraceLevelsPtr& tl) +IceInternal::trace(const char* heading, const BasicStream& str, const LoggerPtr& logger, const TraceLevelsPtr& tl) { if(tl->protocol >= 1) { @@ -287,125 +415,10 @@ IceInternal::traceReply(const char* heading, const BasicStream& str, const Logge ostringstream s; s << heading; - printHeader(s, stream); - - Int requestId; - stream.read(requestId); - s << "\nrequest id = " << requestId; - - Byte replyStatus; - stream.read(replyStatus); - s << "\nreply status = " << static_cast<int>(replyStatus) << ' '; - switch(replyStatus) - { - case replyOK: - { - s << "(ok)"; - break; - } - - case replyUserException: - { - s << "(user exception)"; - break; - } - - case replyObjectNotExist: - case replyFacetNotExist: - case replyOperationNotExist: - { - switch(replyStatus) - { - case replyObjectNotExist: - { - s << "(object not exist)"; - break; - } - - case replyFacetNotExist: - { - s << "(facet not exist)"; - break; - } - - case replyOperationNotExist: - { - s << "(operation not exist)"; - break; - } - - default: - { - assert(false); - break; - } - } - - printIdentityFacetOperation(s, stream); - break; - } - - case replyUnknownException: - case replyUnknownLocalException: - case replyUnknownUserException: - { - switch(replyStatus) - { - case replyUnknownException: - { - s << "(unknown exception)"; - break; - } - - case replyUnknownLocalException: - { - s << "(unknown local exception)"; - break; - } - - case replyUnknownUserException: - { - s << "(unknown user exception)"; - break; - } - - default: - { - assert(false); - break; - } - } - - string unknown; - stream.read(unknown, false); - s << "\nunknown = " << unknown; - break; - } - - default: - { - s << "(unknown)"; - break; - } - } + printMessage(s, stream); logger->trace(tl->protocolCat, s.str()); stream.i = p; } } -static IceUtil::StaticMutex slicingMutex = ICE_STATIC_MUTEX_INITIALIZER; - -void -IceInternal::traceSlicing(const char* kind, const string& typeId, const char* slicingCat, const LoggerPtr& logger) -{ - IceUtil::StaticMutex::Lock lock(slicingMutex); - static set<string> slicingIds; - if(slicingIds.insert(typeId).second) - { - string s("unknown "); - s += kind; - s += " type `" + typeId + "'"; - logger->trace(slicingCat, s); - } -} diff --git a/cpp/src/Ice/TraceUtil.h b/cpp/src/Ice/TraceUtil.h index d61af61e1eb..01db5958af0 100644 --- a/cpp/src/Ice/TraceUtil.h +++ b/cpp/src/Ice/TraceUtil.h @@ -18,10 +18,9 @@ namespace IceInternal class BasicStream; -void traceHeader(const char*, const BasicStream&, const ::Ice::LoggerPtr&, const TraceLevelsPtr&); -void traceRequest(const char*, const BasicStream&, const ::Ice::LoggerPtr&, const TraceLevelsPtr&); -void traceBatchRequest(const char*, const BasicStream&, const ::Ice::LoggerPtr&, const TraceLevelsPtr&); -void traceReply(const char*, const BasicStream&, const ::Ice::LoggerPtr&, const TraceLevelsPtr&); +void traceSend(const BasicStream&, const ::Ice::LoggerPtr&, const TraceLevelsPtr&); +void traceRecv(const BasicStream&, const ::Ice::LoggerPtr&, const TraceLevelsPtr&); +void trace(const char*, const BasicStream&, const ::Ice::LoggerPtr&, const TraceLevelsPtr&); void traceSlicing(const char*, const ::std::string&, const char *, const ::Ice::LoggerPtr&); } diff --git a/cpp/src/Ice/Transceiver.h b/cpp/src/Ice/Transceiver.h index 1e3d637c9f0..8670779213d 100644 --- a/cpp/src/Ice/Transceiver.h +++ b/cpp/src/Ice/Transceiver.h @@ -12,9 +12,10 @@ #include <IceUtil/Shared.h> #include <Ice/TransceiverF.h> +#include <Ice/Selector.h> #ifdef _WIN32 -# include <winsock2.h>
+# include <winsock2.h> typedef int ssize_t; #else # define SOCKET int @@ -33,11 +34,11 @@ public: virtual void close() = 0; virtual void shutdownWrite() = 0; virtual void shutdownReadWrite() = 0; - virtual void write(Buffer&, int) = 0; - virtual void read(Buffer&, int) = 0; + virtual bool write(Buffer&, int) = 0; + virtual bool read(Buffer&, int) = 0; virtual std::string type() const = 0; virtual std::string toString() const = 0; - virtual void initialize(int) = 0; + virtual SocketStatus initialize(int) = 0; virtual void checkSendSize(const Buffer&, size_t) = 0; }; diff --git a/cpp/src/Ice/UdpConnector.cpp b/cpp/src/Ice/UdpConnector.cpp index 128fca83447..05c202a8310 100644 --- a/cpp/src/Ice/UdpConnector.cpp +++ b/cpp/src/Ice/UdpConnector.cpp @@ -168,21 +168,6 @@ IceInternal::UdpConnector::operator<(const Connector& r) const return compareAddress(_addr, p->_addr) == -1; } -bool -IceInternal::UdpConnector::equivalent(const string& host, int port) const -{ - struct sockaddr_in addr; - try - { - getAddress(host, port, addr); - } - catch(const DNSException&) - { - return false; - } - return compareAddress(addr, _addr) == 0; -} - IceInternal::UdpConnector::UdpConnector(const InstancePtr& instance, const struct sockaddr_in& addr, const string& mcastInterface, int mcastTtl, Ice::Byte protocolMajor, Ice::Byte protocolMinor, Ice::Byte encodingMajor, Ice::Byte encodingMinor, diff --git a/cpp/src/Ice/UdpConnector.h b/cpp/src/Ice/UdpConnector.h index fa33c3cb330..77d73bba277 100644 --- a/cpp/src/Ice/UdpConnector.h +++ b/cpp/src/Ice/UdpConnector.h @@ -28,6 +28,7 @@ class UdpConnector : public Connector public: virtual TransceiverPtr connect(int); + virtual Ice::Short type() const; virtual std::string toString() const; @@ -35,8 +36,6 @@ public: virtual bool operator!=(const Connector&) const; virtual bool operator<(const Connector&) const; - bool equivalent(const std::string&, int) const; - private: UdpConnector(const InstancePtr&, const struct sockaddr_in&, const std::string&, int, Ice::Byte, Ice::Byte, diff --git a/cpp/src/Ice/UdpEndpointI.cpp b/cpp/src/Ice/UdpEndpointI.cpp index 2668a589142..b5f4588714c 100644 --- a/cpp/src/Ice/UdpEndpointI.cpp +++ b/cpp/src/Ice/UdpEndpointI.cpp @@ -480,14 +480,13 @@ IceInternal::UdpEndpointI::transceiver(EndpointIPtr& endp) const vector<ConnectorPtr> IceInternal::UdpEndpointI::connectors() const { - vector<ConnectorPtr> connectors; - vector<struct sockaddr_in> addresses = getAddresses(_host, _port); - for(unsigned int i = 0; i < addresses.size(); ++i) - { - connectors.push_back(new UdpConnector(_instance, addresses[i], _mcastInterface, _mcastTtl, _protocolMajor, - _protocolMinor, _encodingMajor, _encodingMinor, _connectionId)); - } - return connectors; + return connectors(getAddresses(_host, _port)); +} + +void +IceInternal::UdpEndpointI::connectors_async(const EndpointI_connectorsPtr& callback) const +{ + _instance->endpointHostResolver()->resolve(_host, _port, const_cast<UdpEndpointI*>(this), callback); } AcceptorPtr @@ -522,14 +521,14 @@ IceInternal::UdpEndpointI::expand() const } bool -IceInternal::UdpEndpointI::equivalent(const ConnectorPtr& connector) const +IceInternal::UdpEndpointI::equivalent(const EndpointIPtr& endpoint) const { - const UdpConnector* udpConnector = dynamic_cast<const UdpConnector*>(connector.get()); - if(!udpConnector) + const UdpEndpointI* udpEndpointI = dynamic_cast<const UdpEndpointI*>(endpoint.get()); + if(!udpEndpointI) { return false; } - return udpConnector->equivalent(_host, _port); + return udpEndpointI->_host == _host && udpEndpointI->_port == _port; } bool @@ -726,6 +725,18 @@ IceInternal::UdpEndpointI::operator<(const EndpointI& r) const return false; } +vector<ConnectorPtr> +IceInternal::UdpEndpointI::connectors(const vector<struct sockaddr_in>& addresses) const +{ + vector<ConnectorPtr> connectors; + for(unsigned int i = 0; i < addresses.size(); ++i) + { + connectors.push_back(new UdpConnector(_instance, addresses[i], _mcastInterface, _mcastTtl, _protocolMajor, + _protocolMinor, _encodingMajor, _encodingMinor, _connectionId)); + } + return connectors; +} + IceInternal::UdpEndpointFactory::UdpEndpointFactory(const InstancePtr& instance) : _instance(instance) { diff --git a/cpp/src/Ice/UdpEndpointI.h b/cpp/src/Ice/UdpEndpointI.h index 80c33c873e2..07fb3daaf2d 100644 --- a/cpp/src/Ice/UdpEndpointI.h +++ b/cpp/src/Ice/UdpEndpointI.h @@ -40,9 +40,10 @@ public: virtual bool unknown() const; virtual TransceiverPtr transceiver(EndpointIPtr&) const; virtual std::vector<ConnectorPtr> connectors() const; + virtual void connectors_async(const EndpointI_connectorsPtr&) const; virtual AcceptorPtr acceptor(EndpointIPtr&, const std::string&) const; virtual std::vector<EndpointIPtr> expand() const; - virtual bool equivalent(const ConnectorPtr&) const; + virtual bool equivalent(const EndpointIPtr&) const; virtual bool operator==(const EndpointI&) const; virtual bool operator!=(const EndpointI&) const; @@ -50,6 +51,8 @@ public: private: + virtual std::vector<ConnectorPtr> connectors(const std::vector<struct sockaddr_in>&) const; + #if defined(__SUNPRO_CC) // // COMPILERFIX: prevent the compiler from emitting a warning about diff --git a/cpp/src/Ice/UdpTransceiver.cpp b/cpp/src/Ice/UdpTransceiver.cpp index 32ab7600c88..2736587f7a8 100644 --- a/cpp/src/Ice/UdpTransceiver.cpp +++ b/cpp/src/Ice/UdpTransceiver.cpp @@ -63,7 +63,7 @@ IceInternal::UdpTransceiver::shutdownReadWrite() IceUtil::Mutex::Lock sync(_shutdownReadWriteMutex); _shutdownReadWrite = true; -#if defined(_WIN32) || defined(__sun) || defined(__hppa) || defined(_AIX) +#if defined(_WIN32) || defined(__sun) || defined(__hppa) || defined(_AIX) || defined(__APPLE__) // // On certain platforms, we have to explicitly wake up a thread blocked in // select(). This is only relevant when using thread per connection. @@ -105,8 +105,8 @@ IceInternal::UdpTransceiver::shutdownReadWrite() #endif } -void -IceInternal::UdpTransceiver::write(Buffer& buf, int) +bool +IceInternal::UdpTransceiver::write(Buffer& buf, int timeout) { assert(buf.i == buf.b.begin()); // @@ -120,6 +120,7 @@ IceInternal::UdpTransceiver::write(Buffer& buf, int) // // We don't log a warning here because the client gets an exception anyway. // + cerr << packetSize << " " << _maxPacketSize << " " << _sndSize << endl; throw DatagramLimitException(__FILE__, __LINE__); } @@ -127,11 +128,9 @@ repeat: assert(_fd != INVALID_SOCKET); #ifdef _WIN32 - ssize_t ret = ::send(_fd, reinterpret_cast<const char*>(&buf.b[0]), - static_cast<int>(buf.b.size()), 0); + ssize_t ret = ::send(_fd, reinterpret_cast<const char*>(&buf.b[0]), static_cast<int>(buf.b.size()), 0); #else - ssize_t ret = ::send(_fd, reinterpret_cast<const char*>(&buf.b[0]), - buf.b.size(), 0); + ssize_t ret = ::send(_fd, reinterpret_cast<const char*>(&buf.b[0]), buf.b.size(), 0); #endif if(ret == SOCKET_ERROR) @@ -145,16 +144,33 @@ repeat: { repeatSelect: + if(timeout == 0) + { + return false; + } + + int rs; assert(_fd != INVALID_SOCKET); #ifdef _WIN32 FD_SET(_fd, &_wFdSet); - int rs = ::select(static_cast<int>(_fd + 1), 0, &_wFdSet, 0, 0); + + if(timeout >= 0) + { + struct timeval tv; + tv.tv_sec = timeout / 1000; + tv.tv_usec = (timeout - tv.tv_sec * 1000) * 1000; + rs = ::select(static_cast<int>(_fd + 1), 0, &_wFdSet, 0, &tv); + } + else + { + rs = ::select(static_cast<int>(_fd + 1), 0, &_wFdSet, 0, 0); + } #else - struct pollfd fdSet[1]; - fdSet[0].fd = _fd; - fdSet[0].events = POLLOUT; - int rs = ::poll(fdSet, 1, -1); -#endif + struct pollfd pollFd[1]; + pollFd[0].fd = _fd; + pollFd[0].events = POLLOUT; + rs = ::poll(pollFd, 1, timeout); +#endif if(rs == SOCKET_ERROR) { if(interrupted()) @@ -166,6 +182,11 @@ repeat: ex.error = getSocketErrno(); throw ex; } + + if(rs == 0) + { + throw new Ice::TimeoutException(__FILE__, __LINE__); + } goto repeat; } @@ -188,10 +209,11 @@ repeat: assert(ret == static_cast<ssize_t>(buf.b.size())); buf.i = buf.b.end(); + return true; } -void -IceInternal::UdpTransceiver::read(Buffer& buf, int) +bool +IceInternal::UdpTransceiver::read(Buffer& buf, int timeout) { assert(buf.i == buf.b.begin()); @@ -270,6 +292,11 @@ repeat: if(wouldBlock()) { + if(timeout == 0) + { + return false; + } + repeatSelect: assert(_fd != INVALID_SOCKET); @@ -295,6 +322,11 @@ repeat: throw ex; } + if(rs == 0) + { + throw TimeoutException(__FILE__, __LINE__); + } + goto repeat; } @@ -328,6 +360,7 @@ repeat: buf.b.resize(ret); buf.i = buf.b.end(); + return true; } string @@ -351,9 +384,10 @@ IceInternal::UdpTransceiver::toString() const } } -void +SocketStatus IceInternal::UdpTransceiver::initialize(int) { + return Finished; } void diff --git a/cpp/src/Ice/UdpTransceiver.h b/cpp/src/Ice/UdpTransceiver.h index 8c4c3282e3d..6fe77182793 100644 --- a/cpp/src/Ice/UdpTransceiver.h +++ b/cpp/src/Ice/UdpTransceiver.h @@ -36,11 +36,11 @@ public: virtual void close(); virtual void shutdownWrite(); virtual void shutdownReadWrite(); - virtual void write(Buffer&, int); - virtual void read(Buffer&, int); + virtual bool write(Buffer&, int); + virtual bool read(Buffer&, int); virtual std::string type() const; virtual std::string toString() const; - virtual void initialize(int); + virtual SocketStatus initialize(int); virtual void checkSendSize(const Buffer&, size_t); int effectivePort() const; diff --git a/cpp/src/Ice/UnknownEndpointI.cpp b/cpp/src/Ice/UnknownEndpointI.cpp index c3f91d7563f..e7762649979 100644 --- a/cpp/src/Ice/UnknownEndpointI.cpp +++ b/cpp/src/Ice/UnknownEndpointI.cpp @@ -213,6 +213,12 @@ IceInternal::UnknownEndpointI::connectors() const return ret; } +void +IceInternal::UnknownEndpointI::connectors_async(const EndpointI_connectorsPtr& callback) const +{ + callback->connectors(vector<ConnectorPtr>()); +} + AcceptorPtr IceInternal::UnknownEndpointI::acceptor(EndpointIPtr& endp, const string&) const { @@ -229,7 +235,7 @@ IceInternal::UnknownEndpointI::expand() const } bool -IceInternal::UnknownEndpointI::equivalent(const ConnectorPtr&) const +IceInternal::UnknownEndpointI::equivalent(const EndpointIPtr&) const { return false; } diff --git a/cpp/src/Ice/UnknownEndpointI.h b/cpp/src/Ice/UnknownEndpointI.h index e9c0069f261..69f33defe0f 100644 --- a/cpp/src/Ice/UnknownEndpointI.h +++ b/cpp/src/Ice/UnknownEndpointI.h @@ -36,9 +36,10 @@ public: virtual bool unknown() const; virtual TransceiverPtr transceiver(EndpointIPtr&) const; virtual std::vector<ConnectorPtr> connectors() const; + virtual void connectors_async(const EndpointI_connectorsPtr&) const; virtual AcceptorPtr acceptor(EndpointIPtr&, const std::string&) const; virtual std::vector<EndpointIPtr> expand() const; - virtual bool equivalent(const ConnectorPtr&) const; + virtual bool equivalent(const EndpointIPtr&) const; virtual bool operator==(const EndpointI&) const; virtual bool operator!=(const EndpointI&) const; diff --git a/cpp/src/IceGrid/Allocatable.cpp b/cpp/src/IceGrid/Allocatable.cpp index 402a5cc32d6..899d20562bc 100644 --- a/cpp/src/IceGrid/Allocatable.cpp +++ b/cpp/src/IceGrid/Allocatable.cpp @@ -107,7 +107,7 @@ AllocationRequest::cancel(const AllocationException& ex) } void -AllocationRequest::run() // TimerTask::run() method implementation +AllocationRequest::runTimerTask() // TimerTask::runTimerTask() method implementation { Lock sync(*this); switch(_state) diff --git a/cpp/src/IceGrid/Allocatable.h b/cpp/src/IceGrid/Allocatable.h index f052c89f4d8..3eb1b3e60ee 100644 --- a/cpp/src/IceGrid/Allocatable.h +++ b/cpp/src/IceGrid/Allocatable.h @@ -42,7 +42,7 @@ public: bool pending(); bool allocate(const AllocatablePtr&, const SessionIPtr&); void cancel(const AllocationException&); - void run(); // Implementation of IceUtil::TimerTask::run() + void runTimerTask(); // Implementation of IceUtil::TimerTask::runTimerTask() int getTimeout() const { return _timeout; } const SessionIPtr& getSession() const { return _session; } diff --git a/cpp/src/IceGrid/NodeCache.h b/cpp/src/IceGrid/NodeCache.h index 1e4a1caf584..4ed6dab0399 100644 --- a/cpp/src/IceGrid/NodeCache.h +++ b/cpp/src/IceGrid/NodeCache.h @@ -10,7 +10,7 @@ #ifndef ICE_GRID_NODECACHE_H #define ICE_GRID_NODECACHE_H -#include <IceUtil/Mutex.h> +#include <IceUtil/RecMutex.h> #include <IceUtil/Shared.h> #include <IceGrid/Cache.h> #include <IceGrid/Internal.h> diff --git a/cpp/src/IceGrid/ServerI.cpp b/cpp/src/IceGrid/ServerI.cpp index 71315d1a6c4..507867753d8 100644 --- a/cpp/src/IceGrid/ServerI.cpp +++ b/cpp/src/IceGrid/ServerI.cpp @@ -194,7 +194,7 @@ public: { } - virtual void run() + virtual void runTimerTask() { _command->timeout(); } @@ -214,7 +214,7 @@ public: { } - virtual void run() + virtual void runTimerTask() { try { diff --git a/cpp/src/IceSSL/AcceptorI.cpp b/cpp/src/IceSSL/AcceptorI.cpp index 39d9976f9cb..7f467fee5c0 100644 --- a/cpp/src/IceSSL/AcceptorI.cpp +++ b/cpp/src/IceSSL/AcceptorI.cpp @@ -108,7 +108,7 @@ IceSSL::AcceptorI::accept(int timeout) // SSL handshaking is performed in TransceiverI::initialize, since // accept must not block. // - return new TransceiverI(_instance, ssl, fd, true, _adapterName); + return new TransceiverI(_instance, ssl, fd, true, true, _adapterName); } void diff --git a/cpp/src/IceSSL/ConnectorI.cpp b/cpp/src/IceSSL/ConnectorI.cpp index e1bad76f96b..feb4c4b4e89 100644 --- a/cpp/src/IceSSL/ConnectorI.cpp +++ b/cpp/src/IceSSL/ConnectorI.cpp @@ -43,7 +43,7 @@ IceSSL::ConnectorI::connect(int timeout) SOCKET fd = IceInternal::createSocket(false); IceInternal::setBlock(fd, false); IceInternal::setTcpBufSize(fd, _instance->communicator()->getProperties(), _logger); - IceInternal::doConnect(fd, _addr, timeout); + bool connected = IceInternal::doConnect(fd, _addr, timeout); // 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), BIO_CLOSE); @@ -65,112 +65,11 @@ IceSSL::ConnectorI::connect(int timeout) } SSL_set_bio(ssl, bio, bio); - try - { - do - { - int result = SSL_connect(ssl); - switch(SSL_get_error(ssl, result)) - { - case SSL_ERROR_NONE: - break; - case SSL_ERROR_ZERO_RETURN: - { - ConnectionLostException ex(__FILE__, __LINE__); - ex.error = IceInternal::getSocketErrno(); - throw ex; - } - case SSL_ERROR_WANT_READ: - if(!selectRead(fd, timeout)) - { - throw ConnectTimeoutException(__FILE__, __LINE__); - } - break; - case SSL_ERROR_WANT_WRITE: - if(!selectWrite(fd, timeout)) - { - throw ConnectTimeoutException(__FILE__, __LINE__); - } - break; - case SSL_ERROR_SYSCALL: - { - if(result == -1) - { - if(IceInternal::interrupted()) - { - break; - } - - if(IceInternal::wouldBlock()) - { - if(SSL_want_read(ssl)) - { - if(!selectRead(fd, timeout)) - { - throw ConnectTimeoutException(__FILE__, __LINE__); - } - } - else if(SSL_want_write(ssl)) - { - if(!selectWrite(fd, timeout)) - { - throw ConnectTimeoutException(__FILE__, __LINE__); - } - } - - continue; - } - - if(IceInternal::connectionLost()) - { - ConnectionLostException ex(__FILE__, __LINE__); - ex.error = IceInternal::getSocketErrno(); - throw ex; - } - } - - if(result == 0) - { - ConnectionLostException ex(__FILE__, __LINE__); - ex.error = 0; - throw ex; - } - - SocketException ex(__FILE__, __LINE__); - ex.error = IceInternal::getSocketErrno(); - throw ex; - } - case SSL_ERROR_SSL: - { - ProtocolException ex(__FILE__, __LINE__); - ex.reason = "SSL error for new outgoing connection:\nremote address = " + - IceInternal::addrToString(_addr) + "\n" + _instance->sslErrors(); - throw ex; - } - } - } - while(!SSL_is_init_finished(ssl)); - - _instance->verifyPeer(ssl, fd, _host, "", false); - } - catch(...) - { - SSL_free(ssl); - throw; - } - - if(_instance->networkTraceLevel() >= 1) - { - Trace out(_logger, _instance->networkTraceCategory()); - out << "ssl connection established\n" << IceInternal::fdToString(fd); - } - - if(_instance->securityTraceLevel() >= 1) - { - _instance->traceConnection(ssl, false); - } - - return new TransceiverI(_instance, ssl, fd, false); + // + // SSL handshaking is performed in TransceiverI::initialize, since + // connect must not block. + // + return new TransceiverI(_instance, ssl, fd, connected, false); } Short @@ -248,21 +147,6 @@ IceSSL::ConnectorI::operator<(const IceInternal::Connector& r) const return IceInternal::compareAddress(_addr, p->_addr) == -1; } -bool -IceSSL::ConnectorI::equivalent(const string& host, int port) const -{ - struct sockaddr_in addr; - try - { - IceInternal::getAddress(host, port, addr); - } - catch(const DNSException&) - { - return false; - } - return IceInternal::compareAddress(_addr, addr) == 0; -} - IceSSL::ConnectorI::ConnectorI(const InstancePtr& instance, const struct sockaddr_in& addr, Ice::Int timeout, const string& connectionId) : _instance(instance), diff --git a/cpp/src/IceSSL/ConnectorI.h b/cpp/src/IceSSL/ConnectorI.h index d7ae8f88494..72f7a61fb32 100644 --- a/cpp/src/IceSSL/ConnectorI.h +++ b/cpp/src/IceSSL/ConnectorI.h @@ -31,6 +31,7 @@ class ConnectorI : public IceInternal::Connector public: virtual IceInternal::TransceiverPtr connect(int); + virtual Ice::Short type() const; virtual std::string toString() const; @@ -38,8 +39,6 @@ public: virtual bool operator!=(const IceInternal::Connector&) const; virtual bool operator<(const IceInternal::Connector&) const; - bool equivalent(const std::string&, int) const; - private: ConnectorI(const InstancePtr&, const struct sockaddr_in&, Ice::Int, const std::string&); @@ -52,6 +51,7 @@ private: struct sockaddr_in _addr; const Ice::Int _timeout; const std::string _connectionId; + SOCKET _fd; }; } diff --git a/cpp/src/IceSSL/EndpointI.cpp b/cpp/src/IceSSL/EndpointI.cpp index ca03a133260..fd9edd4f42d 100644 --- a/cpp/src/IceSSL/EndpointI.cpp +++ b/cpp/src/IceSSL/EndpointI.cpp @@ -292,13 +292,13 @@ IceSSL::EndpointI::transceiver(IceInternal::EndpointIPtr& endp) const vector<IceInternal::ConnectorPtr> IceSSL::EndpointI::connectors() const { - vector<IceInternal::ConnectorPtr> connectors; - vector<struct sockaddr_in> addresses = IceInternal::getAddresses(_host, _port); - for(unsigned int i = 0; i < addresses.size(); ++i) - { - connectors.push_back(new ConnectorI(_instance, addresses[i], _timeout, _connectionId)); - } - return connectors; + return connectors(IceInternal::getAddresses(_host, _port)); +} + +void +IceSSL::EndpointI::connectors_async(const IceInternal::EndpointI_connectorsPtr& callback) const +{ + _instance->endpointHostResolver()->resolve(_host, _port, const_cast<EndpointI*>(this), callback); } IceInternal::AcceptorPtr @@ -332,14 +332,14 @@ IceSSL::EndpointI::expand() const } bool -IceSSL::EndpointI::equivalent(const IceInternal::ConnectorPtr& connector) const +IceSSL::EndpointI::equivalent(const IceInternal::EndpointIPtr& endpoint) const { - const ConnectorI* sslConnector = dynamic_cast<const ConnectorI*>(connector.get()); - if(!sslConnector) + const EndpointI* sslEndpointI = dynamic_cast<const EndpointI*>(endpoint.get()); + if(!sslEndpointI) { return false; } - return sslConnector->equivalent(_host, _port); + return sslEndpointI->_host == _host && sslEndpointI->_port == _port; } bool @@ -452,6 +452,17 @@ IceSSL::EndpointI::operator<(const IceInternal::EndpointI& r) const return false; } +vector<IceInternal::ConnectorPtr> +IceSSL::EndpointI::connectors(const vector<struct sockaddr_in>& addresses) const +{ + vector<IceInternal::ConnectorPtr> connectors; + for(unsigned int i = 0; i < addresses.size(); ++i) + { + connectors.push_back(new ConnectorI(_instance, addresses[i], _timeout, _connectionId)); + } + return connectors; +} + IceSSL::EndpointFactoryI::EndpointFactoryI(const InstancePtr& instance) : _instance(instance) { diff --git a/cpp/src/IceSSL/EndpointI.h b/cpp/src/IceSSL/EndpointI.h index c5a51375609..99e748e7782 100644 --- a/cpp/src/IceSSL/EndpointI.h +++ b/cpp/src/IceSSL/EndpointI.h @@ -40,9 +40,10 @@ public: virtual bool unknown() const; virtual IceInternal::TransceiverPtr transceiver(IceInternal::EndpointIPtr&) const; virtual std::vector<IceInternal::ConnectorPtr> connectors() const; + virtual void connectors_async(const IceInternal::EndpointI_connectorsPtr&) const; virtual IceInternal::AcceptorPtr acceptor(IceInternal::EndpointIPtr&, const std::string&) const; virtual std::vector<IceInternal::EndpointIPtr> expand() const; - virtual bool equivalent(const IceInternal::ConnectorPtr&) const; + virtual bool equivalent(const IceInternal::EndpointIPtr&) const; virtual bool operator==(const IceInternal::EndpointI&) const; virtual bool operator!=(const IceInternal::EndpointI&) const; @@ -50,6 +51,8 @@ public: private: + virtual std::vector<IceInternal::ConnectorPtr> connectors(const std::vector<struct sockaddr_in>&) const; + #if defined(__SUNPRO_CC) // // COMPILERFIX: prevent the compiler from emitting a warning about diff --git a/cpp/src/IceSSL/Instance.cpp b/cpp/src/IceSSL/Instance.cpp index a840d019d8e..a0933c5420d 100644 --- a/cpp/src/IceSSL/Instance.cpp +++ b/cpp/src/IceSSL/Instance.cpp @@ -532,6 +532,12 @@ IceSSL::Instance::communicator() const return _facade->getCommunicator(); } +IceInternal::EndpointHostResolverPtr +IceSSL::Instance::endpointHostResolver() const +{ + return _facade->getEndpointHostResolver(); +} + string IceSSL::Instance::defaultHost() const { diff --git a/cpp/src/IceSSL/Instance.h b/cpp/src/IceSSL/Instance.h index 01ee3e8c8dd..9f3d69284ff 100644 --- a/cpp/src/IceSSL/Instance.h +++ b/cpp/src/IceSSL/Instance.h @@ -35,6 +35,7 @@ public: void setPasswordPrompt(const PasswordPromptPtr&); Ice::CommunicatorPtr communicator() const; + IceInternal::EndpointHostResolverPtr endpointHostResolver() const; std::string defaultHost() const; int networkTraceLevel() const; std::string networkTraceCategory() const; diff --git a/cpp/src/IceSSL/TransceiverI.cpp b/cpp/src/IceSSL/TransceiverI.cpp index d4b86a2a427..d930c3d8cff 100644 --- a/cpp/src/IceSSL/TransceiverI.cpp +++ b/cpp/src/IceSSL/TransceiverI.cpp @@ -54,6 +54,11 @@ IceSSL::TransceiverI::close() void IceSSL::TransceiverI::shutdownWrite() { + if(_state < StateConnected) + { + return; + } + if(_instance->networkTraceLevel() >= 2) { Trace out(_logger, _instance->networkTraceCategory()); @@ -69,6 +74,11 @@ IceSSL::TransceiverI::shutdownWrite() void IceSSL::TransceiverI::shutdownReadWrite() { + if(_state < StateConnected) + { + return; + } + if(_instance->networkTraceLevel() >= 2) { Trace out(_logger, _instance->networkTraceCategory()); @@ -81,7 +91,7 @@ IceSSL::TransceiverI::shutdownReadWrite() IceInternal::shutdownSocketReadWrite(_fd); } -void +bool IceSSL::TransceiverI::write(IceInternal::Buffer& buf, int timeout) { // Its impossible for the packetSize to be more than an Int. @@ -102,12 +112,11 @@ IceSSL::TransceiverI::write(IceInternal::Buffer& buf, int timeout) ERR_clear_error(); // Clear any spurious errors. assert(_fd != INVALID_SOCKET); int ret, err; - bool wantRead, wantWrite; + bool wantWrite; { IceUtil::Mutex::Lock sync(_sslMutex); ret = SSL_write(_ssl, reinterpret_cast<const void*>(&*buf.i), packetSize); err = SSL_get_error(_ssl, ret); - wantRead = SSL_want_read(_ssl); wantWrite = SSL_want_write(_ssl); } @@ -126,14 +135,15 @@ IceSSL::TransceiverI::write(IceInternal::Buffer& buf, int timeout) } case SSL_ERROR_WANT_READ: { - if(!selectRead(_fd, timeout)) - { - throw TimeoutException(__FILE__, __LINE__); - } - continue; + assert(false); + break; } case SSL_ERROR_WANT_WRITE: { + if(timeout == 0) + { + return false; + } if(!selectWrite(_fd, timeout)) { throw TimeoutException(__FILE__, __LINE__); @@ -157,15 +167,12 @@ IceSSL::TransceiverI::write(IceInternal::Buffer& buf, int timeout) if(IceInternal::wouldBlock()) { - if(wantRead) + if(wantWrite) { - if(!selectRead(_fd, timeout)) + if(timeout == 0) { - throw TimeoutException(__FILE__, __LINE__); + return false; } - } - else if(wantWrite) - { if(!selectWrite(_fd, timeout)) { throw TimeoutException(__FILE__, __LINE__); @@ -221,9 +228,11 @@ IceSSL::TransceiverI::write(IceInternal::Buffer& buf, int timeout) packetSize = static_cast<int>(buf.b.end() - buf.i); } } + + return true; } -void +bool IceSSL::TransceiverI::read(IceInternal::Buffer& buf, int timeout) { // It's impossible for the packetSize to be more than an Int. @@ -234,13 +243,12 @@ IceSSL::TransceiverI::read(IceInternal::Buffer& buf, int timeout) ERR_clear_error(); // Clear any spurious errors. assert(_fd != INVALID_SOCKET); int ret, err; - bool wantRead, wantWrite; + bool wantRead; { IceUtil::Mutex::Lock sync(_sslMutex); ret = SSL_read(_ssl, reinterpret_cast<void*>(&*buf.i), packetSize); err = SSL_get_error(_ssl, ret); wantRead = SSL_want_read(_ssl); - wantWrite = SSL_want_write(_ssl); } if(ret <= 0) @@ -269,6 +277,10 @@ IceSSL::TransceiverI::read(IceInternal::Buffer& buf, int timeout) } case SSL_ERROR_WANT_READ: { + if(timeout == 0) + { + return false; + } if(!selectRead(_fd, timeout)) { throw TimeoutException(__FILE__, __LINE__); @@ -277,11 +289,8 @@ IceSSL::TransceiverI::read(IceInternal::Buffer& buf, int timeout) } case SSL_ERROR_WANT_WRITE: { - if(!selectWrite(_fd, timeout)) - { - throw TimeoutException(__FILE__, __LINE__); - } - continue; + assert(false); + break; } case SSL_ERROR_SYSCALL: { @@ -302,19 +311,15 @@ IceSSL::TransceiverI::read(IceInternal::Buffer& buf, int timeout) { if(wantRead) { - if(!selectRead(_fd, timeout)) + if(timeout == 0) { - throw TimeoutException(__FILE__, __LINE__); + return false; } - } - else if(wantWrite) - { - if(!selectWrite(_fd, timeout)) + if(!selectRead(_fd, timeout)) { throw TimeoutException(__FILE__, __LINE__); } } - continue; } @@ -361,8 +366,8 @@ IceSSL::TransceiverI::read(IceInternal::Buffer& buf, int timeout) //if(ERR_GET_LIB(e) == ERR_LIB_SSL && ERR_GET_REASON(e) == SSL_R_DECRYPTION_FAILED_OR_BAD_RECORD_MAC) // unsigned long e = ERR_peek_error(); - if(ERR_GET_LIB(e) == ERR_LIB_SSL && - strcmp(ERR_reason_error_string(e), "decryption failed or bad record mac") == 0) + const char* estr = ERR_GET_LIB(e) == ERR_LIB_SSL ? ERR_reason_error_string(e) : 0; + if(estr && strcmp(estr, "decryption failed or bad record mac") == 0) { ConnectionLostException ex(__FILE__, __LINE__); ex.error = 0; @@ -396,6 +401,8 @@ IceSSL::TransceiverI::read(IceInternal::Buffer& buf, int timeout) packetSize = static_cast<int>(buf.b.end() - buf.i); } } + + return true; } string @@ -410,129 +417,157 @@ IceSSL::TransceiverI::toString() const return _desc; } -void +IceInternal::SocketStatus IceSSL::TransceiverI::initialize(int timeout) { - if(_incoming) + if(_state == StateNeedConnect && timeout == 0) + { + _state = StateConnectPending; + return IceInternal::NeedConnect; + } + else if(_state <= StateConnectPending) + { + IceInternal::doFinishConnect(_fd, timeout); + _state = StateConnected; + _desc = IceInternal::fdToString(_fd); + } + assert(_state == StateConnected); + + do { - // TODO: The timeout is 0 when called by the thread pool. - // Make this configurable? - if(timeout == 0) + // + // Only one thread calls initialize(), so synchronization is not necessary here. + // + int ret = _incoming ? SSL_accept(_ssl) : SSL_connect(_ssl); + switch(SSL_get_error(_ssl, ret)) { - timeout = -1; + case SSL_ERROR_NONE: + assert(SSL_is_init_finished(_ssl)); + break; + case SSL_ERROR_ZERO_RETURN: + { + ConnectionLostException ex(__FILE__, __LINE__); + ex.error = IceInternal::getSocketErrno(); + throw ex; } - - do + case SSL_ERROR_WANT_READ: { - // - // Only one thread calls initialize(), so synchronization is not necessary here. - // - int ret = SSL_accept(_ssl); - switch(SSL_get_error(_ssl, ret)) + if(timeout == 0) { - case SSL_ERROR_NONE: - assert(SSL_is_init_finished(_ssl)); - break; - case SSL_ERROR_ZERO_RETURN: + return IceInternal::NeedRead; + } + if(!selectRead(_fd, timeout)) { - ConnectionLostException ex(__FILE__, __LINE__); - ex.error = IceInternal::getSocketErrno(); - throw ex; + throw ConnectTimeoutException(__FILE__, __LINE__); } - case SSL_ERROR_WANT_READ: + break; + } + case SSL_ERROR_WANT_WRITE: + { + if(timeout == 0) { - if(!selectRead(_fd, timeout)) - { - throw ConnectTimeoutException(__FILE__, __LINE__); - } - break; + return IceInternal::NeedWrite; } - case SSL_ERROR_WANT_WRITE: + if(!selectWrite(_fd, timeout)) { - if(!selectWrite(_fd, timeout)) - { - throw ConnectTimeoutException(__FILE__, __LINE__); - } - break; + throw ConnectTimeoutException(__FILE__, __LINE__); } - case SSL_ERROR_SYSCALL: + break; + } + case SSL_ERROR_SYSCALL: + { + if(ret == -1) { - if(ret == -1) + if(IceInternal::interrupted()) { - if(IceInternal::interrupted()) - { - break; - } - - if(IceInternal::wouldBlock()) + break; + } + + if(IceInternal::wouldBlock()) + { + if(SSL_want_read(_ssl)) { - if(SSL_want_read(_ssl)) + if(timeout == 0) { - if(!selectRead(_fd, timeout)) - { - throw ConnectTimeoutException(__FILE__, __LINE__); - } + return IceInternal::NeedRead; } - else if(SSL_want_write(_ssl)) + if(!selectRead(_fd, timeout)) { - if(!selectWrite(_fd, timeout)) - { - throw ConnectTimeoutException(__FILE__, __LINE__); - } + throw ConnectTimeoutException(__FILE__, __LINE__); } - - break; } - - if(IceInternal::connectionLost()) + else if(SSL_want_write(_ssl)) { - ConnectionLostException ex(__FILE__, __LINE__); - ex.error = IceInternal::getSocketErrno(); - throw ex; + if(timeout == 0) + { + return IceInternal::NeedWrite; + } + if(!selectWrite(_fd, timeout)) + { + throw ConnectTimeoutException(__FILE__, __LINE__); + } } + + break; } - - if(ret == 0) + + if(IceInternal::connectionLost()) { ConnectionLostException ex(__FILE__, __LINE__); - ex.error = 0; + ex.error = IceInternal::getSocketErrno(); throw ex; } - - SocketException ex(__FILE__, __LINE__); - ex.error = IceInternal::getSocketErrno(); - throw ex; } - case SSL_ERROR_SSL: + + if(ret == 0) { - struct sockaddr_in remoteAddr; - string desc; - if(IceInternal::fdToRemoteAddress(_fd, remoteAddr)) - { - desc = IceInternal::addrToString(remoteAddr); - } - ProtocolException ex(__FILE__, __LINE__); - ex.reason = "SSL error occurred for new incoming connection:\nremote address = " + desc + "\n" + - _instance->sslErrors(); + ConnectionLostException ex(__FILE__, __LINE__); + ex.error = 0; throw ex; } + + SocketException ex(__FILE__, __LINE__); + ex.error = IceInternal::getSocketErrno(); + throw ex; + } + case SSL_ERROR_SSL: + { + struct sockaddr_in remoteAddr; + string desc; + if(IceInternal::fdToRemoteAddress(_fd, remoteAddr)) + { + desc = IceInternal::addrToString(remoteAddr); } + ProtocolException ex(__FILE__, __LINE__); + ex.reason = "SSL error occurred for new incoming connection:\nremote address = " + desc + "\n" + + _instance->sslErrors(); + throw ex; } - while(!SSL_is_init_finished(_ssl)); - - _instance->verifyPeer(_ssl, _fd, "", _adapterName, true); + } + } + while(!SSL_is_init_finished(_ssl)); + + _instance->verifyPeer(_ssl, _fd, "", _adapterName, _incoming); - if(_instance->networkTraceLevel() >= 1) + if(_instance->networkTraceLevel() >= 1) + { + Trace out(_logger, _instance->networkTraceCategory()); + if(_incoming) { - Trace out(_logger, _instance->networkTraceCategory()); out << "accepted ssl connection\n" << IceInternal::fdToString(_fd); } - - if(_instance->securityTraceLevel() >= 1) + else { - _instance->traceConnection(_ssl, true); + out << "ssl connection established\n" << IceInternal::fdToString(_fd); } } + + if(_instance->securityTraceLevel() >= 1) + { + _instance->traceConnection(_ssl, _incoming); + } + + return IceInternal::Finished; } void @@ -554,7 +589,7 @@ IceSSL::TransceiverI::getConnectionInfo() const return populateConnectionInfo(_ssl, _fd, _adapterName, _incoming); } -IceSSL::TransceiverI::TransceiverI(const InstancePtr& instance, SSL* ssl, SOCKET fd, +IceSSL::TransceiverI::TransceiverI(const InstancePtr& instance, SSL* ssl, SOCKET fd, bool connected, bool incoming, const string& adapterName) : _instance(instance), _logger(instance->communicator()->getLogger()), @@ -563,6 +598,7 @@ IceSSL::TransceiverI::TransceiverI(const InstancePtr& instance, SSL* ssl, SOCKET _fd(fd), _adapterName(adapterName), _incoming(incoming), + _state(connected ? StateConnected : StateNeedConnect), _desc(IceInternal::fdToString(fd)) { #ifdef _WIN32 diff --git a/cpp/src/IceSSL/TransceiverI.h b/cpp/src/IceSSL/TransceiverI.h index 298fd206538..f3d055ea3bd 100644 --- a/cpp/src/IceSSL/TransceiverI.h +++ b/cpp/src/IceSSL/TransceiverI.h @@ -29,24 +29,31 @@ class AcceptorI; class TransceiverI : public IceInternal::Transceiver { + enum State + { + StateNeedConnect, + StateConnectPending, + StateConnected + }; + public: virtual SOCKET fd(); virtual void close(); virtual void shutdownWrite(); virtual void shutdownReadWrite(); - virtual void write(IceInternal::Buffer&, int); - virtual void read(IceInternal::Buffer&, int); + virtual bool write(IceInternal::Buffer&, int); + virtual bool read(IceInternal::Buffer&, int); virtual std::string type() const; virtual std::string toString() const; - virtual void initialize(int); + virtual IceInternal::SocketStatus initialize(int); virtual void checkSendSize(const IceInternal::Buffer&, size_t); ConnectionInfo getConnectionInfo() const; private: - TransceiverI(const InstancePtr&, SSL*, SOCKET, bool, const std::string& = ""); + TransceiverI(const InstancePtr&, SSL*, SOCKET, bool, bool, const std::string& = ""); virtual ~TransceiverI(); friend class ConnectorI; friend class AcceptorI; @@ -65,7 +72,8 @@ private: const std::string _adapterName; const bool _incoming; - const std::string _desc; + State _state; + std::string _desc; #ifdef _WIN32 int _maxPacketSize; #endif diff --git a/cpp/src/IceStorm/Subscriber.cpp b/cpp/src/IceStorm/Subscriber.cpp index b7e5ef45aa9..ae899ee231d 100644 --- a/cpp/src/IceStorm/Subscriber.cpp +++ b/cpp/src/IceStorm/Subscriber.cpp @@ -233,12 +233,11 @@ SubscriberOneway::flush() vector<Ice::Byte> dummy; if(v.size() > 1 && !_batch) { + Ice::ConnectionPtr conn = _objBatch->ice_getConnection(); for(EventDataSeq::const_iterator p = v.begin(); p != v.end(); ++p) { _objBatch->ice_invoke((*p)->op, (*p)->mode, (*p)->data, dummy, (*p)->context); } - Ice::ConnectionPtr conn = _objBatch->ice_getCachedConnection(); - assert(conn); conn->flushBatchRequests(); } else diff --git a/cpp/src/IceUtil/Timer.cpp b/cpp/src/IceUtil/Timer.cpp index 16d34ef0c0a..b440934be16 100755 --- a/cpp/src/IceUtil/Timer.cpp +++ b/cpp/src/IceUtil/Timer.cpp @@ -13,12 +13,6 @@ using namespace std; using namespace IceUtil; -bool -TimerTask::operator<(const TimerTask& r) const -{ - return this < &r; -} - Timer::Timer() : _destroyed(false) { start(); @@ -96,7 +90,7 @@ Timer::cancel(const TimerTaskPtr& task) return false; } - map<TimerTaskPtr, IceUtil::Time>::iterator p = _tasks.find(task); + map<TimerTaskPtr, IceUtil::Time, TimerTaskCompare>::iterator p = _tasks.find(task); if(p == _tasks.end()) { return false; @@ -125,7 +119,7 @@ Timer::run() // if(token.delay != IceUtil::Time()) { - map<TimerTaskPtr, IceUtil::Time>::iterator p = _tasks.find(token.task); + map<TimerTaskPtr, IceUtil::Time, TimerTaskCompare>::iterator p = _tasks.find(token.task); if(p != _tasks.end()) { token.scheduledTime = IceUtil::Time::now(IceUtil::Time::Monotonic) + token.delay; @@ -176,7 +170,7 @@ Timer::run() { try { - token.task->run(); + token.task->runTimerTask(); } catch(const std::exception& e) { diff --git a/cpp/src/slice2cpp/Gen.cpp b/cpp/src/slice2cpp/Gen.cpp index dbc34fc94f7..7179373716e 100755 --- a/cpp/src/slice2cpp/Gen.cpp +++ b/cpp/src/slice2cpp/Gen.cpp @@ -2258,7 +2258,7 @@ Slice::Gen::ProxyVisitor::visitOperation(const OperationPtr& p) { C << nl << "__checkTwowayOnly(" << p->flattenedScope() + p->name() + "_name);"; } - C << nl << "__delBase = __getDelegate();"; + C << nl << "__delBase = __getDelegate(false);"; C << nl << "::IceDelegate" << thisPointer << " __del = dynamic_cast< ::IceDelegate" << thisPointer << ">(__delBase.get());"; C << nl; @@ -2603,8 +2603,8 @@ Slice::Gen::DelegateMVisitor::visitOperation(const OperationPtr& p) H << sp << nl << "virtual " << retS << ' ' << name << spar << params << epar << ';'; C << sp << nl << retS << nl << "IceDelegateM" << scoped << spar << paramsDecl << epar; C << sb; - C << nl << "::IceInternal::Outgoing __og(__connection.get(), __reference.get(), " << flatName << ", " - << operationModeToString(p->sendMode()) << ", __context, __compress);"; + C << nl << "::IceInternal::Outgoing __og(__handler.get(), " << flatName << ", " + << operationModeToString(p->sendMode()) << ", __context);"; if(!inParams.empty()) { C << nl << "try"; @@ -5217,6 +5217,10 @@ Slice::Gen::AsyncVisitor::visitOperation(const OperationPtr& p) C << sb; C << nl << "try"; C << sb; + if(p->returnsData()) + { + C << nl << "__prx->__checkTwowayOnly(\"" << p->name() << "\");"; + } C << nl << "__prepare(__prx, " << flatName << ", " << operationModeToString(p->sendMode()) << ", __ctx);"; writeMarshalCode(C, inParams, 0, StringList(), true); if(p->sendsClasses()) diff --git a/cpp/src/slice2cs/Gen.cpp b/cpp/src/slice2cs/Gen.cpp index 1192172a13e..fc472391b7e 100755 --- a/cpp/src/slice2cs/Gen.cpp +++ b/cpp/src/slice2cs/Gen.cpp @@ -3100,7 +3100,7 @@ Slice::Gen::HelperVisitor::visitClassDefStart(const ClassDefPtr& p) { _out << nl << "checkTwowayOnly__(\"" << op->name() << "\");"; } - _out << nl << "delBase__ = getDelegate__();"; + _out << nl << "delBase__ = getDelegate__(false);"; _out << nl << name << "Del_ del__ = (" << name << "Del_)delBase__;"; _out << nl; if(ret) @@ -3834,9 +3834,8 @@ Slice::Gen::DelegateMVisitor::visitClassDefStart(const ClassDefPtr& p) << "_System.Collections.Generic.Dictionary<string, string> context__" << epar; _out << sb; - _out << nl << "IceInternal.Outgoing og__ = getOutgoing(\"" << op->name() << "\", " - << sliceModeToIceMode(op->sendMode()) - << ", context__);"; + _out << nl << "IceInternal.Outgoing og__ = handler__.getOutgoing(\"" << op->name() << "\", " + << sliceModeToIceMode(op->sendMode()) << ", context__);"; _out << nl << "try"; _out << sb; if(!inParams.empty()) @@ -3979,7 +3978,7 @@ Slice::Gen::DelegateMVisitor::visitClassDefStart(const ClassDefPtr& p) _out << eb; _out << nl << "finally"; _out << sb; - _out << nl << "reclaimOutgoing(og__);"; + _out << nl << "handler__.reclaimOutgoing(og__);"; _out << eb; _out << eb; } @@ -4411,8 +4410,11 @@ Slice::Gen::AsyncVisitor::visitOperation(const OperationPtr& p) _out << sb; _out << nl << "try"; _out << sb; - _out << nl << "prepare__(prx__, \"" << name << "\", " << sliceModeToIceMode(p->sendMode()) - << ", ctx__);"; + if(p->returnsData()) + { + _out << nl << "((Ice.ObjectPrxHelperBase)prx__).checkTwowayOnly__(\"" << p->name() << "\");"; + } + _out << nl << "prepare__(prx__, \"" << name << "\", " << sliceModeToIceMode(p->sendMode()) << ", ctx__);"; for(q = inParams.begin(); q != inParams.end(); ++q) { string typeS = typeToString(q->first); diff --git a/cpp/src/slice2freezej/Main.cpp b/cpp/src/slice2freezej/Main.cpp index d82468ab033..8e30f9d4097 100644 --- a/cpp/src/slice2freezej/Main.cpp +++ b/cpp/src/slice2freezej/Main.cpp @@ -541,9 +541,9 @@ FreezeGenerator::generate(UnitPtr& u, const Dict& dict) { out << nl << "__os.endWriteEncaps();"; } - out << nl << "java.nio.ByteBuffer __buf = __os.prepareWrite();"; - out << nl << "byte[] __r = new byte[__buf.limit()];"; - out << nl << "__buf.get(__r);"; + out << nl << "IceInternal.Buffer __buf = __os.prepareWrite();"; + out << nl << "byte[] __r = new byte[__buf.size()];"; + out << nl << "__buf.b.get(__r);"; out << nl << "return __r;"; out << eb; @@ -559,10 +559,10 @@ FreezeGenerator::generate(UnitPtr& u, const Dict& dict) out << nl << "__is.sliceObjects(false);"; } out << nl << "__is.resize(b.length, true);"; - out << nl << "java.nio.ByteBuffer __buf = __is.prepareRead();"; - out << nl << "__buf.position(0);"; - out << nl << "__buf.put(b);"; - out << nl << "__buf.position(0);"; + out << nl << "IceInternal.Buffer __buf = __is.getBuffer();"; + out << nl << "__buf.b.position(0);"; + out << nl << "__buf.b.put(b);"; + out << nl << "__buf.b.position(0);"; if(encaps) { out << nl << "__is.startReadEncaps();"; @@ -696,9 +696,9 @@ FreezeGenerator::generate(UnitPtr& u, const Dict& dict) writeMarshalUnmarshalCode(out, "", indexTypes[i], keyS, true, iter, false); assert(!indexTypes[i]->usesClasses()); - out << nl << "java.nio.ByteBuffer buf = __os.prepareWrite();"; - out << nl << "byte[] r = new byte[buf.limit()];"; - out << nl << "buf.get(r);"; + out << nl << "IceInternal.Buffer buf = __os.prepareWrite();"; + out << nl << "byte[] r = new byte[buf.size()];"; + out << nl << "buf.b.get(r);"; out << nl << "return r;"; } out << eb; @@ -720,10 +720,10 @@ FreezeGenerator::generate(UnitPtr& u, const Dict& dict) { out << nl << "IceInternal.BasicStream __is = new IceInternal.BasicStream(Ice.Util.getInstance(communicator));"; out << nl << "__is.resize(bytes.length, true);"; - out << nl << "java.nio.ByteBuffer buf = __is.prepareRead();"; - out << nl << "buf.position(0);"; - out << nl << "buf.put(bytes);"; - out << nl << "buf.position(0);"; + out << nl << "IceInternal.Buffer buf = __is.getBuffer();"; + out << nl << "buf.b.position(0);"; + out << nl << "buf.b.put(bytes);"; + out << nl << "buf.b.position(0);"; int iter = 0; list<string> metaData; @@ -1057,9 +1057,9 @@ FreezeGenerator::generate(UnitPtr& u, const Index& index) { out << nl << "__os.writePendingObjects();"; } - out << nl << "java.nio.ByteBuffer __buf = __os.prepareWrite();"; - out << nl << "byte[] __r = new byte[__buf.limit()];"; - out << nl << "__buf.get(__r);"; + out << nl << "IceInternal.Buffer __buf = __os.prepareWrite();"; + out << nl << "byte[] __r = new byte[__buf.size()];"; + out << nl << "__buf.b.get(__r);"; out << nl << "return __r;"; out << eb; diff --git a/cpp/src/slice2java/Gen.cpp b/cpp/src/slice2java/Gen.cpp index 37fe9a2d6d8..32a9e57a7ae 100644 --- a/cpp/src/slice2java/Gen.cpp +++ b/cpp/src/slice2java/Gen.cpp @@ -3398,7 +3398,7 @@ Slice::Gen::HelperVisitor::visitClassDefStart(const ClassDefPtr& p) { out << nl << "__checkTwowayOnly(\"" << opName << "\");"; } - out << nl << "__delBase = __getDelegate();"; + out << nl << "__delBase = __getDelegate(false);"; out << nl << '_' << name << "Del __del = (_" << name << "Del)__delBase;"; out << nl; if(ret) @@ -4164,8 +4164,8 @@ Slice::Gen::DelegateMVisitor::visitClassDefStart(const ClassDefPtr& p) writeDelegateThrowsClause(package, throws); out << sb; - out << nl << "IceInternal.Outgoing __og = __connection.getOutgoing(__reference, \"" << op->name() << "\", " - << sliceModeToIceMode(op->sendMode()) << ", __ctx, __compress);"; + out << nl << "IceInternal.Outgoing __og = __handler.getOutgoing(\"" << op->name() << "\", " + << sliceModeToIceMode(op->sendMode()) << ", __ctx);"; out << nl << "try"; out << sb; if(!inParams.empty()) @@ -4253,7 +4253,7 @@ Slice::Gen::DelegateMVisitor::visitClassDefStart(const ClassDefPtr& p) out << eb; out << nl << "finally"; out << sb; - out << nl << "__connection.reclaimOutgoing(__og);"; + out << nl << "__handler.reclaimOutgoing(__og);"; out << eb; out << eb; } @@ -4987,8 +4987,11 @@ Slice::Gen::AsyncVisitor::visitOperation(const OperationPtr& p) out << sb; out << nl << "try"; out << sb; - out << nl << "__prepare(__prx, \"" << p->name() << "\", " - << sliceModeToIceMode(p->sendMode()) << ", __ctx);"; + if(p->returnsData()) + { + out << nl << "((Ice.ObjectPrxHelperBase)__prx).__checkTwowayOnly(\"" << p->name() << "\");"; + } + out << nl << "__prepare(__prx, \"" << p->name() << "\", " << sliceModeToIceMode(p->sendMode()) << ", __ctx);"; iter = 0; for(pli = inParams.begin(); pli != inParams.end(); ++pli) { |