Ensure socket mode is SABM or SABME as needed

When accepting a SABM or SABME frame, ensure the peer socket mode is set
accordingly to ensure control fields are encoded properly
This commit is contained in:
XANTRONIX Development 2020-07-19 23:12:12 -04:00 committed by XANTRONIX Industrial
parent 5371f92cd9
commit 67f66d5570

View file

@ -1064,8 +1064,6 @@ static int handle_sabm(patty_ax25_server *server,
patty_ax25_sock *local, *remote;
patty_ax25_call_accept_response response;
enum patty_ax25_sock_mode mode;
if ((local = sock_by_addr(server->socks_pending_accept,
&frame->dest)) == NULL) {
return reply_dm(iface, frame, PATTY_AX25_FRAME_FINAL);
@ -1079,15 +1077,11 @@ static int handle_sabm(patty_ax25_server *server,
goto error_sock_new;
}
mode = (frame->type == PATTY_AX25_FRAME_SABM)?
remote->status = PATTY_AX25_SOCK_ESTABLISHED;
remote->mode = (frame->type == PATTY_AX25_FRAME_SABM)?
PATTY_AX25_SOCK_SABM: PATTY_AX25_SOCK_SABME;
remote->status = PATTY_AX25_SOCK_ESTABLISHED;
remote->iface = iface;
if (patty_ax25_sock_mode_set(remote, mode) < 0) {
goto error_sock_set_mode;
}
patty_ax25_sock_bind_if(remote, iface);
save_reply_addr(remote, frame);
@ -1134,7 +1128,6 @@ error_reply_ua:
error_sock_delete_by_addr:
error_sock_save_by_addrpair:
error_sock_save_by_fd:
error_sock_set_mode:
patty_ax25_sock_destroy(remote);
error_sock_new:
@ -1160,7 +1153,10 @@ static int handle_ua(patty_ax25_server *server,
}
sock->status = PATTY_AX25_SOCK_ESTABLISHED;
sock->mode = PATTY_AX25_SOCK_SABM;
if (sock->mode == PATTY_AX25_SOCK_DM) {
sock->mode = PATTY_AX25_SOCK_SABM;
}
if (sock_save_by_addrpair(server->socks_established,
sock,