]> Cypherpunks.ru repositories - nncp.git/blobdiff - src/cmd/nncp-pkt/main.go
ACK
[nncp.git] / src / cmd / nncp-pkt / main.go
index 3cd59ecb8c6813e430e9becb1dcd3add024b90f8..d40b8c5f859a969296acab7d012dc53fdb123721 100644 (file)
@@ -1,6 +1,6 @@
 /*
 NNCP -- Node to Node copy, utilities for store-and-forward data exchange
-Copyright (C) 2016-2021 Sergey Matveev <stargrave@stargrave.org>
+Copyright (C) 2016-2022 Sergey Matveev <stargrave@stargrave.org>
 
 This program is free software: you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
@@ -29,7 +29,7 @@ import (
 
        xdr "github.com/davecgh/go-xdr/xdr2"
        "github.com/klauspost/compress/zstd"
-       "go.cypherpunks.ru/nncp/v7"
+       "go.cypherpunks.ru/nncp/v8"
 )
 
 func usage() {
@@ -74,6 +74,8 @@ func doPlain(ctx *nncp.Ctx, pkt nncp.Pkt, dump, decompress bool) {
                payloadType = "exec uncompressed"
        case nncp.PktTypeArea:
                payloadType = "area"
+       case nncp.PktTypeACK:
+               payloadType = "acknowledgement"
        }
        var path string
        switch pkt.Type {
@@ -84,7 +86,7 @@ func doPlain(ctx *nncp.Ctx, pkt nncp.Pkt, dump, decompress bool) {
        case nncp.PktTypeTrns:
                path = nncp.Base32Codec.EncodeToString(pkt.Path[:pkt.PathLen])
                node, err := ctx.FindNode(path)
-               if err != nil {
+               if err == nil {
                        path = fmt.Sprintf("%s (%s)", path, node.Name)
                }
        case nncp.PktTypeArea:
@@ -92,6 +94,8 @@ func doPlain(ctx *nncp.Ctx, pkt nncp.Pkt, dump, decompress bool) {
                if areaId, err := nncp.AreaIdFromString(path); err == nil {
                        path = fmt.Sprintf("%s (%s)", path, ctx.AreaName(areaId))
                }
+       case nncp.PktTypeACK:
+               path = nncp.Base32Codec.EncodeToString(pkt.Path[:pkt.PathLen])
        default:
                path = string(pkt.Path[:pkt.PathLen])
        }
@@ -119,7 +123,9 @@ func doEncrypted(
        recipientNode := ctx.Neigh[*pktEnc.Recipient]
        if recipientNode == nil {
                area = ctx.AreaId2Area[nncp.AreaId(*pktEnc.Recipient)]
-               recipientName = "area " + area.Name
+               if area != nil {
+                       recipientName = "area " + area.Name
+               }
        } else {
                recipientName = recipientNode.Name
        }
@@ -217,6 +223,8 @@ func main() {
                case nncp.MagicNNCPEv4.B:
                        log.Fatalln(nncp.MagicNNCPEv4.TooOld())
                case nncp.MagicNNCPEv5.B:
+                       log.Fatalln(nncp.MagicNNCPEv5.TooOld())
+               case nncp.MagicNNCPEv6.B:
                        doEncrypted(ctx, pktEnc, *dump, beginning[:nncp.PktEncOverhead])
                        return
                }