home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Simtel MSDOS - Coast to Coast
/
simteldosarchivecoasttocoast2.iso
/
fido
/
ftsc_all.z43
/
FTS-0008.EXT
< prev
next >
Wrap
Text File
|
1990-06-17
|
27KB
|
465 lines
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.