/*
NNCP -- Node to Node copy, utilities for store-and-forward data exchange
-Copyright (C) 2016-2017 Sergey Matveev <stargrave@stargrave.org>
+Copyright (C) 2016-2019 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
-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
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 {
}
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) {
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 {
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":
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 {
addr = callYml.Addr
}
}
+
onlineDeadline := defOnlineDeadline
if callYml.OnlineDeadline != nil {
if *callYml.OnlineDeadline == 0 {
}
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,
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,
}
func CfgParse(data []byte) (*Ctx, error) {
var err error
- if bytes.Compare(data[:8], MagicNNCPBv2[:]) == 0 {
+ if bytes.Compare(data[:8], MagicNNCPBv3[:]) == 0 {
os.Stderr.WriteString("Passphrase:")
password, err := terminal.ReadPassword(0)
if err != nil {