From 8a26cace9595f790bb56c1a4e8ab405ef28c50f8 Mon Sep 17 00:00:00 2001 From: XANTRONIX Development Date: Sun, 26 Jul 2020 00:55:47 -0400 Subject: [PATCH] Allow upgrading socks to certain versions of AX.25 Changes: * Add an enum patty_ax25_version argument to the function patty_ax25_sock_upgrade() to allow upgrading a socket to a certain set of AX.25 defaults --- include/patty/ax25/sock.h | 3 ++- src/server.c | 4 ++-- src/sock.c | 27 ++++++++++++++++++++------- 3 files changed, 24 insertions(+), 10 deletions(-) diff --git a/include/patty/ax25/sock.h b/include/patty/ax25/sock.h index 319b386..a66ed1f 100644 --- a/include/patty/ax25/sock.h +++ b/include/patty/ax25/sock.h @@ -96,7 +96,8 @@ void patty_ax25_sock_reset(patty_ax25_sock *sock); void patty_ax25_sock_destroy(patty_ax25_sock *sock); -int patty_ax25_sock_upgrade(patty_ax25_sock *sock); +int patty_ax25_sock_upgrade(patty_ax25_sock *sock, + enum patty_ax25_version version); int patty_ax25_sock_params_set(patty_ax25_sock *sock, patty_ax25_params *params); diff --git a/src/server.c b/src/server.c index 069e507..1379a0d 100644 --- a/src/server.c +++ b/src/server.c @@ -1407,7 +1407,7 @@ static int handle_xid(patty_ax25_server *server, * upgrade the socket defaults accordingly, and negotiate downwards * as necessary. */ - if (patty_ax25_sock_upgrade(remote) < 0) { + if (patty_ax25_sock_upgrade(remote, PATTY_AX25_2_2) < 0) { goto error_sock_upgrade; } @@ -1465,7 +1465,7 @@ static int handle_xid(patty_ax25_server *server, patty_ax25_sock_bind_if(remote, iface); - patty_ax25_sock_upgrade(remote); + patty_ax25_sock_upgrade(remote, PATTY_AX25_2_2); if (patty_ax25_sock_params_set(remote, ¶ms) < 0) { patty_ax25_sock_destroy(remote); diff --git a/src/sock.c b/src/sock.c index 7e483b5..5654372 100644 --- a/src/sock.c +++ b/src/sock.c @@ -169,13 +169,26 @@ void patty_ax25_sock_destroy(patty_ax25_sock *sock) { free(sock); } -int patty_ax25_sock_upgrade(patty_ax25_sock *sock) { - sock->version = PATTY_AX25_2_2; - sock->flags_hdlc = PATTY_AX25_SOCK_2_2_DEFAULT_HDLC; - sock->n_maxlen_tx = PATTY_AX25_SOCK_2_2_DEFAULT_MAXLEN; - sock->n_maxlen_rx = PATTY_AX25_SOCK_2_2_DEFAULT_MAXLEN; - sock->n_window_tx = PATTY_AX25_SOCK_2_2_DEFAULT_WINDOW; - sock->n_window_rx = PATTY_AX25_SOCK_2_2_DEFAULT_WINDOW; +int patty_ax25_sock_upgrade(patty_ax25_sock *sock, + enum patty_ax25_version version) { + if (sock->version >= version) { + return 0; + } + + switch (version) { + case PATTY_AX25_OLD: + case PATTY_AX25_2_0: + break; + + case PATTY_AX25_2_2: + sock->flags_hdlc = PATTY_AX25_SOCK_2_2_DEFAULT_HDLC; + sock->n_maxlen_tx = PATTY_AX25_SOCK_2_2_DEFAULT_MAXLEN; + sock->n_maxlen_rx = PATTY_AX25_SOCK_2_2_DEFAULT_MAXLEN; + sock->n_window_tx = PATTY_AX25_SOCK_2_2_DEFAULT_WINDOW; + sock->n_window_rx = PATTY_AX25_SOCK_2_2_DEFAULT_WINDOW; + } + + sock->version = version; return init_bufs(sock); }