mirror of
				https://github.com/rofafor/vdr-plugin-satip.git
				synced 2023-10-10 11:37:42 +00:00 
			
		
		
		
	Add a server detection script.
This commit is contained in:
		
							
								
								
									
										70
									
								
								detectsatip.py
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										70
									
								
								detectsatip.py
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,70 @@ | |||||||
|  | #!/usr/bin/env python2 | ||||||
|  |  | ||||||
|  | import json | ||||||
|  | import socket | ||||||
|  | import sys | ||||||
|  | import urllib2 | ||||||
|  | import xml.etree.ElementTree as ET | ||||||
|  |  | ||||||
|  | SSDP_ADDR = "239.255.255.250"; | ||||||
|  | SSDP_PORT = 1900; | ||||||
|  | SSDP_MX = 1; | ||||||
|  | SSDP_ST = "urn:ses-com:device:SatIPServer:1"; | ||||||
|  |  | ||||||
|  | ssdpRequest = "M-SEARCH * HTTP/1.1\r\n" + \ | ||||||
|  |                 "HOST: %s:%d\r\n" % (SSDP_ADDR, SSDP_PORT) + \ | ||||||
|  |                 "MAN: \"ssdp:discover\"\r\n" + \ | ||||||
|  |                 "MX: %d\r\n" % (SSDP_MX, ) + \ | ||||||
|  |                 "ST: %s\r\n" % (SSDP_ST, ) + "\r\n"; | ||||||
|  |  | ||||||
|  | data = None | ||||||
|  | urls = list() | ||||||
|  | devices = list() | ||||||
|  |  | ||||||
|  | # find out available SAT>IP servers | ||||||
|  | sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) | ||||||
|  | sock.setblocking(0) | ||||||
|  | sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) | ||||||
|  | sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) | ||||||
|  | try: | ||||||
|  |     sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1) | ||||||
|  | except: | ||||||
|  |     pass | ||||||
|  | sock.settimeout(1) | ||||||
|  | sock.bind(("192.168.0.6", SSDP_PORT)) | ||||||
|  | sock.sendto(ssdpRequest, (SSDP_ADDR, SSDP_PORT)) | ||||||
|  | try: | ||||||
|  |     while 1: | ||||||
|  |         data = sock.recv(1024) | ||||||
|  |         if data: | ||||||
|  |             # find out their capabilities | ||||||
|  |             for row in data.split("\r\n"): | ||||||
|  |                 if "LOCATION:" in row: | ||||||
|  |                     url = row.replace("LOCATION:","").strip() | ||||||
|  |                     if url in urls: | ||||||
|  |                         continue | ||||||
|  |                     urls.append(url) | ||||||
|  |                     f = urllib2.urlopen(url, timeout=2) | ||||||
|  |                     xml = f.read() | ||||||
|  |                     if xml: | ||||||
|  |                         root = ET.fromstring(xml) | ||||||
|  |                         name = root.find(".//*/{urn:schemas-upnp-org:device-1-0}friendlyName") | ||||||
|  |                         satipcap = root.find(".//*/{urn:ses-com:satip}X_SATIPCAP") | ||||||
|  |                         caps = dict() | ||||||
|  |                         for systems in satipcap.text.split(","): | ||||||
|  |                             cap = systems.split("-") | ||||||
|  |                             if cap: | ||||||
|  |                                 # prepare the output data | ||||||
|  |                                 count = int(cap[1]) | ||||||
|  |                                 if cap[0] in caps: | ||||||
|  |                                     count = count + caps[cap[0]] | ||||||
|  |                                 caps[cap[0]] = count | ||||||
|  |                         devices.append({"name": name.text, "frontends": caps}) | ||||||
|  |         else: | ||||||
|  |             break | ||||||
|  | except: | ||||||
|  |     pass | ||||||
|  | sock.close() | ||||||
|  |  | ||||||
|  | # print out the output data | ||||||
|  | json.dump(devices, fp=sys.stdout, sort_keys=True, indent=2) | ||||||
		Reference in New Issue
	
	Block a user