X-Git-Url: http://www.git.cypherpunks.ru/?a=blobdiff_plain;f=src%2Fcfg.go;h=f7237316c3e31aa9a1a5c64bdd882b34ec06c935;hb=cb21152163bdf2bb1bfb5881bf6962ed584d83e9;hp=98bc80c1a4c35c249f91d2cfa1e2488c9daed480;hpb=835c153195c63c59df9a40a4de1e16fff09c003f;p=nncp.git diff --git a/src/cfg.go b/src/cfg.go index 98bc80c..f723731 100644 --- a/src/cfg.go +++ b/src/cfg.go @@ -1,6 +1,6 @@ /* NNCP -- Node to Node copy, utilities for store-and-forward data exchange -Copyright (C) 2016-2022 Sergey Matveev +Copyright (C) 2016-2023 Sergey Matveev 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{}