FSC-0028 FwdSpec - A Collection of Notes on Moving Files in FidoNet Preamble Copyright 1988 Greylock Software, Inc. POBox 730 Gt Barrington MA 01230 FidoNet>1:321/202.0 Synopsis This started as a reverse-engineered technical description of the core operations of Ron Bemis' Flea program, and an attempt to formulate a new specification which is a more symmetric superset of that functionality. Specifications for Mr. Bemis software is available with that software, which is not freely distributed. This document ONLY addresses the format of files transferred between systems. It does not address configuration information, which is really an implementation specific issue. This is currently only a base for discussion, which should be carried on in the SOFTWARE (SDS) and FTSC conferences. Distribution This document may be freely distributed, so long as it is complete. Comments should be directed to: Barry Geller: 266/12 Tom Hendricks: 261/662 Harry Lee: 321/202 Rick Moore: 115/333 1 General 1.1 Existing Tools 1.1.1 FileFwd FileFwd is a program by Joe Keenan whose primary purpose is to move consistently named files on a routed, regular basis. It is extremely useful for routing echomail packets through intermediate nodes without unpacking and re-packing at each of the stations. Copr 1988 Greylock Software, Inc 1 Dec 2, 1988 FwdSpec - A Collection of Notes on Moving Files in FidoNet 1.1.2 Flea Flea is a program created by Ron Bemis which is used to broadcast files in a manner similar to EchoMail. It is the primary tool used by the FidoNet Software Distribution System. Specifications for the Flea program are ostensibly available from the author. 1.1.3 GlueFwd GlueFwd is a distributed document control system from Greylock Software that was considered and rejected for use by the FidoNet Software Distribution System. Unlike Flea and Tick, GlueFwd uses messages to contain the associated routing information. 1.1.4 Tick Tick is a program by Barry Geller, which performs approximately the same functions as Flea, but uses a unique associated information file format. 1.2 Basics 1.2.1 Associated Routing Information There are a number of problems associated with file routing, either point to point, or broadcast. The basic problem is how to handle the associated routing information. The approaches involve a spectrum ranging from information contained ONLY on the systems handling the files to carrying the information WITH the files being handled. In addition, there is the choice of how this information is to be conveyed. The choices range from associated files, to messages. 1.2.2 Name Collisions 1.2.3 Larva - starting the process The "Larva" process is usually invoked by the user at the command line. This is how a file is put in motion. It creates the appropriate outbound .Fle files and the file attach information required by the given mailer environment. Copr 1988 Greylock Software, Inc 2 Dec 2, 1988 FwdSpec - A Collection of Notes on Moving Files in FidoNet 1.2.4 Flea - moving stuff along The "Flea" process is the one that moves the files along. It does the following: Check the inbound for .Pre file, and process any that are releasable as you would a normal .Fle file Check the inbound for .Fle files, and process each as follows: Parse the .Fle file, making sure its associate file exists, it comes from a valid source, and that it is not a pre-release. If any of those conditions are violated, the file is renamed either to .Bad or .Pre. If all is well, move the file to the appropriate path associated with the area, and, if possible, update the FILES.BBS file. Using a Larva-like process, send the file along to any nodes in your echo list that have not seen the file. A Flea process is generally run whenever inbound mail is received. 1.3 Nomenclature 1.3.1 [Required] 1.3.2 {Optional} 1.3.3 Address: {Domain>}{Zone:}Net/Node{.Point} In the context of Flea 2.x, only Net/Node style addressing is supported. 1.3.4 Dates 2 New Forwarding Format (TICK) 2.1 General Goals 2.1.1 Removing order dependency The current structure of .Fle files is very order dependent. In some cases, .Fle file lines have verbs, in others, they do not. Presumably, Flea proper will have problems processing lines beyond the description that are not in the proper order. Copr 1988 Greylock Software, Inc 3 Dec 2, 1988 FwdSpec - A Collection of Notes on Moving Files in FidoNet This weakness should be eliminated, essentially by insisting on a verb per line, which makes possible free-form parsing, eliminating order dependency. Within some groups of entries with the same verb, order dependency may be required. 2.1.2 Limiting the type of information contained in a given datum Flea 2.x very often carries different types of information on a given line. While on the surface, this seems like an economical way to do things, it can lead to complications later on. Therefore, it is a general design goal to keep the type and use of a given datum associated with a given verb very clean. 2.1.3 Removing Case Sensitivity Flea is currently very case sensitive. Software should be soft. An argument has been made that case sensitivity is a protection against bad files being inserted into the system. If someone wants to generate a trojan horse, they will need passwords (the primary protection), and in all likelihood would use some sort of Larval tool to generate it anyway. Case sensitivity makes it slightly more difficult for a developer to "enter the fray". 2.1.4 Removing Inconsistent Colon Usage Flea currently is haphazard in its usage of colons after verbs. Colons should be made optional (or eliminated) on all verbs. 2.1.5 Optional Multiple DESC lines Flea currently supports a single description line, which is additionally position sensitive. By creating a DESC verb, the position sensitivity can be eliminated, and multiple DESC lines can optionally be supported. At the current time, .Tic files use the DESC verb, but multiple DESC lines are not permitted. Minimal compliance will be to handle one; multiple lines will be addressed later. 2.1.6 App (Application) line support In general, all mechanisms in FidoNet should allow for growth/variation by other developers in a non-harmful manner. In the case of Flea routing files, an APP verb with non-specific data should be provided for. For example, let's assume that UPCL supports some sort of a "return receipt" functionality - when a Copr 1988 Greylock Software, Inc 4 Dec 2, 1988 FwdSpec - A Collection of Notes on Moving Files in FidoNet file hits you, so long as it's posted to your area, and with the sysop's consent (in the form of a configuration option), a message is sent to the Origin node. This might be done as follows: APP GREYLOCK Return-Receipt The "Greylock" sub-verb would keep APP conflicts from occurring. Processors other than UPCL would pass the line through to any rebroadcast .Tic files intact. (In fact, so would UPCL.) App lines, taken as a group, are order dependent. A Tick processor should output App lines created during forwarding in the same order they read them, and if a Tick processor creates new App lines, they should be added to the end of the existing App line list. Once the majority of processors support a given APP functionality, it might be moved to the spec proper. Indeed, any lines with "unrecognized verbs" should be passed through intact, and in the order encountered. 2.1.7 Use of PATH construct rather than sby kludge Seenby information is more easily digested by humans (and programs) if it is sorted. Unfortunately, such sorting removes the ability to use it for both seenby, and path information as it is in Flea 2.2. In addition, the mechanism used by Flea 2.2 precludes tiny seenby's, or Zone gating. Therefore, a PATH construct, much like an EchoMail PATH line should be used, instead of the current mechanism. Once again, order dependency should be discouraged. Within a group of path lines, obviously, order is important. 2.1.8 Multiple Sby's per Sby line The current seen-by construct, with one seenby per line, with the word seen-by required on each line is hideously inefficient. This should be changed to mimic echomail's seen-by handling, where multiple seenby's are contained on each line, up to 78 or so characters worth. A possible reason to keep the seenby down to a single entry per line is if information on how and when that node got the file is to be included. While this might be worth considering, it will add considerable weight to the .Fle file. Copr 1988 Greylock Software, Inc 5 Dec 2, 1988 FwdSpec - A Collection of Notes on Moving Files in FidoNet At the current time, Tick files are assumed to have one seen-by per line. 2.1.9 Full (Optional) Domain, Zone, and Point support In order to allow for the future growth of the network, and interactions with other networks, addresses should be able to contain a fully qualified FidoNet address: Domain>Zone:Net/Node.Point. Further, given that many authors' primary machines are points, the result is as shown in the sample above: completely unknown addresses appearing in the .Fle files. Of course, these should not be required, but used as necessary. At the current time, Domains are completely unsupported, and should not be used. 2.1.10 Different extensions to avoid problems with Opus Style Outbound The extension .Fle was chosen because it leads to some expedient side effects in the form of file truncation/elimination by Opus or Binkley when the files reside in the outbound directory. On the other hand, both Opus and Binkley explicitly specify their outbound areas should be used ONLY for that. A number of Binkley/Opus developers have expressed concern with this problem. For this, and other reasons, .Fle files should be given a new extension of some sort, one that is not closely related to the commonly used routing/message file extensions. In addition, rather than the three divergent extensions now used by Flea (.Fle, .Bad, and .Pre), any and all extensions used by file routers based on this technology should use extensions that are more closely grouped. As an ancillary note, the FTSC should consider a "File Specification Pattern Registry". This would not be limited to network tools, and it would not be an indication of ownership, it would simply be a reference. 2.1.11 RFC-822 Format It might make some sense to consider using an RFC-822 compatible format for these files. In a future version of this document, I'll detail this possibility. It would also be nice from the point of view of implementing a similar system on UseNet/Internet flavored systems. Copr 1988 Greylock Software, Inc 6 Dec 2, 1988 FwdSpec - A Collection of Notes on Moving Files in FidoNet 2.1.12 Valid pairing of associated info file and file proper We need a mechanism to insure that the primary file and the associated information file are a valid pairing. Consider the following scenario ... System allows overwrites. A file and associated .Tic arrive. They are, for whatever reason, not processed. A file by the same name comes in. The pair is no longer valid, but given current technology, it would be passed along. 2.2 Considerations 2.2.1 Up and downness 2.2.1.1 Single Uplink 2.2.2 Table driven duplicate elimination 2.2.3 Mapping between distribution and on-line organization There is a problem in the current implementation in that the local organization of a system tends to defeat the duplicate catching aspects of the system. I.E., the SDS currently sends out ALL FidoNet files in one "channel". Many systems move files of this category or that to unique directories. 2.2.4 Many features are intended for local optional implementation Many of the features in this specification obviously affect how individual sysops run their systems. As such, these features should be optionally supported by each sysop, although the information should be passed through the associated information file regardless of whether or not they support the feature. 2.3 Schematic of .Tic file Area{:} [AreaName] {Release{:} [Time]} {Replaces{:} [FileName]} File{:} [FileName] DESC{:} [Description] {DESC{:} [Description]} {Size{:} [Bytes]} {Date{:} [FileDate]} {CRC{:} [Calculated CRC-32 (in hex?)]} Copr 1988 Greylock Software, Inc 7 Dec 2, 1988 FwdSpec - A Collection of Notes on Moving Files in FidoNet Origin{:} [Address] From{:} [Address] [Pwd] {Created{:} [Program Banner]} Seenby{:} [Address] {Address} ... {Seenby{:} [Address] {Address} ...} {APP{:} [Application Specific Information]} Path{:} [Address] {Address} ... {Path{:} [Address] {Address} ...} Note this file is NOT order dependent. Some of the newer features are more for discussion than anything else. 2.4 Nomenclature and Rules 2.4.1 Address Format: Zone:Net/Node{.Point} 2.4.2 Don't Barf on appended or unknown stuff Lines that are unrecognizable (i.e., non-existent or non-supported verbs) should be passed through untouched. Lines that have additional data beyond the required data (separated by whitespace) should not cause the system to fail, although it is obviously difficult to pass this information through. 2.4.3 One or zero items of a given type unless otherwise specified 2.4.4 Simple ASCII Alphabet 2.4.5 Unix Date Time Formats All times are expressed as a long decimal in Unix format - the number of seconds since 1970. 2.4.6 [Required Data] 2.4.7 {Optional Data} 2.5 Detail 2.5.1 App [Ref] {Info} This is a "pass through" line to allow developers some room for development without breaking other developer's work. Copr 1988 Greylock Software, Inc 8 Dec 2, 1988 FwdSpec - A Collection of Notes on Moving Files in FidoNet An APP line should have the following form: APP [AppRef] {App Information} or APPLICATION [AppRef] {App Information} Application lines should have their order preserved, and applications adding lines should do so at the end of the existing application list. 2.5.2 Area [Name] Area names should probably be limited to 8 characters, with alphabet restrictions, to simplify their implementation. This is a mandatory line, and only one should exist in the file. 2.5.3 Author [Name] This is an item for discussion. 2.5.4 CRC [Decimal CRC Value] As .Fle files stand, it is possible to "slip something in" to the pipe, particularly if .Fle files are processed only once in a while as opposed to after each inbound call. A number of the proposed (and optional) features here provide safeguards against this. Specifically, computing the file CRC, and preserving the original file date and size in the .Tic file. This has some value as a verification tool, without the legal encumbrances of PKSCrypt, etc. This probably should be a CRC-32 value. This would also closely follow some of the ideas that are being considered for echomail processing. This is currently a point for discussion. It probably should be a mandatory field. 2.5.5 Created [Program Banner] This should contain some program identification information of the program that generated the attach information. Copr 1988 Greylock Software, Inc 9 Dec 2, 1988 FwdSpec - A Collection of Notes on Moving Files in FidoNet There might be some standard format for the first part of this line, allowing for variant information after this. This is an optional line. 2.5.6 Date [Date/Time of creation] This is a check for valid file pairing between the associated information file and the primary file. It is the file date stamp of the primary file in Unix format. 2.5.7 Desc [File Description] This is a description of the file. There is as yet unspecified length restriction on this line. At the current time, exactly one of these lines should appear in the Tick file. In the future, more than one line may be supported. 2.5.8 Dest [Address] This is related to Route (qv) 2.5.9 Encrypted [PKS Key] Read the section on "GARBLE", and change it as follows: The file is initially encrypted using a PKS style encryption. This would be the ONLY time the file is encrypted. The FTSC or someone would have to collect a list of valid public keys of authors (and probably eventually everyone). The file would then be of "known-quality", or at least from a known source. The key would be included in the .Tic file for ease of operation. The ramifications of this are considerable. First off, PKSCrypt is something the spook types in the world are bothered by. Secondly, the source is not available, and the program does not work on some machines (i.e., my 386.) Large keys would probably have to be used so a large number of possible keys will exist, which means considerable encryption and decryption processing time. Finally, there is the question of a "Key registry", and how you verify them. I am not sure if this and Garbled are and/or or either/or. Copr 1988 Greylock Software, Inc 10 Dec 2, 1988 FwdSpec - A Collection of Notes on Moving Files in FidoNet 2.5.10 File [FileName] ONLY a filename (no path information) is contained on the FILE line. No wildcards. Exactly one of these lines must exist in a Tick file. 2.5.11 From [Address] This is the address of the system sending the file on the current leg. 2.5.12 Garbled This is really just a thought for consideration than anything else. If this is present, the file referenced by the .Tic file is assumed to be archived (we'd have to address the issue of "deviant" archivers") by an agreed upon password between the sender and the sendee. The ramifications of this are considerable. It would mean that individual archives would need to be created for any node so protected, which would need to be deleted after sending. This implies a considerable expenditure of time and resources to create and store these archives. 2.5.13 Log [Comment] This is another one for consideration. Any such lines would be displayed on the console and/or the system log. 2.5.14 Magic [FileName] This is food for thought. In order to resolve and standardize version numbering in file names, and magic file names, this might be used to distribute a "magic file name" with a given file. More than one of these lines might exist. 2.5.15 Origin [Address] Where the file originally entered the system. Copr 1988 Greylock Software, Inc 11 Dec 2, 1988 FwdSpec - A Collection of Notes on Moving Files in FidoNet 2.5.16 Path [Address] {Arrival} Path lines are, among themselves, order dependent. However, they need not be contiguous. The current path specification allows for only one address per path statement. It might make sense to leave it this way, and add an "Arrival time", which would be the time the file was processed. I.E., the file would start out with the path for this node and the next node with the time of creation. When it gets to the next node, he changes his time to the time of processing, and puts out a similar line for the node(s) he sends to. 2.5.17 Pw [Password] This is the password between the sender and the sendee. This password is not case sensitive. Exactly one of these lines must exist in a Tick file. It would be nice to have some method of password securing that did not require the password to be exchanged in clear text. 2.5.18 Release [DateTime] This is an optional line used to contain a Unix Date Time (seconds since 1970) of the release of the file. The handling of this is really murky as far as I can tell. A brief digression into "political structures." Let's consider the case of the SDS. In SDS, it has generally been assumed that ONLY nodes that are a part of the SDS get their files using Flea/Tick technology. However, whether it is aware of it or not, this is not the case. Here's what I think was intended: a file comes in with a Pre-release time set. That is the time at which the file is moved to the publicly available area. I am not sure whether it is passed along the chain until that date, or if it is simply not to be made "publicly available" until that date. 2.5.19 Replaces [FileName] Only a filespec, no path information, is contained on this flavor line. Copr 1988 Greylock Software, Inc 12 Dec 2, 1988 FwdSpec - A Collection of Notes on Moving Files in FidoNet A REPLACES line is used to optionally (at each given node) dispose of older versions of the file being sent out. For instance, Binkley releases are named: BEXE_XXX.Arc Assuming the next version of Binkley was 2.10, and assuming REPLACES was enabled for the given area, the file named on the REPLACES line would either be erased or moved if found. I.E.: FILE BEXE_210.Zoo REPLACES BEXE_*.Arc If these lines are encountered, and replacement is allowed, and BEXE_200.Arc was found, it would, in some way, be removed from the access directory. Wildcards should be allowed, but should also be used with care. Multiple REPLACES lines should be allowed. 2.5.20 Route [Address] This is just thinking out loud. These would have to be order dependent. They would be set up at the point of creation, and there would have to be agreements all along the way. A political nightmare, but very useful in a corporate environment. Collisions are a very real problem here. 2.5.21 RtRcpt {Address} This is an item for discussion more than anything else. It would be nice to have a means to find out how far your files have moved. On the other hand, there are significant Policy type considerations for such a functionality. If the optional address is omitted, the ORIGIN is used. 2.5.22 Seenby [Address] {Arrival} The current seenby specification allows for only one seenby per line. Copr 1988 Greylock Software, Inc 13 Dec 2, 1988 FwdSpec - A Collection of Notes on Moving Files in FidoNet Seenby's are NOT order dependent. Seenby information is more useful in "alphabetical" than encountered order, although it is not a requirement. 2.5.23 Size [File Size in Bytes] 2.5.24 Source [Address] Where the file actually came from. This is a point for discussion. Let's consider the SDS again. In theory, SDS is a controlled system. Files are only supposed to enter it from a very limited subset of FidoNet. Currently, the Origin is the location the file was "launched" from, a very different thing than the author's address. The Source address, if present, is the address of a primary system used by the actual author. For instance, consider Binkley. Binkley is supposed to enter the system at the region 16 SDS node, although it is written by nodes that do not participate in SDS. 2.5.25 Topo {Address} This feature, if enabled, can be used to generate a topology report for the area specified to the given node. If no node is specified, the report should be sent to the Origin node. 2.5.26 Unidentified Verb Handling Lines with unrecognized verbs should be passed through. Order is a critical issue here. Unknown lines should be output in the same order they were input. 2.6 Feature Table Feature Status Count Area [Name] 1 File [FileName] 1 Path [Address] >=1 Created [Text] 0-1 From [Address] Origin [Address] SeenBy [Address] Path [Address] Copr 1988 Greylock Software, Inc 14 Dec 2, 1988 FwdSpec - A Collection of Notes on Moving Files in FidoNet Unidentified Verbs 2.7 TK123456.Tic (Updated and amended slightly from Barry's Orig) Area TICKTEST File TEST.TXT Desc This is the file description Line! Origin 1:266/1 From 1:266/13 Created by TICK v1.00 - Copyright (C) 1988 by I. Barry Geller Release 59000000 Path 1:266/21 Path 1:266/13 Path 1:150/1 Seenby 1:266/21 Seenby 1:266/13 Seenby 1:150/1 Pw TESTPW 2.8 Notes 2.8.1 The primary file should be sent before the associated file The actual file should be sent before the associated information file. Consider this was not done in the following scenario: Associated file sent Primary file partially sent - session fails System processes associated files, and fails to find last primary During next session, primary is sent, with no associated Copr 1988 Greylock Software, Inc 15 Dec 2, 1988