diff options
Diffstat (limited to 'cpp/src/Ice/TraceUtil.cpp')
-rw-r--r-- | cpp/src/Ice/TraceUtil.cpp | 263 |
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; } |