[lbry] upnp: brought in upnp fix from dcrd

This commit is contained in:
Brannon King 2021-08-09 16:19:47 -04:00 committed by Roy Lee
parent 0c8cf5dea0
commit ed5dd41a2a

26
upnp.go
View file

@ -39,7 +39,7 @@ import (
"fmt" "fmt"
"net" "net"
"net/http" "net/http"
"os" "net/url"
"strconv" "strconv"
"strings" "strings"
"time" "time"
@ -126,8 +126,9 @@ func Discover() (nat NAT, err error) {
if err != nil { if err != nil {
return return
} }
var serviceIP string = getServiceIP(serviceURL)
var ourIP string var ourIP string
ourIP, err = getOurIP() ourIP, err = getOurIP(serviceIP)
if err != nil { if err != nil {
return return
} }
@ -212,13 +213,22 @@ func getChildService(d *device, serviceType string) *service {
return nil return nil
} }
// getOurIP returns a best guess at what the local IP is. func getServiceIP(serviceURL string) (routerIP string) {
func getOurIP() (ip string, err error) { url, _ := url.Parse(serviceURL)
hostname, err := os.Hostname() return url.Hostname()
if err != nil {
return
} }
return net.LookupCNAME(hostname)
// getOurIP returns the local IP that is on the same subnet as the serviceIP.
func getOurIP(serviceIP string) (ip string, err error) {
_, serviceNet, _ := net.ParseCIDR(serviceIP + "/24")
addrs, err := net.InterfaceAddrs()
for _, addr := range addrs {
ip, _, _ := net.ParseCIDR(addr.String())
if serviceNet.Contains(ip) {
return ip.String(), nil
}
}
return
} }
// getServiceURL parses the xml description at the given root url to find the // getServiceURL parses the xml description at the given root url to find the