From c6fb85be2261dc38903d909564e7732762b303d2 Mon Sep 17 00:00:00 2001 From: Lucas Clemente Date: Sun, 8 May 2016 22:09:02 +0200 Subject: [PATCH] add handshake message logging --- handshake/crypto_setup.go | 2 ++ handshake/handshake_message.go | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/handshake/crypto_setup.go b/handshake/crypto_setup.go index 4d04119f..26016886 100644 --- a/handshake/crypto_setup.go +++ b/handshake/crypto_setup.go @@ -73,6 +73,8 @@ func (h *CryptoSetup) HandleCryptoStream() error { } chloData := cachingReader.Get() + utils.Infof("Got crypto message:\n%s", printHandshakeMessage(cryptoData)) + var reply []byte if !h.isInchoateCHLO(cryptoData) { // We have a CHLO with a proper server config ID, do a 0-RTT handshake diff --git a/handshake/handshake_message.go b/handshake/handshake_message.go index 8d43232d..eba7a232 100644 --- a/handshake/handshake_message.go +++ b/handshake/handshake_message.go @@ -4,6 +4,7 @@ import ( "bytes" "encoding/binary" "errors" + "fmt" "io" "sort" @@ -86,3 +87,20 @@ func WriteHandshakeMessage(b *bytes.Buffer, messageTag Tag, data map[Tag][]byte) // Now we write the index data for real copy(b.Bytes()[indexStart:], indexData) } + +func printHandshakeMessage(data map[Tag][]byte) string { + var res string + for k, v := range data { + if k == TagPAD { + continue + } + res += fmt.Sprintf("\t%s: %#v\n", tagToString(k), string(v)) + } + return res +} + +func tagToString(tag Tag) string { + b := make([]byte, 4) + binary.LittleEndian.PutUint32(b, uint32(tag)) + return string(b) +}