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:
parent
5371f92cd9
commit
67f66d5570
1 changed files with 7 additions and 11 deletions
18
src/server.c
18
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,
|
||||
|
|
Loading…
Add table
Reference in a new issue