]> Cypherpunks.ru repositories - nncp.git/blobdiff - src/cfg.go
Update dependencies
[nncp.git] / src / cfg.go
index 98bc80c1a4c35c249f91d2cfa1e2488c9daed480..f7237316c3e31aa9a1a5c64bdd882b34ec06c935 100644 (file)
@@ -1,6 +1,6 @@
 /*
 NNCP -- Node to Node copy, utilities for store-and-forward data exchange
-Copyright (C) 2016-2022 Sergey Matveev <stargrave@stargrave.org>
+Copyright (C) 2016-2023 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 (
        "time"
 
        "github.com/gorhill/cronexpr"
-       "github.com/hjson/hjson-go"
+       "github.com/hjson/hjson-go/v4"
        "golang.org/x/crypto/ed25519"
        "golang.org/x/term"
 )
@@ -56,6 +56,7 @@ type NodeJSON struct {
        Incoming *string             `json:"incoming,omitempty"`
        Exec     map[string][]string `json:"exec,omitempty"`
        Freq     *NodeFreqJSON       `json:"freq,omitempty"`
+       ACK      *NodeACKJSON        `json:"ack,omitempty"`
        Via      []string            `json:"via,omitempty"`
        Calls    []CallJSON          `json:"calls,omitempty"`
 
@@ -74,6 +75,11 @@ type NodeFreqJSON struct {
        MaxSize *uint64 `json:"maxsize,omitempty"`
 }
 
+type NodeACKJSON struct {
+       MinSize *uint64 `json:"minsize,omitempty"`
+       Nice    *string `json:"nice,omitempty"`
+}
+
 type CallJSON struct {
        Cron           string  `json:"cron"`
        Nice           *string `json:"nice,omitempty"`
@@ -94,6 +100,8 @@ type CallJSON struct {
        AutoTossNoExec bool `json:"autotoss-noexec,omitempty"`
        AutoTossNoTrns bool `json:"autotoss-notrns,omitempty"`
        AutoTossNoArea bool `json:"autotoss-noarea,omitempty"`
+       AutoTossNoACK  bool `json:"autotoss-noack,omitempty"`
+       AutoTossGenACK bool `json:"autotoss-gen-ack,omitempty"`
 }
 
 type NodeOurJSON struct {
@@ -220,6 +228,20 @@ func NewNode(name string, cfg NodeJSON) (*Node, error) {
                }
        }
 
+       ackNice := uint8(255)
+       var ackMinSize int64
+       if cfg.ACK != nil {
+               if cfg.ACK.Nice != nil {
+                       ackNice, err = NicenessParse(*cfg.ACK.Nice)
+                       if err != nil {
+                               return nil, err
+                       }
+               }
+               if cfg.ACK.MinSize != nil {
+                       ackMinSize = int64(*cfg.ACK.MinSize) * 1024
+               }
+       }
+
        defRxRate := 0
        if cfg.RxRate != nil && *cfg.RxRate > 0 {
                defRxRate = *cfg.RxRate
@@ -317,6 +339,8 @@ func NewNode(name string, cfg NodeJSON) (*Node, error) {
                call.AutoTossNoExec = callCfg.AutoTossNoExec
                call.AutoTossNoTrns = callCfg.AutoTossNoTrns
                call.AutoTossNoArea = callCfg.AutoTossNoArea
+               call.AutoTossNoACK = callCfg.AutoTossNoACK
+               call.AutoTossGenACK = callCfg.AutoTossGenACK
 
                calls = append(calls, &call)
        }
@@ -332,6 +356,8 @@ func NewNode(name string, cfg NodeJSON) (*Node, error) {
                FreqChunked:    freqChunked,
                FreqMinSize:    freqMinSize,
                FreqMaxSize:    freqMaxSize,
+               ACKNice:        ackNice,
+               ACKMinSize:     ackMinSize,
                Calls:          calls,
                Addrs:          cfg.Addrs,
                RxRate:         defRxRate,
@@ -468,7 +494,7 @@ func NewArea(ctx *Ctx, name string, cfg *AreaJSON) (*Area, error) {
 
 func CfgParse(data []byte) (*CfgJSON, error) {
        var err error
-       if bytes.Compare(data[:8], MagicNNCPBv3.B[:]) == 0 {
+       if bytes.Equal(data[:8], MagicNNCPBv3.B[:]) {
                os.Stderr.WriteString("Passphrase:")
                password, err := term.ReadPassword(0)
                if err != nil {
@@ -479,9 +505,9 @@ func CfgParse(data []byte) (*CfgJSON, error) {
                if err != nil {
                        return nil, err
                }
-       } else if bytes.Compare(data[:8], MagicNNCPBv2.B[:]) == 0 {
+       } else if bytes.Equal(data[:8], MagicNNCPBv2.B[:]) {
                log.Fatalln(MagicNNCPBv2.TooOld())
-       } else if bytes.Compare(data[:8], MagicNNCPBv1.B[:]) == 0 {
+       } else if bytes.Equal(data[:8], MagicNNCPBv1.B[:]) {
                log.Fatalln(MagicNNCPBv1.TooOld())
        }
        var cfgGeneral map[string]interface{}