Exemplo n.º 1
0
 def discover(self):
     service = "ssdp:all"
     group = ("239.255.255.250", 1900)
     message = "\r\n".join([
         'M-SEARCH * HTTP/1.1', 'HOST: {0}:{1}', 'MAN: "ssdp:discover"',
         'ST: {st}', 'MX: 3', '', ''
     ])
     sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM,
                          socket.IPPROTO_UDP)
     sock.settimeout(5)
     sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
     sock.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, 2)
     sock.sendto(message.format(*group, st=service), group)
     while True:
         try:
             response = SSDPResponse(sock.recv(1024))
             if response.type == SSDPResponse.ST_ROOT_DEVICE:
                 pass
             elif response.type == SSDPResponse.ST_DEVICE:
                 device = Device.fromSSDPResponse(response)
                 self.devices[response.uuid] = device
         except socket.timeout:
             break
     self.__discoveryDone()