summaryrefslogtreecommitdiff
path: root/cpp/src/Ice/Incoming.cpp
diff options
context:
space:
mode:
authorBenoit Foucher <benoit@zeroc.com>2013-01-07 10:16:41 +0100
committerBenoit Foucher <benoit@zeroc.com>2013-01-07 10:16:41 +0100
commit2c9e1d532eb36bce9167a0ec656808c0a653730a (patch)
tree58781d4f42f58a8bdc03a0c8a1a5fd3160fa44fb /cpp/src/Ice/Incoming.cpp
parentFixed (ICE-5058) - WinRT port Platform::AccessDeniedException (diff)
downloadice-2c9e1d532eb36bce9167a0ec656808c0a653730a.tar.bz2
ice-2c9e1d532eb36bce9167a0ec656808c0a653730a.tar.xz
ice-2c9e1d532eb36bce9167a0ec656808c0a653730a.zip
Fixed ICE-4933: Added size and replySize fields to dispatch and remote invocation metrics, support for requestId attribute
Diffstat (limited to 'cpp/src/Ice/Incoming.cpp')
-rw-r--r--cpp/src/Ice/Incoming.cpp19
1 files changed, 17 insertions, 2 deletions
diff --git a/cpp/src/Ice/Incoming.cpp b/cpp/src/Ice/Incoming.cpp
index 04dc96a838b..699ece0d3d5 100644
--- a/cpp/src/Ice/Incoming.cpp
+++ b/cpp/src/Ice/Incoming.cpp
@@ -230,6 +230,7 @@ IceInternal::IncomingBase::__servantLocatorFinished()
_os.startWriteEncaps(_current.encoding, DefaultFormat);
_os.write(ex);
_os.endWriteEncaps();
+ _observer.reply(_os.b.size() - headerSize - 4);
_connection->sendResponse(&_os, _compress);
}
else
@@ -322,6 +323,7 @@ IceInternal::IncomingBase::__handleException(const std::exception& exc)
_os.write(rfe->operation, false);
+ _observer.reply(_os.b.size() - headerSize - 4);
_connection->sendResponse(&_os, _compress);
}
else
@@ -389,6 +391,7 @@ IceInternal::IncomingBase::__handleException(const std::exception& exc)
_os.write(str.str(), false);
}
+ _observer.reply(_os.b.size() - headerSize - 4);
_connection->sendResponse(&_os, _compress);
}
else
@@ -415,6 +418,8 @@ IceInternal::IncomingBase::__handleException(const std::exception& exc)
ostringstream str;
str << "std::exception: " << exc.what();
_os.write(str.str(), false);
+
+ _observer.reply(_os.b.size() - headerSize - 4);
_connection->sendResponse(&_os, _compress);
}
else
@@ -448,6 +453,7 @@ IceInternal::IncomingBase::__handleException()
_os.write(replyUnknownException);
string reason = "unknown c++ exception";
_os.write(reason, false);
+ _observer.reply(_os.b.size() - headerSize - 4);
_connection->sendResponse(&_os, _compress);
}
else
@@ -542,6 +548,8 @@ IceInternal::Incoming::invoke(const ServantManagerPtr& servantManager, BasicStre
{
_is = stream;
+ BasicStream::Container::iterator start = _is->i;
+
//
// Read the current.
//
@@ -582,8 +590,13 @@ IceInternal::Incoming::invoke(const ServantManagerPtr& servantManager, BasicStre
const CommunicatorObserverPtr& obsv = _is->instance()->initializationData().observer;
if(obsv)
- {
- _observer.attach(obsv->getDispatchObserver(_current));
+ {
+ // Read the parameter encapsulation size.
+ Ice::Int sz;
+ _is->read(sz);
+ _is->i -= 4;
+
+ _observer.attach(obsv->getDispatchObserver(_current, _is->i - start + sz));
}
//
@@ -621,6 +634,7 @@ IceInternal::Incoming::invoke(const ServantManagerPtr& servantManager, BasicStre
_os.startWriteEncaps(encoding, DefaultFormat);
_os.write(ex);
_os.endWriteEncaps();
+ _observer.reply(_os.b.size() - headerSize - 4);
_connection->sendResponse(&_os, _compress);
}
else
@@ -711,6 +725,7 @@ IceInternal::Incoming::invoke(const ServantManagerPtr& servantManager, BasicStre
if(_response)
{
+ _observer.reply(_os.b.size() - headerSize - 4);
_connection->sendResponse(&_os, _compress);
}
else