diff options
author | Benoit Foucher <benoit@zeroc.com> | 2012-04-18 14:33:16 +0200 |
---|---|---|
committer | Benoit Foucher <benoit@zeroc.com> | 2012-04-18 14:33:16 +0200 |
commit | 2ba4d4e0ca7aeade69ee00ab17d5fa1b69372ffc (patch) | |
tree | 0a381f9b284eb7ca5acc9bca5a97659d19874f9d /cpp/src/IceSSL | |
parent | ICE-4828 - Buffer.h undeclared ptrdiff_t issue on OpenSUSE (diff) | |
download | ice-2ba4d4e0ca7aeade69ee00ab17d5fa1b69372ffc.tar.bz2 ice-2ba4d4e0ca7aeade69ee00ab17d5fa1b69372ffc.tar.xz ice-2ba4d4e0ca7aeade69ee00ab17d5fa1b69372ffc.zip |
Added support for encoding versioning
Diffstat (limited to 'cpp/src/IceSSL')
-rw-r--r-- | cpp/src/IceSSL/ConnectorI.cpp | 33 | ||||
-rw-r--r-- | cpp/src/IceSSL/ConnectorI.h | 6 | ||||
-rw-r--r-- | cpp/src/IceSSL/EndpointI.cpp | 60 | ||||
-rw-r--r-- | cpp/src/IceSSL/EndpointI.h | 3 |
4 files changed, 85 insertions, 17 deletions
diff --git a/cpp/src/IceSSL/ConnectorI.cpp b/cpp/src/IceSSL/ConnectorI.cpp index 6c869b34e79..8a4abbccc21 100644 --- a/cpp/src/IceSSL/ConnectorI.cpp +++ b/cpp/src/IceSSL/ConnectorI.cpp @@ -86,6 +86,16 @@ IceSSL::ConnectorI::operator==(const IceInternal::Connector& r) const return false; } + if(_protocol != p->_protocol) + { + return false; + } + + if(_encoding != p->_encoding) + { + return false; + } + if(_connectionId != p->_connectionId) { return false; @@ -118,6 +128,24 @@ IceSSL::ConnectorI::operator<(const IceInternal::Connector& r) const return false; } + if(_protocol < p->_protocol) + { + return true; + } + else if(p->_protocol < _protocol) + { + return false; + } + + if(_encoding < p->_encoding) + { + return true; + } + else if(p->_encoding < _encoding) + { + return false; + } + if(_connectionId < p->_connectionId) { return true; @@ -131,12 +159,15 @@ IceSSL::ConnectorI::operator<(const IceInternal::Connector& r) const } IceSSL::ConnectorI::ConnectorI(const InstancePtr& instance, const string& host, const struct sockaddr_storage& addr, - Ice::Int timeout, const string& connectionId) : + Ice::Int timeout, const Ice::ProtocolVersion& protocol, + const Ice::EncodingVersion& encoding, const string& connectionId) : _instance(instance), _logger(instance->communicator()->getLogger()), _host(host), _addr(addr), _timeout(timeout), + _protocol(protocol), + _encoding(encoding), _connectionId(connectionId) { } diff --git a/cpp/src/IceSSL/ConnectorI.h b/cpp/src/IceSSL/ConnectorI.h index 216a3a7279d..7dddcadc9a4 100644 --- a/cpp/src/IceSSL/ConnectorI.h +++ b/cpp/src/IceSSL/ConnectorI.h @@ -13,6 +13,7 @@ #include <Ice/LoggerF.h> #include <Ice/TransceiverF.h> #include <Ice/Connector.h> +#include <Ice/Protocol.h> #include <IceSSL/InstanceF.h> #ifdef _WIN32 @@ -41,7 +42,8 @@ public: private: - ConnectorI(const InstancePtr&, const std::string&, const struct sockaddr_storage&, Ice::Int, const std::string&); + ConnectorI(const InstancePtr&, const std::string&, const struct sockaddr_storage&, Ice::Int, + const Ice::ProtocolVersion&, const Ice::EncodingVersion&, const std::string&); virtual ~ConnectorI(); friend class EndpointI; @@ -50,6 +52,8 @@ private: const std::string _host; struct sockaddr_storage _addr; const Ice::Int _timeout; + const Ice::ProtocolVersion _protocol; + const Ice::EncodingVersion _encoding; const std::string _connectionId; }; diff --git a/cpp/src/IceSSL/EndpointI.cpp b/cpp/src/IceSSL/EndpointI.cpp index 9c8e63da655..74f3543beae 100644 --- a/cpp/src/IceSSL/EndpointI.cpp +++ b/cpp/src/IceSSL/EndpointI.cpp @@ -22,8 +22,10 @@ using namespace std; using namespace Ice; using namespace IceSSL; -IceSSL::EndpointI::EndpointI(const InstancePtr& instance, const string& ho, Int po, Int ti, const string& conId, - bool co) : +IceSSL::EndpointI::EndpointI(const InstancePtr& instance, const string& ho, Int po, Int ti, + const Ice::ProtocolVersion& protocol, const Ice::EncodingVersion& encoding, + const string& conId, bool co) : + IceInternal::EndpointI(protocol, encoding), _instance(instance), _host(ho), _port(po), @@ -153,9 +155,7 @@ IceSSL::EndpointI::EndpointI(const InstancePtr& instance, const string& str, boo default: { - EndpointParseException ex(__FILE__, __LINE__); - ex.str = "unknown option `" + option + "' in `ssl " + str + "'"; - throw ex; + parseOption(option, argument, "ssl", str); } } } @@ -190,6 +190,18 @@ IceSSL::EndpointI::EndpointI(const InstancePtr& instance, IceInternal::BasicStre s->read(const_cast<Int&>(_port)); s->read(const_cast<Int&>(_timeout)); s->read(const_cast<bool&>(_compress)); + if(s->getReadEncoding() > Ice::Encoding_1_0) + { + s->read(const_cast<Byte&>(_protocol.major)); + s->read(const_cast<Byte&>(_protocol.minor)); + s->read(const_cast<Byte&>(_encoding.major)); + s->read(const_cast<Byte&>(_encoding.minor)); + } + else + { + const_cast<ProtocolVersion&>(_protocol) = Ice::Protocol_1_0; + const_cast<EncodingVersion&>(_encoding) = Ice::Encoding_1_0; + } s->endReadEncaps(); } @@ -202,6 +214,13 @@ IceSSL::EndpointI::streamWrite(IceInternal::BasicStream* s) const s->write(_port); s->write(_timeout); s->write(_compress); + if(s->getWriteEncoding() > Ice::Encoding_1_0) + { + s->write(_protocol.major); + s->write(_protocol.minor); + s->write(_encoding.major); + s->write(_encoding.minor); + } s->endWriteEncaps(); } @@ -218,6 +237,16 @@ IceSSL::EndpointI::toString() const ostringstream s; s << "ssl"; + if(_protocol != Ice::Protocol_1_0) + { + s << " -v " << _protocol; + } + + if(_encoding != Ice::Encoding_1_0) + { + s << " -e " << _encoding; + } + if(!_host.empty()) { s << " -h "; @@ -255,8 +284,8 @@ namespace { public: - InfoI(Int to, bool comp, const string& host, Int port) : - IceSSL::EndpointInfo(to, comp, host, port) + InfoI(const ProtocolVersion& pv, const EncodingVersion& ev, Int to, bool comp, const string& host, Int port) : + IceSSL::EndpointInfo(pv, ev, to, comp, host, port) { } @@ -283,7 +312,7 @@ namespace Ice::EndpointInfoPtr IceSSL::EndpointI::getInfo() const { - return new InfoI(_timeout, _compress, _host, _port); + return new InfoI(_protocol, _encoding, _timeout, _compress, _host, _port); } Short @@ -307,7 +336,7 @@ IceSSL::EndpointI::timeout(Int timeout) const } else { - return new EndpointI(_instance, _host, _port, timeout, _connectionId, _compress); + return new EndpointI(_instance, _host, _port, timeout, _protocol, _encoding, _connectionId, _compress); } } @@ -320,7 +349,7 @@ IceSSL::EndpointI::connectionId(const string& connectionId) const } else { - return new EndpointI(_instance, _host, _port, _timeout, connectionId, _compress); + return new EndpointI(_instance, _host, _port, _timeout, _protocol, _encoding, connectionId, _compress); } } @@ -339,7 +368,7 @@ IceSSL::EndpointI::compress(bool compress) const } else { - return new EndpointI(_instance, _host, _port, _timeout, _connectionId, compress); + return new EndpointI(_instance, _host, _port, _timeout, _protocol, _encoding, _connectionId, compress); } } @@ -378,7 +407,8 @@ IceInternal::AcceptorPtr IceSSL::EndpointI::acceptor(IceInternal::EndpointIPtr& endp, const string& adapterName) const { AcceptorI* p = new AcceptorI(_instance, adapterName, _host, _port); - endp = new EndpointI(_instance, _host, p->effectivePort(), _timeout, _connectionId, _compress); + endp = new EndpointI(_instance, _host, p->effectivePort(), _timeout, _protocol, _encoding, _connectionId, + _compress); return p; } @@ -395,7 +425,8 @@ IceSSL::EndpointI::expand() const { for(vector<string>::const_iterator p = hosts.begin(); p != hosts.end(); ++p) { - endps.push_back(new EndpointI(_instance, *p, _port, _timeout, _connectionId, _compress)); + endps.push_back(new EndpointI(_instance, *p, _port, _timeout, _protocol, _encoding, _connectionId, + _compress)); } } return endps; @@ -539,7 +570,8 @@ IceSSL::EndpointI::connectors(const vector<struct sockaddr_storage>& addresses) vector<IceInternal::ConnectorPtr> connectors; for(unsigned int i = 0; i < addresses.size(); ++i) { - connectors.push_back(new ConnectorI(_instance, _host, addresses[i], _timeout, _connectionId)); + connectors.push_back(new ConnectorI(_instance, _host, addresses[i], _timeout, _protocol, _encoding, + _connectionId)); } return connectors; } diff --git a/cpp/src/IceSSL/EndpointI.h b/cpp/src/IceSSL/EndpointI.h index 6c4c84dd1c7..1124fc7438b 100644 --- a/cpp/src/IceSSL/EndpointI.h +++ b/cpp/src/IceSSL/EndpointI.h @@ -22,7 +22,8 @@ class EndpointI : public IceInternal::EndpointI { public: - EndpointI(const InstancePtr&, const std::string&, Ice::Int, Ice::Int, const std::string&, bool); + EndpointI(const InstancePtr&, const std::string&, Ice::Int, Ice::Int, const Ice::ProtocolVersion&, + const Ice::EncodingVersion&, const std::string&, bool); EndpointI(const InstancePtr&, const std::string&, bool); EndpointI(const InstancePtr&, IceInternal::BasicStream*); |