diff --git a/src/server.c b/src/server.c index 398fd62..8b858df 100644 --- a/src/server.c +++ b/src/server.c @@ -1484,7 +1484,7 @@ static int handle_segment(patty_ax25_server *server, return 0; reply_rej: - return patty_ax25_sock_send_rej(sock, PATTY_AX25_FRAME_RESPONSE, 0); + return patty_ax25_sock_send_srej(sock, PATTY_AX25_FRAME_RESPONSE); error_write: error_sock_assembler_read: @@ -1503,10 +1503,12 @@ static int handle_i(patty_ax25_server *server, patty_ax25_sock_ack(sock, frame->nr - 1); - if (sock->vr == frame->ns) { + if (frame->ns == sock->vr) { patty_ax25_sock_vr_incr(sock); - } else { - return patty_ax25_sock_send_rej(sock, PATTY_AX25_FRAME_RESPONSE, 0); + } else if (frame->ns == sock->vr + 1) { + return patty_ax25_sock_send_srej(sock, PATTY_AX25_FRAME_RESPONSE); + } else if (frame->ns > sock->vr + 1) { + return patty_ax25_sock_send_rej(sock, PATTY_AX25_FRAME_RESPONSE, 1); } if (frame->proto == PATTY_AX25_PROTO_FRAGMENT) {