]> Cypherpunks.ru repositories - nncp.git/blobdiff - src/sp.go
Raise copyright years
[nncp.git] / src / sp.go
index 099aa4761086eb3c87ce4d7822967e94908b7e40..4db358742a17b1f584aa102ac853a1c6386c6d13 100644 (file)
--- a/src/sp.go
+++ b/src/sp.go
@@ -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
@@ -23,6 +23,7 @@ import (
        "errors"
        "fmt"
        "io"
+       "log"
        "os"
        "path/filepath"
        "sort"
@@ -549,6 +550,9 @@ func (state *SPState) StartR(conn ConnDeadlined) error {
 
        var node *Node
        for _, n := range state.Ctx.Neigh {
+               if n.NoisePub == nil {
+                       continue
+               }
                if subtle.ConstantTimeCompare(state.hs.PeerStatic(), n.NoisePub[:]) == 1 {
                        node = n
                        break
@@ -769,14 +773,21 @@ func (state *SPState) StartWorkers(
        if !state.listOnly && (state.xxOnly == "" || state.xxOnly == TTx) {
                state.wg.Add(1)
                go func() {
-                       ticker := time.NewTicker(time.Second)
+                       dw, err := state.Ctx.NewDirWatcher(
+                               filepath.Join(state.Ctx.Spool, state.Node.Id.String(), string(TTx)),
+                               time.Second,
+                       )
+                       if err != nil {
+                               state.Ctx.LogE("sp-queue-dir-watch", les, err, logMsg)
+                               log.Fatalln(err)
+                       }
                        for {
                                select {
                                case <-state.isDead:
+                                       dw.Close()
                                        state.wg.Done()
-                                       ticker.Stop()
                                        return
-                               case <-ticker.C:
+                               case <-dw.C:
                                        for _, payload := range state.Ctx.infosOur(
                                                state.Node.Id,
                                                state.Nice,
@@ -1252,7 +1263,10 @@ func (state *SPState) ProcessSP(payload []byte) ([][]byte, error) {
                                }
                                continue
                        }
-                       if _, err = os.Stat(pktPath + SeenSuffix); err == nil {
+                       if _, err = os.Stat(filepath.Join(
+                               state.Ctx.Spool, state.Node.Id.String(), string(TRx),
+                               SeenDir, Base32Codec.EncodeToString(info.Hash[:]),
+                       )); err == nil {
                                state.Ctx.LogI("sp-info-seen", lesp, func(les LEs) string {
                                        return logMsg(les) + ": already seen"
                                })
@@ -1573,7 +1587,7 @@ func (state *SPState) ProcessSP(payload []byte) ([][]byte, error) {
                                        return fmt.Sprintf("Packet %s is sent", pktName)
                                })
                                if state.Ctx.HdrUsage {
-                                       os.Remove(pth + HdrSuffix)
+                                       os.Remove(JobPath2Hdr(pth))
                                }
                        } else {
                                state.Ctx.LogE("sp-done", lesp, err, logMsg)