diff options
Diffstat (limited to 'cpp/src/Ice/Outgoing.cpp')
-rw-r--r-- | cpp/src/Ice/Outgoing.cpp | 63 |
1 files changed, 35 insertions, 28 deletions
diff --git a/cpp/src/Ice/Outgoing.cpp b/cpp/src/Ice/Outgoing.cpp index 4c444b54ed5..bd98109ce16 100644 --- a/cpp/src/Ice/Outgoing.cpp +++ b/cpp/src/Ice/Outgoing.cpp @@ -62,40 +62,47 @@ IceInternal::Outgoing::Outgoing(ConnectionI* connection, Reference* ref, const s } } - _reference->getIdentity().__write(&_os); - - // - // For compatibility with the old FacetPath. - // - if(_reference->getFacet().empty()) + try { - _os.write(vector<string>()); - } - else - { - vector<string> facetPath; - facetPath.push_back(_reference->getFacet()); - _os.write(facetPath); - } + _reference->getIdentity().__write(&_os); - _os.write(operation); + // + // For compatibility with the old FacetPath. + // + if(_reference->getFacet().empty()) + { + _os.write(vector<string>()); + } + else + { + vector<string> facetPath; + facetPath.push_back(_reference->getFacet()); + _os.write(facetPath); + } + + _os.write(operation); - _os.write(static_cast<Byte>(mode)); + _os.write(static_cast<Byte>(mode)); - _os.writeSize(Int(context.size())); - Context::const_iterator p; - for(p = context.begin(); p != context.end(); ++p) + _os.writeSize(Int(context.size())); + Context::const_iterator p; + for(p = context.begin(); p != context.end(); ++p) + { + _os.write(p->first); + _os.write(p->second); + } + + // + // Input and output parameters are always sent in an + // encapsulation, which makes it possible to forward requests as + // blobs. + // + _os.startWriteEncaps(); + } + catch(const LocalException& ex) { - _os.write(p->first); - _os.write(p->second); + abort(ex); } - - // - // Input and output parameters are always sent in an - // encapsulation, which makes it possible to forward requests as - // blobs. - // - _os.startWriteEncaps(); } bool |