X-Git-Url: http://www.git.cypherpunks.ru/?a=blobdiff_plain;f=src%2Fcfgdir.go;h=de45a7d10a546428a6e4a614c0da165b6352a9e5;hb=HEAD;hp=c1346e27a4d67f1e10b97be6167ea0002f5f24ee;hpb=beefc4fd7137435caf9c653633ab938947df07f8;p=nncp.git diff --git a/src/cfgdir.go b/src/cfgdir.go index c1346e2..fc36636 100644 --- a/src/cfgdir.go +++ b/src/cfgdir.go @@ -18,7 +18,9 @@ along with this program. If not, see . package nncp import ( + "errors" "fmt" + "io/fs" "os" "path/filepath" "sort" @@ -258,6 +260,24 @@ func CfgToDir(dst string, cfg *CfgJSON) (err error) { } } + 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"), @@ -370,6 +390,16 @@ func CfgToDir(dst string, cfg *CfgJSON) (err error) { 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 + } + } } } @@ -434,7 +464,7 @@ func CfgToDir(dst string, cfg *CfgJSON) (err error) { 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 @@ -531,7 +561,7 @@ func DirToCfg(src string) (*CfgJSON, error) { } 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 { @@ -565,7 +595,7 @@ func DirToCfg(src string) (*CfgJSON, error) { } } 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 { @@ -605,13 +635,13 @@ func DirToCfg(src string) (*CfgJSON, error) { 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 { @@ -638,7 +668,7 @@ func DirToCfg(src string) (*CfgJSON, error) { 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 { @@ -687,6 +717,23 @@ func DirToCfg(src string) (*CfgJSON, error) { } } + 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 @@ -697,7 +744,7 @@ func DirToCfg(src string) (*CfgJSON, error) { 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 { @@ -747,7 +794,7 @@ func DirToCfg(src string) (*CfgJSON, error) { } 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)) @@ -854,6 +901,12 @@ func DirToCfg(src string) (*CfgJSON, error) { 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 @@ -861,7 +914,7 @@ func DirToCfg(src string) (*CfgJSON, error) { 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 { @@ -890,7 +943,7 @@ func DirToCfg(src string) (*CfgJSON, error) { 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 { @@ -916,7 +969,7 @@ func DirToCfg(src string) (*CfgJSON, error) { } 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 {