Use bit fields for setsockopt() SOCK_OPT_PARAMS
This commit is contained in:
parent
7a76da651c
commit
893ddefd57
3 changed files with 24 additions and 5 deletions
|
@ -46,6 +46,15 @@
|
||||||
#define PATTY_AX25_SOCK_2_2_MAX_I_LEN 1536
|
#define PATTY_AX25_SOCK_2_2_MAX_I_LEN 1536
|
||||||
#define PATTY_AX25_SOCK_2_2_MAX_WINDOW 127
|
#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 {
|
enum patty_ax25_sock_type {
|
||||||
PATTY_AX25_SOCK_STREAM,
|
PATTY_AX25_SOCK_STREAM,
|
||||||
PATTY_AX25_SOCK_DGRAM,
|
PATTY_AX25_SOCK_DGRAM,
|
||||||
|
|
|
@ -57,6 +57,8 @@ typedef struct _patty_client_setsockopt_request {
|
||||||
} patty_client_setsockopt_request;
|
} patty_client_setsockopt_request;
|
||||||
|
|
||||||
typedef struct _patty_client_setsockopt_params {
|
typedef struct _patty_client_setsockopt_params {
|
||||||
|
uint32_t flags;
|
||||||
|
|
||||||
size_t mtu,
|
size_t mtu,
|
||||||
window,
|
window,
|
||||||
retry;
|
retry;
|
||||||
|
|
18
src/server.c
18
src/server.c
|
@ -613,12 +613,20 @@ static int server_setsockopt(patty_ax25_server *server,
|
||||||
goto error_read;
|
goto error_read;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (data.mtu) patty_ax25_sock_mtu_set(sock, data.mtu);
|
if (data.flags & PATTY_AX25_SOCK_PARAM_MTU)
|
||||||
if (data.window) patty_ax25_sock_window_set(sock, data.window);
|
patty_ax25_sock_mtu_set(sock, data.mtu);
|
||||||
if (data.ack) patty_ax25_sock_ack_set(sock, data.ack);
|
|
||||||
if (data.retry) patty_ax25_sock_retry_set(sock, data.retry);
|
|
||||||
|
|
||||||
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) {
|
if (patty_ax25_sock_realloc_bufs(sock) < 0) {
|
||||||
goto error_realloc_bufs;
|
goto error_realloc_bufs;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue