Documentation
¶
Overview ¶
Package commands cmd/dmsg/dmsgweb/commands/dmsgweb.go c1-net-dmsg
Package commands cmd/dmsg/dmsgweb/commands/dmsgwebsrv.go c1-net-dmsg
Package commands cmd/dmsg/dmsgweb/commands/root.go c1-net-dmsg
Index ¶
Constants ¶
This section is empty.
Variables ¶
View Source
var RootCmd = &cobra.Command{ Use: dmsgclient.ExecName(), Short: "DMSG resolving proxy & browser client", Long: ` ┌┬┐┌┬┐┌─┐┌─┐┬ ┬┌─┐┌┐ │││││└─┐│ ┬│││├┤ ├┴┐ ─┴┘┴ ┴└─┘└─┘└┴┘└─┘└─┘ DMSG resolving proxy & browser client - access websites, HTTP & TCP interfaces over DMSG` + func() string { if _, err := os.Stat(dwcfg); err == nil { return ` dmsgweb conf file detected: ` + dwcfg } return ` .conf file may also be specified with ` + dwenv + `=/path/to/dmsgweb.conf skywire dmsg web` }(), SilenceErrors: true, SilenceUsage: true, DisableSuggestions: true, DisableFlagsInUseLine: true, Version: buildinfo.Version(), PreRun: func(_ *cobra.Command, _ []string) { if isEnvs { printEnvs(envfileLinux) } if logLvl != "" { if lvl, err := logging.LevelFromString(logLvl); err == nil { logging.SetLevel(lvl) } } dlog = logging.MustGetLogger("dmsgweb") err = dmsgclient.InitConfig() if err != nil { dlog.WithError(err).Fatal("Failed to read specified dmsghttp-config") } if dmsgclient.DmsgDiscURL == "" { dlog.Fatal("Dmsg Discovery Server URL not specified") } if dmsgclient.DmsgDiscAddr == "" { dlog.Fatal("Dmsg Discovery Server dmsg address not specified") } if len(resolveDmsgAddr) > 0 && len(webPort) != len(resolveDmsgAddr) { dlog.Fatal("--resolve -t flag cannot contain a different number of elements than --port -p flag") } if len(resolveDmsgAddr) == 0 && len(webPort) > 1 { dlog.Fatal("--port -p flag cannot specify multiple ports without specifying multiple dmsg address:port(s) to --resolve -t flag") } seenResolveDmsgAddr := make(map[string]bool) for _, item := range resolveDmsgAddr { if seenResolveDmsgAddr[item] { dlog.Fatal("--resolve -t flag cannot contain duplicates") } seenResolveDmsgAddr[item] = true } seenWebPort := make(map[uint]bool) for _, item := range webPort { if seenWebPort[item] { dlog.Fatal("--port -p flag cannot contain duplicates") } seenWebPort[item] = true } if len(webPort) == 0 { dlog.Fatal("webPort is empty. Ensure at least one port is specified.") } if filterDomainSuffix == "" { dlog.Fatal("domain suffix to filter cannot be an empty string") } }, Run: func(_ *cobra.Command, _ []string) { stopPProf := dmsgcmdutil.InitPProf(dlog, pprofMode, pprofAddr) defer stopPProf() ctx, cancel := cmdutil.SignalContext(context.Background(), dlog) defer cancel() pk, err = sk.PubKey() if err != nil { pk, sk = cipher.GenerateKeyPair() } dlog.Info("dmsg client pk: ", pk.String()) targets := make([]dmsgweb.DmsgTarget, 0, len(resolveDmsgAddr)) for _, raw := range resolveDmsgAddr { t, parseErr := dmsgweb.ParseDmsgTarget(raw) if parseErr != nil { dlog.WithError(parseErr).Fatal("invalid --resolve entry") } targets = append(targets, t) } // Set up the outer HTTP client used to bootstrap dmsg itself // (mirrors previous behavior — if --proxy is set the dmsg // bootstrap fetches go through the upstream SOCKS5 too). var outerHTTP *http.Client if proxyAddr != "" { d, err := proxy.SOCKS5("tcp", proxyAddr, nil, proxy.Direct) if err != nil { dlog.WithError(err).Fatal("Error creating SOCKS5 dialer") } outerHTTP = &http.Client{Transport: &http.Transport{DialContext: d.(proxy.ContextDialer).DialContext}} } else { outerHTTP = &http.Client{} } var via *dmsgweb.SkynetVia if skynetVia != "" { visorPK, addr, err := dmsgweb.ParseSkynetVia(skynetVia) if err != nil { dlog.WithError(err).Fatal("invalid --skynet") } via, err = dmsgweb.StartSkynetVia(ctx, dlog, logging.NewMasterLogger(), pk, sk, visorPK, addr, types.Type(skynetType)) if err != nil { dlog.WithError(err).Fatal("skynet via the local visor") } } var ( dmsgC *dmsg.Client closeDmsg func() err error ) if via != nil && dmsgclient.DmsgAttach == "" { dmsgC, closeDmsg, err = via.DmsgClient(ctx, dlog, pk, sk) } else { dmsgC, closeDmsg, err = dmsgclient.InitDmsgWithFlags(ctx, dlog, pk, sk, outerHTTP, "") } if err != nil { dlog.WithError(err).Error("Error connecting to dmsg network") return } defer closeDmsg() cfg := dmsgweb.Config{ DomainSuffix: filterDomainSuffix, WebPorts: webPort, ProxyPort: proxyPort, ResolveAddr: targets, UpstreamSOCKS: addProxy, } if via != nil { cfg.SkynetDial = via.Dial } if err := dmsgweb.Run(ctx, dlog, dmsgC, cfg); err != nil && err != context.Canceled { dlog.WithError(err).Error("dmsgweb runtime stopped") } }, }
RootCmd contains the root command for dmsgweb
Functions ¶
Types ¶
This section is empty.
Click to show internal directories.
Click to hide internal directories.