Index: net/tools/quic/crypto_message_printer_bin.cc |
diff --git a/net/tools/quic/crypto_message_printer_bin.cc b/net/tools/quic/crypto_message_printer_bin.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..e6813c4a3c6f02ec6acda06d8ee093994bab130e |
--- /dev/null |
+++ b/net/tools/quic/crypto_message_printer_bin.cc |
@@ -0,0 +1,57 @@ |
+// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+// Dumps the contents of a QUIC crypto handshake message in a human readable |
+// format. |
+// |
+// Usage: crypto_message_printer_bin <hex of message> |
+ |
+#include <iostream> |
+ |
+#include "base/command_line.h" |
+#include "net/quic/crypto/crypto_framer.h" |
+#include "net/quic/quic_utils.h" |
+ |
+using std::cerr; |
+using std::cout; |
+using std::endl; |
+ |
+namespace net { |
+ |
+class CryptoMessagePrinter : public net::CryptoFramerVisitorInterface { |
+ public: |
+ void OnHandshakeMessage(const CryptoHandshakeMessage& message) override { |
+ cout << message.DebugString() << endl; |
+ } |
+ |
+ void OnError(CryptoFramer* framer) override { |
+ cerr << "Error code: " << framer->error() << endl; |
+ cerr << "Error details: " << framer->error_detail() << endl; |
+ } |
+}; |
+ |
+} // namespace net |
+ |
+int main(int argc, char* argv[]) { |
+ base::CommandLine::Init(argc, argv); |
+ |
+ if (argc != 2) { |
+ cerr << "Usage: " << argv[0] << " <hex of message>\n"; |
+ return 1; |
+ } |
+ |
+ net::CryptoMessagePrinter printer; |
+ net::CryptoFramer framer; |
+ framer.set_visitor(&printer); |
+ std::string input = net::QuicUtils::HexDecode(argv[1]); |
+ if (!framer.ProcessInput(input)) { |
+ return 1; |
+ } |
+ if (framer.InputBytesRemaining() != 0) { |
+ cerr << "Input partially consumed. " << framer.InputBytesRemaining() |
+ << " bytes remaining." << endl; |
+ return 2; |
+ } |
+ return 0; |
+} |