summaryrefslogtreecommitdiff
path: root/cpp/src/Ice/IncomingAsync.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/Ice/IncomingAsync.cpp')
-rw-r--r--cpp/src/Ice/IncomingAsync.cpp144
1 files changed, 63 insertions, 81 deletions
diff --git a/cpp/src/Ice/IncomingAsync.cpp b/cpp/src/Ice/IncomingAsync.cpp
index 3ae55e0d4d4..a6e1559c5ee 100644
--- a/cpp/src/Ice/IncomingAsync.cpp
+++ b/cpp/src/Ice/IncomingAsync.cpp
@@ -82,6 +82,21 @@ IceInternal::IncomingAsync::__exception(const Exception& exc)
{
finishInvoke();
+ if(ex.id.name.empty())
+ {
+ ex.id = _current.id;
+ }
+
+ if(ex.facet.empty() && !_current.facet.empty())
+ {
+ ex.facet = _current.facet;
+ }
+
+ if(ex.operation.empty() && !_current.operation.empty())
+ {
+ ex.operation = _current.operation;
+ }
+
if(_connection) // Response expected?
{
_os.endWriteEncaps();
@@ -102,64 +117,12 @@ IceInternal::IncomingAsync::__exception(const Exception& exc)
{
assert(false);
}
-
- //
- // Write the data from the exception if set so that a
- // RequestFailedException can override the information
- // from _current.
- //
- if(!ex.id.name.empty())
- {
- ex.id.__write(&_os);
- }
- else
- {
- _current.id.__write(&_os);
- }
-
- if(!ex.facet.empty())
- {
- _os.write(ex.facet);
- }
- else
- {
- _os.write(_current.facet);
- }
-
- if(ex.operation.empty())
- {
- _os.write(ex.operation);
- }
- else
- {
- _os.write(_current.operation);
- }
+ ex.id.__write(&_os);
+ _os.write(ex.facet);
+ _os.write(ex.operation);
_connection->sendResponse(&_os, _compress);
}
-
-/*
- if(_instance->properties()->getPropertyAsIntWithDefault("Ice.Warn.Dispatch", 1) > 1)
- {
- if(ex.id.name.empty())
- {
- ex.id = _current.id;
- }
-
- if(ex.facet.empty() && !_current.facet.empty())
- {
- ex.facet = _current.facet;
- }
-
- if(ex.operation.empty() && !_current.operation.empty())
- {
- ex.operation = _current.operation;
- }
-
- Warning out(_instance->logger());
- out << "dispatch exception:\n" << ex;
- }
-*/
}
catch(const LocalException& ex)
{
@@ -176,14 +139,6 @@ IceInternal::IncomingAsync::__exception(const Exception& exc)
_connection->sendResponse(&_os, _compress);
}
-/*
- if(_instance->properties()->getPropertyAsIntWithDefault("Ice.Warn.Dispatch", 1) > 0)
- {
- ostringstream str;
- str << ex;
- warning("dispatch exception: unknown local exception:", str.str());
- }
-*/
}
catch(const UserException& ex)
{
@@ -200,15 +155,6 @@ IceInternal::IncomingAsync::__exception(const Exception& exc)
_connection->sendResponse(&_os, _compress);
}
-
-/*
- if(_instance->properties()->getPropertyAsIntWithDefault("Ice.Warn.Dispatch", 1) > 0)
- {
- ostringstream str;
- str << ex;
- warning("dispatch exception: unknown user exception:", str.str());
- }
-*/
}
catch(const Exception& ex)
{
@@ -225,15 +171,39 @@ IceInternal::IncomingAsync::__exception(const Exception& exc)
_connection->sendResponse(&_os, _compress);
}
+ }
+}
-/*
- if(_instance->properties()->getPropertyAsIntWithDefault("Ice.Warn.Dispatch", 1) > 0)
- {
- ostringstream str;
- str << ex;
- warning("dispatch exception: unknown exception:", str.str());
- }
-*/
+void
+IceInternal::IncomingAsync::__exception(const std::exception& ex)
+{
+ finishInvoke();
+
+ if(_connection) // Response expected?
+ {
+ _os.endWriteEncaps();
+ _os.b.resize(headerSize + 4); // Dispatch status position.
+ _os.write(static_cast<Byte>(DispatchUnknownException));
+ ostringstream str;
+ str << "std::exception: " << ex.what();
+ _os.write(str.str());
+
+ _connection->sendResponse(&_os, _compress);
+ }
+}
+
+void
+IceInternal::IncomingAsync::__exception()
+{
+ if(_connection) // Response expected?
+ {
+ _os.endWriteEncaps();
+ _os.b.resize(headerSize + 4); // Dispatch status position.
+ _os.write(static_cast<Byte>(DispatchUnknownException));
+ string reason = "unknown c++ exception";
+ _os.write(reason);
+
+ _connection->sendResponse(&_os, _compress);
}
}
@@ -293,7 +263,7 @@ IceAsync::Ice::AMD_Object_ice_invoke::ice_response(bool ok, const ::std::vector<
}
catch(const LocalException& ex)
{
- ice_exception(ex);
+ __exception(ex);
return;
}
@@ -305,3 +275,15 @@ IceAsync::Ice::AMD_Object_ice_invoke::ice_exception(const Exception& ex)
{
__exception(ex);
}
+
+void
+IceAsync::Ice::AMD_Object_ice_invoke::ice_exception(const std::exception& ex)
+{
+ __exception(ex);
+}
+
+void
+IceAsync::Ice::AMD_Object_ice_invoke::ice_exception()
+{
+ __exception();
+}