From 67f66d557043fcb44c9c462458b99c5ff6a18b17 Mon Sep 17 00:00:00 2001 From: XANTRONIX Development Date: Sun, 19 Jul 2020 23:12:12 -0400 Subject: [PATCH] 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 --- src/server.c | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/src/server.c b/src/server.c index 387f878..fc210f5 100644 --- a/src/server.c +++ b/src/server.c @@ -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,