|  | /* | 
|  | * Licensed to the Apache Software Foundation (ASF) under one | 
|  | * or more contributor license agreements. See the NOTICE file | 
|  | * distributed with this work for additional information | 
|  | * regarding copyright ownership. The ASF licenses this file | 
|  | * to you under the Apache License, Version 2.0 (the | 
|  | * "License"); you may not use this file except in compliance | 
|  | * with the License. You may obtain a copy of the License at | 
|  | * | 
|  | *   http://www.apache.org/licenses/LICENSE-2.0 | 
|  | * | 
|  | * Unless required by applicable law or agreed to in writing, | 
|  | * software distributed under the License is distributed on an | 
|  | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | 
|  | * KIND, either express or implied. See the License for the | 
|  | * specific language governing permissions and limitations | 
|  | * under the License. | 
|  | */ | 
|  |  | 
|  | #include <cstdlib> | 
|  | #include <iostream> | 
|  |  | 
|  | #include <thrift/transport/TBufferTransports.h> | 
|  | #include <thrift/transport/TFDTransport.h> | 
|  | #include <thrift/protocol/TBinaryProtocol.h> | 
|  | #include <thrift/protocol/TDebugProtocol.h> | 
|  | #include <thrift/protocol/TProtocolTap.h> | 
|  |  | 
|  | using namespace std; | 
|  | using boost::shared_ptr; | 
|  | using namespace apache::thrift::transport; | 
|  | using namespace apache::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 (...) { | 
|  | oprot->getTransport()->flush(); | 
|  | } | 
|  |  | 
|  | cout << endl; | 
|  |  | 
|  | return 0; | 
|  | } |