summaryrefslogtreecommitdiff
path: root/cpp/src/IceSSL
diff options
context:
space:
mode:
authorBenoit Foucher <benoit@zeroc.com>2012-04-18 14:33:16 +0200
committerBenoit Foucher <benoit@zeroc.com>2012-04-18 14:33:16 +0200
commit2ba4d4e0ca7aeade69ee00ab17d5fa1b69372ffc (patch)
tree0a381f9b284eb7ca5acc9bca5a97659d19874f9d /cpp/src/IceSSL
parentICE-4828 - Buffer.h undeclared ptrdiff_t issue on OpenSUSE (diff)
downloadice-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.cpp33
-rw-r--r--cpp/src/IceSSL/ConnectorI.h6
-rw-r--r--cpp/src/IceSSL/EndpointI.cpp60
-rw-r--r--cpp/src/IceSSL/EndpointI.h3
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*);