mirror of
https://github.com/DJ2LS/FreeDATA
synced 2024-05-14 08:04:33 +00:00
added disconnect
This commit is contained in:
parent
20b1fe7e2d
commit
216799fe2b
|
@ -205,6 +205,17 @@ class DataFrameFactory:
|
||||||
"sequence_id": 1,
|
"sequence_id": 1,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# heartbeat for "is alive"
|
||||||
|
self.template_list[FR_TYPE.P2P_CONNECTION_DISCONNECT.value] = {
|
||||||
|
"frame_length": self.LENGTH_SIG1_FRAME,
|
||||||
|
"session_id": 1,
|
||||||
|
}
|
||||||
|
|
||||||
|
# ack heartbeat
|
||||||
|
self.template_list[FR_TYPE.P2P_CONNECTION_DISCONNECT_ACK.value] = {
|
||||||
|
"frame_length": self.LENGTH_SIG1_FRAME,
|
||||||
|
"session_id": 1,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -521,3 +532,15 @@ class DataFrameFactory:
|
||||||
"sequence_id": sequence_id.to_bytes(1, 'big'),
|
"sequence_id": sequence_id.to_bytes(1, 'big'),
|
||||||
}
|
}
|
||||||
return self.construct(FR_TYPE.P2P_CONNECTION_PAYLOAD_ACK, payload)
|
return self.construct(FR_TYPE.P2P_CONNECTION_PAYLOAD_ACK, payload)
|
||||||
|
|
||||||
|
def build_p2p_connection_disconnect(self, session_id):
|
||||||
|
payload = {
|
||||||
|
"session_id": session_id.to_bytes(1, 'big'),
|
||||||
|
}
|
||||||
|
return self.construct(FR_TYPE.P2P_CONNECTION_DISCONNECT, payload)
|
||||||
|
|
||||||
|
def build_p2p_connection_disconnect_ack(self, session_id):
|
||||||
|
payload = {
|
||||||
|
"session_id": session_id.to_bytes(1, 'big'),
|
||||||
|
}
|
||||||
|
return self.construct(FR_TYPE.P2P_CONNECTION_DISCONNECT_ACK, payload)
|
||||||
|
|
|
@ -27,6 +27,9 @@ class DISPATCHER():
|
||||||
FR_TYPE.ARQ_SESSION_INFO.value: {"class": ARQFrameHandler, "name": "ARQ Data Channel Info"},
|
FR_TYPE.ARQ_SESSION_INFO.value: {"class": ARQFrameHandler, "name": "ARQ Data Channel Info"},
|
||||||
FR_TYPE.P2P_CONNECTION_CONNECT.value: {"class": P2PConnectionFrameHandler, "name": "P2P Connection CONNECT"},
|
FR_TYPE.P2P_CONNECTION_CONNECT.value: {"class": P2PConnectionFrameHandler, "name": "P2P Connection CONNECT"},
|
||||||
FR_TYPE.P2P_CONNECTION_CONNECT_ACK.value: {"class": P2PConnectionFrameHandler, "name": "P2P Connection CONNECT ACK"},
|
FR_TYPE.P2P_CONNECTION_CONNECT_ACK.value: {"class": P2PConnectionFrameHandler, "name": "P2P Connection CONNECT ACK"},
|
||||||
|
FR_TYPE.P2P_CONNECTION_DISCONNECT.value: {"class": P2PConnectionFrameHandler, "name": "P2P Connection DISCONNECT"},
|
||||||
|
FR_TYPE.P2P_CONNECTION_DISCONNECT_ACK.value: {"class": P2PConnectionFrameHandler,
|
||||||
|
"name": "P2P Connection DISCONNECT ACK"},
|
||||||
FR_TYPE.P2P_CONNECTION_PAYLOAD.value: {"class": P2PConnectionFrameHandler,
|
FR_TYPE.P2P_CONNECTION_PAYLOAD.value: {"class": P2PConnectionFrameHandler,
|
||||||
"name": "P2P Connection PAYLOAD"},
|
"name": "P2P Connection PAYLOAD"},
|
||||||
FR_TYPE.P2P_CONNECTION_PAYLOAD_ACK.value: {"class": P2PConnectionFrameHandler,
|
FR_TYPE.P2P_CONNECTION_PAYLOAD_ACK.value: {"class": P2PConnectionFrameHandler,
|
||||||
|
|
|
@ -60,7 +60,7 @@ class FrameHandler():
|
||||||
self.config['STATION']['ssid_list'])
|
self.config['STATION']['ssid_list'])
|
||||||
|
|
||||||
#check for p2p connection
|
#check for p2p connection
|
||||||
elif ft in ['P2P_CONNECTION_CONNECT_ACK', 'P2P_CONNECTION_PAYLOAD', 'P2P_CONNECTION_PAYLOAD_ACK']:
|
elif ft in ['P2P_CONNECTION_CONNECT_ACK', 'P2P_CONNECTION_PAYLOAD', 'P2P_CONNECTION_PAYLOAD_ACK', 'P2P_CONNECTION_DISCONNECT', 'P2P_CONNECTION_DISCONNECT_ACK']:
|
||||||
session_id = self.details['frame']['session_id']
|
session_id = self.details['frame']['session_id']
|
||||||
if session_id in self.states.p2p_connection_sessions:
|
if session_id in self.states.p2p_connection_sessions:
|
||||||
valid = True
|
valid = True
|
||||||
|
|
|
@ -39,6 +39,8 @@ class P2PConnectionFrameHandler(frame_handler.FrameHandler):
|
||||||
|
|
||||||
elif frame['frame_type_int'] in [
|
elif frame['frame_type_int'] in [
|
||||||
FR.P2P_CONNECTION_CONNECT_ACK.value,
|
FR.P2P_CONNECTION_CONNECT_ACK.value,
|
||||||
|
FR.P2P_CONNECTION_DISCONNECT.value,
|
||||||
|
FR.P2P_CONNECTION_DISCONNECT_ACK.value,
|
||||||
FR.P2P_CONNECTION_PAYLOAD.value,
|
FR.P2P_CONNECTION_PAYLOAD.value,
|
||||||
FR.P2P_CONNECTION_PAYLOAD_ACK.value,
|
FR.P2P_CONNECTION_PAYLOAD_ACK.value,
|
||||||
]:
|
]:
|
||||||
|
|
|
@ -20,6 +20,8 @@ class FRAME_TYPE(Enum):
|
||||||
P2P_CONNECTION_HEARTBEAT_ACK = 33
|
P2P_CONNECTION_HEARTBEAT_ACK = 33
|
||||||
P2P_CONNECTION_PAYLOAD = 34
|
P2P_CONNECTION_PAYLOAD = 34
|
||||||
P2P_CONNECTION_PAYLOAD_ACK = 35
|
P2P_CONNECTION_PAYLOAD_ACK = 35
|
||||||
|
P2P_CONNECTION_DISCONNECT = 36
|
||||||
|
P2P_CONNECTION_DISCONNECT_ACK = 37
|
||||||
MESH_BROADCAST = 100
|
MESH_BROADCAST = 100
|
||||||
MESH_SIGNALLING_PING = 101
|
MESH_SIGNALLING_PING = 101
|
||||||
MESH_SIGNALLING_PING_ACK = 102
|
MESH_SIGNALLING_PING_ACK = 102
|
||||||
|
|
|
@ -34,9 +34,19 @@ class P2PConnection:
|
||||||
FRAME_TYPE.P2P_CONNECTION_CONNECT.value: 'connected_irs',
|
FRAME_TYPE.P2P_CONNECTION_CONNECT.value: 'connected_irs',
|
||||||
FRAME_TYPE.P2P_CONNECTION_CONNECT_ACK.value: 'connected_iss',
|
FRAME_TYPE.P2P_CONNECTION_CONNECT_ACK.value: 'connected_iss',
|
||||||
FRAME_TYPE.P2P_CONNECTION_PAYLOAD.value: 'received_data',
|
FRAME_TYPE.P2P_CONNECTION_PAYLOAD.value: 'received_data',
|
||||||
|
FRAME_TYPE.P2P_CONNECTION_DISCONNECT.value: 'received_disconnect',
|
||||||
|
},
|
||||||
|
States.PAYLOAD_SENT: {
|
||||||
FRAME_TYPE.P2P_CONNECTION_PAYLOAD_ACK.value: 'process_data_queue',
|
FRAME_TYPE.P2P_CONNECTION_PAYLOAD_ACK.value: 'process_data_queue',
|
||||||
|
},
|
||||||
|
States.DISCONNECTING: {
|
||||||
|
FRAME_TYPE.P2P_CONNECTION_DISCONNECT_ACK.value: 'received_disconnect_ack',
|
||||||
|
},
|
||||||
|
States.DISCONNECTED: {
|
||||||
|
FRAME_TYPE.P2P_CONNECTION_DISCONNECT.value: 'received_disconnect',
|
||||||
|
FRAME_TYPE.P2P_CONNECTION_DISCONNECT_ACK.value: 'received_disconnect_ack',
|
||||||
|
|
||||||
}
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
def __init__(self, config: dict, modem, origin: str, destination: str, state_manager):
|
def __init__(self, config: dict, modem, origin: str, destination: str, state_manager):
|
||||||
|
@ -183,9 +193,10 @@ class P2PConnection:
|
||||||
self.set_state(States.FAILED)
|
self.set_state(States.FAILED)
|
||||||
|
|
||||||
def process_data_queue(self, frame=None):
|
def process_data_queue(self, frame=None):
|
||||||
print("processing data....")
|
|
||||||
print(self.p2p_tx_queue.empty())
|
|
||||||
if not self.p2p_tx_queue.empty():
|
if not self.p2p_tx_queue.empty():
|
||||||
|
print("processing data....")
|
||||||
|
|
||||||
|
self.set_state(States.PAYLOAD_SENT)
|
||||||
data = self.p2p_tx_queue.get()
|
data = self.p2p_tx_queue.get()
|
||||||
sequence_id = random.randint(0,255)
|
sequence_id = random.randint(0,255)
|
||||||
data = data.encode('utf-8')
|
data = data.encode('utf-8')
|
||||||
|
@ -198,6 +209,7 @@ class P2PConnection:
|
||||||
mode=mode)
|
mode=mode)
|
||||||
return
|
return
|
||||||
print("ALL DATA SENT!!!!!")
|
print("ALL DATA SENT!!!!!")
|
||||||
|
self.disconnect()
|
||||||
|
|
||||||
def prepare_data_chunk(self, data, mode):
|
def prepare_data_chunk(self, data, mode):
|
||||||
return data
|
return data
|
||||||
|
@ -209,3 +221,20 @@ class P2PConnection:
|
||||||
|
|
||||||
def transmit_data_ack(self, frame):
|
def transmit_data_ack(self, frame):
|
||||||
print(frame)
|
print(frame)
|
||||||
|
|
||||||
|
def disconnect(self):
|
||||||
|
self.set_state(States.DISCONNECTING)
|
||||||
|
disconnect_frame = self.frame_factory.build_p2p_connection_disconnect(self.session_id)
|
||||||
|
self.launch_twr(disconnect_frame, self.TIMEOUT_CONNECT, self.RETRIES_CONNECT, mode=FREEDV_MODE.signalling)
|
||||||
|
return
|
||||||
|
|
||||||
|
def received_disconnect(self, frame):
|
||||||
|
self.log("DISCONNECTED...............")
|
||||||
|
self.set_state(States.DISCONNECTED)
|
||||||
|
self.is_ISS = False
|
||||||
|
disconnect_ack_frame = self.frame_factory.build_p2p_connection_disconnect_ack(self.session_id)
|
||||||
|
self.launch_twr_irs(disconnect_ack_frame, self.ENTIRE_CONNECTION_TIMEOUT, mode=FREEDV_MODE.signalling)
|
||||||
|
|
||||||
|
def received_disconnect_ack(self, frame):
|
||||||
|
self.log("DISCONNECTED...............")
|
||||||
|
self.set_state(States.DISCONNECTED)
|
||||||
|
|
Loading…
Reference in a new issue