summaryrefslogtreecommitdiff
path: root/cpp/src/Ice/Outgoing.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/Ice/Outgoing.cpp')
-rw-r--r--cpp/src/Ice/Outgoing.cpp63
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