123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- // Copyright 2019 The go-ethereum Authors
- // This file is part of go-ethereum.
- //
- // go-ethereum 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.
- //
- // go-ethereum is distributed in the hope that it will be useful,
- // but WITHOUT ANY WARRANTY; without even the implied warranty of
- // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- // GNU General Public License for more details.
- //
- // You should have received a copy of the GNU General Public License
- // along with go-ethereum. If not, see <http://www.gnu.org/licenses/>.
- package main
- import (
- "fmt"
- "os"
- "path/filepath"
- "sort"
- "github.com/ethereum/go-ethereum/internal/debug"
- "github.com/ethereum/go-ethereum/p2p/enode"
- "github.com/ethereum/go-ethereum/params"
- "gopkg.in/urfave/cli.v1"
- )
- var (
- // Git information set by linker when building with ci.go.
- gitCommit string
- gitDate string
- app = &cli.App{
- Name: filepath.Base(os.Args[0]),
- Usage: "go-ethereum devp2p tool",
- Version: params.VersionWithCommit(gitCommit, gitDate),
- Writer: os.Stdout,
- HideVersion: true,
- }
- )
- func init() {
- // Set up the CLI app.
- app.Flags = append(app.Flags, debug.Flags...)
- app.Before = func(ctx *cli.Context) error {
- return debug.Setup(ctx)
- }
- app.After = func(ctx *cli.Context) error {
- debug.Exit()
- return nil
- }
- app.CommandNotFound = func(ctx *cli.Context, cmd string) {
- fmt.Fprintf(os.Stderr, "No such command: %s\n", cmd)
- os.Exit(1)
- }
- // Add subcommands.
- app.Commands = []cli.Command{
- enrdumpCommand,
- keyCommand,
- discv4Command,
- discv5Command,
- dnsCommand,
- nodesetCommand,
- rlpxCommand,
- }
- }
- func main() {
- exit(app.Run(os.Args))
- }
- // commandHasFlag returns true if the current command supports the given flag.
- func commandHasFlag(ctx *cli.Context, flag cli.Flag) bool {
- flags := ctx.FlagNames()
- sort.Strings(flags)
- i := sort.SearchStrings(flags, flag.GetName())
- return i != len(flags) && flags[i] == flag.GetName()
- }
- // getNodeArg handles the common case of a single node descriptor argument.
- func getNodeArg(ctx *cli.Context) *enode.Node {
- if ctx.NArg() < 1 {
- exit("missing node as command-line argument")
- }
- n, err := parseNode(ctx.Args()[0])
- if err != nil {
- exit(err)
- }
- return n
- }
- func exit(err interface{}) {
- if err == nil {
- os.Exit(0)
- }
- fmt.Fprintln(os.Stderr, err)
- os.Exit(1)
- }
|