CKCKER.2DO Aug 1993 C-KERMIT TO-DO LIST BUG: C-Kermit (at least the UNIX version), when told to send a file to which the user has directory-listing access but does not have read access, goes into protocol mode, telling the user to escape back and give a RECEIVE command, etc, and only then does it notice that the file can't be opened, and gives a "?Read access denied" message -- but this is a terminal message, not an Error packet, so the user (having escaped back already) never sees it. The message should be issued immediately, and protocol mode should not be entered (that is what zchki() is supposed to ensure!). If a fatal error message is to be issued during protocol mode, it should come in an E-packet. Ideas for future releases of C-Kermit (in no special order): . Some, but not all, OSF/1 systems support hardware flow control via CRTSCTS. Theoretically this is true when both OSF1 and CRTSCTS are defined. Generalize Linux RTS/CTS code to allow for this. . Make SET TERM CR-DISPLAY also apply to INPUT echoing. . Add REMOTE MESSAGE. . Add REMOTE RENAME. . Eliminate long pauses between (e.g.) adjacent SEND commands in cmd files. . Add a command to let CR be sent totally bare on a TELNET connection, instead of as CR-NUL or CR-LF. . Add a command to turn off dynamic packet length, and/or to set limits. . Add transfer mode (text/binary) to STATISTICS display. . Clean up and incorporate Fulvio Marino's I/O buffering code, and eventually remove the old I/O code. First for UNIX, then elsewhere. . Convert Sys V / POSIX versions to not need ^\ before local-mode file transfer interruption commands (do nonblocking reads of console) (now possible because of Fulvio's code?) . Let Kermit run as a TCP/IP server, instead of FTP, listening on its own socket, so it doesn't have to use Telnet - this will make it go MUCH FASTER over TCP/IP connections. Get TCP socket number officially assigned. . Allow various kinds of network server operation. By default (in UNIX at least), Kermit chroot's to /pub/ftp, user anonymous. Or maybe also an option for no chroot, to allow anonymous access to entire file system, based on permissions of individual files and directories (as on most non-UNIX systems). Like ftp server, client can also log in as a specific user. . Also allow UNIX (and other?) Kermit servers to run as user's login shell. . Add LOGIN / LOGOUT support in server (it's already in the client); in the client, accept LOGIN and LOGOUT as synonyms for REMOTE LOGIN and REMOTE LOGOUT. . Add a more convenient style of client/server operation, in which SET commands given at the client take effect on both the client and the server (like the BINARY command, when given to an FTP client). . Add IF NEWER . Let Ctrl-L clear and repaint the file transfer display screen . Add the ability to tell Kermit that a different modem escape sequence is in effect (Kermit currently assumes +++, and always uses it when DIAL MODEM-HANGUP is ON). Or let Kermit find out itself by looking at S-registers. Also have it check whether escape sequence is enabled. . Do something about +++ appearing in non-data portions of Kermit packets. . Add SET MODEM USER-DEFINED. Just make a blank mdminf structure & pointers for it, and then give users SET commands to fill it in. . Add SET DIAL COMPRESSION and SET DIAL ERROR-CORRECTION for generic enabling/disabling/selection of these items. Get rid of SET DIAL MNP, and incorporate it into the new commands. These commands should allow specification of various methods AND fallback schemes. . Add support for more types of modems: Practical Peripherals, Multitech, etc. . Add optional system-wide dialing log, for billing dialout modem users. . Need a better mechanism for handling speed-matching modems - recognition of interface speed AND connect speed, setting of timeouts, etc, accordingly. . Make DIAL command return different status codes, depending on whether it was busy, no answer, command error, etc (if it's busy or no answer you might want to retry, but if it's a command error, you don't). Either return different \v(status) codes, or define a new variable \v(dial_status). . Add a command-line option for phone number to dial. . Fix DF2xx modem support for bidirectional orientation in Ultrix 3.1 & later. . ttinl() is getting its fingers too much into the protocol. I'd like to remove it altogether and just let rpack() do all that stuff, calling ttinc() to simply read characters from the communication line, and let ttinc() handle all the buffering. Better yet, let's turn ttinc() into a macro that calls some kind of ttfillbuf() routine whenever it needs to. This would remove several layers of function calls from the packet i/o, and it would let us handle TELNET options during file transfer, etc etc. Fulvio's code could come in handy here. . Call parchk() only at beginning of transaction, not for each packet. . Handshake is done wrong in ttinl(). ttinl() should ALWAYS be length-driven. Handshake should be looked for AFTER the packet has been read based on its length. Otherwise we can't use the printable-handshake for DDK. Once this is fixed, allow SET HANDSHAKE CODE accept any number 0..255. . Change ck?fio.c to return the text-file byte stream with CRLF delimiters, rather than making the system-independent function getpkt() do it. Better, yet make the file reading modules return some kind of end-of-record indication for both text and (where applicable, as in VMS) binary files. . When uploading text files to UNIX, *all* CRs are stripped. The way it SHOULD work is: bare CRs are kept, bare LFs are kept, and only CRLFs are treated as line terminators. This will take a major reworking of decode() in ckcfns.c. It's not obvious how to do this in a clean way, because the CRLF might be broken between packets. . Add Hebrew support. . Add SET REPEAT { 0, 2, 3, 4, 5 } to set the repeat-compression threshhold. . Make A-packets fit in negotiated packet length (send more than 1 if nec.). . Add file protections/permissions to attribute packet processing. . Support for "End of attributes" attribute = Attribute "@" (K-370 has it). . Add code for breaking outbound attribute string up into more than one attribute packet. . Add mechanisms for sending and receiving directory trees in a system- independent manner. New protocol must be involved for telling the remote Kermit to switch to (and if necessary, create) a new directory. Could be something as simple as a new "set file names" option. Maybe add code for recognizing and converting VMS, MS-DOS, etc, directory names based on system-type field from Attribute packet. Or preferably, devise standard syntax for file specifications. . Dynamic adjustments of timeouts based on transfer rate, system load, etc. . Calculate delay between S and its ACK & use it (e.g. for SLIP connections) . Design protocol for file transfer checkpointing and add it to the program. Must work for both text and binary files, and be independent of operating system, file format, etc. . Ditto for higher levels of compression. . Separation of TERMINAL and COMMAND flow control . Add RTS/CTS support for more systems. . SET COMMAND SHIFT-IN/OUT { OFF, ON } ??? (maybe not necessary) . Add {...} parsing to SET KEY for leading/trailing spaces. . Handle telnet negotiations at all times, even during file transfer... . Change zltor() to strip .~nn~ rather than converting it. . When sending a file whose name contains international characters, translate the name to ASCII. . Add a SHOW command for each SET command? . Add a way to redirect output of REMOTE commands to a file. . Add \v(wordsize) == sizeof(int). . Quoted comma ("\,") in macro definition should not cause break to new cmd. . Find out what the system's interrupt character is, and refer to it in messages, rather than always saying "Ctrl-C", ditto for suspend character. . Let user SET the command-editing characters: SET COMMAND { CHARACTER-DELETE, WORD-DELETE, LINE-DELETE, REDISPLAY } ... . REMOTE SET . Needed for anonymous Kermit server. . Add Japanese & Chinese ISO 646 (same) as FCS's. . Allow multiple actions on command line, e.g. -s, -g, -f... . Add IF INPATH . . Add CDPATH handling to CD command (UNIX). . System-wide transaction log -- logs all file transfers by all users in a common long, showing username, filespec, timestamp, mode, etc. . Make log files use the file backup mechanism. . Make ckufio.c zstime() more flexible (steal code from ck9fio.c). . Define a signal people can use to kill Kermit, that it can catch, call doexit(), send error packet, whatever.... . Multiple sessions (network, serial port, etc). Session info structure, session manager. . INPUT -1 (or 0?) (or something like that) to wait forever. . A way of handling multiple INPUT possibilities, including pattern-matching, for example: MATCH n [ var ] Pattern :== label regexp [, label regexp [, label regexp [, ... ] ] ] Var = variable (\%-style or macro name) to assign match to. Examples: MATCH 30 {labela login:,labelb more?,labelc term=} Or: MATCH 30 {aaa A*B, bbb X*Z, ddd [0-9][0-9][0-9]} \%v ; asg match to \%v Or: MATCH 30 % foo ; match any single char, assign it to macro foo. Or some other syntax -- maybe a SWITCH/CASE statement, or allow multiple "TRIGGER