X-Git-Url: http://www.git.cypherpunks.ru/?a=blobdiff_plain;f=src%2Fctx.go;h=4d762d290cadfb83fde02a36e5bd74b8850a50d2;hb=65ac1674ff0f9bd99bb29b5b8b1dc596b06216ce;hp=c1625a1dc5642e8a6427fec5b8bc6a9a60066af2;hpb=510478b83a2808262f7167fffe5296b489a2bf03;p=nncp.git diff --git a/src/ctx.go b/src/ctx.go index c1625a1..4d762d2 100644 --- a/src/ctx.go +++ b/src/ctx.go @@ -1,6 +1,6 @@ /* NNCP -- Node to Node copy, utilities for store-and-forward data exchange -Copyright (C) 2016-2020 Sergey Matveev +Copyright (C) 2016-2021 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 @@ -19,6 +19,7 @@ package nncp import ( "errors" + "fmt" "io/ioutil" "log" "os" @@ -35,15 +36,22 @@ type Ctx struct { Neigh map[NodeId]*Node Alias map[string]*NodeId + AreaId2Area map[AreaId]*Area + AreaName2Id map[string]*AreaId + Spool string LogPath string UmaskForce *int Quiet bool ShowPrgrs bool + HdrUsage bool Debug bool NotifyFile *FromToJSON NotifyFreq *FromToJSON NotifyExec map[string]*FromToJSON + + MCDRxIfis []string + MCDTxIfis map[string]int } func (ctx *Ctx) FindNode(id string) (*Node, error) { @@ -64,23 +72,23 @@ func (ctx *Ctx) FindNode(id string) (*Node, error) { func (ctx *Ctx) ensureRxDir(nodeId *NodeId) error { dirPath := filepath.Join(ctx.Spool, nodeId.String(), string(TRx)) + logMsg := func(les LEs) string { + return fmt.Sprintf("Ensuring directory %s existence", dirPath) + } if err := os.MkdirAll(dirPath, os.FileMode(0777)); err != nil { - ctx.LogE("dir-ensure", SDS{"dir": dirPath}, err, "") + ctx.LogE("dir-ensure-mkdir", LEs{{"Dir", dirPath}}, err, logMsg) return err } fd, err := os.Open(dirPath) if err != nil { - ctx.LogE("dir-ensure", SDS{"dir": dirPath}, err, "") + ctx.LogE("dir-ensure-open", LEs{{"Dir", dirPath}}, err, logMsg) return err } - fd.Close() - return nil + return fd.Close() } func CtxFromCmdline( - cfgPath, - spoolPath, - logPath string, + cfgPath, spoolPath, logPath string, quiet, showPrgrs, omitPrgrs, debug bool, ) (*Ctx, error) { env := os.Getenv(CfgPathEnv) @@ -90,11 +98,27 @@ func CtxFromCmdline( if showPrgrs && omitPrgrs { return nil, errors.New("simultaneous -progress and -noprogress") } - cfgRaw, err := ioutil.ReadFile(cfgPath) + fi, err := os.Stat(cfgPath) if err != nil { return nil, err } - ctx, err := CfgParse(cfgRaw) + var cfg *CfgJSON + if fi.IsDir() { + cfg, err = DirToCfg(cfgPath) + if err != nil { + return nil, err + } + } else { + cfgRaw, err := ioutil.ReadFile(cfgPath) + if err != nil { + return nil, err + } + cfg, err = CfgParse(cfgRaw) + if err != nil { + return nil, err + } + } + ctx, err := Cfg2Ctx(cfg) if err != nil { return nil, err } @@ -128,7 +152,7 @@ func CtxFromCmdline( func (ctx *Ctx) IsEnoughSpace(want int64) bool { var s unix.Statfs_t if err := unix.Statfs(ctx.Spool, &s); err != nil { - log.Fatalln(err) + log.Fatalln("Can not stat spool:", err) } return int64(s.Bavail)*int64(s.Bsize) > want }