Date: Mon, 11 Dec 89 19:15:07 EST >From: Christine M Gianone Subject: Proposal for REMOTE SET Extension to the Kermit Protocol Keywords: Kermit Protocol, REMOTE SET Command PROBLEM: Certain Kermit programs (including MS-Kermit 3.0, C-Kermit 4F) include information about whether a file is text or binary in the File Attribute packet, so the receiver can put itself into the right mode automatically. But when talking to a server there is no way for the client program, before issuing a GET command, to tell the server whether to send the file in text or binary mode. This problem extends to various other protocol and file-related parameters. NOTE: The Kermit protocol definition includes a REMOTE KERMIT command, and the associated packet format and protocol. It lets the user of the client program issue a command to the server in its own interactive-mode command language. But this is not a totally satisfactory answer because the syntax of Kermit programs can and does vary and, perhaps more to the point, some Kermit programs do not have an interactive command mode at all (Macintosh Kermit is one example). What is needed is a standard mechanism and syntax that can apply to all Kermit programs uniformly. SOLUTION: A new addition to the Kermit protocol: REMOTE SET. REMOTE SET would be a Generic Kermit Server command. A generic command looks INFO-KERMIT DIGEST V11 #1 Page 5 like this: +-----+---------------------------------+ | G | x ... | +-----+---------------------------------+ Type Data where "x" is the generic command, a single letter. The letter S is not yet in use, so let's define S to mean SET. The S is followed by a single operand, which includes a single-character length field, similar to other generic command packets. The parameters which may be SET remotely are the ones having to do with file transfer and Kermit protocol in general, not system-dependent or communications-dependent parameters, since these must already have been set prior to making the initial connection, and must be set correctly in any event BEFORE you can successfully send a REMOTE SET (or any other) packet to the server. The most needed REMOTE SET command is REMOTE SET FILE TYPE {TEXT,BINARY}, but the others should be specified in the protocol too. Numeric codes are assigned to the parameters and values, so that the mechanism for conveying this information is system- and language-independent and reasonably compact. The REMOTE SET command does exactly what the corresponding SET command would do if it had been given to the remote server as an interactive command before it entered server mode. Command Code Values REMOTE SET ATTRIBUTES IN ALL 132 0 = OFF, 1 = ON REMOTE SET ATTRIBUTES IN LENGTH 133 0 = OFF, 1 = ON REMOTE SET ATTRIBUTES IN TYPE 134 0 = OFF, 1 = ON REMOTE SET ATTRIBUTES IN DATE 135 0 = OFF, 1 = ON REMOTE SET ATTRIBUTES IN CREATOR 136 0 = OFF, 1 = ON REMOTE SET ATTRIBUTES IN ACCOUNT 137 0 = OFF, 1 = ON REMOTE SET ATTRIBUTES IN AREA 138 0 = OFF, 1 = ON REMOTE SET ATTRIBUTES IN BLOCK-SIZE 139 0 = OFF, 1 = ON REMOTE SET ATTRIBUTES IN ACCESS 140 0 = OFF, 1 = ON REMOTE SET ATTRIBUTES IN ENCODING 141 0 = OFF, 1 = ON REMOTE SET ATTRIBUTES IN DISPOSITION 142 0 = OFF, 1 = ON REMOTE SET ATTRIBUTES IN PROTECTION 143 0 = OFF, 1 = ON REMOTE SET ATTRIBUTES IN GPROTECTION 144 0 = OFF, 1 = ON REMOTE SET ATTRIBUTES IN SYSTEM-ID 145 0 = OFF, 1 = ON REMOTE SET ATTRIBUTES IN FORMAT 146 0 = OFF, 1 = ON REMOTE SET ATTRIBUTES IN SYS-INFO 147 0 = OFF, 1 = ON REMOTE SET ATTRIBUTES IN BYTE-COUNT 148 0 = OFF, 1 = ON REMOTE SET ATTRIBUTES OUT ALL 232 0 = OFF, 1 = ON REMOTE SET ATTRIBUTES OUT LENGTH 233 0 = OFF, 1 = ON REMOTE SET ATTRIBUTES OUT TYPE 234 0 = OFF, 1 = ON REMOTE SET ATTRIBUTES OUT DATE 235 0 = OFF, 1 = ON REMOTE SET ATTRIBUTES OUT CREATOR 236 0 = OFF, 1 = ON REMOTE SET ATTRIBUTES OUT ACCOUNT 237 0 = OFF, 1 = ON REMOTE SET ATTRIBUTES OUT AREA 238 0 = OFF, 1 = ON REMOTE SET ATTRIBUTES OUT BLOCK-SIZE 239 0 = OFF, 1 = ON REMOTE SET ATTRIBUTES OUT ACCESS 240 0 = OFF, 1 = ON Page 6 INFO-KERMIT DIGEST V11 #1 REMOTE SET ATTRIBUTES OUT ENCODING 241 0 = OFF, 1 = ON REMOTE SET ATTRIBUTES OUT DISPOSITION 242 0 = OFF, 1 = ON REMOTE SET ATTRIBUTES OUT PROTECTION 243 0 = OFF, 1 = ON REMOTE SET ATTRIBUTES OUT GPROTECTION 244 0 = OFF, 1 = ON REMOTE SET ATTRIBUTES OUT SYSTEM-ID 245 0 = OFF, 1 = ON REMOTE SET ATTRIBUTES OUT FORMAT 246 0 = OFF, 1 = ON REMOTE SET ATTRIBUTES OUT SYS-INFO 247 0 = OFF, 1 = ON REMOTE SET ATTRIBUTES OUT BYTE-COUNT 248 0 = OFF, 1 = ON REMOTE SET FILE TYPE 300 0 = TEXT, 1 = BINARY REMOTE SET FILE NAMES 301 0 = CONVERTED, 1 = LITERAL REMOTE SET FILE COLLISION 302 0 = RENAME, 1 = REPLACE, 2 = BACKUP, 3 = APPEND, 4 = DISCARD, 4 = ASK REMOTE SET FILE REPLACE 303 0 = PRESERVE, 1 = DEFAULT REMOTE SET FILE INCOMPLETE 310 0 = DISCARD, 1 = KEEP REMOTE SET INCOMPLETE (same as above) REMOTE SET BLOCK-CHECK 400 number (1, 2, or 3) REMOTE SET RECEIVE PACKET-LENGTH 401 number (10-9024) REMOTE SET RECEIVE TIMEOUT 402 number (any, 0 = no timeout) REMOTE SET RETRY 403 number (any, 0 = no limit) REMOTE SET SERVER TIMEOUT 404 number (any, 0 = no timeout) REMOTE SET TRANSFER CHARACTER-SET 405 Character Set Designator REMOTE SET WINDOW-SLOTS 406 number (1-31) One Kermit program should not have knowledge of another Kermit program's local character sets, therefore REMOTE SET FILE CHARACTER-SET is not included. The Transfer Character Set Designator is the one described in the "ISO/Kermit" proposal. For example "I2/100" (ISO Latin Alphabet 1), "I2/144" (ISO Latin/Cyrillic), or "I14/13" (Japanese Roman/Katakana). The command would use the name (for example REMOTE SET TRANSFER CHARACTER-SET LATIN1) and the generic server command packet would use the corresponding designator. REMOTE SET LANGUAGE is omitted for the present, but can be added later. The problem here is assigning a unique code to each of the world's languages. The numbers shown for the codes and values are expressed as character strings composed of ASCII digits, 0-9. Here are examples, showing the TYPE and DATA fields of the Kermit packet: GS#101!0 = REMOTE SET ATTRIBUTE LENGTH OFF GS#202!0 = REMOTE SET ATTRIBUTE TYPE OFF GS#300!1 = REMOTE SET FILE TYPE BINARY GS#400!2 = REMOTE SET BLOCK CHECK 2 GS#401$1000 = REMOTE SET RECEIVE PACKET-LENGTH 1000 GS#405&I2/100 = REMOTE SET TRANSFER CHARACTER-SET LATIN-1 ORGANIZATION AND EXPANSION: The codes are numeric strings, with the hundred's place assigned roughly according to "topic": 100's for Incoming Attributes, 200's for Outbound Attributes, 300's for file-related items, and 400's for packet-related items. Note that the SET ATTRIBUTE codes are equal to 100 or 200 plus the value of the corresponding attribute designator. There is plenty of room for expansion within each category, and new categories can be added as required. INFO-KERMIT DIGEST V11 #1 Page 7 PROTOCOL: The person using the client Kermit program issues a REMOTE SET command for a single parameter, such as REMOTE SET FILE TYPE BINARY. The program forms the corresponding G packet and sends it to the server. The server program can respond in any of the following ways, and the client program should be prepared for each kind of response: E-packet: An Error packet. The server does not understand REMOTE SET packets, or it is not able to perform the specific SET that was requested. Therefore the client must not assume that the SET has been done, and if it is in local mode, it must give a message to the user, as described below. Y-packet: An Acknowledgement. The server accepted the command, and performed the requested SET. The data field of the Y-packet can be empty, to indicate that the requested value was accepted. Or it can contain the value which the server actually set. For example, the user types REMOTE SET RECEIVE PACKET-LENGTH 5000 but the server only supports lengths up to 1000: To server --> GS#400$5000 Y1000 <-- To client CLIENT IMPLEMENTATION: A client can include support for any number of the REMOTE SET commands, or none at all. A minimal implementation might include only REMOTE SET FILE TYPE. This would include addition of the command to the program's command tables, code to send the generic packet, and code to interpret the response and issue any appropriate messages to the user, like the contents of the error packet data field, or any altered value that the server sent back in the data field of an acknowledgement. Examples: REMOTE SET command succeeded REMOTE SET value changed to 1000 REMOTE SET command failed: SERVER IMPLEMENTATION: A server can also include support for any number of the REMOTE SET commands, or none at all. If it supports none at all, then it will automatically respond to a REMOTE SET packet with an error packet containing a message like "Unimplemented REMOTE command". If the server receives a REMOTE SET packet for a parameter it does not support the REMOTE SETting of, then it should respond with an error packet containing the message "Unknown REMOTE SET parameter". If the server gets a REMOTE SET packet for a parameter which is known to it, then it should: (a) Set the parameter to the requested value and respond with an empty Y packet, or: Page 8 INFO-KERMIT DIGEST V11 #1 (b) If the requested value exceeds the server's maximum value for the parameter, set it to its own maximum value and respond with a Y packet containing the new value in its data field, as in the packet-length example above. If the server is a "permanent" Kermit server which cannot be terminated using BYE or FINISH, then when the user disengages from it using BYE, FINISH, or LOGOUT, then when the server receives a BYE, FINISH, or LOGOUT command, it should revert any parameters that were changed by REMOTE SET back to the values that were in use when server mode was entered. Thanks to Joe Doupnik and John Chandler for their assistance in the design of this protocol extension.