Better handling, response to FRMR, SABM, and SABME
Changes: * Use patty_ax25_sock_reset() when receiving a FRMR, SABM, or SABME frame * Reply to an SABM or SABME frame with a UA when received by an ESTABLISHED socket
This commit is contained in:
parent
645e2a465f
commit
3db8c9cef3
1 changed files with 29 additions and 7 deletions
36
src/server.c
36
src/server.c
|
@ -1293,14 +1293,23 @@ static int handle_frmr(patty_ax25_server *server,
|
|||
return 0;
|
||||
}
|
||||
|
||||
if (sock->state == PATTY_AX25_SOCK_PENDING_CONNECT) {
|
||||
int ret = patty_ax25_sock_send_sabm(sock, PATTY_AX25_FRAME_POLL);
|
||||
switch (sock->state) {
|
||||
case PATTY_AX25_SOCK_PENDING_CONNECT:
|
||||
if (sock->state == PATTY_AX25_SOCK_PENDING_CONNECT) {
|
||||
sock->retries = sock->n_retry;
|
||||
|
||||
sock->retries = sock->n_retry;
|
||||
patty_timer_start(&sock->timer_t1);
|
||||
|
||||
patty_timer_start(&sock->timer_t1);
|
||||
return patty_ax25_sock_send_sabm(sock, PATTY_AX25_FRAME_POLL);
|
||||
}
|
||||
|
||||
return ret;
|
||||
case PATTY_AX25_SOCK_ESTABLISHED:
|
||||
patty_ax25_sock_reset(sock);
|
||||
|
||||
return 0;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
@ -1340,11 +1349,24 @@ static int handle_sabm(patty_ax25_server *server,
|
|||
goto error_sock_new;
|
||||
}
|
||||
|
||||
remote->state = PATTY_AX25_SOCK_PENDING_ACCEPT;
|
||||
|
||||
save_reply_addr(remote, frame);
|
||||
|
||||
created = 1;
|
||||
} else if (remote->state != PATTY_AX25_SOCK_PENDING_ACCEPT) {
|
||||
goto reply_dm;
|
||||
}
|
||||
|
||||
switch (remote->state) {
|
||||
case PATTY_AX25_SOCK_PENDING_ACCEPT:
|
||||
break;
|
||||
|
||||
case PATTY_AX25_SOCK_ESTABLISHED:
|
||||
patty_ax25_sock_reset(remote);
|
||||
|
||||
return frame->pf == 1? reply_ua(iface, frame, 1): 0;
|
||||
|
||||
default:
|
||||
goto reply_dm;
|
||||
}
|
||||
|
||||
remote->state = PATTY_AX25_SOCK_ESTABLISHED;
|
||||
|
|
Loading…
Add table
Reference in a new issue