diff options
Diffstat (limited to 'cpp/src')
-rw-r--r-- | cpp/src/Glacier/ClientBlobject.cpp | 44 | ||||
-rw-r--r-- | cpp/src/Glacier/ServerBlobject.cpp | 42 | ||||
-rw-r--r-- | cpp/src/Ice/Incoming.cpp | 1 |
3 files changed, 81 insertions, 6 deletions
diff --git a/cpp/src/Glacier/ClientBlobject.cpp b/cpp/src/Glacier/ClientBlobject.cpp index 5d956bb984a..9cd92e4a459 100644 --- a/cpp/src/Glacier/ClientBlobject.cpp +++ b/cpp/src/Glacier/ClientBlobject.cpp @@ -59,10 +59,48 @@ Glacier::ClientBlobject::ice_invoke(const std::vector<Byte>& inParams, std::vect { proxy = proxy->ice_newFacet(current.facet); } - - if (!current.response) + + Context::const_iterator p = current.context.find("_fwd"); + if (p != current.context.end()) { - proxy = proxy->ice_oneway(); + for (unsigned int i = 0; i < p->second.length(); ++i) + { + char option = p->second[i]; + switch (option) + { + case 't': + { + proxy = proxy->ice_twoway(); + break; + } + + case 'o': + { + proxy = proxy->ice_oneway(); + break; + } + + case 'd': + { + proxy = proxy->ice_datagram(); + break; + } + + case 's': + { + proxy = proxy->ice_secure(true); + break; + } + + default: + { + ostringstream s; + s << "unknown forward option `" << option << "'"; + _logger->warning(s.str()); + break; + } + } + } } if (_traceLevel >= 2) diff --git a/cpp/src/Glacier/ServerBlobject.cpp b/cpp/src/Glacier/ServerBlobject.cpp index cf9055387a2..16d3ae71c01 100644 --- a/cpp/src/Glacier/ServerBlobject.cpp +++ b/cpp/src/Glacier/ServerBlobject.cpp @@ -53,9 +53,47 @@ Glacier::ServerBlobject::ice_invoke(const std::vector<Byte>& inParams, std::vect proxy = proxy->ice_newFacet(current.facet); } - if (!current.response) + Context::const_iterator p = current.context.find("_fwd"); + if (p != current.context.end()) { - proxy = proxy->ice_oneway(); + for (unsigned int i = 0; i < p->second.length(); ++i) + { + char option = p->second[i]; + switch (option) + { + case 't': + { + proxy = proxy->ice_twoway(); + break; + } + + case 'o': + { + proxy = proxy->ice_oneway(); + break; + } + + case 'd': + { + proxy = proxy->ice_datagram(); + break; + } + + case 's': + { + proxy = proxy->ice_secure(true); + break; + } + + default: + { + ostringstream s; + s << "unknown forward option `" << option << "'"; + _logger->warning(s.str()); + break; + } + } + } } if (_traceLevel >= 2) diff --git a/cpp/src/Ice/Incoming.cpp b/cpp/src/Ice/Incoming.cpp index 4a614ed2203..17863d0fcd5 100644 --- a/cpp/src/Ice/Incoming.cpp +++ b/cpp/src/Ice/Incoming.cpp @@ -29,7 +29,6 @@ void IceInternal::Incoming::invoke(bool response) { Current current; - current.response = response; current.identity.__read(&_is); _is.read(current.facet); _is.read(current.operation); |