summaryrefslogtreecommitdiff
path: root/cpp/src
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src')
-rw-r--r--cpp/src/Ice/Proxy.cpp45
-rw-r--r--cpp/src/Ice/Reference.cpp37
-rw-r--r--cpp/src/Ice/Reference.h10
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;