/*
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
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"`
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"`
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 {
}
}
+ 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
call.AutoTossNoExec = callCfg.AutoTossNoExec
call.AutoTossNoTrns = callCfg.AutoTossNoTrns
call.AutoTossNoArea = callCfg.AutoTossNoArea
+ call.AutoTossNoACK = callCfg.AutoTossNoACK
+ call.AutoTossGenACK = callCfg.AutoTossGenACK
calls = append(calls, &call)
}
FreqChunked: freqChunked,
FreqMinSize: freqMinSize,
FreqMaxSize: freqMaxSize,
+ ACKNice: ackNice,
+ ACKMinSize: ackMinSize,
Calls: calls,
Addrs: cfg.Addrs,
RxRate: defRxRate,
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 {
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{}