From bbdb06eb24c3144d6f32f86c21910904013b89d9 Mon Sep 17 00:00:00 2001 From: David Reiss Date: Tue, 8 Apr 2008 05:07:14 +0000 Subject: [PATCH] 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 --- contrib/thrift_dump.cpp | 77 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 contrib/thrift_dump.cpp diff --git a/contrib/thrift_dump.cpp b/contrib/thrift_dump.cpp new file mode 100644 index 00000000..da359fd8 --- /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 +#include + +#include +#include +#include +#include +#include + +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 stdin_trans(new TFDTransport(STDIN_FILENO)); + shared_ptr 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 iprot(new TBinaryProtocol(itrans)); + shared_ptr oprot( + new TDebugProtocol( + shared_ptr(new TBufferedTransport( + shared_ptr(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; +} -- 2.17.1