ArpaSMTP.tioga
DCraft, December 21, 1983 9:54 pm
Taft, February 4, 1984 3:32:07 pm PST
John Larson, October 9, 1987 2:13:58 pm PDT
The Xerox Arpanet Mail Gateway Server
The DF Files
[Cyan]<NCP>Top>MailGateway.df is the umbrella DF file for the entire server. It refers to ArpaSMTP.df, which includes the implementation for the ARPA SMTP protocol as well as code for managing mail queues on the local disk; ArpaMT.df, the mail translator; and ArpaIP.df and ArpaTCP.df, the implementations of the underlying ARPA transport protocols.
Starting the Server
To start the server, bring over MailGateway.df and then issue the command "MailGateway". The "MailGateway" command can be re-issued to get a new SMTP commander if the initial one hangs up for some reason. Some of the code is not multiply runnable, so loading a new version requires first doing a rollback.
Server Control Commands
Help
Gives some help information on the specified command, including usage syntax. If given no arguments will give information on all commands.
Login/Logout
Accept a new user for the SMTP Commander. Several of the commands require being logged in as either ArpaGateway.ms or as a "friend" of the MS registry. In particular, the GVRcvrInit proc must pass auth info to Grapevine to establish this servers location as the current machine. Logout simply cancels the current user's authentication. The server starts out using the credentials of the logged-in Cedar user; but the SMTP Login command affects only the mail server and not the Cedar system as a whole.
InitServer
Initialize the server. Actually executes the commands ReadInitItemFiles, GVRcvrInit, SMTPRcvrInit, and StartQueueDemons. This should be called once when the server comes up and after the user has logged in. If any of these commands fails, execution of this command will terminate. The user should rectify the problem and continue with the remaining commands by hand.
User
Print the name and access of the logged in user.
LogPriority
Examine/set the minimum priority of log messages to be printed.
Reception Commands
GVRcvrInit
Start listeners to accept input from Grapevine and establish this machine as the Arpa Mail Gateway.
SMTPRcvrInit
Start listeners to accept input from the Arpanet. Gandalf will have been notified to talk to this machine during the IP initialization.
GVRcvrFinal
Destroy the listeners for GV input.
SMTPRcvrFinal
Destroy the listeners for SMTP input.
Item Commands
PrintItem
Print the information which is in memory about the given item. Normally, this information is the same as that in the corresponding item file. This command may be useful if it is not. It will print the descriptor fields in a readable format.
PrintGVBody
The message body of all items can be examined by using Tioga to view the corresponding file. In the case of Grapevine messages, the body consists of a number of items (e.g. text, timestamp, Tioga formatting info) which appear cryptic when viewing the file directly. This command will interpret the items about which it knows, and display the rest in a raw format.
ReadInitItemFiles
Scan the disc looking for item files left over from the last server run. Read them in, create descriptors for them, and queue for processing.
ReadItemFile
Read the given item file, create a descriptor, and queue for processing. This is presumably called after a corrupt item file is edited to read in the new value. All old references in the queue system to this file are deleted before reading in the new file.
ProcessItem
Manually process the reverse path and recipients for the given item. The item must be on the ForProcessingQueue. It displays the old value and asks for the processed one. In the case of an unprocessed Grapevine item, the return/reverse path will be nil because it is actually an "item" in the message body. PrintGVBody should be used first to determine the old return path.
Queue System Commands
PrintQueue/Elem
Print information about the specified queue (ForProcessingQueue, ToGrapevineQueue, ToArpanetQueues, BadItemQueue, or <ArpaHostName>) or queue element (queue name followed by an item number). If the queue/elem is inhibited, the remaining inhibit time and reason are printed.
InhibitQueue/Elem
Inhibit the specified queue/elem for given time and reason.
UninhibitQueue/Elem
Uninhibit the specified queue/elem.
Requeue
Move the specified instance of the item to the new queue, leaving it on the old queue if so indicated. Some transformations may be done if the types of the initial and target queues are different (e.g. instance is going from ForProcessingQueue which just contains pointers to items to ToGrapevineQueue which also contains recipient subsets (i.e. the Grapevine recipients)). If a recipient subset is used by the target queue, the one from the initial queue will be used (if present) or a new recip subset may be specified .
DequeueAndDestroy
Dequeue and destroy the specified instance of the item. The system will only destroy the item if there are no other references to it on the queues and if there are no further recipients (or if it is already on the BadItemQueue), otherwise it will be placed on the BadItemQueue.
ReturnToSender
Return the specified instance of the item to the sender, ensuring consistency within the queue system. Notice that there may be other instances of that item (e.g. on other host queues) in the system.
BreakQueueLock
If the user notices that a queue is locked which should not be (user commands will fail with msg saying unable to obtain queue lock), he can smash the lock. This should obviously be used with caution!