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
This commit is contained in:
XANTRONIX 2020-07-26 00:55:47 -04:00 committed by XANTRONIX Industrial
parent 810361647a
commit 8a26cace95
3 changed files with 24 additions and 10 deletions

View file

@ -96,7 +96,8 @@ void patty_ax25_sock_reset(patty_ax25_sock *sock);
void patty_ax25_sock_destroy(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, int patty_ax25_sock_params_set(patty_ax25_sock *sock,
patty_ax25_params *params); patty_ax25_params *params);

View file

@ -1407,7 +1407,7 @@ static int handle_xid(patty_ax25_server *server,
* upgrade the socket defaults accordingly, and negotiate downwards * upgrade the socket defaults accordingly, and negotiate downwards
* as necessary. * as necessary.
*/ */
if (patty_ax25_sock_upgrade(remote) < 0) { if (patty_ax25_sock_upgrade(remote, PATTY_AX25_2_2) < 0) {
goto error_sock_upgrade; 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_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, &params) < 0) { if (patty_ax25_sock_params_set(remote, &params) < 0) {
patty_ax25_sock_destroy(remote); patty_ax25_sock_destroy(remote);

View file

@ -169,13 +169,26 @@ void patty_ax25_sock_destroy(patty_ax25_sock *sock) {
free(sock); free(sock);
} }
int patty_ax25_sock_upgrade(patty_ax25_sock *sock) { int patty_ax25_sock_upgrade(patty_ax25_sock *sock,
sock->version = PATTY_AX25_2_2; enum patty_ax25_version version) {
sock->flags_hdlc = PATTY_AX25_SOCK_2_2_DEFAULT_HDLC; if (sock->version >= version) {
sock->n_maxlen_tx = PATTY_AX25_SOCK_2_2_DEFAULT_MAXLEN; return 0;
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; 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); return init_bufs(sock);
} }