summaryrefslogtreecommitdiff
path: root/cpp/src/Ice/TraceUtil.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/Ice/TraceUtil.cpp')
-rw-r--r--cpp/src/Ice/TraceUtil.cpp263
1 files changed, 140 insertions, 123 deletions
diff --git a/cpp/src/Ice/TraceUtil.cpp b/cpp/src/Ice/TraceUtil.cpp
index 884e88b87d6..b5084a296fe 100644
--- a/cpp/src/Ice/TraceUtil.cpp
+++ b/cpp/src/Ice/TraceUtil.cpp
@@ -23,17 +23,73 @@ using namespace Ice;
using namespace IceInternal;
static void
+printIdentityFacetOperation(ostream& s, BasicStream& stream)
+{
+ Identity identity;
+ identity.__read(&stream);
+ s << "\nidentity = " << identity;
+
+ vector<string> facet;
+ stream.read(facet);
+ s << "\nfacet = ";
+ vector<string>::const_iterator p = facet.begin();
+ while(p != facet.end())
+ {
+ //
+ // TODO: Escape for whitespace and slashes.
+ //
+ s << *p++;
+ if(p != facet.end())
+ {
+ s << '/';
+ }
+ }
+
+ string operation;
+ stream.read(operation);
+ s << "\noperation = " << operation;
+}
+
+static void
+printRequestHeader(ostream& s, BasicStream& stream)
+{
+ printIdentityFacetOperation(s, stream);
+
+ bool idempotent;
+ stream.read(idempotent);
+ s << "\nidempotent = " << (idempotent ? "true" : "false");
+
+ Int sz;
+ stream.readSize(sz);
+ s << "\ncontext = ";
+ while(sz--)
+ {
+ pair<string, string> pair;
+ stream.read(pair.first);
+ stream.read(pair.second);
+ s << pair.first << '/' << pair.second;
+ if(sz)
+ {
+ s << ", ";
+ }
+ }
+}
+
+static void
printHeader(ostream& s, BasicStream& stream)
{
Byte protVer;
stream.read(protVer);
// s << "\nprotocol version = " << static_cast<int>(protVer);
+
Byte encVer;
stream.read(encVer);
// s << "\nencoding version = " << static_cast<int>(encVer);
+
Byte type;
stream.read(type);
s << "\nmessage type = " << static_cast<int>(type) << ' ';
+
switch(type)
{
case requestMsg:
@@ -41,36 +97,43 @@ printHeader(ostream& s, BasicStream& stream)
s << "(request)";
break;
}
+
case requestBatchMsg:
{
s << "(batch request)";
break;
}
+
case replyMsg:
{
s << "(reply)";
break;
}
+
case compressedRequestMsg:
{
s << "(compressed request)";
break;
}
+
case compressedRequestBatchMsg:
{
s << "(compressed batch request)";
break;
}
+
case compressedReplyMsg:
{
s << "(compressed reply)";
break;
}
+
case closeConnectionMsg:
{
s << "(close connection)";
break;
}
+
case validateConnectionMsg:
{
s << "(validate connection)";
@@ -82,115 +145,12 @@ printHeader(ostream& s, BasicStream& stream)
break;
}
}
+
Int size;
stream.read(size);
s << "\nmessage size = " << size;
}
-static void
-printRequestHeader(ostream& s, BasicStream& stream)
-{
- Identity identity;
- identity.__read(&stream);
- s << "\nidentity = " << identity;
- vector<string> facet;
- stream.read(facet);
- s << "\nfacet = ";
- vector<string>::const_iterator p = facet.begin();
- while(p != facet.end())
- {
- //
- // TODO: Escape for whitespace and slashes.
- //
- s << *p++;
- if(p != facet.end())
- {
- s << '/';
- }
- }
- string operation;
- stream.read(operation);
- s << "\noperation = " << operation;
- bool idempotent;
- stream.read(idempotent);
- s << "\nidempotent = " << (idempotent ? "true" : "false");
- Int sz;
- stream.readSize(sz);
- s << "\ncontext = ";
- while(sz--)
- {
- pair<string, string> pair;
- stream.read(pair.first);
- stream.read(pair.second);
- s << pair.first << '/' << pair.second;
- if(sz)
- {
- s << ", ";
- }
- }
-}
-
-#if 0
-static void
-dumpOctets(const char* cat, const BasicStream& stream, const ::Ice::LoggerPtr& logger)
-{
- ostringstream s;
- s << endl;
-
- const BasicStream::Container::size_type inc = 8;
-
- for(BasicStream::Container::size_type i = 0; i < stream.b.size(); i += inc)
- {
- for(BasicStream::Container::size_type j = i; j - i < inc; j++)
- {
- if(j < stream.b.size())
- {
- int n = stream.b[j];
- if(n < 0)
- {
- n += 256;
- }
- if(n < 10)
- {
- s << " " << n;
- }
- else if(n < 100)
- {
- s << " " << n;
- }
- else
- {
- s << n;
- }
- s << " ";
- }
- else
- {
- s << " ";
- }
- }
-
- s << '"';
-
- for(BasicStream::Container::size_type j = i; j < stream.b.size() && j - i < inc; j++)
- {
- if(stream.b[j] >= 32 && stream.b[j] < 127)
- {
- s << (char)stream.b[j];
- }
- else
- {
- s << '.';
- }
- }
-
- s << '"' << endl;
- }
-
- logger->trace(cat, s.str());
-}
-#endif
-
void
IceInternal::traceHeader(const char* heading, const BasicStream& str, const ::Ice::LoggerPtr& logger,
const TraceLevelsPtr& tl)
@@ -200,9 +160,11 @@ IceInternal::traceHeader(const char* heading, const BasicStream& str, const ::Ic
BasicStream& stream = const_cast<BasicStream&>(str);
BasicStream::Container::iterator p = stream.i;
stream.i = stream.b.begin();
+
ostringstream s;
s << heading;
printHeader(s, stream);
+
logger->trace(tl->protocolCat, s.str());
stream.i = p;
}
@@ -217,9 +179,11 @@ IceInternal::traceRequest(const char* heading, const BasicStream& str, const ::I
BasicStream& stream = const_cast<BasicStream&>(str);
BasicStream::Container::iterator p = stream.i;
stream.i = stream.b.begin();
+
ostringstream s;
s << heading;
printHeader(s, stream);
+
Int requestId;
stream.read(requestId);
s << "\nrequest id = " << requestId;
@@ -228,6 +192,7 @@ IceInternal::traceRequest(const char* heading, const BasicStream& str, const ::I
s << " (oneway)";
}
printRequestHeader(s, stream);
+
logger->trace(tl->protocolCat, s.str());
stream.i = p;
}
@@ -242,9 +207,11 @@ IceInternal::traceBatchRequest(const char* heading, const BasicStream& str, cons
BasicStream& stream = const_cast<BasicStream&>(str);
BasicStream::Container::iterator p = stream.i;
stream.i = stream.b.begin();
+
ostringstream s;
s << heading;
printHeader(s, stream);
+
int cnt = 0;
while(stream.i != stream.b.end())
{
@@ -252,6 +219,7 @@ IceInternal::traceBatchRequest(const char* heading, const BasicStream& str, cons
printRequestHeader(s, stream);
stream.skipEncaps();
}
+
logger->trace(tl->protocolCat, s.str());
stream.i = p;
}
@@ -266,12 +234,15 @@ IceInternal::traceReply(const char* heading, const BasicStream& str, const ::Ice
BasicStream& stream = const_cast<BasicStream&>(str);
BasicStream::Container::iterator p = stream.i;
stream.i = stream.b.begin();
+
ostringstream s;
s << heading;
printHeader(s, stream);
+
Int requestId;
stream.read(requestId);
s << "\nrequest id = " << requestId;
+
Byte status;
stream.read(status);
s << "\nreply status = " << static_cast<int>(status) << ' ';
@@ -282,52 +253,98 @@ IceInternal::traceReply(const char* heading, const BasicStream& str, const ::Ice
s << "(ok)";
break;
}
+
case DispatchUserException:
{
s << "(user exception)";
break;
}
+
case DispatchLocationForward:
{
s << "(location forward)";
break;
}
+
case DispatchObjectNotExist:
- {
- s << "(object not exist)";
- break;
- }
case DispatchFacetNotExist:
- {
- s << "(facet not exist)";
- break;
- }
case DispatchOperationNotExist:
{
- s << "(operation not exist)";
+ switch(static_cast<DispatchStatus>(status))
+ {
+ case DispatchObjectNotExist:
+ {
+ s << "(object not exist)";
+ break;
+ }
+
+ case DispatchFacetNotExist:
+ {
+ s << "(facet not exist)";
+ break;
+ }
+
+ case DispatchOperationNotExist:
+ {
+ s << "(operation not exist)";
+ break;
+ }
+
+ default:
+ {
+ assert(false);
+ break;
+ }
+ }
+
+ printIdentityFacetOperation(s, stream);
break;
}
+
+ case DispatchUnknownException:
case DispatchUnknownLocalException:
- {
- s << "(unknown local exception)";
- break;
- }
case DispatchUnknownUserException:
{
- s << "(unknown user exception)";
- break;
- }
- case DispatchUnknownException:
- {
- s << "(unknown exception)";
+ switch(static_cast<DispatchStatus>(status))
+ {
+ case DispatchUnknownException:
+ {
+ s << "(unknown exception)";
+ break;
+ }
+
+ case DispatchUnknownLocalException:
+ {
+ s << "(unknown local exception)";
+ break;
+ }
+
+ case DispatchUnknownUserException:
+ {
+ s << "(unknown user exception)";
+ break;
+ }
+
+ default:
+ {
+ assert(false);
+ break;
+ }
+ }
+
+ string unknown;
+ stream.read(unknown);
+ s << "\nunknown = " << unknown;
break;
}
+
default:
{
s << "(unknown)";
break;
}
}
+
logger->trace(tl->protocolCat, s.str());
stream.i = p;
}