diff options
author | David Reiss <dreiss@apache.org> | 2008-04-08 05:07:14 +0000 |
---|---|---|
committer | David Reiss <dreiss@apache.org> | 2008-04-08 05:07:14 +0000 |
commit | bbdb06eb24c3144d6f32f86c21910904013b89d9 (patch) | |
tree | 8f9fe26c8be9b629ed444c250e829c54aac02b87 /contrib/thrift_dump.cpp | |
parent | e4db03d1106a3bb381942471be9fdce72f9e88b9 (diff) | |
download | thrift-bbdb06eb24c3144d6f32f86c21910904013b89d9.tar.gz |
Add thrift_dump.cpp to contrib.
thrift_dump is a simple program for converting data from TBinaryProtocol to
TDebugProtocol. Throw it in contrib because it is pretty primitve.
git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@665645 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'contrib/thrift_dump.cpp')
-rw-r--r-- | contrib/thrift_dump.cpp | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/contrib/thrift_dump.cpp b/contrib/thrift_dump.cpp new file mode 100644 index 000000000..da359fd80 --- /dev/null +++ b/contrib/thrift_dump.cpp @@ -0,0 +1,77 @@ +// Copyright (c) 2006- Facebook +// Distributed under the Thrift Software License +// +// See accompanying file LICENSE or visit the Thrift site at: +// http://developers.facebook.com/thrift/ + +#include <cstdlib> +#include <iostream> + +#include <transport/TTransportUtils.h> +#include <transport/TFDTransport.h> +#include <protocol/TBinaryProtocol.h> +#include <protocol/TDebugProtocol.h> +#include <protocol/TProtocolTap.h> + +using namespace std; +using boost::shared_ptr; +using namespace facebook::thrift::transport; +using namespace facebook::thrift::protocol; + +void usage() { + fprintf(stderr, + "usage: thrift_dump {-b|-f|-s} < input > ouput\n" + " -b TBufferedTransport messages\n" + " -f TFramedTransport messages\n" + " -s Raw structures\n"); + exit(EXIT_FAILURE); +} + +int main(int argc, char *argv[]) { + if (argc != 2) { + usage(); + } + + shared_ptr<TTransport> stdin_trans(new TFDTransport(STDIN_FILENO)); + shared_ptr<TTransport> itrans; + + if (argv[1] == std::string("-b") || argv[1] == std::string("-s")) { + itrans.reset(new TBufferedTransport(stdin_trans)); + } else if (argv[1] == std::string("-f")) { + itrans.reset(new TFramedTransport(stdin_trans)); + } else { + usage(); + } + + shared_ptr<TProtocol> iprot(new TBinaryProtocol(itrans)); + shared_ptr<TProtocol> oprot( + new TDebugProtocol( + shared_ptr<TTransport>(new TBufferedTransport( + shared_ptr<TTransport>(new TFDTransport(STDOUT_FILENO)))))); + + TProtocolTap tap(iprot, oprot); + + try { + if (argv[1] == std::string("-s")) { + for (;;) { + tap.skip(T_STRUCT); + } + } else { + std::string name; + TMessageType messageType; + int32_t seqid; + for (;;) { + tap.readMessageBegin(name, messageType, seqid); + tap.skip(T_STRUCT); + tap.readMessageEnd(); + } + } + } catch (TProtocolException exn) { + cout << "Protocol Exception: " << exn.what() << endl; + } catch (...) { + } + + cout << endl; + + return 0; +} |