Make UPnP timeout configurable

This commit is contained in:
Audrius Butkevicius
2015-04-16 00:34:27 +01:00
parent 45cbcaca6d
commit d148cd8ccc
5 changed files with 12 additions and 8 deletions

View File

@@ -92,12 +92,10 @@ type upnpRoot struct {
// Discover discovers UPnP InternetGatewayDevices.
// The order in which the devices appear in the result list is not deterministic.
func Discover() []IGD {
func Discover(timeout time.Duration) []IGD {
var result []IGD
l.Infoln("Starting UPnP discovery...")
timeout := 3
// Search for InternetGatewayDevice:2 devices
result = append(result, discover("urn:schemas-upnp-org:device:InternetGatewayDevice:2", timeout, result)...)
@@ -128,7 +126,7 @@ func Discover() []IGD {
// Search for UPnP InternetGatewayDevices for <timeout> seconds, ignoring responses from any devices listed in knownDevices.
// The order in which the devices appear in the result list is not deterministic
func discover(deviceType string, timeout int, knownDevices []IGD) []IGD {
func discover(deviceType string, timeout time.Duration, knownDevices []IGD) []IGD {
ssdp := &net.UDPAddr{IP: []byte{239, 255, 255, 250}, Port: 1900}
tpl := `M-SEARCH * HTTP/1.1
@@ -138,7 +136,7 @@ Man: "ssdp:discover"
Mx: %d
`
searchStr := fmt.Sprintf(tpl, deviceType, timeout)
searchStr := fmt.Sprintf(tpl, deviceType, timeout/time.Second)
search := []byte(strings.Replace(searchStr, "\n", "\r\n", -1))
@@ -156,7 +154,7 @@ Mx: %d
}
defer socket.Close() // Make sure our socket gets closed
err = socket.SetDeadline(time.Now().Add(time.Duration(timeout) * time.Second))
err = socket.SetDeadline(time.Now().Add(timeout))
if err != nil {
l.Infoln(err)
return results