58 lines
1.4 KiB
Python
Executable file
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)
|