/*
NNCP -- Node to Node copy, utilities for store-and-forward data exchange
-Copyright (C) 2016-2018 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
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 `yaml:"nice,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"`
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,
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 {