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
16
src/server.c
16
src/server.c
|
@ -1064,8 +1064,6 @@ static int handle_sabm(patty_ax25_server *server,
|
||||||
patty_ax25_sock *local, *remote;
|
patty_ax25_sock *local, *remote;
|
||||||
patty_ax25_call_accept_response response;
|
patty_ax25_call_accept_response response;
|
||||||
|
|
||||||
enum patty_ax25_sock_mode mode;
|
|
||||||
|
|
||||||
if ((local = sock_by_addr(server->socks_pending_accept,
|
if ((local = sock_by_addr(server->socks_pending_accept,
|
||||||
&frame->dest)) == NULL) {
|
&frame->dest)) == NULL) {
|
||||||
return reply_dm(iface, frame, PATTY_AX25_FRAME_FINAL);
|
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;
|
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;
|
PATTY_AX25_SOCK_SABM: PATTY_AX25_SOCK_SABME;
|
||||||
|
|
||||||
remote->status = PATTY_AX25_SOCK_ESTABLISHED;
|
patty_ax25_sock_bind_if(remote, iface);
|
||||||
remote->iface = iface;
|
|
||||||
|
|
||||||
if (patty_ax25_sock_mode_set(remote, mode) < 0) {
|
|
||||||
goto error_sock_set_mode;
|
|
||||||
}
|
|
||||||
|
|
||||||
save_reply_addr(remote, frame);
|
save_reply_addr(remote, frame);
|
||||||
|
|
||||||
|
@ -1134,7 +1128,6 @@ error_reply_ua:
|
||||||
error_sock_delete_by_addr:
|
error_sock_delete_by_addr:
|
||||||
error_sock_save_by_addrpair:
|
error_sock_save_by_addrpair:
|
||||||
error_sock_save_by_fd:
|
error_sock_save_by_fd:
|
||||||
error_sock_set_mode:
|
|
||||||
patty_ax25_sock_destroy(remote);
|
patty_ax25_sock_destroy(remote);
|
||||||
|
|
||||||
error_sock_new:
|
error_sock_new:
|
||||||
|
@ -1160,7 +1153,10 @@ static int handle_ua(patty_ax25_server *server,
|
||||||
}
|
}
|
||||||
|
|
||||||
sock->status = PATTY_AX25_SOCK_ESTABLISHED;
|
sock->status = PATTY_AX25_SOCK_ESTABLISHED;
|
||||||
|
|
||||||
|
if (sock->mode == PATTY_AX25_SOCK_DM) {
|
||||||
sock->mode = PATTY_AX25_SOCK_SABM;
|
sock->mode = PATTY_AX25_SOCK_SABM;
|
||||||
|
}
|
||||||
|
|
||||||
if (sock_save_by_addrpair(server->socks_established,
|
if (sock_save_by_addrpair(server->socks_established,
|
||||||
sock,
|
sock,
|
||||||
|
|
Loading…
Add table
Reference in a new issue