summaryrefslogtreecommitdiff
path: root/contrib/thrift_dump.cpp
diff options
context:
space:
mode:
authorDavid Reiss <dreiss@apache.org>2008-04-08 05:07:14 +0000
committerDavid Reiss <dreiss@apache.org>2008-04-08 05:07:14 +0000
commitbbdb06eb24c3144d6f32f86c21910904013b89d9 (patch)
tree8f9fe26c8be9b629ed444c250e829c54aac02b87 /contrib/thrift_dump.cpp
parente4db03d1106a3bb381942471be9fdce72f9e88b9 (diff)
downloadthrift-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.cpp77
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;
+}