X-Git-Url: http://www.git.cypherpunks.ru/?a=blobdiff_plain;f=src%2Fcypherpunks.ru%2Fnncp%2Fcfg.go;h=203752bf8d8d0e2111e94a474500e8c8c530ab09;hb=dd92823db3d72fb21a4c712a7fb052dce16443dd;hp=0a1b1d8a0a86d73874e221b8087f5d82ac4734c6;hpb=736b4b108020314d84fd8abf57e142738721722d;p=nncp.git diff --git a/src/cypherpunks.ru/nncp/cfg.go b/src/cypherpunks.ru/nncp/cfg.go index 0a1b1d8..203752b 100644 --- a/src/cypherpunks.ru/nncp/cfg.go +++ b/src/cypherpunks.ru/nncp/cfg.go @@ -1,11 +1,10 @@ /* NNCP -- Node to Node copy, utilities for store-and-forward data exchange -Copyright (C) 2016-2017 Sergey Matveev +Copyright (C) 2016-2019 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 -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. +the Free Software Foundation, version 3 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -48,28 +47,32 @@ type NodeYAML struct { Id string ExchPub string SignPub string - NoisePub *string `noisepub,omitempty` - Sendmail []string `sendmail,omitempty` - Incoming *string `incoming,omitempty` - Freq *string `freq,omitempty` - FreqChunked *uint64 `freqchunked,omitempty` - FreqMinSize *uint64 `freqminsize,omitempty` - Via []string `via,omitempty` - Calls []CallYAML `calls,omitempty` - - Addrs map[string]string `addrs,omitempty` - - OnlineDeadline *uint `onlinedeadline,omitempty` - MaxOnlineTime *uint `maxonlinetime,omitempty` + NoisePub *string `yaml:"noisepub,omitempty"` + Exec map[string][]string `yaml:"exec,omitempty"` + Incoming *string `yaml:"incoming,omitempty"` + Freq *string `yaml:"freq,omitempty"` + FreqChunked *uint64 `yaml:"freqchunked,omitempty"` + FreqMinSize *uint64 `yaml:"freqminsize,omitempty"` + Via []string `yaml:"via,omitempty"` + Calls []CallYAML `yaml:"calls,omitempty"` + + Addrs map[string]string `yaml:"addrs,omitempty"` + + RxRate *int `yaml:"rxrate,omitempty"` + TxRate *int `yaml:"txrate,omitempty"` + OnlineDeadline *uint `yaml:"onlinedeadline,omitempty"` + MaxOnlineTime *uint `yaml:"maxonlinetime,omitempty"` } type CallYAML struct { Cron string - Nice *int `nice,omitempty` - Xx string `xx,omitempty` - Addr *string `addr,omitempty` - OnlineDeadline *uint `onlinedeadline,omitempty` - MaxOnlineTime *uint `maxonlinetime,omitempty` + Nice *string `yaml:"nice,omitempty"` + Xx string `yaml:"xx,omitempty"` + RxRate *int `yaml:"rxrate,omitempty"` + TxRate *int `yaml:"txrate,omitempty"` + Addr *string `yaml:"addr,omitempty"` + OnlineDeadline *uint `yaml:"onlinedeadline,omitempty"` + MaxOnlineTime *uint `yaml:"maxonlinetime,omitempty"` } type NodeOurYAML struct { @@ -88,17 +91,17 @@ type FromToYAML struct { } type NotifyYAML struct { - File *FromToYAML `file,omitempty` - Freq *FromToYAML `freq,omitempty` + File *FromToYAML `yaml:"file,omitempty"` + Freq *FromToYAML `yaml:"freq,omitempty"` } type CfgYAML struct { - Self *NodeOurYAML `self,omitempty` + Self *NodeOurYAML `yaml:"self,omitempty"` Neigh map[string]NodeYAML Spool string Log string - Notify *NotifyYAML `notify,omitempty` + Notify *NotifyYAML `yaml:"notify,omitempty"` } func NewNode(name string, yml NodeYAML) (*Node, error) { @@ -163,6 +166,15 @@ func NewNode(name string, yml NodeYAML) (*Node, error) { freqMinSize = int64(*yml.FreqMinSize) * 1024 } + defRxRate := 0 + if yml.RxRate != nil && *yml.RxRate > 0 { + defRxRate = *yml.RxRate + } + defTxRate := 0 + if yml.TxRate != nil && *yml.TxRate > 0 { + defTxRate = *yml.TxRate + } + defOnlineDeadline := uint(DefaultDeadline) if yml.OnlineDeadline != nil { if *yml.OnlineDeadline <= 0 { @@ -181,13 +193,15 @@ func NewNode(name string, yml NodeYAML) (*Node, error) { if err != nil { return nil, err } + nice := uint8(255) if callYml.Nice != nil { - if *callYml.Nice < 1 || *callYml.Nice > 255 { - return nil, errors.New("Nice must be between 1 and 255") + nice, err = NicenessParse(*callYml.Nice) + if err != nil { + return nil, err } - nice = uint8(*callYml.Nice) } + var xx TRxTx switch callYml.Xx { case "rx": @@ -198,6 +212,16 @@ func NewNode(name string, yml NodeYAML) (*Node, error) { default: return nil, errors.New("xx field must be either \"rx\" or \"tx\"") } + + rxRate := defRxRate + if callYml.RxRate != nil { + rxRate = *callYml.RxRate + } + txRate := defTxRate + if callYml.TxRate != nil { + txRate = *callYml.TxRate + } + var addr *string if callYml.Addr != nil { if a, exists := yml.Addrs[*callYml.Addr]; exists { @@ -206,6 +230,7 @@ func NewNode(name string, yml NodeYAML) (*Node, error) { addr = callYml.Addr } } + onlineDeadline := defOnlineDeadline if callYml.OnlineDeadline != nil { if *callYml.OnlineDeadline == 0 { @@ -213,14 +238,18 @@ func NewNode(name string, yml NodeYAML) (*Node, error) { } onlineDeadline = *callYml.OnlineDeadline } + var maxOnlineTime uint if callYml.MaxOnlineTime != nil { maxOnlineTime = *callYml.MaxOnlineTime } + calls = append(calls, &Call{ Cron: expr, Nice: nice, Xx: xx, + RxRate: rxRate, + TxRate: txRate, Addr: addr, OnlineDeadline: onlineDeadline, MaxOnlineTime: maxOnlineTime, @@ -232,13 +261,15 @@ func NewNode(name string, yml NodeYAML) (*Node, error) { Id: nodeId, ExchPub: new([32]byte), SignPub: ed25519.PublicKey(signPub), - Sendmail: yml.Sendmail, + Exec: yml.Exec, Incoming: incoming, Freq: freq, FreqChunked: freqChunked, FreqMinSize: freqMinSize, Calls: calls, Addrs: yml.Addrs, + RxRate: defRxRate, + TxRate: defTxRate, OnlineDeadline: defOnlineDeadline, MaxOnlineTime: defMaxOnlineTime, } @@ -339,7 +370,7 @@ func (nodeOur *NodeOur) ToYAML() string { func CfgParse(data []byte) (*Ctx, error) { var err error - if bytes.Compare(data[:8], MagicNNCPBv1[:]) == 0 { + if bytes.Compare(data[:8], MagicNNCPBv3[:]) == 0 { os.Stderr.WriteString("Passphrase:") password, err := terminal.ReadPassword(0) if err != nil {