diff --git a/include/patty/ax25/sock.h b/include/patty/ax25/sock.h index a995752..36e509d 100644 --- a/include/patty/ax25/sock.h +++ b/include/patty/ax25/sock.h @@ -96,6 +96,8 @@ patty_ax25_sock *patty_ax25_sock_new(enum patty_ax25_proto proto, void patty_ax25_sock_destroy(patty_ax25_sock *sock); +int patty_ax25_sock_reset(patty_ax25_sock *sock); + int patty_ax25_sock_upgrade(patty_ax25_sock *sock, enum patty_ax25_version version); diff --git a/src/server.c b/src/server.c index 409eea5..ad7c3a0 100644 --- a/src/server.c +++ b/src/server.c @@ -1275,7 +1275,7 @@ static int handle_dm(patty_ax25_server *server, goto error_client_by_sock; } - patty_ax25_sock_init(sock); + patty_ax25_sock_reset(sock); return respond_connect(client, -1, ECONNREFUSED); @@ -1423,7 +1423,7 @@ static int handle_xid(patty_ax25_server *server, goto error_client_by_sock; } - patty_ax25_sock_init(remote); + patty_ax25_sock_reset(remote); return respond_connect(client, -1, errno); } diff --git a/src/sock.c b/src/sock.c index a44d143..dc20c59 100644 --- a/src/sock.c +++ b/src/sock.c @@ -176,6 +176,16 @@ void patty_ax25_sock_destroy(patty_ax25_sock *sock) { free(sock); } +/* + * AX.25 v2.2 Specification, Section 6.5 "Resetting Procedure" + */ +int patty_ax25_sock_reset(patty_ax25_sock *sock) { + sock->seq_send = 0; + sock->seq_recv = 0; + + return 0; +} + int patty_ax25_sock_upgrade(patty_ax25_sock *sock, enum patty_ax25_version version) { if (sock->version >= version) {