diff --git a/src/sock.c b/src/sock.c index 820d27b..1f94bb1 100644 --- a/src/sock.c +++ b/src/sock.c @@ -643,7 +643,13 @@ error_invalid_type: return -1; } -static inline uint16_t control_i(patty_ax25_sock *sock, int ns, int flag) { +static inline uint16_t control_i(patty_ax25_sock *sock, int ns) { + int flag = 0; + + if (sock->vs == tx_seq(sock, sock->va + sock->n_window_tx - 1)) { + flag = 1; + } + switch (sock->mode) { case PATTY_AX25_SOCK_SABM: return ((sock->vr & 0x07) << 5) @@ -752,7 +758,7 @@ ssize_t patty_ax25_sock_resend(patty_ax25_sock *sock, int seq) { return slot->len > 0? frame_send(sock, PATTY_AX25_FRAME_COMMAND, - control_i(sock, seq, 0), + control_i(sock, seq), sock->proto, slot + 1, slot->len): 0; @@ -980,7 +986,7 @@ static ssize_t write_segmented(patty_ax25_sock *sock, size_t o = 0; uint16_t control = sock->type == PATTY_AX25_SOCK_STREAM? - control_i(sock, sock->vs, 0): + control_i(sock, sock->vs): control_ui(0); if (first) { @@ -1042,7 +1048,7 @@ ssize_t patty_ax25_sock_write(patty_ax25_sock *sock, if (frame_send(sock, PATTY_AX25_FRAME_COMMAND, - control_i(sock, sock->vs, 0), + control_i(sock, sock->vs), sock->proto, buf, len) < 0) {