diff --git a/src/upnp.py b/src/upnp.py index f1cc4635..8dd2a9d3 100644 --- a/src/upnp.py +++ b/src/upnp.py @@ -23,8 +23,18 @@ def searchRouter(): routers = [] sock.settimeout(0.5) try: - resp,(ip,port) = sock.recvfrom(1000) - while resp: + sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) + sock.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, 2) + sock.settimeout(2) + logger.debug("Sending UPnP query") + sock.sendto(ssdpRequest, (SSDP_ADDR, SSDP_PORT)) + except: + logger.exception("UPnP sock failed") + try: + while True: + resp,(ip,port) = sock.recvfrom(1000) + if resp is None: + continue routers.append(Router(resp, ip)) resp,(ip,port) = sock.recvfrom(1000) except:pass @@ -146,10 +156,12 @@ class Router: return resp def DeletePortMapping(self, externalPort, protocol): + from debug import logger resp = self.soapRequest('WANIPConnection:1', 'DeletePortMapping', [ ('NewExternalPort', str(externalPort)), ('NewProtocol', protocol), ]) + logger.info("Removed UPnP mapping on external port %i", extPort) return resp def GetExternalIPAddress(self):