scripts/tv/recup_sap.py

58 lines
1.4 KiB
Python
Executable file

#!/bin/bash /usr/scripts/python.sh
import socket
import struct
import time
import pickle
import os
import gestion.config.tv
MCAST_GRP = gestion.config.tv.SAP_MCAST_GRP # sap.mcast.net
MCAST_PORT = gestion.config.tv.SAP_MCAST_PORT
timeout=60
path = gestion.config.tv.SAP_FILE_TXT
pickeled_path = gestion.config.tv.SAP_FILE_PIC
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.bind(('', MCAST_PORT))
mreq = struct.pack("4sl", socket.inet_aton(MCAST_GRP), socket.INADDR_ANY)
sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)
service={}
service_simple={}
start=time.time()
while True:
msg=sock.recv(10240).split('\r\n')
# print msg
s=None
ip=None
for line in msg[:-1]:
(tag, value) = line.split('=', 1)
#print (tag, value)
if tag=='s':
s=value
if tag=='c':
ip=value.split(' ')[2].split('/')[0]
if tag=='a' and value.startswith('x-plgroup:'):
group=value[10:]
service_simple[s]=ip
try:
service[group][s]=ip
except KeyError:
service[group]={s:ip}
# print "%s: %s" % (s, ip)
if time.time() - start > timeout:
break
f=open(path, 'w')
l=service_simple.items()
l.sort()
for (name, ip) in l:
f.write("%s:%s\n" % (name, ip))
f.close()
pickle.dump(service, open(pickeled_path + '.tmp', 'w'))
os.rename(pickeled_path + '.tmp', pickeled_path)