package nncp
import (
+ "errors"
"fmt"
+ "io/fs"
"os"
"path/filepath"
"sort"
}
}
+ if n.ACK != nil {
+ if err = cfgDirMkdir(dst, "neigh", name, "ack"); err != nil {
+ return
+ }
+ if err = cfgDirSave(
+ n.ACK.MinSize,
+ dst, "neigh", name, "ack", "minsize",
+ ); err != nil {
+ return
+ }
+ if err = cfgDirSave(
+ n.ACK.Nice,
+ dst, "neigh", name, "ack", "nice",
+ ); err != nil {
+ return
+ }
+ }
+
if len(n.Via) > 0 {
if err = cfgDirSave(
strings.Join(n.Via, "\n"),
return
}
}
+ if call.AutoTossNoACK {
+ if err = cfgDirTouch(dst, "neigh", name, "calls", is, "autotoss-noack"); err != nil {
+ return
+ }
+ }
+ if call.AutoTossGenACK {
+ if err = cfgDirTouch(dst, "neigh", name, "calls", is, "autotoss-gen-ack"); err != nil {
+ return
+ }
+ }
}
}
func cfgDirLoad(src ...string) (v string, exists bool, err error) {
b, err := os.ReadFile(filepath.Join(src...))
if err != nil {
- if os.IsNotExist(err) {
+ if errors.Is(err, fs.ErrNotExist) {
return "", false, nil
}
return "", false, err
}
fis, err := os.ReadDir(filepath.Join(src, "mcd-send"))
- if err != nil && !os.IsNotExist(err) {
+ if err != nil && !errors.Is(err, fs.ErrNotExist) {
return nil, err
}
if len(fis) > 0 {
}
}
fis, err = os.ReadDir(filepath.Join(src, "notify", "exec"))
- if err != nil && !os.IsNotExist(err) {
+ if err != nil && !errors.Is(err, fs.ErrNotExist) {
return nil, err
}
for _, fi := range fis {
return nil, err
}
cfg.Self = &self
- } else if !os.IsNotExist(err) {
+ } else if !errors.Is(err, fs.ErrNotExist) {
return nil, err
}
cfg.Neigh = make(map[string]NodeJSON)
fis, err = os.ReadDir(filepath.Join(src, "neigh"))
- if err != nil && !os.IsNotExist(err) {
+ if err != nil && !errors.Is(err, fs.ErrNotExist) {
return nil, err
}
for _, fi := range fis {
node.Exec = make(map[string][]string)
fis2, err := os.ReadDir(filepath.Join(src, "neigh", n, "exec"))
- if err != nil && !os.IsNotExist(err) {
+ if err != nil && !errors.Is(err, fs.ErrNotExist) {
return nil, err
}
for _, fi2 := range fis2 {
}
}
+ if cfgDirExists(src, "neigh", n, "ack") {
+ node.ACK = &NodeACKJSON{}
+ i64, err := cfgDirLoadIntOpt(src, "neigh", n, "ack", "minsize")
+ if err != nil {
+ return nil, err
+ }
+ if i64 != nil {
+ i := uint64(*i64)
+ node.ACK.MinSize = &i
+ }
+ if node.ACK.Nice, err = cfgDirLoadOpt(
+ src, "neigh", n, "ack", "nice",
+ ); err != nil {
+ return nil, err
+ }
+ }
+
via, err := cfgDirLoadOpt(src, "neigh", n, "via")
if err != nil {
return nil, err
node.Addrs = make(map[string]string)
fis2, err = os.ReadDir(filepath.Join(src, "neigh", n, "addrs"))
- if err != nil && !os.IsNotExist(err) {
+ if err != nil && !errors.Is(err, fs.ErrNotExist) {
return nil, err
}
for _, fi2 := range fis2 {
}
fis2, err = os.ReadDir(filepath.Join(src, "neigh", n, "calls"))
- if err != nil && !os.IsNotExist(err) {
+ if err != nil && !errors.Is(err, fs.ErrNotExist) {
return nil, err
}
callsIdx := make([]int, 0, len(fis2))
if cfgDirExists(src, "neigh", n, "calls", is, "autotoss-noarea") {
call.AutoTossNoArea = true
}
+ if cfgDirExists(src, "neigh", n, "calls", is, "autotoss-noack") {
+ call.AutoTossNoACK = true
+ }
+ if cfgDirExists(src, "neigh", n, "calls", is, "autotoss-gen-ack") {
+ call.AutoTossGenACK = true
+ }
node.Calls = append(node.Calls, call)
}
cfg.Neigh[n] = node
cfg.Areas = make(map[string]AreaJSON)
fis, err = os.ReadDir(filepath.Join(src, "areas"))
- if err != nil && !os.IsNotExist(err) {
+ if err != nil && !errors.Is(err, fs.ErrNotExist) {
return nil, err
}
for _, fi := range fis {
area.Exec = make(map[string][]string)
fis2, err := os.ReadDir(filepath.Join(src, "areas", n, "exec"))
- if err != nil && !os.IsNotExist(err) {
+ if err != nil && !errors.Is(err, fs.ErrNotExist) {
return nil, err
}
for _, fi2 := range fis2 {
}
fis, err = os.ReadDir(filepath.Join(src, "yggdrasil-aliases"))
- if err != nil && !os.IsNotExist(err) {
+ if err != nil && !errors.Is(err, fs.ErrNotExist) {
return nil, err
}
if len(fis) > 0 {