func setupUPnP(r rand.Source) int { var externalPort = 0 if len(cfg.Options.ListenAddress) == 1 { _, portStr, err := net.SplitHostPort(cfg.Options.ListenAddress[0]) if err != nil { l.Warnln(err) } else { // Set up incoming port forwarding, if necessary and possible port, _ := strconv.Atoi(portStr) igd, err := upnp.Discover() if err == nil { for i := 0; i < 10; i++ { r := 1024 + int(r.Int63()%(65535-1024)) err := igd.AddPortMapping(upnp.TCP, r, port, "syncthing", 0) if err == nil { externalPort = r l.Infoln("Created UPnP port mapping - external port", externalPort) break } } if externalPort == 0 { l.Warnln("Failed to create UPnP port mapping") } } else { l.Infof("No UPnP gateway detected") if debugNet { l.Debugf("UPnP: %v", err) } } } } else { l.Warnln("Multiple listening addresses; not attempting UPnP port mapping") } return externalPort }
func setupUPnP() int { var externalPort = 0 if len(cfg.Options.ListenAddress) == 1 { _, portStr, err := net.SplitHostPort(cfg.Options.ListenAddress[0]) if err != nil { warnln(err) } else { // Set up incoming port forwarding, if necessary and possible port, _ := strconv.Atoi(portStr) igd, err := upnp.Discover() if err == nil { for i := 0; i < 10; i++ { r := 1024 + rand.Intn(65535-1024) err := igd.AddPortMapping(upnp.TCP, r, port, "syncthing", 0) if err == nil { externalPort = r infoln("Created UPnP port mapping - external port", externalPort) break } } if externalPort == 0 { warnln("Failed to create UPnP port mapping") } } else { infof("No UPnP IGD device found, no port mapping created (%v)", err) } } } else { warnln("Multiple listening addresses; not attempting UPnP port mapping") } return externalPort }