X-Git-Url: http://www.git.cypherpunks.ru/?a=blobdiff_plain;f=src%2Fcypherpunks.ru%2Fnncp%2Fcmd%2Fnncp-call%2Fmain.go;h=42f761faa10c9952964a4f96857d61b1b4869132;hb=b4c6e5230f3bec679ceb9ca4207da08f7e9c53aa;hp=c6203e622e1264879882536b71e0ccb3319588d6;hpb=cca813a5428d68fc711000ab436652a0fb21c4be;p=nncp.git diff --git a/src/cypherpunks.ru/nncp/cmd/nncp-call/main.go b/src/cypherpunks.ru/nncp/cmd/nncp-call/main.go index c6203e6..42f761f 100644 --- a/src/cypherpunks.ru/nncp/cmd/nncp-call/main.go +++ b/src/cypherpunks.ru/nncp/cmd/nncp-call/main.go @@ -24,9 +24,7 @@ import ( "fmt" "io/ioutil" "log" - "net" "os" - "strconv" "strings" "cypherpunks.ru/nncp" @@ -36,7 +34,6 @@ func usage() { fmt.Fprintf(os.Stderr, nncp.UsageHeader()) fmt.Fprintln(os.Stderr, "nncp-call -- call TCP daemon\n") fmt.Fprintf(os.Stderr, "Usage: %s [options] NODE[:ADDR] [FORCEADDR]\n", os.Args[0]) - fmt.Fprintln(os.Stderr, "You must specify either [NODE:ADDR] or [NODE FORCEADDR]\n") fmt.Fprintln(os.Stderr, "Options:") flag.PrintDefaults() } @@ -48,9 +45,12 @@ func main() { rxOnly = flag.Bool("rx", false, "Only receive packets") txOnly = flag.Bool("tx", false, "Only transfer packets") quiet = flag.Bool("quiet", false, "Print only errors") - debug = flag.Bool("debug", false, "Enable debugging information") + debug = flag.Bool("debug", false, "Print debug messages") version = flag.Bool("version", false, "Print version information") warranty = flag.Bool("warranty", false, "Print warranty information") + + onlineDeadline = flag.Uint("onlinedeadline", 0, "Override onlinedeadline option") + maxOnlineTime = flag.Uint("maxonlinetime", 0, "Override maxonlinetime option") ) flag.Usage = usage flag.Parse() @@ -74,7 +74,7 @@ func main() { log.Fatalln("-rx and -tx can not be set simultaneously") } - cfgRaw, err := ioutil.ReadFile(*cfgPath) + cfgRaw, err := ioutil.ReadFile(nncp.CfgPathFromEnv(cfgPath)) if err != nil { log.Fatalln("Can not read config:", err) } @@ -82,6 +82,9 @@ func main() { if err != nil { log.Fatalln("Can not parse config:", err) } + if ctx.Self == nil { + log.Fatalln("Config lacks private keys") + } ctx.Quiet = *quiet ctx.Debug = *debug @@ -90,48 +93,40 @@ func main() { if err != nil { log.Fatalln("Invalid NODE specified:", err) } - if len(splitted) == 1 && flag.NArg() != 2 { - usage() - os.Exit(1) - } - var dst string - if len(splitted) == 2 { - var known bool - dst, known = ctx.Neigh[*node.Id].Addrs[splitted[1]] - if !known { - log.Fatalln("Unknown ADDR specified") - } - } else { - dst = flag.Arg(1) + if node.NoisePub == nil { + log.Fatalln("Node does not have online communication capability") } - conn, err := net.Dial("tcp", dst) - if err != nil { - log.Fatalln("Can not connect:", err) + if *onlineDeadline == 0 { + onlineDeadline = &node.OnlineDeadline } - ctx.LogD("call", nncp.SDS{"addr": dst}, "connected") + if *maxOnlineTime == 0 { + maxOnlineTime = &node.MaxOnlineTime + } + var xxOnly nncp.TRxTx if *rxOnly { xxOnly = nncp.TRx } else if *txOnly { xxOnly = nncp.TTx } - state, err := ctx.StartI(conn, node.Id, nice, &xxOnly) - if err == nil { - ctx.LogI("call-start", nncp.SDS{"node": state.NodeId}, "connected") - state.Wait() - ctx.LogI("call-finish", nncp.SDS{ - "node": state.NodeId, - "duration": strconv.FormatInt(int64(state.Duration.Seconds()), 10), - "rxbytes": strconv.FormatInt(state.RxBytes, 10), - "txbytes": strconv.FormatInt(state.TxBytes, 10), - "rxspeed": strconv.FormatInt(state.RxSpeed, 10), - "txspeed": strconv.FormatInt(state.TxSpeed, 10), - }, "") + + var addrs []string + if flag.NArg() == 2 { + addrs = append(addrs, flag.Arg(1)) + } else if len(splitted) == 2 { + addr, known := ctx.Neigh[*node.Id].Addrs[splitted[1]] + if !known { + log.Fatalln("Unknown ADDR specified") + } + addrs = append(addrs, addr) } else { - ctx.LogE("call-start", nncp.SDS{"node": state.NodeId, "err": err}, "") - conn.Close() + for _, addr := range ctx.Neigh[*node.Id].Addrs { + addrs = append(addrs, addr) + } + } + + if !ctx.CallNode(node, addrs, nice, xxOnly, *onlineDeadline, *maxOnlineTime) { os.Exit(1) } - conn.Close() }