]> Cypherpunks.ru repositories - nncp.git/blobdiff - src/jobs.go
Raise copyright years
[nncp.git] / src / jobs.go
index 0819738f4033b4ffdc8022b9d9adf600e308289c..05a7c9c66c91cee809e3cafc9fe8a0caea056a41 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
@@ -20,6 +20,7 @@ package nncp
 import (
        "bytes"
        "fmt"
+       "io"
        "os"
        "path/filepath"
        "strings"
@@ -34,7 +35,7 @@ const (
        TRx TRxTx = "rx"
        TTx TRxTx = "tx"
 
-       HdrSuffix = ".hdr"
+       HdrDir = "hdr"
 )
 
 type Job struct {
@@ -44,9 +45,13 @@ type Job struct {
        HshValue *[MTHSize]byte
 }
 
-func (ctx *Ctx) HdrRead(fd *os.File) (*PktEnc, []byte, error) {
+func JobPath2Hdr(jobPath string) string {
+       return filepath.Join(filepath.Dir(jobPath), HdrDir, filepath.Base(jobPath))
+}
+
+func (ctx *Ctx) HdrRead(r io.Reader) (*PktEnc, []byte, error) {
        var pktEnc PktEnc
-       _, err := xdr.Unmarshal(fd, &pktEnc)
+       _, err := xdr.Unmarshal(r, &pktEnc)
        if err != nil {
                return nil, nil, err
        }
@@ -79,7 +84,13 @@ func (ctx *Ctx) HdrWrite(pktEncRaw []byte, tgt string) error {
                os.Remove(tmpHdr.Name())
                return err
        }
-       if err = os.Rename(tmpHdr.Name(), tgt+HdrSuffix); err != nil {
+       if err = ensureDir(filepath.Dir(tgt), HdrDir); err != nil {
+               ctx.LogE("hdr-write-ensure-mkdir", nil, err, func(les LEs) string {
+                       return "Header writing: ensuring directory"
+               })
+               return err
+       }
+       if err = os.Rename(tmpHdr.Name(), JobPath2Hdr(tgt)); err != nil {
                ctx.LogE("hdr-write-rename", nil, err, func(les LEs) string {
                        return "Header writing: renaming"
                })
@@ -98,7 +109,7 @@ func (ctx *Ctx) jobsFind(nodeId *NodeId, xx TRxTx, nock, part bool) chan Job {
                        return
                }
                fis, err := dir.Readdir(0)
-               dir.Close() // #nosec G104
+               dir.Close()
                if err != nil {
                        return
                }
@@ -136,7 +147,7 @@ func (ctx *Ctx) jobsFind(nodeId *NodeId, xx TRxTx, nock, part bool) chan Job {
                        if nock || part {
                                fd, err = os.Open(pth)
                        } else {
-                               fd, err = os.Open(pth + HdrSuffix)
+                               fd, err = os.Open(JobPath2Hdr(pth))
                                if err != nil && os.IsNotExist(err) {
                                        hdrExists = false
                                        fd, err = os.Open(pth)
@@ -170,6 +181,8 @@ func (ctx *Ctx) jobsFind(nodeId *NodeId, xx TRxTx, nock, part bool) chan Job {
                        case MagicNNCPEv4.B:
                                err = MagicNNCPEv4.TooOld()
                        case MagicNNCPEv5.B:
+                               err = MagicNNCPEv5.TooOld()
+                       case MagicNNCPEv6.B:
                        default:
                                err = BadMagic
                        }