diff --git a/include/patty/ax25/sock.h b/include/patty/ax25/sock.h index 3a903ae..6ee6c75 100644 --- a/include/patty/ax25/sock.h +++ b/include/patty/ax25/sock.h @@ -46,6 +46,15 @@ #define PATTY_AX25_SOCK_2_2_MAX_I_LEN 1536 #define PATTY_AX25_SOCK_2_2_MAX_WINDOW 127 +/* + * Parameters flags to be set when calling patty_client_setsockopt() with + * PATTY_AX25_SOCK_PARAMS + */ +#define PATTY_AX25_SOCK_PARAM_MTU (1 << PATTY_AX25_PARAM_INFO_TX) +#define PATTY_AX25_SOCK_PARAM_WINDOW (1 << PATTY_AX25_PARAM_WINDOW_TX) +#define PATTY_AX25_SOCK_PARAM_ACK (1 << PATTY_AX25_PARAM_ACK) +#define PATTY_AX25_SOCK_PARAM_RETRY (1 << PATTY_AX25_PARAM_RETRY) + enum patty_ax25_sock_type { PATTY_AX25_SOCK_STREAM, PATTY_AX25_SOCK_DGRAM, diff --git a/include/patty/client.h b/include/patty/client.h index 331f3c0..59fe9dd 100644 --- a/include/patty/client.h +++ b/include/patty/client.h @@ -57,6 +57,8 @@ typedef struct _patty_client_setsockopt_request { } patty_client_setsockopt_request; typedef struct _patty_client_setsockopt_params { + uint32_t flags; + size_t mtu, window, retry; diff --git a/src/server.c b/src/server.c index f55f0ab..1155845 100644 --- a/src/server.c +++ b/src/server.c @@ -613,12 +613,20 @@ static int server_setsockopt(patty_ax25_server *server, goto error_read; } - if (data.mtu) patty_ax25_sock_mtu_set(sock, data.mtu); - if (data.window) patty_ax25_sock_window_set(sock, data.window); - if (data.ack) patty_ax25_sock_ack_set(sock, data.ack); - if (data.retry) patty_ax25_sock_retry_set(sock, data.retry); + if (data.flags & PATTY_AX25_SOCK_PARAM_MTU) + patty_ax25_sock_mtu_set(sock, data.mtu); - if (data.mtu || data.window) { + if (data.flags & PATTY_AX25_SOCK_PARAM_WINDOW) + patty_ax25_sock_window_set(sock, data.window); + + if (data.flags & PATTY_AX25_SOCK_PARAM_ACK) + patty_ax25_sock_ack_set(sock, data.ack); + + if (data.flags & PATTY_AX25_SOCK_PARAM_RETRY) + patty_ax25_sock_retry_set(sock, data.retry); + + if (data.flags & (PATTY_AX25_SOCK_PARAM_MTU + | PATTY_AX25_SOCK_PARAM_WINDOW)) { if (patty_ax25_sock_realloc_bufs(sock) < 0) { goto error_realloc_bufs; }