home *** CD-ROM | disk | FTP | other *** search
- Document: FTS-0008
- Version: 002
- Date: 17-Jun-90
- Updates: FTS-0001
-
-
-
- An Enhanced FidoNet(r) Technical Standard
- Extending FTS-0001 to include Bark requests
-
- June 17, 1990
-
-
-
-
- Status of this document:
-
- This document specifies an optional standard for the FidoNet community.
- Implementation of the protocols defined in this document is not mandatory,
- but all implementations of these protocols are expected to adhere to this
- standard. Distribution of this document is subject to the limitations of
- the copyright notice displayed below.
-
-
-
- Copyright 1990 by Philip L. Becker. Portions of this document are
- copyright 1990 by the International FidoNet Association and are
- incorporated with their consent. The right to distribute for
- non-commercial use is granted to the FidoNet Technical Standards
- Committee, provided that no fee is charged. This may be posted on FidoNet
- electronic BBSs which charge no fee for accessing this document. Any and
- all other reproduction or excerpting requires theexplicit written consent
- of the copyright holders.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A. Introduction
-
- 1. This Document
-
- This document describes the standard for "Bark" type FidoNet file
- request operation. Bark file requests are an extension to the basic
- FTS-0001 mail session, and this document presents these requests as a
- modification to that document.
-
- 2. What are File Requests?
-
- File Requests are a way of requesting that a specific file be sent during
- a FidoNet mail session. This has many advantages over simply logging on to
- a BBS and downloading a file:
-
- o You need not be a validated user
-
- o You don't have to spend time searching for the file on the BBS
-
- o You can schedule the file request to take place at any time without
- your being near your computer.
-
- There are two commonly used types of file requests on FidoNet today, WaZOO
- and Bark requests. WaZOO requests are used by Opus and BinkleyTerm, and
- are not documented here. See the document FTS-0006 by V. Perriello for a
- description of these. Bark requests were the first file request extension
- to the FTS-0001 protocol, and are supported (at least partially) by many
- mailers, including SEAdog, Dutchie, BinkleyTerm, and to a certain extent
- Opus. This document describes how to implement Bark-type file requests.
-
-
- B. Terms Used in this Document
-
- 1. The diagrams and notations used in this document are the same as those used
- in the FTS-0001 document. Please see FTS-0001 for a description of these.
- This document should be considered as an extension to the FTS-0001 session
- layer protocol, and you will require FTS-0001 in addition to this document
- to fully understand what is presented here.
-
- In addition to the data description language described in FTS-0001 section
- A.4, one extra terminal used in this notation:
-
- (* terminals *)
- someName<max> - String of up to max chars, NOT null terminated
- C. Performing File Requests
-
- 1. Introduction
-
- A Bark request consists of transmitting a special Bark Request packet which
- contains a filename, a date (used for update requests), and optionally a
- password. The system receiving the request then decides if it can send the
- requested file or not, and if it can does so using the same protocol used
- to send attached files. Bark request handling is always controlled by the
- answering system, and consists of two phases. In phase one, the receiving
- system asks the calling system to honor requests it may have to ask for
- files from the caller. In phase two, the receiving system allows the
- calling system to request files from it.
-
- Update file requests are the same as normal file requests, with one
- exception. If the date in the Bark Request packet (described below) is
- greater than or equal to the date of the actual file requested, the file
- will not be sent. The requestor should set the date to the date of the
- the actual file on its own end if an update request is desired.
-
-
- D. The Bark Request Packet
-
- 1. Data Link Layer Data Definition.
-
- The Bark Request packet is a variable-sized packet containing a header, a
- filename, a date (which is used only for update requests - in a normal file
- request it's 0) and an optional password. When receiving a Bark Request
- packet, the ETX may be used to determine the end of the data portion. Note
- that the CRC is sent in the reverse byte order of a normal CRC XMODEM data
- block (see FTS-0001 section G.1).
-
- Note: some systems will send a password in the data block even if none is
- needed. Incoming passwords should be ignored unless the other system is
- trying to request a passworded file.
-
-
-
- Bark File Request Packet
- Offset
- dec hex
- .-----------------------------------------------.
- 0 0 | ACK - Start of Bark Request - 06H |
- +-----------------------------------------------+
- 1 1 | Filename - Packed DOS file format |
- +-----------------------------------------------+
- n n | SPACE - 20H |
- +-----------------------------------------------+
- n n | Date (0 if not Update Request) |
- +-----------------------------------------------+
- n n | SPACE - 20H (only if pswd follows) |
- +-----------------------------------------------+
- n n | Password (optional) |
- +-----------------------------------------------+
- n n | ETX - End of RESYNC packet - 03H |
- +-----------------------------------------------+
- n n | (*1) CRC low order byte |
- +-----------------------------------------------+
- n n | (*1) CRC high order byte |
- `-----------------------------------------------'
-
- *1 - CRC does not include the ACK or ETX and is
- in the reverse byte order from the CRC in a
- normal XMODEM data packet.
- 2. Data Description Notation of Bark Request Packet
-
- DataBlock (no password) = ACK
- Filename<12>
- Space
- Date<11>
- ETX
- CRC
-
- DataBlock (with password) = ACK
- Filename<12>
- Space
- Date<11>
- Space
- Password<6|8>
- ETX
- CRC
-
- ACK = 06H (* Header for file request block *)
- Space = 20H (* Space character *)
- ETX = 03H (* End of block *)
-
- Filename (* Name of file requested *)
- Date (* ASCII string; the number of seconds
- since midnight, January 1, 1970 *)
- Password (* The password needed to request this
- file, if any. Maximum length is 6 for
- BinkleyTerm and Opus, 8 for SEAdog
- and Dutchie. *)
-
- CRC = crc[2] (* CCITT Cyclic Redundancy Check. The
- same algorithm as used for XModem
- CRCs. The CRC is calculated on
- all data in the block between but
- not including the ACK and the ETX *)
- E. Session Layer Protocol:
-
- This section describes the modified FTS-0001 session layer protocol. This
- is the only area of FTS-0001 which is modified to implement Bark style file
- requests. File Requests are performed at the end of the normal FidoNet
- mail session, after any mail pickup is performed.
-
- The diagrams below desribe the session level protocol with Bark file
- requests implemented. The state tables have been broken into subroutines
- but the FTS-0001 portion is not functionally changed. FTS-0001 sender
- states S4 through S7 are now table "Send Mail SM0". FTS-0001 receiver
- states R3 through R6 are now table "Receive Mail RM0". They are not
- functionally changed in any way from FTS-0001, they are just broken out
- to allow them to be used as subroutines. Finally Sender states S0 through
- S3 are unchanged, as are Receiver states R0 through R2.
-
- The remaining FTS-0001 states are enhanced to implement the Bark file
- request protocol. In addition, the subroutine state tables "Send Bark SB0"
- and "Receive Bark RB0" have been added to handle the actual file requests.
-
- The following diagrams fully replace the Session Layer protocol state
- tables in FTS-0001. No other changes to FTS-0001 are required to implement
- the Bark File request feature.
- Sender (Top level)
-
- .-----+----------+-------------------------+-------------------------+-----.
- |State| State | Predicate(s) | Action(s) | Next|
- | # | Name | | | St |
- +-----+----------+-------------------------+-------------------------+-----+
- | S0 | SendInit | | dial modem | S1 |
- +-----+----------+-+-----------------------+-------------------------+-----+
- | S1 | WaitCxD |1| carrier detected | delay 1-5 seconds | S2 |
- | | (*1) | | | Set SLO if > 2400bps, | |
- | | | | | Reset SLO if <= 2400bps | |
- | | +-+-----------------------+-------------------------+-----+
- | | |2| busy, etc. | report no connection | exit|
- | | +-+-----------------------+-------------------------+-----+
- | | |3| voice | report no carrier | exit|
- | | +-+-----------------------+-------------------------+-----+
- | | |4| carrier not detected | report no connection | exit|
- | | | | within 60 seconds | | |
- +-----+----------+-+-----------------------+-------------------------+-----+
- | S2 | WhackCRs |1| over 30 seconds | report no response <cr> | exit|
- | | +-+-----------------------+-------------------------+-----+
- | | |2| ?? <cr>s received | delay 1 sec | S3 |
- | | +-+-----------------------+-------------------------+-----+
- | | |3| <cr>s not received | send <cr> <sp> <cr> <sp>| S2 |
- | | | | | delay ??? secs | |
- +-----+----------+-+-----------------------+-------------------------+-----+
- | S3 | WaitClear|1| no input for 0.5 secs | send TSYNCH = AEH | S4 |
- | | +-+-----------------------+-------------------------+-----+
- | | |2| over 60 seconds | hang up, report garbage | exit|
- | | | | and line not clear | | |
- +-----+----------+-+-----------------------+-------------------------+-----+
- | S4 | SendMail | | (Send Mail SM0) | S5 |
- +-----+----------+-+-----------------------+-------------------------+-----+
- | S5 | TryPickup|1| Rcv TSYNC | (Receive Mail RM0) | S5 |
- | | (*2) +-+-----------------------+-------------------------+-----+
- | | |2| Rcv SYN | (Receive Bark Req RB0) | S5 |
- | | +-+-----------------------+-------------------------+-----+
- | | |3| Rcv ENQ | (Do Bark Requests SB0) | S5 |
- | | +-+-----------------------+-------------------------+-----+
- | | |4| Rcv 'C' or NAK | Send EOT | S5 |
- | | +-+-----------------------+-------------------------+-----+
- | | |5| Rcv Other Char | Send SUB | S5 |
- | | +-+-----------------------+-------------------------+-----+
- | | |6| No Data for 45 secs | Hang Up | exit|
- `-----+----------+-+-----------------------+-------------------------+-----'
-
- *1 - This state is shown for the extended SEAlink protocol. Omit the
- set/reset SLO actions if adding Bark to a strict FTS-0001 protocol
- implementation, or if not implementing overdrive in SEAdog.
-
- *2 - To refuse to pickup mail (S5.1) may send a CAN and stay in (S5).
-
- Note: Although the above shows the sender emitting only one TSYNCH, it is
- recommended that a timeout of 5-20 seconds should initiate another TSYNCH.
- The receiver should tolerate multiple TSYNCHs.
- Receiver (Top Level)
-
- The receiving FSM is given an external timer, the expiration of which
- will cause termination with a result of 'no calls' (R0.2).
- .-----+----------+-------------------------+-------------------------+-----.
- |State| State | Predicate(s) | Action(s) | Next|
- | # | Name | | | St |
- +-----+----------+-+-----------------------+-------------------------+-----+
- | R0 | WaitCxD |1| carrier detected | | R1 |
- | | +-+-----------------------+-------------------------+-----+
- | | |2| external timer expires| report no calls | exit|
- +-----+----------+-+-----------------------+-------------------------+-----+
- | R1 | WaitBaud |1| baud rate detected | send signon with <cr>s | R2 |
- | | +-+-----------------------+-------------------------+-----+
- | | |2| no detect in ?? secs | hang up, report no baud | exit|
- +-----+----------+-+-----------------------+-------------------------+-----+
- | R2 | WaitTsync|1| TSYNCH received | ignore input not TSYNCH | R3 |
- | | +-+-----------------------+-------------------------+-----+
- | | |2| 60 seconds timeout | hang up, report not Fido| exit|
- +-----+----------+-+-----------------------+-------------------------+-----+
- | R3 | RecMail | | (Receive Mail RM0) | R4 |
- +-----+----------+-+-----------------------+-------------------------+-----+
- | R4 | AllowPkup|1| Have pickup for sender| Send Tsync, | R5 |
- | | | | | Set T1=1 sec | |
- | | +-+-----------------------+-------------------------+-----+
- | | |2| No pickup for sender | | R6 |
- +-----+----------+-+-----------------------+-------------------------+-----+
- | R5 | WtPickup |1| Rcv NAK or 'C' | (Send Mail SM0) | R6 |
- | | +-+-----------------------+-------------------------+-----+
- | | |2| Rcv SUB | Send Tsync, | R5 |
- | | | | | Set T1=1 sec | |
- | | +-+-----------------------+-------------------------+-----+
- | | |3| Rcv CAN | Report Mail Refused | R6 |
- | | +-+-----------------------+-------------------------+-----+
- | | |4| T1 expired | Send Tsync, | R5 |
- | | | | | Set T1=1 sec | |
- | | +-+-----------------------+-------------------------+-----+
- | | |5| 45 secs in R5 | Hang Up, report error | exit|
- +-----+----------+-+-----------------------+-------------------------+-----+
- | R6 | AskBark |1| Wish to make requests | Send SYN | R7 |
- | | (*1) +-+-----------------------+-------------------------+-----+
- | | |2| No requests to make | | R8 |
- +-----+----------+-+-----------------------+-------------------------+-----+
- | R7 | DoRequest|1| Rcv CAN | Report Requests Refused | R8 |
- | | +-+-----------------------+-------------------------+-----+
- | | |2| Rcv ENQ | (Send Bark SB0) | R8 |
- | | +-+-----------------------+-------------------------+-----+
- | | |3| Rcv SUB | Send SYN | R7 |
- | | +-+-----------------------+-------------------------+-----+
- | | |4| Rcv NAK or 'C' | Send EOT | R6 |
- | | +-+-----------------------+-------------------------+-----+
- | | |5| Rcv Other | eat character | R7 |
- | | +-+-----------------------+-------------------------+-----+
- | | |6| 5 sec, no input | Send SYN | R7 |
- | | +-+-----------------------+-------------------------+-----+
- | | |7| 45 secs in R7 | | R8 |
- +-----+----------+-+-----------------------+-------------------------+-----+
- | R8 | WtPickup |1| Allow File Request | (Receive Bark RB0), | exit|
- | | | | | Hang Up | |
- | | +-+-----------------------+-------------------------+-----+
- | | |2| Disallow Requests | Hang Up | exit|
- `-----+----------+-+-----------------------+-------------------------+-----'
- *1 - Some implementations always do (R6.1) even if they have no requests.
- Sender - Send Mail
-
- .-----+----------+-------------------------+-------------------------+-----.
- |State| State | Predicate(s) | Action(s) | Next|
- | # | Name | | | St |
- +-----+----------+-------------------------+-------------------------+-----+
- | SM0 | SendMail | | (XMODEM send packet XS0)| SM1 |
- +-----+----------+-+-----------------------+-------------------------+-----+
- | SM1 | CheckMail|1| XMODEM successful | (Fido registers success)| SM2 |
- | | +-+-----------------------+-------------------------+-----+
- | | |2| XMODEM fail or timeout| hang up, report mail bad| exit|
- +-----+----------+-+-----------------------+-------------------------+-----+
- | SM2 | SendFiles| | (BATCH send files BS0) | SM3 |
- +-----+----------+-+-----------------------+-------------------------+-----+
- | SM3 | CheckFile|1| BATCH send successful | report success | exit|
- | | +-+-----------------------+-------------------------+-----+
- | | |2| BATCH send failed | hang up, rept files fail| exit|
- `-----+----------+-+-----------------------+-------------------------+-----'
-
-
-
- Sender - Send Bark
-
- .-----+----------+-------------------------+-------------------------+-----.
- |State| State | Predicate(s) | Action(s) | Next|
- | # | Name | | | St |
- +-----+----------+-+-----------------------+-------------------------+-----+
- | SB0 | SendBark |1| File to request | Build Bark Request Pkt, | SB1 |
- | | | | | Set tries = 0 | |
- | | +-+-----------------------+-------------------------+-----+
- | | |2| No more files to req | Send ETB | exit|
- +-----+----------+-+-----------------------+-------------------------+-----+
- | SB1 | AskFile | | Send Bark Packet | SB2 |
- +-----+----------+-+-----------------------+-------------------------+-----+
- | SB2 | RcvFile |1| Rcv ACK | (Batch Receive BR0) | SB3 |
- | | +-+-----------------------+-------------------------+-----+
- | | |2| Tries > 5 | Send ETB, report failed | exit|
- | | +-+-----------------------+-------------------------+-----+
- | | |3| Rcv Other | Purge input, Incr tries | SB1 |
- | | +-+-----------------------+-------------------------+-----+
- | | |4| 10 sec w/o ACK | Incr tries | SB1 |
- +-----+----------+-+-----------------------+-------------------------+-----+
- | SB3 | NxtFile |1| Rcv ENQ | | SB0 |
- | | +-+-----------------------+-------------------------+-----+
- | | |2| Rcv Other | Purge Input | SB3 |
- | | +-+-----------------------+-------------------------+-----+
- | | |3| 5 sec, no input | Send SUB | SB3 |
- | | +-+-----------------------+-------------------------+-----+
- | | |4| 45 sec in SB3 | Hang up, report error | exit|
- `-----+----------+-+-----------------------+-------------------------+-----'
- Sender & Receiver - Receive Mail
-
- .-----+----------+-------------------------+-------------------------+-----.
- |State| State | Predicate(s) | Action(s) | Next|
- | # | Name | | | St |
- +-----+----------+-------------------------+-------------------------+-----+
- | RM0 | RecMail | | (XMODEM rec packet XR0) | RM1 |
- +-----+----------+-+-----------------------+-------------------------+-----+
- | RM1 | XRecEnd |1| XMODEM successful | delay 1 second | RM2 |
- | | | | | flush input | |
- | | +-+-----------------------+-------------------------+-----+
- | | |2| XMODEM failed | hang up, rept mail fail | exit|
- +-----+----------+-+-----------------------+-------------------------+-----+
- | RM2 | RecFiles | | (BATCH rec files BR0) | RM3 |
- +-----+----------+-+-----------------------+-------------------------+-----+
- | RM3 | ChkFiles |1| BATCH recv successful | delay 2 secs, rprt good | exit|
- | | +-+-----------------------+-------------------------+-----+
- | | |2| BATCH recv failed | hang up, report bad file| exit|
- `-----+----------+-+-----------------------+-------------------------+-----'
-
-
- Sender & Receiver - Receive Bark
-
- .-----+----------+-------------------------+-------------------------+-----.
- |State| State | Predicate(s) | Action(s) | Next|
- | # | Name | | | St |
- +-----+----------+-+-----------------------+-------------------------+-----+
- | RB0 | HonorReq |1| Ok to honor request | Purge Input, Send ENQ, | RB1 |
- | | | | | Set T1 = 2 seconds | |
- | | +-+-----------------------+-------------------------+-----+
- | | |2| Don't wish to honor | Send CAN | exit|
- +-----+----------+-+-----------------------+-------------------------+-----+
- | RB1 | WaitBark |1| Got ACK | Rcv Bark Packet (*1) | RB2 |
- | | +-+-----------------------+-------------------------+-----+
- | | |2| Got ETB | Report done | exit|
- | | +-+-----------------------+-------------------------+-----+
- | | |3| Got ENQ | Send ETB | RB0 |
- | | +-+-----------------------+-------------------------+-----+
- | | |4| T1 expired | Purge Input, Send ENQ, | RB1 |
- | | | | | Set T1 = 2 seconds | |
- | | +-+-----------------------+-------------------------+-----+
- | | |5| 20 seconds in RB1 | Hang Up, Report error | exit|
- +-----+----------+-+-----------------------+-------------------------+-----+
- | RB2 | AckBark |1| Bark Pkt Rcvd Good | Send ACK | RB3 |
- | | +-+-----------------------+-------------------------+-----+
- | | |2| Bark Pkt Rcv Error | Send NAK | RB1 |
- +-----+----------+-+-----------------------+-------------------------+-----+
- | RB3 | WaitStrt |1| Got 'C' or NAK | | RB4 |
- | | +-+-----------------------+-------------------------+-----+
- | | |2| No data for 3 seconds | Send ACK | RB3 |
- | | +-+-----------------------+-------------------------+-----+
- | | |3| 15 seconds in RB3 | Hang Up, Report Error | exit|
- +-----+----------+-+-----------------------+-------------------------+-----+
- | RB4 | SendFile |1| Can snd requested file| (Batch Send File BS0) | RB0 |
- | | (*2) +-+-----------------------+-------------------------+-----+
- | | |2| Can't send file | Send EOT | RB0 |
- `-----+----------+-+-----------------------+-------------------------+-----'
- *1 - If SUB (16H) received before ETX go to RB0 to resync bark receive
-
- *2 - While deciding if file exists, and if the password allows it to be
- sent etc., a NUL may be sent to buy 20 seconds more on the timeout
- on the other end if it is using the SEAlink extended FTS-0001
- specification protocol. Sending a NUL is harmless for a strict
- FTS-0001 session, but will not buy more time.