mirror of
https://github.com/craigerl/aprsd.git
synced 2025-03-07 11:58:43 -05:00
Fixed issue when RX ack
This patch ensures that after we get an ACK, then proessing of the ack message is complete and we don't try and send the ack through plugin filtering. Created send_ack_direct for the send-message command. Also added logic to the send-message command to ensure we wait for an ack from the command sent to APRSD and we also wait for a response message and send an ack to that response before we exit.
This commit is contained in:
parent
0992ab8176
commit
d3ee1b78bc
@ -184,9 +184,14 @@ def process_packet(packet):
|
||||
if not message:
|
||||
LOG.debug("Didn't get a message, could be an ack?")
|
||||
if packet.get("response", None) == "ack":
|
||||
# looks like an ACK
|
||||
# looks like an ACKa
|
||||
ack_num = packet.get("msgNo")
|
||||
messaging.ack_dict.update({ack_num: 1})
|
||||
LOG.info("Got ack for message {}".format(ack_num))
|
||||
messaging.log_message(
|
||||
"ACK", packet["raw"], None, ack=ack_num, fromcall=packet["from"]
|
||||
)
|
||||
messaging.ack_dict.update({int(ack_num): 1})
|
||||
return
|
||||
|
||||
msg_number = packet.get("msgNo", None)
|
||||
if msg_number:
|
||||
@ -279,6 +284,8 @@ def send_message(
|
||||
loglevel, quiet, config_file, aprs_login, aprs_password, tocallsign, command
|
||||
):
|
||||
"""Send a message to a callsign via APRS_IS."""
|
||||
global got_ack, got_response
|
||||
|
||||
click.echo("{} {} {} {}".format(aprs_login, aprs_password, tocallsign, command))
|
||||
|
||||
click.echo("Load config")
|
||||
@ -302,14 +309,44 @@ def send_message(
|
||||
command = " ".join(command)
|
||||
LOG.info("Sending Command '{}'".format(command))
|
||||
|
||||
got_ack = False
|
||||
got_response = False
|
||||
|
||||
def rx_packet(packet):
|
||||
global got_ack, got_response
|
||||
# LOG.debug("Got packet back {}".format(packet))
|
||||
messaging.log_packet(packet)
|
||||
resp = packet.get("response", None)
|
||||
if resp == "ack":
|
||||
ack_num = packet.get("msgNo")
|
||||
LOG.info("We got ack for our sent message {}".format(ack_num))
|
||||
messaging.log_packet(packet)
|
||||
got_ack = True
|
||||
else:
|
||||
message = packet.get("message_text", None)
|
||||
LOG.info("We got a new message")
|
||||
fromcall = packet["from"]
|
||||
msg_number = packet.get("msgNo", None)
|
||||
if msg_number:
|
||||
ack = msg_number
|
||||
else:
|
||||
ack = "0"
|
||||
messaging.log_message(
|
||||
"Received Message", packet["raw"], message, fromcall=fromcall, ack=ack
|
||||
)
|
||||
got_response = True
|
||||
# Send the ack back?
|
||||
messaging.send_ack_direct(fromcall, ack)
|
||||
|
||||
if got_ack and got_response:
|
||||
sys.exit(0)
|
||||
|
||||
cl = client.Client(config)
|
||||
|
||||
# Send a message
|
||||
# then we setup a consumer to rx messages
|
||||
# We should get an ack back as well as a new message
|
||||
# we should bail after we get the ack and send an ack back for the
|
||||
# message
|
||||
messaging.send_message_direct(tocallsign, command, message_number)
|
||||
|
||||
try:
|
||||
|
@ -52,6 +52,23 @@ def send_ack(tocall, ack):
|
||||
# end send_ack()
|
||||
|
||||
|
||||
def send_ack_direct(tocall, ack):
|
||||
"""Send an ack message without a separate thread."""
|
||||
LOG.debug("Send ACK({}:{}) to radio.".format(tocall, ack))
|
||||
cl = client.get_client()
|
||||
fromcall = CONFIG["aprs"]["login"]
|
||||
line = "{}>APRS::{}:ack{}\n".format(fromcall, tocall, ack)
|
||||
log_message(
|
||||
"Sending ack",
|
||||
line.rstrip("\n"),
|
||||
None,
|
||||
ack=ack,
|
||||
tocall=tocall,
|
||||
fromcall=fromcall,
|
||||
)
|
||||
cl.sendall(line)
|
||||
|
||||
|
||||
def send_message_thread(tocall, message, this_message_number, retry_count):
|
||||
cl = client.get_client()
|
||||
line = "{}>APRS::{}:{}{{{}\n".format(
|
||||
@ -120,6 +137,27 @@ def send_message(tocall, message):
|
||||
# end send_message()
|
||||
|
||||
|
||||
def send_message_direct(tocall, message, message_number=None):
|
||||
"""Send a message without a separate thread."""
|
||||
cl = client.get_client()
|
||||
if not message_number:
|
||||
this_message_number = 1
|
||||
else:
|
||||
this_message_number = message_number
|
||||
fromcall = CONFIG["aprs"]["login"]
|
||||
line = "{}>APRS::{}:{}{{{}\n".format(
|
||||
fromcall,
|
||||
tocall,
|
||||
message,
|
||||
str(this_message_number),
|
||||
)
|
||||
LOG.debug("DEBUG: send_message_thread msg:ack combos are: ")
|
||||
log_message(
|
||||
"Sending Message", line.rstrip("\n"), message, tocall=tocall, fromcall=fromcall
|
||||
)
|
||||
cl.sendall(line)
|
||||
|
||||
|
||||
def log_packet(packet):
|
||||
fromcall = packet.get("from", None)
|
||||
tocall = packet.get("to", None)
|
||||
@ -200,27 +238,6 @@ def log_message(
|
||||
LOG.info("\n".join(log_list))
|
||||
|
||||
|
||||
def send_message_direct(tocall, message, message_number=None):
|
||||
"""Send a message without a separate thread."""
|
||||
cl = client.get_client()
|
||||
if not message_number:
|
||||
this_message_number = 1
|
||||
else:
|
||||
this_message_number = message_number
|
||||
fromcall = CONFIG["aprs"]["login"]
|
||||
line = "{}>APRS::{}:{}{{{}\n".format(
|
||||
fromcall,
|
||||
tocall,
|
||||
message,
|
||||
str(this_message_number),
|
||||
)
|
||||
LOG.debug("DEBUG: send_message_thread msg:ack combos are: ")
|
||||
log_message(
|
||||
"Sending Message", line.rstrip("\n"), message, tocall=tocall, fromcall=fromcall
|
||||
)
|
||||
cl.sendall(line)
|
||||
|
||||
|
||||
def process_message(line):
|
||||
f = re.search("^(.*)>", line)
|
||||
fromcall = f.group(1)
|
||||
|
Loading…
Reference in New Issue
Block a user