summaryrefslogtreecommitdiff
path: root/cpp/src
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src')
-rw-r--r--cpp/src/Ice/TcpEndpointI.cpp11
-rw-r--r--cpp/src/Ice/UdpEndpointI.cpp15
-rw-r--r--cpp/src/Ice/WSEndpoint.cpp9
-rw-r--r--cpp/src/Ice/ios/StreamEndpointI.cpp11
-rw-r--r--cpp/src/IceSSL/EndpointI.cpp9
5 files changed, 46 insertions, 9 deletions
diff --git a/cpp/src/Ice/TcpEndpointI.cpp b/cpp/src/Ice/TcpEndpointI.cpp
index 17320c1d537..c1b87d1b931 100644
--- a/cpp/src/Ice/TcpEndpointI.cpp
+++ b/cpp/src/Ice/TcpEndpointI.cpp
@@ -137,8 +137,15 @@ IceInternal::TcpEndpointI::acceptor(const string&) const
TcpEndpointIPtr
IceInternal::TcpEndpointI::endpoint(const TcpAcceptorPtr& acceptor) const
{
- return ICE_MAKE_SHARED(TcpEndpointI, _instance, _host, acceptor->effectivePort(), _sourceAddr, _timeout, _connectionId,
- _compress);
+ int port = acceptor->effectivePort();
+ if(_port == port)
+ {
+ return ICE_DYNAMIC_CAST(TcpEndpointI, ICE_SHARED_FROM_CONST_THIS(TcpEndpointI));
+ }
+ else
+ {
+ return ICE_MAKE_SHARED(TcpEndpointI, _instance, _host, port, _sourceAddr, _timeout, _connectionId, _compress);
+ }
}
string
diff --git a/cpp/src/Ice/UdpEndpointI.cpp b/cpp/src/Ice/UdpEndpointI.cpp
index 5e65c71855c..9016a2ae2f7 100644
--- a/cpp/src/Ice/UdpEndpointI.cpp
+++ b/cpp/src/Ice/UdpEndpointI.cpp
@@ -140,7 +140,8 @@ IceInternal::UdpEndpointI::datagram() const
TransceiverPtr
IceInternal::UdpEndpointI::transceiver() const
{
- return new UdpTransceiver(ICE_DYNAMIC_CAST(UdpEndpointI, ICE_SHARED_FROM_CONST_THIS(UdpEndpointI)), _instance, _host, _port, _mcastInterface, _connect);
+ return new UdpTransceiver(ICE_DYNAMIC_CAST(UdpEndpointI, ICE_SHARED_FROM_CONST_THIS(UdpEndpointI)), _instance,
+ _host, _port, _mcastInterface, _connect);
}
AcceptorPtr
@@ -152,8 +153,16 @@ IceInternal::UdpEndpointI::acceptor(const string&) const
UdpEndpointIPtr
IceInternal::UdpEndpointI::endpoint(const UdpTransceiverPtr& transceiver) const
{
- return ICE_MAKE_SHARED(UdpEndpointI, _instance, _host, transceiver->effectivePort(), _sourceAddr, _mcastInterface,
- _mcastTtl, _connect, _connectionId, _compress);
+ int port = transceiver->effectivePort();
+ if(port == _port)
+ {
+ return ICE_DYNAMIC_CAST(UdpEndpointI, ICE_SHARED_FROM_CONST_THIS(UdpEndpointI));
+ }
+ else
+ {
+ return ICE_MAKE_SHARED(UdpEndpointI, _instance, _host, port, _sourceAddr, _mcastInterface,_mcastTtl, _connect,
+ _connectionId, _compress);
+ }
}
void
diff --git a/cpp/src/Ice/WSEndpoint.cpp b/cpp/src/Ice/WSEndpoint.cpp
index c19842d652f..6296400a16d 100644
--- a/cpp/src/Ice/WSEndpoint.cpp
+++ b/cpp/src/Ice/WSEndpoint.cpp
@@ -228,7 +228,14 @@ IceInternal::WSEndpoint::acceptor(const string& adapterName) const
WSEndpointPtr
IceInternal::WSEndpoint::endpoint(const EndpointIPtr& delEndp) const
{
- return ICE_MAKE_SHARED(WSEndpoint, _instance, delEndp, _resource);
+ if(delEndp.get() == _delegate.get())
+ {
+ return ICE_DYNAMIC_CAST(WSEndpoint, ICE_SHARED_FROM_CONST_THIS(WSEndpoint));
+ }
+ else
+ {
+ return ICE_MAKE_SHARED(WSEndpoint, _instance, delEndp, _resource);
+ }
}
vector<EndpointIPtr>
diff --git a/cpp/src/Ice/ios/StreamEndpointI.cpp b/cpp/src/Ice/ios/StreamEndpointI.cpp
index 9fb191d660d..d2290c88dfc 100644
--- a/cpp/src/Ice/ios/StreamEndpointI.cpp
+++ b/cpp/src/Ice/ios/StreamEndpointI.cpp
@@ -233,8 +233,15 @@ IceObjC::StreamEndpointI::acceptor(const string&) const
IceObjC::StreamEndpointIPtr
IceObjC::StreamEndpointI::endpoint(const StreamAcceptorPtr& a) const
{
- return ICE_MAKE_SHARED(StreamEndpointI, _instance, _host, a->effectivePort(), _sourceAddr, _timeout, _connectionId,
- _compress);
+ int port = a->effectivePort();
+ if(port == _port)
+ {
+ return ICE_DYNAMIC_CAST(StreamEndpointI, ICE_SHARED_FROM_CONST_THIS(StreamEndpointI));
+ }
+ else
+ {
+ return ICE_MAKE_SHARED(StreamEndpointI, _instance, _host, port, _sourceAddr, _timeout, _connectionId, _compress);
+ }
}
string
diff --git a/cpp/src/IceSSL/EndpointI.cpp b/cpp/src/IceSSL/EndpointI.cpp
index 2300bffa4cb..69705dcbcd8 100644
--- a/cpp/src/IceSSL/EndpointI.cpp
+++ b/cpp/src/IceSSL/EndpointI.cpp
@@ -203,7 +203,14 @@ IceSSL::EndpointI::acceptor(const string& adapterName) const
EndpointIPtr
IceSSL::EndpointI::endpoint(const IceInternal::EndpointIPtr& delEndp) const
{
- return ICE_MAKE_SHARED(EndpointI, _instance, delEndp);
+ if(delEndp.get() == _delegate.get())
+ {
+ return ICE_DYNAMIC_CAST(EndpointI, ICE_SHARED_FROM_CONST_THIS(EndpointI));
+ }
+ else
+ {
+ return ICE_MAKE_SHARED(EndpointI, _instance, delEndp);
+ }
}
vector<IceInternal::EndpointIPtr>