diff --git a/internal/upnp/upnp.go b/internal/upnp/upnp.go index 74205c0f..710d2483 100644 --- a/internal/upnp/upnp.go +++ b/internal/upnp/upnp.go @@ -44,12 +44,37 @@ type IGD struct { localIPAddress string } +// The InternetGatewayDevice's UUID. +func (n *IGD) UUID() string { + return n.uuid +} + +// The InternetGatewayDevice's friendly name. +func (n *IGD) FriendlyName() string { + return n.friendlyName +} + +// The InternetGatewayDevice's friendly identifier (friendly name + IP address). +func (n *IGD) FriendlyIdentifier() string { + return "'" + n.FriendlyName() + "' (" + strings.Split(n.URL().Host, ":")[0] + ")" +} + +// The URL of the InternetGatewayDevice's root device description. +func (n *IGD) URL() *url.URL { + return n.url +} + // A container for relevant properties of a UPnP service of an IGD. type IGDService struct { + serviceID string serviceURL string serviceURN string } +func (s *IGDService) ID() string { + return s.serviceID +} + type Protocol string const ( @@ -58,6 +83,7 @@ const ( ) type upnpService struct { + ServiceID string `xml:"serviceId"` ServiceType string `xml:"serviceType"` ControlURL string `xml:"controlURL"` } @@ -94,7 +120,7 @@ func Discover() []*IGD { l.Debugln("[" + resultDevice.uuid + "]") for _, resultService := range resultDevice.services { - l.Debugln("* " + resultService.serviceURL) + l.Debugln("* [" + resultService.serviceID + "] " + resultService.serviceURL) } } } @@ -398,7 +424,7 @@ func getIGDServices(rootURL string, device upnpDevice, wanDeviceURN string, wanC l.Debugln("[" + rootURL + "] Found " + service.ServiceType + " with URL " + u.String()) } - service := IGDService{serviceURL: u.String(), serviceURN: service.ServiceType} + service := IGDService{serviceID: service.ServiceID, serviceURL: u.String(), serviceURN: service.ServiceType} result = append(result, service) } @@ -498,26 +524,6 @@ func (n *IGD) DeletePortMapping(protocol Protocol, externalPort int) error { return nil } -// The InternetGatewayDevice's UUID. -func (n *IGD) UUID() string { - return n.uuid -} - -// The InternetGatewayDevice's friendly name. -func (n *IGD) FriendlyName() string { - return n.friendlyName -} - -// The InternetGatewayDevice's friendly identifier (friendly name + IP address). -func (n *IGD) FriendlyIdentifier() string { - return "'" + n.FriendlyName() + "' (" + strings.Split(n.URL().Host, ":")[0] + ")" -} - -// The URL of the InternetGatewayDevice's root device description. -func (n *IGD) URL() *url.URL { - return n.url -} - type soapGetExternalIPAddressResponseEnvelope struct { XMLName xml.Name Body soapGetExternalIPAddressResponseBody `xml:"Body"`