add sending udp message on behalf of an non-supporting server

This commit is contained in:
2025-02-13 10:03:26 +01:00
parent 1712415f20
commit aa2069d4f4
4 changed files with 117 additions and 41 deletions

View File

@ -110,9 +110,12 @@ class UdpStream(Base):
except socket.error: # pragma: no cover
return None
msg = json.loads(msg.decode('utf-8'))
if msg['SECoP'] != 'node':
if msg['SECoP'] == 'for_other_node':
uri = msg['uri']
elif msg['SECoP'] == 'node':
uri = f"{addr[0]}:{msg['port']}"
else:
continue
uri = f"{addr[0]}:{msg['port']}"
yield SecopStream, uri, msg['equipment_id']
@ -144,5 +147,14 @@ class ScanStream(UdpStream):
self.select_dict[sock.fileno()] = self
def send_fake_udp(uri, equipment_id='fake'):
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
msg = json.dumps({
'SECoP': 'for_other_node',
'uri': uri,
'equipment_id': equipment_id,
}, ensure_ascii=False, separators=(',', ':')).encode('utf-8')
sock.sendto(msg, ('255.255.255.255', SECOP_UDP_PORT))