]> Cypherpunks.ru repositories - nncp.git/commitdiff
nncp-pkt is able to parse .hdr
authorSergey Matveev <stargrave@stargrave.org>
Thu, 1 Jul 2021 09:18:36 +0000 (12:18 +0300)
committerSergey Matveev <stargrave@stargrave.org>
Fri, 2 Jul 2021 18:37:54 +0000 (21:37 +0300)
src/cmd/nncp-pkt/main.go

index f696184cdcaf681f1206ea3655c595f3aaf9e135..fbfc6dafac0b7bd5e3a34eca16a23970f0da7047 100644 (file)
@@ -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
                }
        }