Changes:
* Combine patty_ax25_sock_ack_timer_restart() and _set() into one
method, patty_ax25_sock_ack_timer_start(), which accepts a new
struct timeval argument to potentially add the Timer T1 value to
* Reorder some functions in src/sock.c, include/patty/ax25/sock.h
Changes:
* Implement patty_ax25_sock_timeR_ack_restart() to initialize the
XID/SABM/SABME ack Timer T1
* Implement patty_ax25_sock_timer_ack_cancel() to clear Timer T1
* Implement patty_ax25_sock_timer_ack_sub() to subtract the value of
a struct timeval from Timer T1
* Implement patty_ax25_sock_timer_ack_expired() to indicate if the
ack Timer T1 has expired
Other changes:
* Rearrange patty_ax25_sock a bit
Begin to reimplement patty_ax25_sock_reset() to follow the AX.25 v2.2
Specification, Section 6.5 "Resetting Procedure" indications to set V(S)
and V(R) to 0
Rename patty_ax25_sock_reset() to patty_ax25_sock_init(), so as to allow
for the implementation of a future _reset() method which shall be used
to implement AX.25 v2.2 Section 6.5 "Resetting Procedure"
Changes:
* Make patty_ax25_sock_send_rr() accept a P/F flag value
* Make patty_ax25_sock_send_rnr() accept a P/F flag value
* Make patty_ax25_sock_send_rej() accept a P/F flag value
Changes:
* Add an enum patty_ax25_version argument to the function
patty_ax25_sock_upgrade() to allow upgrading a socket to a certain
set of AX.25 defaults
Keep distinct default Classes of Procedures parameter flag values for
sockets and interfaces, as the Asynchronous Balanced Mode parameter does
not apply to the interface itself, and the Half/Full Duplex parameters
do not apply to the sock
Changes:
* Make bind() validate that no other socket has the same
callsign/SSID bound to a listening socket, emitting EADDRINUSE if
one already exists
* Make bind() validate that no address is already bound to the
socket, emitting EINVAL otherwise
Changes:
* Add a "pending disconnect" state to enum patty_ax25_sock_state
(PATTY_AX25_SOCK_PENDING_DISCONNECT), used when an originating
system sends a DISC frame, pending a UA response
* When handling a UA frame, rather than terminating a socket in the
established state implicitly, check for a "pending disconnect"
state explicitly
Other changes:
* When a remote socket has already been obtained in handle_frame()
in src/server.c, pass that socket to any other method that would
otherwise be looking up the same socket
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
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
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
Implement better handling of command/response bits whilst decoding and
encoding addresses
Changes:
* Add an enum patty_ax25_frame_cr argument to functions in
src/sock.c which send specific types of frames
* Detect AX.25 version >2.0 based on the command/response SSID bits
* Simplify address copying/encoding by usage of the new function
patty_ax25_addr_copy()
* Implement showing AX.25 version, command/response indicator for
frames in src/print.c
Implement patty_ax25_addr_copy() as a means to copy a patty_ax25_addr
object from one location in memory to another, ensuring that the SSID
field only contains at minimum the station identifier (0-15) and the
reserved bits 0x60
Implement better handling of situations when read() captures multiple
TNC frames; ensure each frame is handled in src/server.c, function
handle_iface(), to ensure packets aren't ignored before the next
select() call
Changes:
* Split patty_ax25_frame_decode() into the following:
- patty_ax25_frame_decode_address()
- patty_ax25_frame_decode_control()
This allows for look up an established socket for a given address
pair, to determine if an SABME session is in progress,
necessitating modulo-128 control decoding
* Decode I and S N(R), N(S) sequence numbers, poll/final
bits properly in both modulo-8 and modulo-128 mode
* Perform better frame control validation
* Implement the following functions in src/sock.c:
- patty_ax25_sock_send_rr()
- patty_ax25_sock_send_rnr()
- patty_ax25_sock_send_rej()
- patty_ax25_sock_send_srej()
Corresponding functions have been removed from src/server.c
* Implement better functions in src/sock.c for encoding frame
control, with send/receive sequences associated with the socket,
with modulo-128 encoding for SABME sessions
Other changes:
* Move or delete macros from include/patty/ax25/macros.h into
include/patty/ax25.h and include/patty/ax25/frame.h
* Move definitions from include/patty/ax25/proto.h to header file
include/patty/ax25.h
* Perform better bounds checking while decoding frames
* Improve frame control printing in src/print.c; display frame
type names, N(R), (NS) sequence numbers, and poll/final bits
Significantly simplify dictionaries so that dictionary keys are always
uint32_t; this number can be an arbitrary integer, be it a file
descriptor, for instance, or a hashed value