====== BBS Forwarding protocol ======
**WARNING** At this stage, this page is the scratchpad of an attempt to summarize everything related to the BBS forwarding protocol (including Winlink extensions). Considering the poor redactional and lacunar nature of the reference documentation, DO NOT take the content of this page at face value until this message disappears. Here be dragons, don't come complaining.
===== SID =====
The **S**ystem **ID**entifier string (or SID) is used by BBS software exchange their author, their version, and, optionally, a list of extended features, as described in the next subsection.
Here is an ABNF syntax of the SID string:
SID_ALNUM = %x20-2c / %x2e-5a / %x5c / %x5e-7e ; All printables except for "[", "-" and "]".
AUTHOR = 1*SID_ALNUM
VERSION = 1*SID_ALNUM
FEATURES = 1*SID_ALNUM
SID = "[" AUTHOR "-" VERSION [ "-" FEATURES ] "]"
PCRE compatible format string:
/^\[(?[^-]+)-(?[^-\]]+)(?:-(?[^\]]+))?\]$/
==== Extensions list ====
^ Letter(s) ^ Description ^ F6FBB? ^ WL2K? ^ W0RLI? ^ LA5NTA? ^ F4HOF((Inferred by F4HOF through opaque box analysis, not explicitly documented)) ^
| A | Acknowledge for personal messages | X | | X | | |
| B | FBB compressed protocol version 0 | X | # | X | | |
| B1 | FBB compressed protocol version 1 | X | # | X | | |
| B2 | FBB compressed protocol version 2 | | X | X | | |
| C | Automatic distribution of current date / time (obsolete) | | | # | | |
| D | FIXME | X | | | | |
| F | FBB basic protocol support | X | | X | | |
| G | GZIP compression | | | | X | |
| H | Hierarchical Location designators | X | # | X | | |
| I | Calling station ID support | | X | | | |
| J | Winlink: Seems to indicate "Linked to CMS" FIXME | | | | | X |
| L | G1NNA Compression | | | # | | |
| M | Message Identifier support | X | # | | | |
| N | Winlink: Calling station ID with SSID | | # | | | |
| R | AA4RE Extended reject responses | | | # | | |
| S | AA4RE Extended S commands support | | | # | | |
| T | Winlink FIXME | | | # | | |
| U | Winlink FIXME | | | # | | |
| W | Winlink features (non required for P2P) | | | | | X |
| X | Compressed batch forwarding | X | | | | |
| $ | BID supported | X | | | | |
* X => Fully specified
* # => Partially described, or references its existence
==== Required extensions for Winlink ====
FIXME Fuzz Wl2k express to see which extensions break its nominal operation.
Here are the strict minimum extensions required by Winlink to accept a remote party, according the selected mode of operation:
^ Operating mode ^ Extensions ^
| Winlink | ''B2FWIHJM$'' |
| Radio Only | ''B2FWIHM$'' |
| Post Office | ''B2FWIHM$'' |
| P2P | ''B2FHM$'' |
===== Commands (AKA proposals) =====
==== Ascii Basic Protocol =====
(i) Usage of this proposal implies the presence of the ''F'' feature in the SID.
Details in the dedicated page on the [[b2f:ascii|ASCII Basic Protocol]]
==== Binary compressed protocol version 0 ====
(i) Usage of this proposal implies the presence of both the ''B'' and ''F'' features in the SID.
Details in the dedicated page on the [[b2f:bcf_v0|Binary Compressed Forward Version 0]].
==== Binary compressed protocol version 1 ====
(i) Usage of this proposal implies the presence of both the ''B1'' and ''F'' features in the SID.
Details in the dedicated page on the [[b2f:bcf_v1|Binary Compressed Forward Version 1]].
==== B2F ====
B2F is a superset of BCFv1, so ''FA'' and ''FB'' commands work the same way.
This protocol's specifics are described in [[b2f:b2f|Open B2F]].
==== GZIP Experiment ====
The GZIP Experiment is a superset of BCPv2 which adds the ''FD'' proposal while following the ''FC'' proposal specifics, except for the use of GZIP instead of the LZHUF version 1 format.
===== Winlink specifics =====
Apparently, clients and servers add the feature ''W'' in their SID string when establishing a WL2K connection. Some even complain if the remote peer doesn't expose it. The precise meaning and purpose of that flag is undocumented.
W0RLI also ties the features ''T'' and ''U'' in their specification, but without any details on their real meaning.
==== Forward messages ====
==== Pending messages ====
==== Radio Only mode ====
===== Data Transfer Modes ======
==== Standard Forwarding protocol (MBL/RLI) ====
FIXME //No online documentation found, as of Feb 2025 on the specifics of this protocol.//
According to the FBB forwarding protocol specification, it is the least common denominator that enables message transfer.
Your software is supposed to fall back in this mode when the feature ''F'' is not proposed by the remote party.
F4HOF's remark: //Best recommended stance, for now, is to reject connections with an error message, given the lack of available documentation.//
==== ASCII Basic Protocol ====
==== Binary compressed protocol version 0 ====
==== Binary compressed protocol version 1 ====
==== Binary compressed protocol version 2 ====
Compression algorithm defined in https://github.com/ham-radio-software/lzhuf
==== GZIP Experiment ====
===== Typical protocol flows =====
===== Sources =====
* [[https://www.f6fbb.org/protocole.html|F6FBB - FBB forwarding protocol]]
* [[https://www.f6fbb.org/sid.html|F6FBB - SID letters]]
* [[https://web.archive.org/web/20080807134031/https://www.f6fbb.org/ack.html|F6FBB - ACK messages]]
* [[https://winlink.org/B2F|Open B2F -- Winlink Message Structure and B2 Forwarding Protocol]]
* [[https://winlink.org/content/overview_winlink_hybrid_network|Overview of the Winlink Hybrid Network]]
* [[https://winlink.org/sites/default/files/download/wl2k_faq_5.pdf|FAQ about WL2K]]
* [[https://www.scc-ares-races.org/data/packet/docs/BBS_Specification.pdf|W0RLI BBS Specification]]
* [[https://github.com/la5nta/wl2k-go#gzip-experiment| LA5NTA's wl2k-go - Gzip experiment]]
* [[https://ecfsapi.fcc.gov/file/10808597817982/ExParteCommunicationAug8.pdf|FCC - Notice of Ex Parte Submission - Ron Kolarik (K0IDT), RM-11831]]