mirror of https://github.com/wb2osz/direwolf.git
Issue 275 - AGW 'd' would not abort a connect attempt in progress.
This commit is contained in:
parent
8000e46c02
commit
8e32286604
|
@ -1075,12 +1075,31 @@ void dl_disconnect_request (dlq_item_t *E)
|
||||||
case state_1_awaiting_connection:
|
case state_1_awaiting_connection:
|
||||||
case state_5_awaiting_v22_connection:
|
case state_5_awaiting_v22_connection:
|
||||||
|
|
||||||
// TODO: "requeue." Not sure what to do here.
|
// Erratum: The protocol spec says "requeue." If we put disconnect req back in the
|
||||||
// If we put it back in the queue we will get it back again probably still in same state.
|
// queue we will probably get it back again here while still in same state.
|
||||||
// Need a way to defer it until the next state change.
|
// I don't think we would want to delay it until the next state transition.
|
||||||
|
|
||||||
|
// Suppose someone tried to connect to another station, which is not responding, and decided to cancel
|
||||||
|
// before all of the SABMe retries were used up. I think we would want to transmit a DISC, send a disc
|
||||||
|
// notice to the user, and go directly into disconnected state, rather than into awaiting release.
|
||||||
|
|
||||||
|
// New code v1.7 dev, May 6 2023
|
||||||
|
|
||||||
|
text_color_set(DW_COLOR_INFO);
|
||||||
|
dw_printf ("Stream %d: In progress connection attempt to %s terminated by user.\n", S->stream_id, S->addrs[PEERCALL]);
|
||||||
|
discard_i_queue (S);
|
||||||
|
SET_RC(0);
|
||||||
|
int p1 = 1;
|
||||||
|
int nopid0 = 0;
|
||||||
|
packet_t pp15 = ax25_u_frame (S->addrs, S->num_addr, cr_cmd, frame_type_U_DISC, p1, nopid0, NULL, 0);
|
||||||
|
lm_data_request (S->chan, TQ_PRIO_1_LO, pp15);
|
||||||
|
|
||||||
|
STOP_T1; // started in establish_data_link.
|
||||||
|
STOP_T3; // probably don't need.
|
||||||
|
enter_new_state (S, state_0_disconnected, __func__, __LINE__);
|
||||||
|
server_link_terminated (S->chan, S->client, S->addrs[PEERCALL], S->addrs[OWNCALL], 0);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case state_2_awaiting_release:
|
case state_2_awaiting_release:
|
||||||
{
|
{
|
||||||
// We have previously started the disconnect sequence and are waiting
|
// We have previously started the disconnect sequence and are waiting
|
||||||
|
@ -1631,7 +1650,7 @@ void dl_outstanding_frames_request (dlq_item_t *E)
|
||||||
|
|
||||||
S = get_link_handle (E->addrs, E->num_addr, E->chan, E->client, ok_to_create);
|
S = get_link_handle (E->addrs, E->num_addr, E->chan, E->client, ok_to_create);
|
||||||
if (S != NULL) {
|
if (S != NULL) {
|
||||||
int reversed_addrs = 1;
|
reversed_addrs = 0;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// Try swapping the addresses.
|
// Try swapping the addresses.
|
||||||
|
@ -1644,7 +1663,7 @@ void dl_outstanding_frames_request (dlq_item_t *E)
|
||||||
strlcpy (swapped[OWNCALL], E->addrs[PEERCALL], sizeof(swapped[OWNCALL]));
|
strlcpy (swapped[OWNCALL], E->addrs[PEERCALL], sizeof(swapped[OWNCALL]));
|
||||||
S = get_link_handle (swapped, E->num_addr, E->chan, E->client, ok_to_create);
|
S = get_link_handle (swapped, E->num_addr, E->chan, E->client, ok_to_create);
|
||||||
if (S != NULL) {
|
if (S != NULL) {
|
||||||
int reversed_addrs = 1;
|
reversed_addrs = 1;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
text_color_set(DW_COLOR_ERROR);
|
text_color_set(DW_COLOR_ERROR);
|
||||||
|
|
Loading…
Reference in New Issue