From 2dce56705f399b46ccf3b9de9b6610c067da428b Mon Sep 17 00:00:00 2001 From: Sergey Matveev Date: Thu, 1 Jul 2021 12:18:36 +0300 Subject: [PATCH] nncp-pkt is able to parse .hdr --- src/cmd/nncp-pkt/main.go | 39 ++++++++++++++++++++------------------- 1 file changed, 20 insertions(+), 19 deletions(-) diff --git a/src/cmd/nncp-pkt/main.go b/src/cmd/nncp-pkt/main.go index f696184..fbfc6da 100644 --- a/src/cmd/nncp-pkt/main.go +++ b/src/cmd/nncp-pkt/main.go @@ -77,10 +77,7 @@ func doPlain(pkt nncp.Pkt, dump, decompress bool) { switch pkt.Type { case nncp.PktTypeExec, nncp.PktTypeExecFat: path = string(bytes.Replace( - pkt.Path[:pkt.PathLen], - []byte{0}, - []byte(" "), - -1, + pkt.Path[:pkt.PathLen], []byte{0}, []byte(" "), -1, )) case nncp.PktTypeTrns: path = nncp.Base32Codec.EncodeToString(pkt.Path[:pkt.PathLen]) @@ -168,24 +165,12 @@ func main() { } beginning := make([]byte, nncp.PktOverhead) - if _, err := io.ReadFull(os.Stdin, beginning); err != nil { + if _, err := io.ReadFull(os.Stdin, beginning[:nncp.PktEncOverhead]); err != nil { log.Fatalln("Not enough data to read") } - var pkt nncp.Pkt - if _, err := xdr.Unmarshal(bytes.NewReader(beginning), &pkt); err == nil { - switch pkt.Magic { - case nncp.MagicNNCPPv1.B: - log.Fatalln(nncp.MagicNNCPPv1.TooOld()) - case nncp.MagicNNCPPv2.B: - log.Fatalln(nncp.MagicNNCPPv2.TooOld()) - case nncp.MagicNNCPPv3.B: - doPlain(pkt, *dump, *decompress) - return - } - } var pktEnc nncp.PktEnc if _, err := xdr.Unmarshal(bytes.NewReader(beginning), &pktEnc); err == nil { - switch pkt.Magic { + switch pktEnc.Magic { case nncp.MagicNNCPEv1.B: log.Fatalln(nncp.MagicNNCPEv1.TooOld()) case nncp.MagicNNCPEv2.B: @@ -195,7 +180,23 @@ func main() { case nncp.MagicNNCPEv4.B: log.Fatalln(nncp.MagicNNCPEv4.TooOld()) case nncp.MagicNNCPEv5.B: - doEncrypted(pktEnc, *dump, *cfgPath, beginning) + doEncrypted(pktEnc, *dump, *cfgPath, beginning[:nncp.PktEncOverhead]) + return + } + } + + if _, err := io.ReadFull(os.Stdin, beginning[nncp.PktEncOverhead:]); err != nil { + log.Fatalln("Not enough data to read") + } + var pkt nncp.Pkt + if _, err := xdr.Unmarshal(bytes.NewReader(beginning), &pkt); err == nil { + switch pkt.Magic { + case nncp.MagicNNCPPv1.B: + log.Fatalln(nncp.MagicNNCPPv1.TooOld()) + case nncp.MagicNNCPPv2.B: + log.Fatalln(nncp.MagicNNCPPv2.TooOld()) + case nncp.MagicNNCPPv3.B: + doPlain(pkt, *dump, *decompress) return } } -- 2.44.0