mirror of https://github.com/DJ2LS/FreeDATA.git
72 lines
2.5 KiB
Python
72 lines
2.5 KiB
Python
import queue
|
|
from command import TxCommand
|
|
import api_validations
|
|
import base64
|
|
from queue import Queue
|
|
from p2p_connection import P2PConnection
|
|
|
|
class P2PConnectionCommand(TxCommand):
|
|
"""Command to initiate a P2P connection.
|
|
|
|
This command sets up a P2P connection between two stations, handling
|
|
session creation, registration, and connection establishment.
|
|
"""
|
|
|
|
def set_params_from_api(self, apiParams):
|
|
"""Sets parameters from the API request.
|
|
|
|
This method extracts the origin and destination callsigns from the
|
|
API parameters and validates them, adding a default SSID if necessary.
|
|
|
|
Args:
|
|
apiParams (dict): A dictionary containing the API parameters.
|
|
"""
|
|
self.origin = apiParams['origin']
|
|
if not api_validations.validate_freedata_callsign(self.origin):
|
|
self.origin = f"{self.origin}-0"
|
|
|
|
self.destination = apiParams['destination']
|
|
if not api_validations.validate_freedata_callsign(self.destination):
|
|
self.destination = f"{self.destination}-0"
|
|
|
|
|
|
def connect(self, event_queue: Queue, modem):
|
|
"""Placeholder for the connect method.
|
|
|
|
This method is currently not implemented and serves as a placeholder
|
|
for future functionality related to P2P connection establishment.
|
|
|
|
Args:
|
|
event_queue (Queue): The event queue.
|
|
modem: The modem object.
|
|
"""
|
|
pass
|
|
|
|
def run(self, event_queue: Queue, modem):
|
|
"""Executes the P2P connection command.
|
|
|
|
This method creates a P2PConnection session, registers it with the
|
|
state manager, initiates the connection, and handles potential errors
|
|
during session startup.
|
|
|
|
Args:
|
|
event_queue (Queue): The event queue.
|
|
modem: The modem object.
|
|
|
|
Returns:
|
|
P2PConnection or bool: The P2PConnection object if successful, False otherwise.
|
|
"""
|
|
try:
|
|
self.emit_event(event_queue)
|
|
session = P2PConnection(self.config, modem, self.origin, self.destination, self.state_manager, self.event_manager, self.socket_interface_manager)
|
|
print(session)
|
|
if session.session_id:
|
|
self.state_manager.register_p2p_connection_session(session)
|
|
session.connect()
|
|
return session
|
|
return False
|
|
|
|
except Exception as e:
|
|
self.log(f"Error starting P2P Connection session: {e}", isWarning=True)
|
|
|
|
return False |