Ifcico stands for "Internet - Fidonet Copy In / Copy Out", this is a FidoNet(r) compatible transport
agent. Currently it supports FTS-0001, YooHoo/2U2 and EMSI handshake protocols, Xmodem (untested),
Telink (untested), Modem7 (untested), SEAlink w/overdrive and crash recovery, Bark file and update
requests, WaZOO protocols: DietIFNA, plain Zmodem (aka ZedZip, EMSI flag "ZMO"), ZedZap and Hydra, WaZOO
file and update requests (nodelist flag should be XA). Password protected requests are not implemented.
There are plans to implement Janus protocol in the future.
There is also a special protocol optimized to use over TCP/IP connection, contributed by Stanislav
Voronyi <stas@uanet.kharkov.ua>, it is identified by EMSI proto code TCP (not registered).
Outbound directory structure is BinkleyTerm compatible, with domains and point subdirectories (full 5d).
There are separate "listed" and "protected" inbound directories for the incoming sessions with the nodes
present in the nodelist(s) and with nodes that have a password assigned respectively. Files received
during an outbound session are always put into the "protected" directory. (Only "protected" directory is
looked up by ifunpack by default).
"Magic" file request processors are executable files placed in the "magic" directory. If request is made
for a file with matching name, the executable from the "magic" directory is run, and its stdout sent to
the requester. Full requester's address, in the form "John Smith of 1:234/56.7" is passed to the
executable in the command line. See "misc/FILES" for an example of a magic request processor. Non-
executable files in the "magic" directory are "references". If a request is made for a file with
matching name, the file is read line by line, and request re-made for the name found in each line. Up to
5 levels of recursion are allowed.
To run ifcico in master mode, you must make dialout devices read/writable for ifcico, -B and do the same
for the directory where your uucp locks are created (usually /var/lock/).
To make ifcico work in answer mode, you need an FTN-able getty. Linux "standard" getty_ps, and Gert
Doering's mgetty (from the mgetty+sendfax package) and later versions have fidonet support built-in.
Getty must distinguish incoming FidoNet type calls, and start ifcico with one parameter:
FTS-0001 call: "ifcico tsync"
FTS-0006 call: "ifcico yoohoo"
EMSI call: "ifcico **EMSI_....."
(in the latter case the received EMSI packet should be passed without trailing CR).
If you are using getty_ps, don't forget to create the file /etc/default/uugetty with the contents similar
to the following (case sensitive):
FIDO=/usr/local/lib/fnet/ifcico
EMSI=yes
When called without parameters, ifcico runs in slave mode and determines the type of inbound session
itself. This mode may be used when ifcico runs as an internet or ISDN daemon.
To make ifcico scan for pending outbound mail and do appropriate calls, start it with "-r1" flag. To
force polling of particular nodes, specify these nodes in the command line (addresses should be in domain
notation, e.g. "ifcico f23.n5020 f155.n5020"). The latter implies master mode (-r1). Note that "hold"
packets and files, as well as file requests, do not cause the node to be polled.
Inbound directory is created automatically if it does not exist, along with the "tmp" subdir. The latter
is used while receiving files. After being successfully received, the files are moved up to the "inbound"
directory. "protinbound" and "listinbound" directories accept files received during password protected
sessions and session with the nodes present in the nodelist(s) respectively.
Ifcico can use text format nodelists in original (MS/DOS) form with <CR><LF>'s as well as in UNIX form,
with <LF>'s only. When you get a fresh nodelist, or change the "nodelist" statements in the config file,
you must rebuild index with ifindex program.
For outgoing calls, status files are created for nodes, with the extention ".sts". These are ascii files
containg three decimal numbers in a single line:
timeretriescodetime is the last call attempt time (attempts failing with "retry time not reached" do not count). It is
unsigned long representing the number of seconds since the epoch.
retries is the number of consequitve call attempts made that returned "call failed" or "could not
establish session". This field is zeroed when call succeeds.
code is the return code of the last attempt.
nlpatch program compiles a new version of the nodelist from the old nodelist and nodediff.