Esempio n. 1
0
 def write_packet(self, packet: NetRomPacket) -> bool:
     source = NetRomAddress(packet.source.callsign, packet.source.ssid,
                            "SOURCE")
     dest = NetRomAddress(packet.dest.callsign, packet.dest.ssid, "DEST")
     payload = L3Payload(source, dest, 0xCF, packet.buffer, -1, QoS.Default,
                         True)
     if self.l3_protocol is not None:
         return self.l3_protocol.send_packet(payload)
     else:
         self.warning("Cannot send, L3 not attached")
         return False
Esempio n. 2
0
 def nl_data_request(self, my_circuit_id: int, remote_call: AX25Call,
                     local_call: AX25Call, data: bytes) -> None:
     dest = NetRomAddress(remote_call.callsign, remote_call.ssid)
     routed, mtu = self.l3_protocol.route_packet(dest)
     if routed:
         event = NetRomStateEvent.nl_data(my_circuit_id, remote_call, data,
                                          mtu)
         self.sm.handle_internal_event_sync(event)
     else:
         self.debug(f"No route to {dest}, dropping")
Esempio n. 3
0
 def bind_server(self, l3_call: AX25Call, l3_alias: str,
                 protocol_factory: Callable[[], Protocol]):
     """
     Bind a protocol factory to a NetRom destination address
     :param l3_call:             The callsign for the destination
     :param l3_alias:            An alias for this destination (used in NODES broadcast)
     :param protocol_factory:    The protocol factory
     :return:
     """
     self.l3_servers[l3_call] = protocol_factory
     self.l3_protocol.listen(
         NetRomAddress(l3_call.callsign, l3_call.ssid, l3_alias))
     self.l3_destinations.add(l3_call)
Esempio n. 4
0
 def open(self, protocol_factory: Callable[[], Protocol],
          local_call: AX25Call, remote_call: AX25Call,
          origin_node: AX25Call, origin_user: AX25Call) -> Protocol:
     # This a new connection, create the transport and protocol
     nl_connect = NetRomStateEvent.nl_connect(-1, remote_call, local_call,
                                              origin_node, origin_user)
     self.sm.handle_internal_event_sync(nl_connect)
     protocol = protocol_factory()
     self.l3_half_open[nl_connect.circuit_id] = protocol
     self.l3_protocol.listen(
         NetRomAddress(local_call.callsign, local_call.ssid, ""))
     self.l3_destinations.add(local_call)
     return protocol
Esempio n. 5
0
    async def wait_for_network():
        tty = TTY()
        loop.add_reader(sys.stdin, tty.handle_stdin)
        loop.add_signal_handler(signal.SIGTERM, tty.handle_signal, loop, scheduler)
        loop.add_signal_handler(signal.SIGINT, tty.handle_signal, loop, scheduler)

        remote_call = AX25Call.parse(args.remote_call)
        while True:
            (found, mtu) = netrom_l3.route_packet(NetRomAddress.from_call(remote_call))
            if found:
                break
            await asyncio.sleep(0.200)
        main_logger.info(f"Learned route to {remote_call}")
        await asyncio.sleep(1.200)
        netrom_l4.open(protocol_factory=lambda: tty,
                       local_call=AX25Call.parse(args.local_call),
                       remote_call=AX25Call.parse(args.remote_call),
                       origin_user=AX25Call(args.local_alias),
                       origin_node=AX25Call(args.local_call))
Esempio n. 6
0
 def local_address(self) -> Optional[NetRomAddress]:
     return NetRomAddress(self.local_call.callsign, self.local_call.ssid)
Esempio n. 7
0
 def network_address(self) -> NetRomAddress:
     return NetRomAddress(callsign=self.callsign, ssid=self.ssid)