Table of Contents
Binary Compressed Forward Version 1
This protocol version is an extension to both the ASCII Basic Protocol and the Binary Compressed Forward Version 0. It is used to transfer compressed ASCII Messages or binary files.
This version is advertised in the SID Features field with the B1
and F
strings. A SID with the B1
string but no F
will be treated as if neither extensions have been advertised.
F4HOF's comment: some implementations actively check against the presence of B1F
, so it's strongly recommended to concatenate those flags together.
The main differences with version 0 are:
- An enlarged set of selective retrieval replies.
- The first transmitted block structure is slightly changed
The Binary Compressed Forward protocol MUST operate over a 8-bit clean communication bearer, which provides reliable and ordered delivery.
Commands
Selective message retrieval
Value | Alt Value | Action | Meaning |
---|---|---|---|
Y | + | Accept | Send the message and delete it from the queue (“Yes”) |
N | - | Drop | Don't send the message and delete it from the queue (“No”) |
L | = | Defer | Keep in the queue to retrieve it later |
H | Hold | Send the message and hold it in the queue | |
R | Reject | Message is rejected | |
E | Error | Invalid proposal | |
! | A | Append | Send the message, starting from offset then delete it from the queue |
Transfer Mode
Each transfer is equivalent to the transfer of one message of the standard protocol. It SHALL NOT be followed by the Ctrl+Z
character, the end of file specifier is defined in another way.
The first transmitted data block MUST contain the full binary file's CRC16 checksum, the full uncompressed file size as a 32 bit little-endian integer, and the binary content of the file, starting from the start of the file, or from the requested offset, depending on the decision transmitted through the selective retrieval command.
In case of a checksum error, the message or the file MUST NOT be considered as transmitted. The system MUST send the comment, then issue a disconnect request.
*** Erreur checksum
The first transmitted block of data must contain a header containing : the CRC16 of the full binary file (2 bytes) the size of the full uncompressed file (4 bytes) This data is in little-endian Intel format (less significant first). The last data block is followed by the end of file specifier and the checksum of the data sent. End of file specifier format : <EOT> 1 byte = 04 hex Checksum 1 byte = 00 to ff hex The checksum is equal to the sum of all the data bytes of the transmitted data, modulo 256 (8 bits) and then two's complemented. The checking of the checksum is very simple : The sum of the data bytes from the file and the checksum received modulo 256 shall be equal to zero. In case of a checksum error, the message or the file is ignored and the system issues a disconnect request after having sent the comment : *** Erreur checksum A CRC16 is computed for the full binary file including the length of the uncompressed file (4 bytes in top of file). In the case of a resume, it will be the only means available to ensure that all the parts of the message or file has been received correctly. The LZHUF_1 program, when used with option "e1", generates a binary compressed file in the following format : CRC16 : 2bytes Length: 4 bytes Data : rest of the file In case of forwarding with a BBS using version 0, only the part from offset 2 will be sent In case of forwarding with a BBS using version 1, the 6 top bytes will be always sent, then if resume seek to asked offset, then send data. Ascii values of the characters (1 byte) used in the protocol : <NUL> = 00 hex <SOH> = 01 hex <STX> = 02 hex <EOT> = 04 hex