Date: Fri, 26 Aug 1994 13:34:29 -0500 From: Dugal James P. To: nos-bbs@hydra.carleton.ca Subject: JNOS 1.10G released I've placed JNOS 1.10g on several ftp sites today; what follows describes the changes I made to 1.10f to yield 1.10g. Thanks to all who contributed code, constructive criticism, or their time to test new code. Jnos 1.10g can be found on: PC.USL.EDU:/pub/ham/jnos FTP.UCSD.EDU:/hamradio/packet/tcpip/incoming FTP.ECE.ORST.EDU:/pub/ham/wg7j/incoming James Dugal, N5KNX jpd@usl.edu 26 Aug 1994 dirutil.c handle MSDOS :\ properly. Display free space remaining correctly. nntpcli.c fix group first-letter loss. Avoid --more-- prompt for arrival notifications. Permit group name mapping. Disallow redundant kick. Support LZW. Compensate for GMT. Add 'nntp firstpoll #days' cmd. nntpserv.c Eliminate infinite wait for history lock. Compensate for GMT. Add 'nntp firstpoll #days' cmd and more pwait() calls. bmutil.c Remove .inf timestamp file when area is deleted. Prompt for input based on LINEMODE setting. Corrected display of an invalid msg number. expire.c Remove .inf timestamp file when area is deleted. i8250.c,i8250.h Put back 1.10c behaviour: don't require CTS. Add support for chained IRQs, a 6th serial port, and NRS-CTS protocol. config.c, internet.h Support encap RX using protocol code 4. nrcmd.c minor display formatting change. pc.c Eliminate confusion in session status line. Add MAIL msg to status line 1. mailfor.c Add unread-personal-mail feature. ftpcli.c,ftpcli.h Allow LZW compression for put, mput, and rput commands. Disable LZW attempts after first XLZW request is rejected in a session, unless 'reclzw on' is issued again. Disable LZW attempts unless an ASCII (not image or logical) transfer is intended (since LZW is implemented only for ascii sockets). ftpsubr.c Prompt for input based on LINEMODE setting. mboxmail.c Prompt for input based on LINEMODE setting. Validate area name given by sysop. mailbox.c,mailbox.h Add XP mailbox command, to toggle LINEMODE flag. smtpserv.c "New mail for xxx" message is only displayed if SMTPTRACE is defined in config.h and Smtptrace value is non-zero. If PRINTEROK is defined in config.h, mail written to a printer device is followed by a FormFeed, and no index file is written. Bids found in non-dup msgs are now stored into the bid history file. Timezone now checked for DST. smtpcli.c The Smtptrace value must now be > 1 to see any trace output from the smtp client. Increased smtp_send stack. dialer.c Accommodate 115200 baud. Correct trace output. asy.c Accommodate 115200 baud in attach, and 'n' attach flag meaning NRS-CTS. asy.h Add asy5vec and permit a 6th serial port. pcgen.asm Add chained IRQ support. asyvec.asm Add chained IRQ support + a 6th serial port. pop2cli.c, pop3cli.c Eliminate "New mail arrived for..." msg if pop trace value set to zero. Support LZW. pop3serv.c Support LZW. mailcli.c Add 'pop lzw on/off' cmd. mboxcmds.txt Add XP cmd description. alloc.c Refuse morecore requests > 32K. main.c Cleaner swap away from trace screen. Change DOS device test. Improve help. lzw.c Added lzw trace cmd, showing LZW efficiency. proc.h, ksubr.c Make stkutil() externally callable. files.c,file.h,nos.cfg Added CmdHelpdir, defaulted to "/help". ip.c Test for packets with lost bytes. ipcmd.c Correct ip heard count when reusing oldest slot. axheard.c Correct heard count when reusing oldest slot. look.c Accept socket # for mailbox user specification. ================= I fixed wildcardize() in dirutil.c to handle MSDOS :\ often found in the ftpusers file. This bug was causing the ftp DIR command to not produce any output unless '*.*' was explicitly given. I also corrected some minor problems when dealing with CDROMS. Notable is the case where the normalize-path function returns \\H.\A. as a path to drive H. I introduced a problem in 1.10f nntpcli.c for newsgroups NOT containing a period. This is now fixed! I also changed the news article arrival msg to not incur the --more-- prompt halt for input, and (like smtp notifications), to be displayed only if the console was in a command session. Also, a newsgroup can be renamed locally, by using NNTP DIR old=new Example: nntp dir usl.maillist.tcp-group=tcp nntp dir rec.radio.amateur.= Use old== to delete a mapping specification. Mappings are examined in the same order they were specified. I found it was possible for nntp kick to create a second client process connected to the same server. Now fixed. Also, an nntp timer is restarted if jnos is unable to create an nntp client process when the timer matures. LZW is also now supported, thanks to Ron, N8FOW. If the client runs on GMT, the NEWNEWS command is modified to reflect this. Finally, the 'nntp firstpoll #days' cmd was added, from Andrew G8FSL. The initial poll to a new server will ask for only #days worth of news, rather than all news since 1990. The default is 5 days. In bmutil.c and expire.c, I added code to delete the .inf timestamp file when the area becomes empty and is deleted (if USERLOG is defined). This would eliminate notification of areas having new msgs when they are in fact empty. I also changed several routines in bmutil.c to check the linemode setting (toggled by XP) before trying to read a single char from a telnetted user. The user may ultimately be using ax.25 and be incapable of returning a single char. Anyone have an automatic solution? I also corrected the display of an invalid msg #. In mailbox.c I added the XP maibox command (toggles the LINEMODE flag; default is off), and the charmode_ok() subroutine to test the flag and connection type. Then sendfile() in ftpsubr.c and dombmovemail() in mboxmail.c were changed to call charmode_ok() before prompting for input. I added area name validation to doarea() in mboxmail.c, so that the sysop cannot provide an invalid name (that is likely to provoke the repeated "Mail file busy. Retry?" syndrome). i8250.c no longer requires an input CTS signal. This is a return to the behaviour of Jnos 1.10c in this regard. I merged the i8250.c from 1.10c with 1.10f, so as to eliminate TX lockups with modems using CTS for flow control. I added support for a 6th serial port and chained IRQs, from PA0GRI via N2RJT. To indicate an interrupt vector is chained, suffix the vector number with "_c" in the attach command. The vector number remains specified in HEX so as not to break any existing config files. pcgen.asm and asyvec.asm were changed to support chained interrupts, from PA0GRI and N2RJT. NRS-CTS protocol was added, to support the NEDA node-stack diode matrix, from WZ2B via N2RJT. KA9Q noted that IP within IP encapsulation should be using IP protocol code 4 instead of 94. Jnos now accepts either value, but still generates code 94. A future version of JNOS should generate code 4, thereby obsoleting Jnos versions prior to 1.10g. Change made to config.c and internet.h. In pc.c I changed StatusLine3() to dynamically access some session variables, rather than relying on a static copy, and test return codes. This seems to have cured the occasional trashing of a netrom session display. I changed xfer_article2() in nntpserv.c to give up if it can't lock the history file after trying a minute, based on Doug WA3DSP's comments. A log message is written. Also, an nntp timer is restarted if jnos is unable to create an nntp client process when the timer matures. I also added support for the GMT keyword on the NEWNEWS command, both as a client and a server. Finally, I added G8FSL's 'nntp firstpoll #days' cmd, to ask for only #days worth of news, rather than all news since 1990, in the initial poll to a new server. The default is 5 days. ftpcli.c was lacking code to invoke LZW compression for put, mput and rput commands, now fixed. I also noticed that batching of ftp cmds was not handled correctly if LZW was enabled, also fixed. Thanks to I1VDM for pointing out the LZW problem. I changed the ftp client to abandon lzw attempts after the first XLZW command is rejected. No point in seeing all those 500 Unknown Command messages after the first one. But, if you really want to re-attempt lzw in the same session, issue a 'reclzw on' command. Thanks to Jan, PE1DGZ for mailfor.c and pc.c modifications to show that unread personal mail is waiting via the MAIL string on status line 1. I added the 'mbox mailfor watch call_1 ... call_n' command to permit specification of which mailboxes are to be checked. To initiate this feature, you must activate mailfor (eg, mbox mailfor 600) and set the watch list (eg, mbox mailfor watch n5knx). To remove the MAIL string, first read the mailbox's last message, and then force the mailfor process (eg, mbox mailfor now) or await the mailfor timer's maturation. Note that the calls to be watched must not appear in /spool/areas! In an attempt to provide a means of eliminating the "New mail for xxx" message when desired, I changed smtpserv.c to display the message only if Smtptrace were non-zero (eg, 1). And, smtpcli.c was changed to do no tracing unless the Smtptrace value were greater than 1. If SMTPTRACE is not defined in config.h, neither module does tracing. In keeping with this behaviour, pop2cli.c and pop3cli.c were changed to eliminate the "New mail arrived for..." msg when the pop trace value is zero. To avoid a loop when mail can't be delivered locally, such as to an offline/notready printer, or to a locked mailbox, the smtptick() call was eliminated just before the smtpserv process exits. We'll rely instead on a retry when the smtp timer matures. I also found a problem in smtpcli.c: when invoking retmail() to return a message to sender, it could overflow the process stack, probably just when LZW was compiled in. I changed the stack size from 1024 to 1536 for smtp_send(), and this seems to have eliminated the problem. Dave, N9HKM, provided code to have smtp always save bids in the history file when unique. I was prompted by Geoff KE6QH to change smtpserv'c ptime() routine to test for daylight savings time. The problem is that Borland's runtime probably doesn't change to/from DST at the same time as your government decrees! In this case, don't put a dst zone in your TZ variable. I found that in asy.c, asy_attach() was passing the speed specification as an int16 rather than a long, causing 115200 bps to be unrecognized. Fixed. A similar change was made in dialer.c for asy_speed() calls. I added code from WZ2B and N2RJT to check for the attach flag 'n' implying the NRS-CTS protocol, in the case where NRS is #defined. dialer.c's trace display was corrected in many places. I added code in alloc.c to disallow a morecore() request for more than 32767 bytes, per Andrew G8FSL. main.c changed to delay swapscreen() until the Current session variable is changed, to help prevent trace output appearing on non-trace screens. Also, the test for opening a MSDOS device was not catching the case where a device name was followed by a period, and perhaps an extension. MSDOS was all too happy to equate "/spool/mail/lpt1.txt" with LPT1. BUT if you #define PRINTEROK in config.h, then Jnos will allow opening a printer for output if it is online and has no errors flagged. Thus the sysop can issue: copy filename lpt2 , or within the mailbox, type: MC 3 \dev\prn A companion change was made in smtpserv.c. If PRINTEROK is defined, and the destination is actually a printer device file, a FormFeed separator is issued and no index file update is attempted. Ron N8FOW provided code to enhance dohelp() in main.c, that displays files corresponding to Jnos commands, that are stored in "/help" by default. You might wish to redefine CmdsHelpdir to "/spool/help/cmds", or some other location, via nos.cfg. Preliminary help files are provided in cmdshelp.zip. Files.c, files.h and nos.cfg were similarly modified to define CmdsHelpdir. lzw.c changed to allow lzw tracing. If 'lzw trace' is nonzero, when a LZW socket is closed, the compression statistics are displayed. LZW support added to pop3cli.c and pop3serv.c (and mailcli.c). I made stkutil() in ksubr.c externally callable, for example by kernel.c when PROCLOG is defined (to spot processes with unsufficient stack space). ip.c now checks for packets missing data bytes, per VE3DTE. ipcmd.c now zeroes ip_heard count when reusing the oldest slot, per VE3DTE. I made a similar change to axheard.c. I changed look.c to allow specifying a mailbox user by socket number. Previously, the callsign was required, contrary to docs. Thanks to Greg, KE4DPX, for pointing out the problem.