diff options
Diffstat (limited to 'cpp/src/Ice/UdpEndpoint.cpp')
-rw-r--r-- | cpp/src/Ice/UdpEndpoint.cpp | 64 |
1 files changed, 59 insertions, 5 deletions
diff --git a/cpp/src/Ice/UdpEndpoint.cpp b/cpp/src/Ice/UdpEndpoint.cpp index a1c3503e35b..7ba53af41ba 100644 --- a/cpp/src/Ice/UdpEndpoint.cpp +++ b/cpp/src/Ice/UdpEndpoint.cpp @@ -24,18 +24,20 @@ using namespace std; using namespace Ice; using namespace IceInternal; -IceInternal::UdpEndpoint::UdpEndpoint(const InstancePtr& instance, const string& ho, Int po) : +IceInternal::UdpEndpoint::UdpEndpoint(const InstancePtr& instance, const string& ho, Int po, bool co) : _instance(instance), _host(ho), _port(po), - _connect(false) + _connect(false), + _compress(co) { } IceInternal::UdpEndpoint::UdpEndpoint(const InstancePtr& instance, const string& str) : _instance(instance), _port(0), - _connect(false) + _connect(false), + _compress(false) { const string delim = " \t\n\r"; @@ -115,6 +117,18 @@ IceInternal::UdpEndpoint::UdpEndpoint(const InstancePtr& instance, const string& break; } + case 'z': + { + if(!argument.empty()) + { + EndpointParseException ex(__FILE__, __LINE__); + ex.str = "udp " + str; + throw ex; + } + const_cast<bool&>(_compress) = true; + break; + } + default: { EndpointParseException ex(__FILE__, __LINE__); @@ -133,13 +147,15 @@ IceInternal::UdpEndpoint::UdpEndpoint(const InstancePtr& instance, const string& IceInternal::UdpEndpoint::UdpEndpoint(BasicStream* s) : _instance(s->instance()), _port(0), - _connect(false) + _connect(false), + _compress(false) { s->startReadEncaps(); s->read(const_cast<string&>(_host)); s->read(const_cast<Int&>(_port)); // Not transmitted. //s->read(const_cast<bool&>(_connect)); + s->read(const_cast<bool&>(_compress)); s->endReadEncaps(); } @@ -152,6 +168,7 @@ IceInternal::UdpEndpoint::streamWrite(BasicStream* s) const s->write(_port); // Not transmitted. //s->write(_connect); + s->write(_compress); s->endWriteEncaps(); } @@ -164,6 +181,10 @@ IceInternal::UdpEndpoint::toString() const { s << " -c"; } + if(_compress) + { + s << " -z"; + } return s.str(); } @@ -186,6 +207,25 @@ IceInternal::UdpEndpoint::timeout(Int) const } bool +IceInternal::UdpEndpoint::compress() const +{ + return _compress; +} + +EndpointPtr +IceInternal::UdpEndpoint::compress(bool compress) const +{ + if(compress == _compress) + { + return const_cast<UdpEndpoint*>(this); + } + else + { + return new UdpEndpoint(_instance, _host, _port, compress); + } +} + +bool IceInternal::UdpEndpoint::datagram() const { return true; @@ -213,7 +253,7 @@ TransceiverPtr IceInternal::UdpEndpoint::serverTransceiver(EndpointPtr& endp) const { UdpTransceiver* p = new UdpTransceiver(_instance, _host, _port, _connect); - endp = new UdpEndpoint(_instance, _host, p->effectivePort()); + endp = new UdpEndpoint(_instance, _host, p->effectivePort(), _compress); return p; } @@ -266,6 +306,11 @@ IceInternal::UdpEndpoint::operator==(const Endpoint& r) const return false; } + if(_compress != p->_compress) + { + return false; + } + if(_connect != p->_connect) { return false; @@ -315,6 +360,15 @@ IceInternal::UdpEndpoint::operator<(const Endpoint& r) const return false; } + if(!_compress && p->_compress) + { + return true; + } + else if(p->_compress < _compress) + { + return false; + } + if(!_connect && p->_connect) { return true; |