Tom Jennings 1 Sep 89 revision 1 6 Sep 89 revision 2 Proposed WAZOO/FSC001 combined protocol state machines. Tell me what youŤ think. This revision is in response to a comment Vince made to me regarding the firstŤ one, that the sync machines would falsely trigger "FSC001" on and two 'C's inŤ a BBS signon (for example: "... Opus CBCS System ..."). First, a digression... There is something important that all of our mailers and BBSs do that is notŤ documented directly in anything I've ever seen: they all output text toŤ presumably inform humans as to why they may not be able to get access, becauseŤ that phone number is mail-only, either temporarily or permanently. 1. Modems connect 2. Ambiguous delay 3. Signon message 4. Ambiguous delay 5. Protocol determination 6. ... The goal is not to distinguish between two (at the moment...) protocols; it isŤ to determine "human" login, or FSC001 or WAZOO. BBS vs. mailer. Anyways, the important Thing is actually in FSC001: the old "whack return"Ť sequence. It was not only for that terrible baud-rate-determination business,Ť but also to get in sync with the mailer; the "call back later" code was/isŤ part of the protocol. It's an edge-detector; the edge between BBS-signon andŤ no-BBS-signon (from where protocol starts). The first version of these tables was meant to deal with the TSYNC/YOOHOOŤ portion only, out of it's overall context, but Vince, by pointing out theŤ above, made clear the importance of the WhackCR/WaitClear states. ... but back to the issue at hand. My response is twofold: First, the sync machines should never see a BBS signon. The WhackCR/WaitClearŤ states would take care of getting through the BBS signon in the normal caseŤ (ahem). (See the WaitSync state in the Receiver's state machine.) Second, sequentiality on the 'C'(or NAKs) s doesn't guarentee anything: whyŤ there's a BBS in my own net called "NCFCC". There you go. The WhackCR/WaitClear thing in FSC001 (and in these tables) is not what FidoŤ ever did, nor does now. (I better get coding!) Fido's is a loop that issuesŤ the CR/space FIRST, then looks for a response. (20 tries max.) All of ourŤ programs DO this in reality; Bink issues the "hit ESCape if you're a human"Ť message, which satisfies it, then falls into the "loop" where it looks for aŤ CR "first". Should we codify this, so that the spec requires the outputting of text (CRs,Ť more specifically), or should we make it work as in Binkley, that it toleratesŤ them? I prefer making them mandatory, ie. as in FSC001 (see statesŤ WhackCRs/WaitClear), but it could also be that the sender "prefers" them: | | | | | | |-----+----------+-------------------------+-------------------------+-----| | WSC | WhackCR | 1. Over 10 seconds | assume no BBS signon | WS0 | | | | 2. CR received | BBS signon in progress | WSD | | | | 3. neither | output CR, space | WSC | |-----+----------+-------------------------+-------------------------+-----| | WSD | WaitClear| 1. no input for 500mS | go determine protocol | WS0 | | | | 2. over 60 sec not clear| hang up, report garbage | exit| |-----+----------+-------------------------+-------------------------+-----| | | | | | | WhackCRs.1: OK, it's either a dead-as-a-doorknob modem, or a mail-only systemŤ with no human/BBS message (rude! (unlikely today)) In either case, theŤ connection is made, we've paid for it (assuming a phone line), and if it'sŤ dead, well, we're dealing with an exception to begin with. Subsequent statesŤ will figure that out. WhackCRs.2: No problem. Normal state of affairs today. WhackCRs.3: FSC001, vestigial, and painless, and also can be used to re-syncŤ lost and/or confused senders (see Receiver's WaitSync.4). Who knows. This isn't critical now; Fido does it "my" way, and Bink does itŤ according to FSC001 (presumably), and others do similar things, and they allŤ work together, because we all issue messages. But what about the future, sayŤ assumed-network-node-only? (But we're documenting current practice! Hmm...) Now let me cause a bit more trouble (Bob & Vince: you can wreak revenge on meŤ later! :-) I think Bink's outputting the "... if you're a human ..." messageŤ once per second or more often prevents Fido11's mailer from getting past theŤ WaitClear state; it requires significantly longer than 500mS of quiet. AndŤ will also degrade noise margins, by excessively narrowing the potential forŤ there actually being 500mS of quiet ... 0 500mS 1000mS |--------------------X--------+------------X-----------------| If a garbage character (X's) occurs say 300mS after the message stops, itŤ leaves only a 700mS window for the quiet time to occur ... and if one happensŤ in there, it will miss. Outputting the message every (say) 3 - 4 seconds wouldŤ suffice to make the window much wider. If this is even the case, I am going from memory how fast the Bink messageŤ "appears" to be ... luckily you both live far away from me so physicalŤ retribution is difficult. ---------------------------------------------------------------- SendSync: Wazoo vs. FSC001 Protocol Determination This is the senders FSC001/Wazoo protocol session synchronization and protocolŤ determination. In simple terms, this issues the two different protocol syncŤ characters, YOOHOO for the WAZOO protocol, and TSYNC for the FSC001 protocol,Ť and attempts to determine from the receivers response which protocol toŤ select. The protocol drivers in use "today" (September, 1989) many times support bothŤ WAZOO and FSC001; those that do heavily favor WAZOO, for it's added featuresŤ and performance. The sync process below favors WAZOO but allows reliable fall-back to FSC001. (rev2) Before the protocol determination is done, a process historically knownŤ as "whack return" is done; it originally was to determine baud rate from dumb,Ť non-"AT command" type modems (say, Bell 212A's), but also causes the mailer toŤ act like a human caller, to get it through initial welcome messages and theŤ answering modem/software system's initial delays and such. After the BBS Response phase, YOOHOO and TSYNC characters are issued, afterŤ which we wait for a response. A response indicating WAZOO is acceptedŤ immediately. Possible responses to TSYNC (see below) are deferred for 10Ť seconds. This allows distinguishing apparent TSYNC "responses" from garbage,Ť and allows receivers that favor WAZOO to respond. If no valid response toŤ YOOHOO is received within 10 seconds, the TSYNC character(s) received earlierŤ are honored, and FSC001 protocol is selected. Selection of WAZOO protocol is immediate; selection of FSC001 is delayed 10Ť seconds from the receipt of the first valid TSYNC character, which adds 10Ť seconds of connect-time to all FSC001 sessions. IMPLEMENTATION NOTE: While WAZOO defines ENQ as a response to the sendersŤ YOOHOO, there is no corresponding "TSYNC response" designed into FSC001Ť protocol. What is generally accepted as a "TSYNC response" is to wait for theŤ 'C' or NAK character that the receivers' XMODEM driver issues when it hasŤ recognized the senders TSYNC. (Refer to FSC001-9, state R2, WaitTsync.) ThisŤ "eats" one XMODEM-start character, and delays the actual start of the packetŤ transfer, but is otherwise acceptable. Sender: .-----+----------+-------------------------+-------------------------+-----. |State| State | Predicate(s) | Action(s) | Next| | # | Name | | | Stat| |-----+----------+-------------------------+-------------------------+-----| | WSA | SendInit | | Dial modem | WSB | |-----+----------+-------------------------+-------------------------+-----| | WSB | WaitCxD | 1. Carrier detected | delay 1 - 5 seconds | WSC | | | | 2. busy, etc | report no connection | exit| | | | 3. voice | report no carrier | exit| | | | 4. carrier not detected | | | | | | within 120 seconds | report no connection | exit| |-----+----------+-------------------------+-------------------------+-----| | WSC | WhackCRs | 1. Over 30 seconds | report no response | exit| | | | 2. ?? CRs received | delay 1 second | WSD | | | | 3. CRs not received | output CR, space, CR, | | * | | | | space | WSC | |-----+----------+-------------------------+-------------------------+-----| | WSD | WaitClear| 1. no input for 500mS | go determine protocol | WS0 | | | | 2. over 60 sec not clear| hang up, report garbage | exit| |-----+----------+-------------------------+-------------------------+-----| | WS0 | SyncInit | | Prepare 3 sec Sync timer| | | | | | Prepare 10 sec TSYNC tmr| WS1 | |-----+----------+-------------------------+-------------------------+-----| | WS1 | SendSync | 1. 3 sec elapsed | Send YOOHOO, then TSYNC | WS2 | | | | 2. not elapsed | | WS2 | |-----+----------+-------------------------+-------------------------+-----| | WS2 | WaitResp | 1. ENQ received | Wazoo Protocol selected | exit| | | | 2. 'C' received | probable FSC001 | WS3 | | | | 3. NAK received | probable FSC001 | WS3 | | | | 4. 10 sec timer elapse? | assume FSC001 | exit| | | | 5. Debris, nothing | require a response | WS1 | & | | | 6. (YOOHOO AND 127) | probable BBS input echo | WS1 | & | | | 7. (TSYNC AND 127) | probable BBS input echo | WS1 | | | | 8. Over 60 seconds | no response | exit| |-----+----------+-------------------------+-------------------------+-----| | WS3 | TsyncTmr | 1. Timer not running | Start 10 second timer | WS1 | | | | 2. Timer running | | WS1 | `-----+----------+-------------------------+-------------------------+-----' * (IMPLEMENTATION NOTE: Issueing an ETX (03 decimal) and a VT character (11Ť decimal) at this point is tolerable to the receiver, and might abort longŤ bulletin board "welcome messages" that delay getting through the syncŤ process.) & (IMPLEMENTATION NOTE: Cute, but hardly necessary. Most BBS line inputtersŤ (say first name, last name, password...) strip parity from incomingŤ characters, so if you somehow reached a BBS that doesn't do FidoNet mail, itŤ may assume your mailer program is a human with a strange name. Might be nice to see in a log file, is all.) Note that there is no mention of the 00/FF responses in YOOHOO.DOC. I don'tŤ know what that is, though I suspect it is SEALINK. I don't know SEALINK.Ť Doesn't it do an xmodem-like "initial NAK"? Wouldn't it start OK by issuingŤ NAK/C, and the 00/FF's fall under "debris"? RecvSync: Wazoo vs. FSC001 Protocol Determination This is the receivers FSC001/WAZOO session protocol determination. In simpleŤ terms, this listens for one of the two possible protocol sync characters;Ť YOOHOO for WAZOO protocol, or TSYNC for FSC001 protocol. Once again, the protocol drivers in use "today" (September, 1989) many timesŤ support both WAZOO and FSC001; those that do heavily favor WAZOO, for it'sŤ added features and performance. The sync process below favors WAZOO but allowsŤ reliable fall-back to FSC001. Response to YOOHOO is immediate; WAZOO is selected. If a TSYNC character isŤ received however, it is deferred for 10 seconds to allow detection of anyŤ subsequent YOOHOO character. After 10 seconds, if not YOOHOO is received, theŤ TSYNC is honored and FSC001 protocol selected. .-----+----------+-------------------------+-------------------------+-----. |State| State | Predicate(s) | Action(s) | Next| | # | Name | | | Stat| |-----+----------+-------------------------+-------------------------+-----| | WR0 | | | send signon/welcome msg | WR1 | |-----+----------+-------------------------+-------------------------+-----| | WR1 | WaitSync | 1. YOOHOO received | Send ENQ character, | | | | | | WAZOO selected | exit| | | | 2. TSYNC received | probable FSC001 | WR2 | | | | 3. 10 sec timer elapsed | FSC001 protocol selected| exit| | | | 4. CR received | Sender still in FS2 | WR3 | | | | 5. 60 seconds elapses | No proper response | exit| |-----+----------+-------------------------+-------------------------+-----| | WR2 | TsyncTmr | 1. Timer not running | Start 10 second timer | WR1 | | | | 2. Timer running | | WR1 | |-----+----------+-------------------------+-------------------------+-----| | WR3 | SyncCR | | Send CR | WR1 | `-----+----------+-------------------------+-------------------------+-----' Spare parts: .-----+----------+-------------------------+-------------------------+-----. |State| State | Predicate(s) | Action(s) | Next| | # | Name | | | Stat| `-----+----------+-------------------------+-------------------------+-----' .-----+----------+-------------------------+-------------------------+-----. | | | | | | | | | | | | |-----+----------+-------------------------+-------------------------+-----| | | | | | | | | | | | | `-----+----------+-------------------------+-------------------------+-----'