diff options
Diffstat (limited to 'cppe/src')
-rwxr-xr-x | cppe/src/IceE/Communicator.cpp | 8 | ||||
-rwxr-xr-x | cppe/src/IceE/Connection.cpp | 2 | ||||
-rw-r--r-- | cppe/src/IceE/Instance.cpp | 34 | ||||
-rw-r--r-- | cppe/src/IceE/Instance.h | 6 | ||||
-rw-r--r-- | cppe/src/IceE/ObjectAdapter.cpp | 10 | ||||
-rw-r--r-- | cppe/src/IceE/Proxy.cpp | 12 | ||||
-rw-r--r-- | cppe/src/IceE/Reference.cpp | 26 | ||||
-rw-r--r-- | cppe/src/IceE/Reference.h | 15 | ||||
-rw-r--r-- | cppe/src/IceE/ReferenceFactory.cpp | 26 | ||||
-rw-r--r-- | cppe/src/IceE/ReferenceFactory.h | 6 | ||||
-rw-r--r-- | cppe/src/IceE/SharedContext.h | 47 |
11 files changed, 140 insertions, 52 deletions
diff --git a/cppe/src/IceE/Communicator.cpp b/cppe/src/IceE/Communicator.cpp index e3089448f26..8f406a4f733 100755 --- a/cppe/src/IceE/Communicator.cpp +++ b/cppe/src/IceE/Communicator.cpp @@ -116,10 +116,16 @@ Ice::Communicator::createObjectAdapterWithRouter(const string& name, const Route #endif +void +Ice::Communicator::setDefaultContext(const Context& ctx) +{ + _instance->setDefaultContext(ctx); +} + Ice::Context Ice::Communicator::getDefaultContext() const { - return _instance->initializationData().defaultContext; + return _instance->getDefaultContext()->getValue(); } PropertiesPtr diff --git a/cppe/src/IceE/Connection.cpp b/cppe/src/IceE/Connection.cpp index 08b13996902..57f22775c0b 100755 --- a/cppe/src/IceE/Connection.cpp +++ b/cppe/src/IceE/Connection.cpp @@ -866,7 +866,7 @@ Ice::Connection::createProxy(const Identity& ident) const // vector<ConnectionPtr> connections; connections.push_back(const_cast<Connection*>(this)); - ReferencePtr ref = _instance->referenceFactory()->create(ident, _instance->initializationData().defaultContext, "", + ReferencePtr ref = _instance->referenceFactory()->create(ident, _instance->getDefaultContext(), "", Reference::ModeTwoway, connections); return _instance->proxyFactory()->referenceToProxy(ref); } diff --git a/cppe/src/IceE/Instance.cpp b/cppe/src/IceE/Instance.cpp index 67dbb2750ba..5d7977c5fd0 100644 --- a/cppe/src/IceE/Instance.cpp +++ b/cppe/src/IceE/Instance.cpp @@ -222,6 +222,33 @@ IceInternal::Instance::flushBatchRequests() } #endif +void +IceInternal::Instance::setDefaultContext(const Context& ctx) +{ + IceUtil::RecMutex::Lock sync(*this); + + if(_state == StateDestroyed) + { + throw CommunicatorDestroyedException(__FILE__, __LINE__); + } + + _defaultContext = new SharedContext(ctx); +} + +SharedContextPtr +IceInternal::Instance::getDefaultContext() const +{ + IceUtil::RecMutex::Lock sync(*this); + + if(_state == StateDestroyed) + { + throw CommunicatorDestroyedException(__FILE__, __LINE__); + } + + return _defaultContext; +} + + Identity IceInternal::Instance::stringToIdentity(const string& s) const { @@ -328,10 +355,11 @@ IceInternal::Instance::identityToString(const Identity& ident) const IceInternal::Instance::Instance(const CommunicatorPtr& communicator, const InitializationData& initData) : _state(StateActive), _initData(initData), - _messageSizeMax(0) + _messageSizeMax(0), #ifndef ICEE_PURE_BLOCKING_CLIENT - , _threadPerConnectionStackSize(0) + _threadPerConnectionStackSize(0), #endif + _defaultContext(new SharedContext(initData.defaultContext)) { try { @@ -514,7 +542,7 @@ IceInternal::Instance::Instance(const CommunicatorPtr& communicator, const Initi if(!_initData.wstringConverter) { - const_cast<WstringConverterPtr&>(_initData.wstringConverter) = new UnicodeWstringConverter(); + _initData.wstringConverter = new UnicodeWstringConverter(); } __setNoDelete(false); diff --git a/cppe/src/IceE/Instance.h b/cppe/src/IceE/Instance.h index 0b40da1ed2e..bb278faa0ac 100644 --- a/cppe/src/IceE/Instance.h +++ b/cppe/src/IceE/Instance.h @@ -28,6 +28,7 @@ #include <IceE/Shared.h> #include <IceE/RecMutex.h> #include <IceE/Initialize.h> +#include <IceE/SharedContext.h> #include <IceE/Identity.h> namespace IceInternal @@ -56,6 +57,10 @@ public: #ifdef ICEE_HAS_BATCH void flushBatchRequests(); #endif + + void setDefaultContext(const ::Ice::Context&); + SharedContextPtr getDefaultContext() const; + #ifndef ICEE_PURE_BLOCKING_CLIENT size_t threadPerConnectionStackSize() const; #endif @@ -104,6 +109,7 @@ private: #ifndef ICEE_PURE_CLIENT ObjectAdapterFactoryPtr _objectAdapterFactory; #endif + SharedContextPtr _defaultContext; }; class UTF8BufferI : public Ice::UTF8Buffer diff --git a/cppe/src/IceE/ObjectAdapter.cpp b/cppe/src/IceE/ObjectAdapter.cpp index 012d5a16b52..e9b6a88e774 100644 --- a/cppe/src/IceE/ObjectAdapter.cpp +++ b/cppe/src/IceE/ObjectAdapter.cpp @@ -519,7 +519,7 @@ Ice::ObjectAdapter::createReverseProxy(const Identity& ident) const // reference. // vector<EndpointPtr> endpoints; - ReferencePtr ref = _instance->referenceFactory()->create(ident, _instance->initializationData().defaultContext, "", + ReferencePtr ref = _instance->referenceFactory()->create(ident, _instance->getDefaultContext(), "", Reference::ModeTwoway, connections); return _instance->proxyFactory()->referenceToProxy(ref); } @@ -775,10 +775,10 @@ Ice::ObjectAdapter::newDirectProxy(const Identity& ident, const string& facet) c // Create a reference and return a proxy for this reference. // #ifdef ICEE_HAS_ROUTER - ReferencePtr ref = _instance->referenceFactory()->create(ident, _instance->initializationData().defaultContext, + ReferencePtr ref = _instance->referenceFactory()->create(ident, _instance->getDefaultContext(), facet, Reference::ModeTwoway, false, endpoints, 0); #else - ReferencePtr ref = _instance->referenceFactory()->create(ident, _instance->initializationData().defaultContext, + ReferencePtr ref = _instance->referenceFactory()->create(ident, _instance->getDefaultContext(), facet, Reference::ModeTwoway, false, endpoints); #endif return _instance->proxyFactory()->referenceToProxy(ref); @@ -793,11 +793,11 @@ Ice::ObjectAdapter::newIndirectProxy(const Identity& ident, const string& facet, // Create a reference with the adapter id. // #ifdef ICEE_HAS_ROUTER - ReferencePtr ref = _instance->referenceFactory()->create(ident, _instance->initializationData().defaultContext, + ReferencePtr ref = _instance->referenceFactory()->create(ident, _instance->getDefaultContext(), facet, Reference::ModeTwoway, false, id, 0, _locatorInfo); #else - ReferencePtr ref = _instance->referenceFactory()->create(ident, _instance->initializationData().defaultContext, + ReferencePtr ref = _instance->referenceFactory()->create(ident, _instance->getDefaultContext(), facet, Reference::ModeTwoway, false, id, _locatorInfo); #endif diff --git a/cppe/src/IceE/Proxy.cpp b/cppe/src/IceE/Proxy.cpp index 31ced0d3e44..da3f5a36812 100644 --- a/cppe/src/IceE/Proxy.cpp +++ b/cppe/src/IceE/Proxy.cpp @@ -177,7 +177,7 @@ IceProxy::Ice::Object::ice_toString() const bool IceProxy::Ice::Object::ice_isA(const string& __id) { - return ice_isA(__id, _reference->getContext()); + return ice_isA(__id, _reference->getContext()->getValue()); } bool @@ -250,7 +250,7 @@ IceProxy::Ice::Object::ice_isA(const string& __id, const Context& __context) void IceProxy::Ice::Object::ice_ping() { - ice_ping(_reference->getContext()); + ice_ping(_reference->getContext()->getValue()); } void @@ -312,7 +312,7 @@ IceProxy::Ice::Object::ice_ping(const Context& __context) vector<string> IceProxy::Ice::Object::ice_ids() { - return ice_ids(_reference->getContext()); + return ice_ids(_reference->getContext()->getValue()); } vector<string> @@ -377,7 +377,7 @@ IceProxy::Ice::Object::ice_ids(const Context& __context) string IceProxy::Ice::Object::ice_id() { - return ice_id(_reference->getContext()); + return ice_id(_reference->getContext()->getValue()); } string @@ -442,7 +442,7 @@ IceProxy::Ice::Object::ice_id(const Context& __context) Context IceProxy::Ice::Object::ice_getContext() const { - return _reference->getContext(); + return _reference->getContext()->getValue(); } ObjectPrx @@ -794,7 +794,7 @@ IceProxy::Ice::Object::__checkTwowayOnly(const char* name) const const Context& IceProxy::Ice::Object::__defaultContext() const { - return _reference->getContext(); + return _reference->getContext()->getValue(); } void diff --git a/cppe/src/IceE/Reference.cpp b/cppe/src/IceE/Reference.cpp index e35e779f09e..3af3a3728b3 100644 --- a/cppe/src/IceE/Reference.cpp +++ b/cppe/src/IceE/Reference.cpp @@ -42,7 +42,7 @@ ReferencePtr IceInternal::Reference::defaultContext() const { ReferencePtr r = _instance->referenceFactory()->copy(this); - r->_context = _instance->initializationData().defaultContext; + r->_context = _instance->getDefaultContext(); return r; } @@ -56,7 +56,7 @@ ReferencePtr IceInternal::Reference::changeContext(const Context& newContext) const { ReferencePtr r = _instance->referenceFactory()->copy(this); - r->_context = newContext; + r->_context = new SharedContext(newContext); return r; } @@ -134,7 +134,7 @@ Reference::hash() const h = 5 * h + *p; } - for(q = _context.begin(); q != _context.end(); ++q) + for(q = _context->getValue().begin(); q != _context->getValue().end(); ++q) { for(p = q->first.begin(); p != q->first.end(); ++p) { @@ -303,7 +303,7 @@ IceInternal::Reference::operator==(const Reference& r) const return false; } - if(_context != r._context) + if(_context->getValue() != r._context->getValue()) { return false; } @@ -361,11 +361,11 @@ IceInternal::Reference::operator<(const Reference& r) const return false; } - if(_context < r._context) + if(_context->getValue() < r._context->getValue()) { return true; } - else if(r._context < _context) + else if(r._context->getValue() < _context->getValue()) { return false; } @@ -403,7 +403,7 @@ IceInternal::Reference::operator<(const Reference& r) const } IceInternal::Reference::Reference(const InstancePtr& inst, const CommunicatorPtr& com, const Identity& ident, - const Context& ctx, const string& fs, Mode md, bool sec) : + const SharedContextPtr& ctx, const string& fs, Mode md, bool sec) : _hashInitialized(false), _instance(inst), _communicator(com), @@ -450,7 +450,7 @@ void IceInternal::incRef(IceInternal::FixedReference* p) { p->__incRef(); } void IceInternal::decRef(IceInternal::FixedReference* p) { p->__decRef(); } IceInternal::FixedReference::FixedReference(const InstancePtr& inst, const CommunicatorPtr& com, const Identity& ident, - const Context& ctx, const string& fs, Mode md, + const SharedContextPtr& ctx, const string& fs, Mode md, const vector<ConnectionPtr>& fixedConns) : Reference(inst, com, ident, ctx, fs, md, false), _fixedConnections(fixedConns) @@ -699,7 +699,7 @@ IceInternal::RoutableReference::operator<(const Reference& r) const } IceInternal::RoutableReference::RoutableReference(const InstancePtr& inst, const CommunicatorPtr& com, - const Identity& ident, const Context& ctx, const string& fs, + const Identity& ident, const SharedContextPtr& ctx, const string& fs, Mode md, bool sec, const RouterInfoPtr& rtrInfo) : Reference(inst, com, ident, ctx, fs, md, sec), _routerInfo(rtrInfo) { @@ -717,7 +717,7 @@ void IceInternal::decRef(IceInternal::DirectReference* p) { p->__decRef(); } #ifdef ICEE_HAS_ROUTER IceInternal::DirectReference::DirectReference(const InstancePtr& inst, const CommunicatorPtr& com, - const Identity& ident, const Context& ctx, const string& fs, Mode md, + const Identity& ident, const SharedContextPtr& ctx, const string& fs, Mode md, bool sec, const vector<EndpointPtr>& endpts, const RouterInfoPtr& rtrInfo) : @@ -727,7 +727,7 @@ IceInternal::DirectReference::DirectReference(const InstancePtr& inst, const Com } #else IceInternal::DirectReference::DirectReference(const InstancePtr& inst, const CommunicatorPtr& com, - const Identity& ident, const Context& ctx, const string& fs, Mode md, + const Identity& ident, const SharedContextPtr& ctx, const string& fs, Mode md, bool sec, const vector<EndpointPtr>& endpts) : Reference(inst, com, ident, ctx, fs, md, sec), _endpoints(endpts) @@ -921,7 +921,7 @@ void IceInternal::decRef(IceInternal::IndirectReference* p) { p->__decRef(); } #ifdef ICEE_HAS_ROUTER IceInternal::IndirectReference::IndirectReference(const InstancePtr& inst, const CommunicatorPtr& com, - const Identity& ident, const Context& ctx, const string& fs, + const Identity& ident, const SharedContextPtr& ctx, const string& fs, Mode md, bool sec, const string& adptid, const RouterInfoPtr& rtrInfo, const LocatorInfoPtr& locInfo) : RoutableReference(inst, com, ident, ctx, fs, md, sec, rtrInfo), @@ -931,7 +931,7 @@ IceInternal::IndirectReference::IndirectReference(const InstancePtr& inst, const } #else IceInternal::IndirectReference::IndirectReference(const InstancePtr& inst, const CommunicatorPtr& com, - const Identity& ident, const Context& ctx, const string& fs, + const Identity& ident, const SharedContextPtr& ctx, const string& fs, Mode md, bool sec, const string& adptid, const LocatorInfoPtr& locInfo) : Reference(inst, com, ident, ctx, fs, md, sec), diff --git a/cppe/src/IceE/Reference.h b/cppe/src/IceE/Reference.h index e16d630c44c..5557fbcef95 100644 --- a/cppe/src/IceE/Reference.h +++ b/cppe/src/IceE/Reference.h @@ -25,6 +25,7 @@ #include <IceE/ConnectionF.h> #include <IceE/Shared.h> #include <IceE/RecMutex.h> +#include <IceE/SharedContext.h> #include <IceE/Identity.h> namespace IceInternal @@ -51,7 +52,7 @@ public: const Ice::Identity& getIdentity() const { return _identity; } const std::string& getFacet() const { return _facet; } const InstancePtr& getInstance() const { return _instance; } - const Ice::Context& getContext() const { return _context; } + const SharedContextPtr& getContext() const { return _context; } ReferencePtr defaultContext() const; @@ -108,7 +109,7 @@ public: protected: - Reference(const InstancePtr&, const Ice::CommunicatorPtr&, const Ice::Identity&, const Ice::Context&, + Reference(const InstancePtr&, const Ice::CommunicatorPtr&, const Ice::Identity&, const SharedContextPtr&, const std::string&, Mode, bool); Reference(const Reference&); @@ -126,7 +127,7 @@ private: Mode _mode; bool _secure; Ice::Identity _identity; - Ice::Context _context; + SharedContextPtr _context; std::string _facet; // @@ -144,7 +145,7 @@ class FixedReference : public Reference { public: - FixedReference(const InstancePtr&, const Ice::CommunicatorPtr&, const Ice::Identity&, const Ice::Context&, + FixedReference(const InstancePtr&, const Ice::CommunicatorPtr&, const Ice::Identity&, const SharedContextPtr&, const std::string&, Mode, const std::vector<Ice::ConnectionPtr>&); const std::vector<Ice::ConnectionPtr>& getFixedConnections() const; @@ -201,7 +202,7 @@ public: protected: - RoutableReference(const InstancePtr&, const Ice::CommunicatorPtr&, const Ice::Identity&, const Ice::Context&, + RoutableReference(const InstancePtr&, const Ice::CommunicatorPtr&, const Ice::Identity&, const SharedContextPtr&, const std::string&, Mode, bool, const RouterInfoPtr&); RoutableReference(const RoutableReference&); @@ -221,7 +222,7 @@ class DirectReference : { public: - DirectReference(const InstancePtr&, const Ice::CommunicatorPtr&, const Ice::Identity&, const Ice::Context&, + DirectReference(const InstancePtr&, const Ice::CommunicatorPtr&, const Ice::Identity&, const SharedContextPtr&, const std::string&, Mode, bool, const std::vector<EndpointPtr>& #ifdef ICEE_HAS_ROUTER , const RouterInfoPtr& @@ -273,7 +274,7 @@ class IndirectReference : { public: - IndirectReference(const InstancePtr&, const Ice::CommunicatorPtr&, const Ice::Identity&, const Ice::Context&, + IndirectReference(const InstancePtr&, const Ice::CommunicatorPtr&, const Ice::Identity&, const SharedContextPtr&, const std::string&, Mode, bool, const std::string& #ifdef ICEE_HAS_ROUTER , const RouterInfoPtr& diff --git a/cppe/src/IceE/ReferenceFactory.cpp b/cppe/src/IceE/ReferenceFactory.cpp index 2d9fdee24e4..1c07371db19 100644 --- a/cppe/src/IceE/ReferenceFactory.cpp +++ b/cppe/src/IceE/ReferenceFactory.cpp @@ -53,7 +53,7 @@ IceInternal::ReferenceFactory::copy(const Reference* r) const ReferencePtr IceInternal::ReferenceFactory::create(const Identity& ident, - const Context& context, + const SharedContextPtr& context, const string& facet, Reference::Mode mode, bool secure, @@ -89,7 +89,7 @@ IceInternal::ReferenceFactory::create(const Identity& ident, ReferencePtr IceInternal::ReferenceFactory::create(const Identity& ident, - const Context& context, + const SharedContextPtr& context, const string& facet, Reference::Mode mode, bool secure, @@ -126,7 +126,7 @@ IceInternal::ReferenceFactory::create(const Identity& ident, ReferencePtr IceInternal::ReferenceFactory::create(const Identity& ident, - const Context& context, + const SharedContextPtr& context, const string& facet, Reference::Mode mode, const vector<Ice::ConnectionPtr>& fixedConnections) @@ -441,10 +441,10 @@ IceInternal::ReferenceFactory::create(const string& str) { #ifdef ICEE_HAS_LOCATOR # ifdef ICEE_HAS_ROUTER - return create(ident, _instance->initializationData().defaultContext, facet, mode, secure, "", routerInfo, + return create(ident, _instance->getDefaultContext(), facet, mode, secure, "", routerInfo, locatorInfo); # else - return create(ident, _instance->initializationData().defaultContext, facet, mode, secure, "", locatorInfo); + return create(ident, _instance->getDefaultContext(), facet, mode, secure, "", locatorInfo); # endif #else ProxyParseException ex(__FILE__, __LINE__); @@ -503,10 +503,10 @@ IceInternal::ReferenceFactory::create(const string& str) } #ifdef ICEE_HAS_ROUTER - return create(ident, _instance->initializationData().defaultContext, facet, mode, secure, endpoints, + return create(ident, _instance->getDefaultContext(), facet, mode, secure, endpoints, routerInfo); #else - return create(ident, _instance->initializationData().defaultContext, facet, mode, secure, endpoints); + return create(ident, _instance->getDefaultContext(), facet, mode, secure, endpoints); #endif break; } @@ -559,10 +559,10 @@ IceInternal::ReferenceFactory::create(const string& str) } #ifdef ICEE_HAS_ROUTER - return create(ident, _instance->initializationData().defaultContext, facet, mode, secure, adapter, + return create(ident, _instance->getDefaultContext(), facet, mode, secure, adapter, routerInfo, locatorInfo); #else - return create(ident, _instance->initializationData().defaultContext, facet, mode, secure, adapter, + return create(ident, _instance->getDefaultContext(), facet, mode, secure, adapter, locatorInfo); #endif break; @@ -637,10 +637,10 @@ IceInternal::ReferenceFactory::create(const Identity& ident, BasicStream* s) endpoints.push_back(endpoint); } #ifdef ICEE_HAS_ROUTER - return create(ident, _instance->initializationData().defaultContext, facet, mode, secure, endpoints, + return create(ident, _instance->getDefaultContext(), facet, mode, secure, endpoints, routerInfo); #else - return create(ident, _instance->initializationData().defaultContext, facet, mode, secure, endpoints); + return create(ident, _instance->getDefaultContext(), facet, mode, secure, endpoints); #endif } else @@ -649,10 +649,10 @@ IceInternal::ReferenceFactory::create(const Identity& ident, BasicStream* s) LocatorInfoPtr locatorInfo = _instance->locatorManager()->get(getDefaultLocator()); s->read(adapterId); # ifdef ICEE_HAS_ROUTER - return create(ident, _instance->initializationData().defaultContext, facet, mode, secure, adapterId, + return create(ident, _instance->getDefaultContext(), facet, mode, secure, adapterId, routerInfo, locatorInfo); # else - return create(ident, _instance->initializationData().defaultContext, facet, mode, secure, adapterId, + return create(ident, _instance->getDefaultContext(), facet, mode, secure, adapterId, locatorInfo); # endif #else diff --git a/cppe/src/IceE/ReferenceFactory.h b/cppe/src/IceE/ReferenceFactory.h index 740aa9206e9..f905911fd6c 100644 --- a/cppe/src/IceE/ReferenceFactory.h +++ b/cppe/src/IceE/ReferenceFactory.h @@ -31,7 +31,7 @@ public: // // Create a direct reference. // - ReferencePtr create(const ::Ice::Identity&, const ::Ice::Context&, const ::std::string&, + ReferencePtr create(const ::Ice::Identity&, const SharedContextPtr&, const ::std::string&, Reference::Mode, bool, const ::std::vector<EndpointPtr>& #ifdef ICEE_HAS_ROUTER , const RouterInfoPtr& @@ -41,7 +41,7 @@ public: // Create an indirect reference. // #ifdef ICEE_HAS_LOCATOR - ReferencePtr create(const ::Ice::Identity&, const ::Ice::Context&, const ::std::string&, + ReferencePtr create(const ::Ice::Identity&, const SharedContextPtr&, const ::std::string&, Reference::Mode, bool, const ::std::string& #ifdef ICEE_HAS_ROUTER , const RouterInfoPtr& @@ -51,7 +51,7 @@ public: // // Create a fixed reference. // - ReferencePtr create(const ::Ice::Identity&, const ::Ice::Context&, const ::std::string&, + ReferencePtr create(const ::Ice::Identity&, const SharedContextPtr&, const ::std::string&, Reference::Mode, const ::std::vector< ::Ice::ConnectionPtr>&); // diff --git a/cppe/src/IceE/SharedContext.h b/cppe/src/IceE/SharedContext.h new file mode 100644 index 00000000000..6edf640c21d --- /dev/null +++ b/cppe/src/IceE/SharedContext.h @@ -0,0 +1,47 @@ +// ********************************************************************** +// +// Copyright (c) 2003-2006 ZeroC, Inc. All rights reserved. +// +// This copy of Ice is licensed to you under the terms described in the +// ICEE_LICENSE file included in this distribution. +// +// ********************************************************************** + +#ifndef ICEE_SHARED_CONTEXT_H +#define ICEE_SHARED_CONTEXT_H + +#include <IceE/Shared.h> +#include <IceE/Handle.h> +#include <string> +#include <map> + +namespace Ice +{ +typedef ::std::map< ::std::string, ::std::string> Context; +} + +namespace IceInternal +{ + +class SharedContext : public IceUtil::Shared +{ +public: + + SharedContext(const Ice::Context& val) : + _val(val) + { + } + + inline const Ice::Context& getValue() + { + return _val; + } + +private: + + Ice::Context _val; +}; +typedef IceUtil::Handle<SharedContext> SharedContextPtr; +} + +#endif |