diff options
Diffstat (limited to 'cpp/src')
-rw-r--r-- | cpp/src/Ice/Proxy.cpp | 45 | ||||
-rw-r--r-- | cpp/src/Ice/Reference.cpp | 37 | ||||
-rw-r--r-- | cpp/src/Ice/Reference.h | 10 |
3 files changed, 92 insertions, 0 deletions
diff --git a/cpp/src/Ice/Proxy.cpp b/cpp/src/Ice/Proxy.cpp index d24fcc1c4b2..2df594c44e5 100644 --- a/cpp/src/Ice/Proxy.cpp +++ b/cpp/src/Ice/Proxy.cpp @@ -1199,6 +1199,12 @@ ICE_OBJECT_PRX::ice_compress(bool b) const } } +IceUtil::Optional<bool> +ICE_OBJECT_PRX::ice_getCompress() const +{ + return _reference->getCompress(); +} + ObjectPrxPtr ICE_OBJECT_PRX::ice_timeout(int t) const { @@ -1225,6 +1231,12 @@ ICE_OBJECT_PRX::ice_timeout(int t) const } } +IceUtil::Optional<int> +ICE_OBJECT_PRX::ice_getTimeout() const +{ + return _reference->getTimeout(); +} + ObjectPrxPtr ICE_OBJECT_PRX::ice_connectionId(const string& id) const { @@ -1247,6 +1259,39 @@ ICE_OBJECT_PRX::ice_getConnectionId() const return _reference->getConnectionId(); } +ObjectPrxPtr +ICE_OBJECT_PRX::ice_fixed(const ::Ice::ConnectionPtr& connection) const +{ + if(!connection) + { +#ifdef ICE_CPP11_MAPPING + throw invalid_argument("invalid null connection passed to ice_fixed"); +#else + throw IceUtil::IllegalArgumentException(__FILE__, __LINE__, "invalid null connection passed to ice_fixed"); +#endif + } + ::Ice::ConnectionIPtr impl = ICE_DYNAMIC_CAST(::Ice::ConnectionI, connection); + if(!impl) + { +#ifdef ICE_CPP11_MAPPING + throw invalid_argument("invalid connection passed to ice_fixed"); +#else + throw IceUtil::IllegalArgumentException(__FILE__, __LINE__, "invalid connection passed to ice_fixed"); +#endif + } + ReferencePtr ref = _reference->changeConnection(impl); + if(ref == _reference) + { + return CONST_POINTER_CAST_OBJECT_PRX; + } + else + { + ObjectPrxPtr proxy = _newInstance(); + proxy->setup(ref); + return proxy; + } +} + ConnectionPtr ICE_OBJECT_PRX::ice_getCachedConnection() const { diff --git a/cpp/src/Ice/Reference.cpp b/cpp/src/Ice/Reference.cpp index baf9f9eb719..2f331a1dace 100644 --- a/cpp/src/Ice/Reference.cpp +++ b/cpp/src/Ice/Reference.cpp @@ -658,6 +658,12 @@ IceInternal::FixedReference::getConnectionId() const return string(); } +IceUtil::Optional<int> +IceInternal::FixedReference::getTimeout() const +{ + return IceUtil::Optional<int>(); +} + ReferencePtr IceInternal::FixedReference::changeEndpoints(const vector<EndpointIPtr>& /*newEndpoints*/) const { @@ -735,6 +741,18 @@ IceInternal::FixedReference::changeConnectionId(const string&) const return 0; // Keep the compiler happy. } +ReferencePtr +IceInternal::FixedReference::changeConnection(const Ice::ConnectionIPtr& newConnection) const +{ + if(newConnection == _fixedConnection) + { + return FixedReferencePtr(const_cast<FixedReference*>(this)); + } + FixedReferencePtr r = FixedReferencePtr::dynamicCast(getInstance()->referenceFactory()->copy(this)); + r->_fixedConnection = newConnection; + return r; +} + bool IceInternal::FixedReference::isIndirect() const { @@ -979,6 +997,12 @@ IceInternal::RoutableReference::getConnectionId() const return _connectionId; } +IceUtil::Optional<int> +IceInternal::RoutableReference::getTimeout() const +{ + return _overrideTimeout ? IceUtil::Optional<int>(_timeout) : IceUtil::None; +} + ReferencePtr IceInternal::RoutableReference::changeEncoding(const Ice::EncodingVersion& encoding) const { @@ -1167,6 +1191,19 @@ IceInternal::RoutableReference::changeConnectionId(const string& id) const return r; } +ReferencePtr +IceInternal::RoutableReference::changeConnection(const Ice::ConnectionIPtr& connection) const +{ + return new FixedReference(getInstance(), + getCommunicator(), + getIdentity(), + getFacet(), + getMode(), + getSecure(), + getEncoding(), + connection); +} + bool IceInternal::RoutableReference::isIndirect() const { diff --git a/cpp/src/Ice/Reference.h b/cpp/src/Ice/Reference.h index 3addd9a29f0..c06786e0339 100644 --- a/cpp/src/Ice/Reference.h +++ b/cpp/src/Ice/Reference.h @@ -72,6 +72,10 @@ public: const InstancePtr& getInstance() const { return _instance; } const SharedContextPtr& getContext() const { return _context; } int getInvocationTimeout() const { return _invocationTimeout; } + IceUtil::Optional<bool> getCompress() const + { + return _overrideCompress ? IceUtil::Optional<bool>(_compress) : IceUtil::None; + } Ice::CommunicatorPtr getCommunicator() const; @@ -85,6 +89,7 @@ public: virtual Ice::EndpointSelectionType getEndpointSelection() const = 0; virtual int getLocatorCacheTimeout() const = 0; virtual std::string getConnectionId() const = 0; + virtual IceUtil::Optional<int> getTimeout() const = 0; // // The change* methods (here and in derived classes) create @@ -112,6 +117,7 @@ public: virtual ReferencePtr changeTimeout(int) const = 0; virtual ReferencePtr changeConnectionId(const std::string&) const = 0; + virtual ReferencePtr changeConnection(const Ice::ConnectionIPtr&) const = 0; int hash() const; // Conceptually const. @@ -195,6 +201,7 @@ public: virtual Ice::EndpointSelectionType getEndpointSelection() const; virtual int getLocatorCacheTimeout() const; virtual std::string getConnectionId() const; + virtual IceUtil::Optional<int> getTimeout() const; virtual ReferencePtr changeEndpoints(const std::vector<EndpointIPtr>&) const; virtual ReferencePtr changeAdapterId(const std::string&) const; @@ -208,6 +215,7 @@ public: virtual ReferencePtr changeTimeout(int) const; virtual ReferencePtr changeConnectionId(const std::string&) const; + virtual ReferencePtr changeConnection(const Ice::ConnectionIPtr&) const; virtual bool isIndirect() const; virtual bool isWellKnown() const; @@ -249,6 +257,7 @@ public: virtual Ice::EndpointSelectionType getEndpointSelection() const; virtual int getLocatorCacheTimeout() const; virtual std::string getConnectionId() const; + virtual IceUtil::Optional<int> getTimeout() const; virtual ReferencePtr changeEncoding(const Ice::EncodingVersion&) const; virtual ReferencePtr changeCompress(bool) const; @@ -264,6 +273,7 @@ public: virtual ReferencePtr changeTimeout(int) const; virtual ReferencePtr changeConnectionId(const std::string&) const; + virtual ReferencePtr changeConnection(const Ice::ConnectionIPtr&) const; virtual bool isIndirect() const; virtual bool isWellKnown() const; |