Changes:
* Don't use a separate dict for keeping track of sockets pending
accept and sockets pending connect; rely more on the semantic
meaning of the enum patty_ax25_sock_status values
* Ensure DISC frames are acknowledged by UA frames
* Ensure a receiving system only shuts down a connection after
receiving a UA frame in response to a sent DISC frame
* Ensure a sending system only shuts down a connection just prior to
sending a UA frame in response to a received DISC frame
* Don't use the P/F flag for the connection management U frames;
implicitly assume the P/F flag is set to 1, and always send frames
with a true P/F flag
Changes:
* Replace patty_ax25_sock member 'buf' with 'tx_buf' and 'rx_buf'
for transmitting or receiving single, non-sequential packets
* Make patty_ax25_sock_upgrade() reallocate all I/O buffers based on
window size and MTU/MRU, useful when entering SABME mode
Changes:
* Modify patty_ax25_sock_send_xid() to require the 'cr' argument,
which specifies whether the frame address field is to be encoded
with the 'command' or 'response' bits set as appropriate
Fix subtle sequence issues in src/sock.c wherein non-I frames which are
sent may overwrite a previously sent I frame with the same sequence
number, which would cause issues with the remote end expecting an I
frame and possibly getting a non-I frame
Changes:
* Add 'format' member to patty_ax25_frame
* Drop 'format' argument in patty_ax25_encode_reply_to()
* Drop 'format' argument in patty_ax25_encode()
* Consolidate private functions for encoding frame addresses to one
much simpler function to perform encoding; simplify encoding of
addresses in frames sent in reply to other frames
Implement the AX.25 v2.2 XID parameter exchange as a preamble for
initiating connections with peers, with the following workflow:
* Upon a connect() call, send an XID frame to the peer
* When a DM is received, assume the peer is unable to accept a
connection
* When a FRMR is received, assume the peer does not adhere to the
AX.25 v2.2 standard, and attempt to initiate a connection with a
SABM frame instead
* When an XID is received, adapt local parameters to meet the
needs of the peer, and respond with an SABM or an SABME frame,
depending on which mode is indicated
Use patty_ax25_sock_bind_if() in server_connect() to ensure any other
functions which must take place are attended to when assigning an
interface to a socket
Fix byte order of extended format control encoding and decoding in the
following src/frame.c functions:
* patty_ax25_frame_decode_control()
* patty_ax25_frame_encode_reply_to()
Changes:
* Modify examples/ax25dump.c and decode.c to not die upon failure to
decode a specific frame or field; instead, indicate the error,
print a hex dump of the frame, and move on to the next frame
Changes:
* Implement patty_ax25_sock_upgrade() to upgrade a socket from the
default AX.25 2.0 parameters to AX.25 2.2 parameters, meant to be
used upon receipt of an XID frame
* Implement patty_ax25_sock_params_set() to set lowest common
denominator parameters to a socket, downgrading or adapting to the
parameters advertised by a peer XID frame as necessary
Changes:
* Define different sets of default parameters for AX.25 versions
2.2 and prior
* Add flags_classes, flags_hdlc and version to patty_ax25_sock
* Remove flags member from patty_ax25_sock
* Inherit Classes of Procedures value from interface when an
interface is bound to a socket
Changes:
* Declare bigger defaults for certain session parameters in
include/patty/ax25/sock.h
* Use patty_ax25_sock_reset() to initialize parameter variables in
patty_ax25_sock_new(), to save many lines of code
* Add patty_ax25_sock member n_ack
Changes:
* Implement patty_ax25_params struct to contain all parameters
supported by patty, at the interface and socket level alike
* Move parameter enumerate types into include/patty/ax25.h, from
include/patty/ax25/frame.h; make corrections as necessary
* Reimplement patty_ax25_frame_decode_xid() to parse known XID
information parameters into a patty_ax25_params object
* Implement patty_print_params() in src/print.c
* Refactor patty_print_frame() as patty_print_frame_header(),
without a call to patty_print_hexdump(); this allows
patty_print_params() to be called prior to patty_print_hexdump(),
for better readability
* Use patty_print_params() in examples/ax25dump.c, decode.c
* Refactor usage of patty_ax25_frame_decode_xid() in src/server.c to
parse XID frames into a patty_ax25_params object
Set default sock frame len to 328 as per AX.25 spec, to handle full
header with maximum number of repeaters, 8-bit control field, protocol
identifier, and 256 information field bytes
Implement ring buffer for frames sent in a SABM or SABME session,
facilitating the ability to retransmit select frames upon request,
retaining a copy of the full frame and its transmitted size