From abcadf2fc6dd15b60b036a99ebb3b97b9ff2ee4b Mon Sep 17 00:00:00 2001
From: rswindell <>
Date: Tue, 7 Jan 2003 09:07:48 +0000
Subject: [PATCH] Updated from file library.

---
 docs/dove-net.txt | 113 +++++--
 docs/sbbsunix.txt |  56 ++--
 docs/v310_new.txt | 826 +++++++++++++++++++++++++++++++++++++++++++++-
 3 files changed, 934 insertions(+), 61 deletions(-)

diff --git a/docs/dove-net.txt b/docs/dove-net.txt
index 56092c5dee..4232409752 100644
--- a/docs/dove-net.txt
+++ b/docs/dove-net.txt
@@ -1,4 +1,4 @@
-DOVE-Net Introduction and Instructions 12/08/00, Updated 03/06/02
+DOVE-Net Introduction and Instructions 12/08/00, Updated 11/14/02
 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
 
 Q. What is DOVE-Net?
@@ -47,6 +47,47 @@ A. Connecting BBS sysops and users without a lot of politics and red tape.
 Instructions
 ============
 
+Step 1: Choose a QWK-ID
+-----------------------
+If you're using Synchronet BBS Software, your BBS's QWK-ID is configured 
+in SCFG->Message Options->BBS ID for QWK Packets. SCFG is the Synchronet 
+Configuration Utility accessible by running exec/scfg or using the
+BBS->Configure menu option in the Synchronet Control Panel (Win32 only).
+
+Your QWK-ID should be an abbreviation of your BBS name or have some other
+personal significance, and must be unique among others on DOVE-Net (see 
+NODES.DAT included in DOVE-NET.ZIP to verify the uniqueness of your QWK-ID).
+
+QWK-IDs are limited to a maximum of eight characters in length, may only
+contain valid DOS filename characters, and MUST begin with an alphabetic 
+character. QWK-IDs are not case sensitive. 
+
+
+Step 2: Create a QWKnet Account
+-------------------------------
+Assuming you will be using Vertrauen BBS as your hub, you will need to logon
+as "New" at telnet://vert.synchro.net and create your QWKnet account using
+your BBS's QWK-ID as the user name (even if you already have a regular user
+account there). 
+
+You must answer (Y)es to the following new user question:
+"Is this account to be used for QWK Networking (DOVE-Net)?"
+
+Remember the password you used to create this account, you'll need it later.
+
+It is important that you do NOT use a regular user account for QWK packet
+transfers.
+
+Note: You can optionally use one of the other Vertrauen servers
+(rob.synchro.net or cvs.synchro.net) if you wish. They all share the same
+BBS databases.
+
+
+Step 3: Configure Your BBS Software
+-----------------------------------
+If you are using Synchronet BBS Software Version 3.1 or later, skip ahead
+to "Using the Baja FTP Client...".
+
 Synchronet BBS Software for Win32 v3.00 comes pre-configured for DOVE-Net 
 using the Windows command-line FTP client application to transfer packets 
 with Vetrauen (vert.synchro.net). All you need to do is follow the 
@@ -68,16 +109,6 @@ manual, but use the updated conference numbers at the end of this document.
 Additionally, if you're going to use Vertrauen (VERT) as your hub, then 
 you'll need to connect using a scripted Telnet or FTP client (details follow).
 
-*** IMPORTANT ***
-When you create your QWKnet account on your hub BBS, you MUST use your BBS's
-QWK ID for the user name. QWK IDs are a maximum of eight characters, may
-only contain valid DOS filename characters, and MUST begin with an alphabetic
-character. QWK IDs are not case sensitive. Your QWK ID should be an 
-abbreviation of your BBS name or something relevant to you or your BBS and it 
-must be unique among the names in the enclosed NODES.DAT file. Note: If you're 
-using Vertrauen as a hub, you must login (to vert.synchro.net) with a Telnet 
-client to create your account.
-
 
 Using a Scripted Telnet Client for QWKnet Transfers
 ---------------------------------------------------
@@ -116,28 +147,28 @@ This is the preferred method of QWKnet packet transfers.
 
 2. Change the QWKnet call-out command line (in SCFG->Networks->QWK->Hubs->VERT)
    to "*QNET-FTP VERT vert.synchro.net YOURPASS" but replace YOURPASS with the
-   password you used when creating your QWKnet user account on Vertrauen.
+   password you used when creating your QWKnet account on Vertrauen.
 
 
 Terminology (as used in this document)
 --------------------------------------
 
-Hub:		A BBS that feeds another BBS messages for a message network
-Node:		A BBS that calls another BBS to exchange messages for a network
-		A BBS can be (and most often is) either "both a node and a hub"
-		or "only a node", if you're joining DOVE-Net for the first time,
+Hub:            A BBS that feeds another BBS messages for a message network
+Node:           A BBS that calls another BBS to exchange messages for a network
+                A BBS can be (and most often is) either "both a node and a hub"
+                or "only a node", if you're joining DOVE-Net for the first time,
                 then your system will be "only a node".
-QWK:		Message packet format used for off-line mail readers
-QWKnet: 	Message networking technology using QWK packets
-Fido:		Message networking technology based on Fido BBS software
-FidoNet:	The single largest amateur message network on earth
-Echo:		Message area that is connected to multiple BBSes via message
-		network
-NetMail:	Private message between one user and another not stored in a
-		topical message area (echo), similar in princicple to Internet 
-		e-mail
-SMB:		Synchronet Message Base format, download SMB_*.ZIP from Vertrauen
-		for technical specification and C library
+QWK:            Message packet format used for off-line mail readers
+QWKnet:         Message networking technology using QWK packets
+Fido:           Message networking technology based on Fido BBS software
+FidoNet:        The single largest amateur message network on Earth {tm}
+Echo:           Message area that is connected to multiple BBSes via message
+                network
+NetMail:        Private message between one user and another not stored in a
+                topical message area (echo), similar in princicple to Internet 
+                e-mail
+SMB:            Synchronet Message Base format, download SMB_*.ZIP from
+                Vertrauen for technical specification and C library
 
 
 QWK Technical Notes
@@ -194,6 +225,9 @@ Note: Include time-zone (@TZ) lines in exported messages
 Subj: VIA [ON | OFF]
 Note: Include path (@VIA) lines in exported messages
 
+Subj: MSGID [ON | OFF]
+Note: Include @MSGID and @REPLY lines in exported messages
+
 Subj: NDX [ON | OFF]
 Note: Include index (.NDX) files
 
@@ -211,27 +245,38 @@ Conf  Name					Access Requirements
 2004  Debate
 2005  Hardware/Software Help
 2006  Programming
-2009  UNIX Discussion (Linux, FreeBSD, etc)
+2009  Unix Discussion
 2015  HAM Radio Operators
 2016  Internet Discussion
 2017  Pro-Audio Discussion
 2018  Firearms Discussion
 2019  Sports Discussion
 2007  Synchronet Discussion
-      * Gated with USENET: alt.bbs.synchronet
 2008  Synchronet Sysops Only			LEVEL 90 OR REST Q
-      * Gated with FidoNet: SYNC_SYSOPS
 2011  Synchronet Programming (Baja)
 2014  Synchronet Programming (non-Baja)
-2012  Synchronet Beta Testing			LEVEL 90
 2013  Synchronet Data				LEVEL 90 OR REST Q
-      * Gated with FidoNet: SYNCDATA
 2010  DOVE-Net Sysops Only			LEVEL 90 OR REST Q
 
 
+Gateways
+--------
+You *must* not gate DOVE-Net conferences to any other network without explicit,
+prior permission. 
+
+The following DOVE-Net conferences are already gated to other networks:
+
+Synchronet Discussion  <=> alt.bbs.synchronet USENET newsgroup
+Synchronet Discussion  <=> SYNCHRONET echo on the FidoNet Zone 1 Backbone
+Synchronet Sysops Only <=> SYNC_SYSOPS echo on the FidoNet Zone 1 Backbone
+Synchronet Programming <=> SYNC_PROGRAMMING echo on the FidoNet Zone 1 Backbone
+Synchronet Data        <=> SYNCDATA echo on the FidoNet Zone 1 Backbone
+
+
 Contact Information
 -------------------
-Vertrauen: 	telnet://vert.synchro.net
-Co-founder:	rob@synchro.net
+Vertrauen:      telnet/ftp/nntp/gopher/finger: vert.synchro.net
+                backup servers: rob.synchro.net and cvs.synchro.net
+Co-founder:     rob@synchro.net
 
 /* End of DOVE-NET.TXT */
diff --git a/docs/sbbsunix.txt b/docs/sbbsunix.txt
index 4937934489..bdb1adce2d 100644
--- a/docs/sbbsunix.txt
+++ b/docs/sbbsunix.txt
@@ -2,7 +2,7 @@ Synchronet for Unix
 -=-=-=-=-=-=-=-=-=-
 
 Created: Mar 15, 2002
-Updated: Apr 12, 2002
+Updated: Dec 07, 2002
 
 By: Rob Swindell
 http://www.synchro.net
@@ -18,16 +18,19 @@ Answers to Frequently Asked Questions
 =====================================
 
 Q. What flavors of Unix (and Unix-like operating systems) are supported?
-A. Currently, Linux-x86 and FreeBSD-x86.
+A. Currently, Linux-x86, FreeBSD-x86, OpenBSD-x86, and Solaris-x86.
 
 Q. What distributions of Linux are supported?
-A. Should work with any GNU/Linux-x86 distribution.
+A. Should work with any GNU/Linux-x86 distribution (e.g. RedHat, Mandrake, 
+   Debian, Slackware, etc.).
 
 Q. Are non-x86 (Alpha, SPARC, 68k, PowerPC, etc) processors supported?
-A. No, Synchronet assumes a little-endian processor.
+A. No, Synchronet assumes a little-endian processor. It *may* work on other
+   little-endian processors (e.g. Alpha), but hasn't been tested. Big-endian
+   support is currently being developed for the v3.20 time-frame.
 
 Q. Will Synchronet ever support big-endian and/or 64-bit processors?
-A. Probably.
+A. Yes.
 
 Q. Where do I get Synchronet for Unix?
 A. There are no binary distributions at this time, so you must get the source
@@ -44,7 +47,8 @@ A. Yes. As long as all the nodes can access the same live data files (via LAN)
    as you wish.
 
 Q. Does Synchronet for Unix support external DOS programs/doors?
-A. Not currently. DOSemu integration is on the "to do" list.
+A. Currently, only the FreeBSD build has doscmd support "built-in". Other
+   platforms can use DOSEMU or whatever is available for running DOS programs.
 
 Q. What external programs/doors does Synchronet for Unix support?
 A. Currently, only native programs are supported. These programs can either
@@ -71,6 +75,12 @@ Note: These instructions assume you are already logged in as 'root'.
    B. Change to this directory:
       cd /sbbs
 
+   * Optional Shortcut *
+     At this point you can copy the file from this url: 
+     http://cvs.synchro.net/cgi-bin/cvsweb.cgi/~checkout~/install/GNUmakefile
+     into the /sbbs directory, run "gmake install", and then skip ahead to 
+     step 4.
+
    C. Get the required modules from the CVS repository:
       cvs -d :pserver:anonymous@cvs.synchro.net:/cvsroot/sbbs login
       (no password - just hit enter)
@@ -81,8 +91,7 @@ Note: These instructions assume you are already logged in as 'root'.
       cvs -d :pserver:anonymous@cvs.synchro.net:/cvsroot/sbbs co xtrn
       cvs -d :pserver:anonymous@cvs.synchro.net:/cvsroot/sbbs co src/sbbs3
       cvs -d :pserver:anonymous@cvs.synchro.net:/cvsroot/sbbs co src/uifc
-	  cvs -d :pserver:anonymous@cvs.synchro.net:/cvsroot/sbbs co src/xpdev
-      cvs -d :pserver:anonymous@cvs.synchro.net:/cvsroot/sbbs co src/libdialog
+      cvs -d :pserver:anonymous@cvs.synchro.net:/cvsroot/sbbs co src/xpdev
       cvs -d :pserver:anonymous@cvs.synchro.net:/cvsroot/sbbs co src/mozilla
       (this last one may take a while as it includes pre-compiled libraries)
 
@@ -112,8 +121,11 @@ Note: These instructions assume you are already logged in as 'root'.
       /sbbs/src/sbbs3/gcc.linux.exe.debug/node
       /sbbs/src/sbbs3/gcc.linux.exe.debug/chksmb
       /sbbs/src/sbbs3/gcc.linux.exe.debug/fixsmb
+      /sbbs/src/sbbs3/gcc.linux.exe.debug/addfiles
+      /sbbs/src/sbbs3/gcc.linux.exe.debug/filelist
       /sbbs/src/sbbs3/gcc.linux.exe.debug/smbutil
       /sbbs/src/sbbs3/gcc.linux.exe.debug/sbbs
+      /sbbs/src/sbbs3/gcc.linux.exe.debug/sbbsecho
       /sbbs/src/sbbs3/scfg/gcc.linux.debug/scfg
       /sbbs/src/sbbs3/scfg/gcc.linux.debug/scfghelp.ixb
       /sbbs/src/sbbs3/scfg/gcc.linux.debug/scfghelp.dat
@@ -129,20 +141,20 @@ Note: These instructions assume you are already logged in as 'root'.
       cd /sbbs/xtrn/sbj
 
    B. Build Synchronet Blackjack:
-      gmake -f Makefile.gnu
+      gmake
 
    C. Change to this dircectory:
       cd /sbbs/xtrn/sbl
 
    D. Build Synchronet BBS List:
-      gmake -f Makefile.gnu
+      gmake
 
 
 4. Configure the BBS:
 
    A. Run SCFG:
       /sbbs/exec/scfg /sbbs/ctrl
-      (if you have problems with the libdialog interface, try running
+      (if you have problems with the curses interface, try running
        "scfg -d" instead)
       Tip: Set the SBBSCTRL environment variable and you won't have to specify
            the path to the "ctrl" directory on the command-line:
@@ -174,7 +186,7 @@ Note: These instructions assume you are already logged in as 'root'.
       Name                            Synchronet Configuration
       Internal Code                   SCFG
       Start-up Directory
-      Command Line                    %!scfg -d -l%r
+      Command Line                    %!scfg -l%r
       Clean-up Command Line
       Execution Cost                  None
       Access Requirements             SYSOP
@@ -192,7 +204,7 @@ Note: These instructions assume you are already logged in as 'root'.
       Name                            Synchronet BBS List
       Internal Code                   SBL
       Start-up Directory              ../xtrn/sbl
-      Command Line                    sbl%.
+      Command Line                    ./sbl%.
       Clean-up Command Line
       Execution Cost                  None
       Access Requirements
@@ -210,8 +222,8 @@ Note: These instructions assume you are already logged in as 'root'.
       Name                            Synchronet Blackjack!
       Internal Code                   SBJ
       Start-up Directory              ../xtrn/sbj
-      Command Line                    sbj%. /l
-      Clean-up Command Line
+      Command Line                    ./sbj%. /l
+      Clean-up Command Line           ./sbjclean
       Execution Cost                  None
       Access Requirements
       Execution Requirements
@@ -315,19 +327,11 @@ Note: These instructions assume you are already logged in as 'root'.
    4. To view default settings (node and port numbers), run:
       /sbbs/exec/sbbs defaults
 
-
-6. Known Problems
-
-   A. Set username ("un") command-line option not working 100%.
-
-   B. Can't run "vi" as external editor (requires tty) - how about "elvis"?
-
-   C. No DOSemu integration (yet), so no support for DOS programs/doors.
-
-   D. Occasional unresolved segfault (see below).
+   5. To edit the default settings, edit the file:
+      /sbbs/ctrl/sbbs.ini
 
 
-7. Debugging
+6. Debugging
 
    A. Run the GNU debugger:
       gdb /sbbs/exec/sbbs
diff --git a/docs/v310_new.txt b/docs/v310_new.txt
index b4da2ed359..4a67a94f16 100644
--- a/docs/v310_new.txt
+++ b/docs/v310_new.txt
@@ -1313,7 +1313,7 @@ o New File->Properties->Advanced tab to set control directory and host name
 
 JavaScript (http://synchro.net/docs/js.html)
 ~~~~~~~~~~
-o Added BranchCallback for detecting infinite loops and releasing timeslices
+o Added BranchCallback for detecting infinite loops and releasing time-slices
   while executing scripts
 
 o New MsgBase.subnum (0-based sub-board number) property
@@ -1506,4 +1506,828 @@ o Logs maximum recipients reached error in spam.log
 o SMTP MAIL command now resets recipient list per RFC 821
 
 
+***********************************************************
+* What's New in Synchronet Version 3.10 Revision J (Beta) *
+***********************************************************
+
+General
+~~~~~~~
+o Better JavaScript reliability
+
+o Much improved anti-SPAM measures in SMTP Mail server
+
+o More detailed spam.log entries
+
+o Sysop-configurable socket options (applied to all opened sockets)
+  - socket options set in ctrl/sockopts.cfg
+  - socket option values can be queried using "finger ?sockopts"
+
+o Servers are automatically recycled on an "accept" failure
+
+o Improved message base error handling (SMBLIB v2.15)
+
+o Automated daily backups of user and mail databases
+
+o SBBSCTRL can export/import sbbs.ini file (registry settings)
+
+o Console mode version (sbbs.exe) can read in sbbs.ini file for instance
+  settings - no more ugly command-lines required
+
+o Console mode version now includes node listing/control commands
+
+o Services on UDP (datagram) sockets are now supported
+
+o Tons of improvements to both newslink.js and nntpservice.js
+  - Better dupe message detection/prevention
+  - Better retainment of message-ids across gated message networks
+  - Better prevention of inadvertent gating (must have gate-between-net-types)
+
+
+SCFG
+~~~~
+
+o Now creates data and storage directories (again)
+
+o Bugfix: wasn't saving sub-board's newsgroup name
+
+o Backed-up .cnf files are now named *.cnf.# instead of *.cn#
+  - no longer limited to 10 backups
+
+o Number of daily user and mail database backups to keep, configured in
+  SCFG->System->Advanced Options
+
+o Removed unused new user question toggles: computer type and multiple choice
+  computer questions
+
+
+NewsLink (newslink.js)
+~~~~~~~~
+o Better dupe message detection/prevention using X-Gateway header field
+
+o Better retainment of message-ids across gated message networks
+
+o Better prevention of inadvertent gating (must have gate-between-net-types)
+
+o Creates default (blank) properties for message header object:
+  eliminates script errors when importing malformed message headers
+
+o Uses newsgroup name as default "to" header field value of imported msgs
+
+o Added optional flags field to area lines in newslink.cfg
+  Supported flags:
+	n - don't add "from newsgroup" tag to imported message text
+	t - don't add tear lines to imported message text
+	x - don't add tear and tag lines to exported message text
+
+o Improved debug/status output
+
+o Added support for Tracker1's -ix option (import fixed number of messages)
+
+o Added support for parsing and sending of FidoNet-extension headers
+  (e.g. X-FTN-MSGID)
+
+o Only includes references/reply_id field if it exists in the header (!undefined)
+
+o print statements are now crlf-terminated for easier debugging with ;EXEC
+
+
+nntpservice.js
+~~~~~~~~~~~~~~
+o Many of the improvements made to newslink.js, also made in nntpservice.js
+
+o Added support for the DATE command (RFC 2980)
+
+o Uses message-id of posted msgs if sender is a slave server (not a client)
+
+o Tracker1's modification to set the "to" field of posted messages based on
+  the from field of the message referenced in "references" header field
+  (if present)
+
+o Tracker1's modification to replace spaces with underscores in e-mail 
+  addresses
+
+o Added support for missing argument to ARTICLE, HEAD, BODY, and STAT cmds
+
+o Added support for the STAT command
+
+o Added read/posted messages stats after logoff
+
+o Writes original newsgroups header to outbound msgs
+
+
+JavaScript
+~~~~~~~~~~
+o printf() and format() now convert floating point numbers to long (%ld)
+
+o BBS timed events can now use User class
+
+o Branch callbacks now collect garbage (free-up memory) every 100 calls
+  - this fixes the problem of every created object living in memory during
+    the life of a script causing a long-running script to eventually run 
+    out of memory
+
+o Fixed the following global methods (were corrupting passed string buffer):
+  ascii_str(), strip_ctrl(), strip_exascii(), and truncsp()
+
+o UDP (datagram) sockets are now supported by the Socket class
+
+o New Socket class properties: local_ip_address, local_port,
+  remote_ip_address, and remote_port
+
+o Socket getoption() and setoption() methods no longer have the option "level"
+  as an argument and the option name is now specified as a string (the numeric
+  values defined in sockdefs.js are not cross-platform)
+
+o Fixed Socket is_connected property value (was true before connect)
+
+o Created Socket poll() method - with optional timeout argument (in seconds)
+
+o Changed Socket recv, recvline, and peek methods to support unlimited buffer
+  lengths
+
+o Fixed bug in bbs.replace_text() method when called with empty string ("")
+
+o New bbs properties: msg_id, msg_reply_id, smb_msgs, and smb_curmsg
+
+o New console method: ansi_getxy() to get terminal's current cursor location
+
+o New console method: lock_input() to lock/unlock the input_thread allowing
+  direct client.socket read calls from scripts
+
+o system.spamlog() now takes an "action" parameter
+  - usage: spamlog(prot, action, reason, host, ip_addr, to);
+
+o Fixed memory leaks in MsgBase class
+
+o MsgBase save_msg() and put_msg_header() methods now parse the header 
+  object's id and reply_id properties and place them in the appropriate SMB 
+  header fields
+
+o MsgBase get_msg_header() method defines only the following properties as 
+  read only: number, id, and reply_id 
+  - the rest are now read/write
+
+o MsgBase get_msg_body and get_msg_tail methods now take additional bool
+  parameter indicating whether the message is to be rfc822-encoded or not
+  (defaults to false)
+  - this solves the problem of the nntp service and newslink module sending
+    messages with dots in the first character of a line incorrectly
+
+o Added MsgBase ftn_msgid, ftn_reply, ftn_pid, ftn_area, and ftn_flags
+  FidoNet msg header properties
+
+o MsgBase msg hdr reply_id based on time and number of original message
+  - reply_id property is not created if it doesn't exist in the msg header
+  - msg.id is based on the time the message was imported rather than written
+
+o Fixed MsgBase subject, to, and from CRCs in message base index
+  - threading on author, to, or subject didn't work on imported msgs
+
+o Added support for MsgBase msg hdr USENET Path and Newsgroups header fields
+
+
+Telnet Server
+~~~~~~~~~~~~~
+
+o PostLink and QWK call-out events now run in foreground (to avoid packet
+  open conflicts) and use the command-shell (for shell scripts on Unix)
+
+o An "riosync timeout" is no longer logged as an error
+
+o Non-exclusive timed events can now run *while* the event node is "in use"
+
+o Fixed bug with multiple instances and non-exclusive events, was setting node
+  status to WFC even if user was online
+
+o IDENT lookup no longer assumes server is running on port 23
+
+o getkey now releases time-slices while waiting for "cold key" input
+
+o ansi_getxy releases time-slices while waiting for terminal response
+
+o ansi_getlines releases time-slices while waiting for terminal response
+
+o Timed events that use Baja or JavaScript output routines will now print to
+  the event log
+
+o "To users" are now supported on Internet-networked message areas
+
+o New user question toggle (SCFG->System->New User Values->Question Toggles)
+  to disable the upper/lower case conversion of new-user-supplied strings
+
+o New system toggle options (SCFG->System->Toggle Options) to suppress
+  hard-coded displays (system info and active node list) during logon
+
+o New MSGID and REPLY kludge lines in QWK networked messages
+  - allows cross-network threading based on message-id
+
+o Added new command (E) to allow users to edit their posted messages on a
+  specific sub-board (sysop configurable in SCFG)
+
+o Implemented support for SUB_DELLAST toggle option
+  - allows deleting of last message only
+  - option has been in SCFG for a long time, but never implemented
+
+o Fixed chat channel 0 (sysop broadcast channel) bugs related to chat actions
+
+o Auto-initializes SBBSDATA and SBBSEXEC convenience environment variables
+  for use in external programs/batch files/shell scripts
+
+o Sets socket mode back to blocking after running external programs
+  - fix for external programs that change the socket's blocking mode
+
+o If the menu file text/menu/xtrn/code.* exists (where code is the external
+  program's internal code), the file will be displayed to the user before the
+  door is run
+
+o New @-codes: MSG_NUM, MSG_ID, MSG_REPLY_ID, SMB_MSGS, SMB_CURMSG, 
+  SMB_LAST_MSG, SMB_MAX_MSGS, SMB_MAX_CRCS, SMB_MAX_AGE, and SMB_TOTAL_MSGS
+
+o Updated old msg group and sub-board name/number @-codes to use currently
+  open message base details, if applicable
+
+
+SBBSecho
+~~~~~~~~
+o New option (in ECHOCFG) to strip linefeeds from exported messages
+  - Previously, it *always* stripped linefeeds causing formatting problems
+    with some non-comforming echomail programs (defaults to "Off")
+
+
+Mail Server
+~~~~~~~~~~~
+o Added support to SMTP server for "forward:" and "local:" address prefixes,
+  allowing sender-control of forwarding to external mail addresses
+
+o Created generic DNS blacklist support via optional configuration file:
+  ctrl/dns_blacklist.cfg - allows multipe RBL-style DNS blacklists
+
+o The hardcoded RBL functionality has been replaced with dns_blacklist.cfg
+
+o Added support for ctrl/dnsbl_exempt.cfg to exempt a list of IPs 
+  (or IP masks) from DNSBL testing
+
+o Three new options on handling of mail from DNSBL-listed servers:
+  A. refuse sesion (used to be only choice)
+  B. refuse mail (e.g. report "bad address")
+  C. ignore mail (e.g. pretend to receive)
+  D. receive mail, but tag msg subject and header with configurable tags
+
+o Now logs DNS query result (e.g. 127.0.0.2) from DNS-based Blacklist servers
+
+o Changed DNS blacklist reject error code from 571 to 550
+
+o POP3 server allows up to three non-USER commands in authentication state
+  i.e. ignores "CAPA" command (RFC 2449)
+
+o Better support for outbound addresses with both "name" and <addr> portions
+
+o sendmail_thread sends properly formatted RCPT TO command even if address
+  is not properly formatted ("name" <addr> for example)
+
+o sendmail_thread can now send mail to addresses that have text after hostname
+
+o Made "msg text lines per yield" value configurable (default: 100)
+
+o Made "max recipients" value configurable (default: 100)
+
+o Undeliverable messages from local user #0 can't be bounced
+  (e.g. telval/smbutil)
+
+
+***********************************************************
+* What's New in Synchronet Version 3.10 Revision K (Beta) *
+***********************************************************
+
+General
+~~~~~~~
+o New IP filter file: text/ip-silent.can
+  - connections from IP addresses in this file are silently refused
+    (same format as other text/*.can files)
+
+o More consistent message threading-by-subject
+
+o Non-standard timezones are now represented as UTC+/-hh:mm
+
+o All messages created are assigned both Internet (RFC822) and FidoNet (FTS-9)
+  compliant message-IDs
+
+o All messages created are assigned a FidoNet (FSC-46) compliant program ID
+
+o SBBSCTRL (Win32) now saves and restores customized font styles 
+  (bold, italic, underline, etc.)
+
+o Fixed handling of invalid Ctrl-A sequences in FILE_ID.DIZ
+
+o Web server included in console-mode version (sbbs.exe) Unix build
+  - very preliminary
+
+o Synchronet ported to OpenBSD (thanks Deuce!), so Synchronet for Unix now
+  builds and runs on Linux-x86, FreeBSD-x86, and OpenBSD-x86.
+
+
+JavaScript
+~~~~~~~~~~
+o New documentation in the works
+  http://synchro.net/docs/js.html
+
+o Dynamically-generated Object Model Reference (more complete and accurate)
+  http://synchro.net/docs/jsobjs.html
+
+o Better error reporting of internal errors that cause script termination
+
+o User class constructor can be called with no arguments
+  - creates a User object representing no existing user
+  - number property must be set before any changes can be saved
+
+o Global load() method can now (optionally) take additional arguments which
+  are then used to change the values of the global argv and argc properties
+  Example: load("myscript.js", arg1, arg2);
+
+o New global truncstr(str,set) method, truncates a given string at the first
+  occurance of any char in set (ala strpbrk), returns the truncated string
+
+o New methods: system.put_node_message() and system.put_telegram()
+  - same as bbs methods by the same name but can be called from other servers
+
+o New method: system.new_user(alias)
+  - returns User object representing a new user record
+
+o New method: system.matchuserdata(field, data, [usernumber]) 
+  - searches for an exact string match of any user record data field and
+    returns the number of the first matching user
+  - the field is specified by offset into user.dat record
+  - usernumber is an optional user to skip in the search
+
+o Fixed system.freediskspace property, returns up to 4GB (instead of -1)
+
+o bbs.scan_dirs() and scan_subs() methods ignored first parameter
+
+o bbs.get_newscantime() returns new scan pointer date/time
+
+o bbs.get_telegram() was expecting too many parameters
+
+o Fixed console.question property (was dupe of console.wordwrap property)
+
+o Made console.question property writeable
+
+o New console.strlen() method returns length of string excluding Ctrl-A codes
+
+o File.open() method now accepts an additional, optional bool argument:
+  shareable (defaults to false)
+  - if a file is opened as 'shareable', then simultaneous opens will be
+    allowed (no file locking), otherwise, the file is locked according the
+    open 'mode'
+
+o File.open() method now opens file in text mode (on Win32) unless 'b'
+  (binary) mode is not specified
+
+o New File.printf() method (works like the C fprintf function)
+
+o File.lock() and unlock() methods:
+  - act on the entire file if called with no arguments
+  - offset defaults 0, and length defaults to the file length - offset
+
+o New xtrn_area object that represents the configured external programs
+  - currently only includes online external programs (doors)
+  - will add timed events, external editors, etc. later
+  - sorry Rocko, couldn't wait for your version :-)
+
+o MsgBase class:
+  Fixed case sensitivity problem with opening message bases on Unix
+  Added support for hdr.from_org (Organization) header field
+  Imports and exports SMTP reverse_path header field (hdr.reverse_path)
+
+o New MsgBase.open() method - now required to access a message base, allows
+  better error handling than opening in the constructor
+
+o New MsgBase.is_open property (boolean), reflects msgbase open state
+
+o MsgBase.save_msg() method will open the message base if necessary
+
+o MsgBase.put_msg_header() method now updates the index record too
+
+o MsgBase.get_msg_header() now exports the following header fields:
+  summary, priority, cost, times_downloaded, and last_downloaded
+
+o MsgBase.get_msg_header() method truncates trailing whitespace characters
+  from all header fields
+
+o Repeating and generic ASCII header fields (e.g. RFC822HEADER) are accessed
+  with the new hdr.field_list array
+
+o New MsgBase.cfg property contains all sub-board configuration settings
+  - doesn't exist for "mail" message base
+
+o MsgBase.save_msg():
+  USENETPATH headers are no longer *always* added to newly saved messages
+  It's up to another application (e.g. nntpservice.js) to add the local system
+  to the path
+  Added support for importing message headers with replyto header fields
+
+o Fixed bug in Socket.poll() - timeout value only worked as first argument
+
+o Fixed memory leak in Socket.sendfile() if file read failed
+
+o New Socket.recvfrom() method that returns an object with 3 properties:
+  data, ip_address, and port (for UDP responses to broadcasted requests)
+
+o New Socket.sendto() method - usage: sendto(data,ip_addr,port) for UDP
+
+o Socket.connect() call is no longer needed for UDP sockets
+
+o Socket.local_port and remote_port properties are now numbers
+  (instead of strings)
+
+o New property Socket.type, set to SOCK_STREAM (TCP) or SOCK_DGRAM (UDP)
+  when the socket is created (read-only)
+  - SOCK_STREAM and SOCK_DGRAM are defined in exec/sockdefs.js
+
+o Fixed bug in Socket.bind() if port number specified (byte-order fix)
+
+o Port arguments in Socket.bind(), connect() and sendto() can now be
+  specified as a service name (e.g. "telnet", "http", "finger", etc).
+
+o New Socket.listen() method, puts socket in 'listening' state,
+  accepts optional 'backlog' argument (defaults to 1)
+
+o New Socket.accept() method, accepts an inbound TCP connection,
+  returns a newly created socket object
+
+o Socket.poll() method now accepts an additional, optional argument: 
+  bool poll_for_write, defaults to false (poll for read)
+
+
+SCFG (Configuration Utility)
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+o Added optional parent directory to file library configuration
+  - used to specify a physical parent directory for all logical directories
+    in a file library (convenient for importing CD-ROM directories)
+  - requires v3 of ADDFILES and FILELIST utilities
+
+o Support for importing "raw" directory listings (containing just dir names)
+  - for use in conjunction with the new "parent directory" option
+
+o User signatures can now be disabled on a per sub-board basis
+
+o New option to create lowercase drop file names for external programs
+  (for better Unix file system compatibility)
+
+o Exports and imports newsgroup name as part of subs.txt format
+
+o Fixed bug that could occur if new user command shell was set to last
+  configured command shell, and that shell was later deleted
+
+
+Telnet Server
+~~~~~~~~~~~~~
+o All ctrl-keys (built-ins and hot-key events) use same the recursion 
+  protection mechanism now limiting them to a total maximum depth of 2
+  - solves re-entrancy issues for hot-key events
+
+o DEL (ASCII 127) is treated the same as backspace (ASCII 8) in string
+  input routines
+
+o When importing QWK and REP network packets, the corresponding
+  data/qnet/<id>.in is only created when necessary
+
+o Improved message header display with sysop message scan 'OH' command
+
+o New sysop mail read command, 'H', used to display mail message headers
+
+o Converted SMB_CURMSG @-code to 1-based (cosmetic bugfix)
+
+o Added new @-code HOSTNAME, used to display current host name
+  - may not always be the same as the INETADDR
+
+o New log entry created when the user pages the sysop to chat
+
+o Added Continue? questions during new user procedure to give user an opt-out
+
+o Creates user, msg_area, and file_area JavaScript objects during user logon
+  and new user creation
+
+o Checks for node interruption during an outbound telnet gateway session
+
+o Unix-build creates external program (door) drop-files with CRLF-deliminated
+  lines if not configured as 32-bit native
+  - for DOSEMU/DOSCMD compatibility
+
+o trashcan() now delays 500 milliseconds after displaying the optional
+  text/bad*.msg file 
+  - gives time for transmit buffer to clear before disconnecting
+
+o Fixed exception during termination of bbs_thread if subs/dirs were added in
+  SCFG and the confg files were re-loaded (node(s) recycled) before shutdown
+
+o Baja FTP function fixes:
+  - Removed extra crlf sent with FTP PASS command
+  - Fixed bug causing intermittent bind failures on FreeBSD
+  - Fixed active (non-PASV) mode file transfers
+
+o FOSSIL driver for NT-based operating systems (sbbsexec.dll) now reports
+  I/O buffer fullness more accurately
+  - fixes problem with FDSZ sending entire file then timing out while waiting
+    for acknowledgement from client
+
+o One-byte-at-time external programs (e.g. LORD) should preform better on
+  NT-based operating systems due to better interprocess communication
+
+o When debugging (logging) received telnet commands, sent commands are now
+  logged too
+
+o QWKnet kludge line lengths up to 500 chars now supported
+  - previously limited to 128 chars
+
+o Fixed bug that would change user #1's QWK settings when importing QWKnet
+  packets
+
+o Removed log output during the packing/unpacking of messages for QWK nodes
+
+
+ADDFILES
+~~~~~~~~
+o Several bugs fixed since last 3.00 beta releases
+
+
+FILELIST
+~~~~~~~~
+o New version 3.00 port (for Win32 and Unix)
+
+
+SMBUTIL
+~~~~~~~
+o Messages posted via SMBUTIL now have the SENDERAGENT field set to
+  AGENT_SMBUTIL to prevent the Synchronet mail server (or other programs)
+  from bouncing undeliverable messages back to a "process"
+
+o Improved packmsgs() handling of failed deletion/renaming of temp files
+  (occurs if the msgbase is open by another process at the time of packing)
+  - the msgbase should no longer be left in a corrupted state if this occurs
+
+o Cosmetic changes to header dump routine
+
+o Creates a FIDOPID (program identifier) header field when storing messages
+
+o New command-line option (-d) to set default values for header fields
+  (to, from, from_number, and subject) when importing messages
+
+
+CHKSMB
+~~~~~~
+o Now verifies header lengths match calculated header lengths
+
+o Displays more detail regarding corrupted data field offsets when used 
+  with the -e switch
+
+
+SBBSecho
+~~~~~~~~
+o Bugfix: FLO files were being truncated rather than appended
+
+o No longer writes the same (duplicate) bundle name to the FLO file if it's
+  already listed
+
+o Now deletes BUNDLES.SBE when no longer needed (rather than truncate it)
+  - hopefully eliminates FAQs about this file
+
+o OS/2 builds now available again (thanks Watcom!)
+
+o Now imports and exports TZUTC, MSGID, REPLYID, PID, and TID control fields
+
+o Sets "when written" time zone on imported messages based on TZUTC or
+  TZUTCINFO kludge lines, if present
+
+o Tosser ID (TID) fields are created if it doesn't already exist
+
+o Fixed the creation of inter-zone outbound point directories for FLO mailers
+
+o Fixed importation of FLAGS ctrl line (was looking for "FLAGS:" not "FLAGS")
+
+o FLAGS and unrecognized kludge lines are now added to exported messages
+
+o Line feeds are ignored when converting non-ASCII chars for ASCII-only subs
+
+o Fixed case of mail message base (for Unix file systems)
+
+
+Services
+~~~~~~~~
+o Support for new "static" services
+  - services that listen on a socket and accept their own connections/clients
+  - requires option bit 1 (0x2) set in ctrl/services.cfg file
+
+o New global write() and writeln() methods to make it consistent with FTP and
+  Web server global methods used to generate html (e.g. nodelist-html.js)
+
+
+Mail Server
+~~~~~~~~~~~
+o Uses hostname instead of inetaddr (usually the same) in SMTP cmds/responses
+  and SMTP "Received" headers
+
+o Support for sender addresses that include comments (in parenthesis)
+
+o Increased read timeout from from 1 to 5 minutes
+
+o POP3 server actually checks the number of lines sent successfully and only
+  marks the message as 'read' if all lines requested were sent successfully
+
+o Now stores original, unmodified RFC822: to, from, and reply-to header fields
+
+o Bounce-messages are now flagged as from AGENT_SMTPSYSMSG and messages from
+  processes aren't bounced (preventing bounced message loops)
+
+o Reduced mail server cycle time from 5 to 2 seconds (frequency at which
+  recycle semaphores are checked)
+
+o Added option to toggle logging of received responses (DEBUG_RX_RSP)
+
+o Much improved message bouncing:
+  - delivery failure (bounce) messages now includes error details
+  - error message text is no longer crammed into the bounce-message subject
+  - the original subject is retained
+  - fixed bug that could cause corruption after original message deletion
+  - use of original reverse-path for bounced message delivery
+
+
+FTP Server
+~~~~~~~~~~
+o Improved string bounds checking
+
+o Fixed bug with continuous recycling
+
+o Now (optionally) echoes password attempt for unknown users
+
+o Increased select timeouts (from 1 to 5 minutes)
+
+o Increased recycle semaphore check frequency (from 5 to 2 seconds)
+
+o The reported "unix" file and directory modes more closely reflect
+  the actual read/write permissions (FTP clients should ignore them anyway)
+
+o Added support for resumed uploads (using APPE or REST commands)
+
+o Fixed time display of files in local directory listings
+
+o CWD's to paths with trailing filenames now fail (as they should) 
+  - when IE fails to download a file, it attempts to CWD to the path, and if 
+    the CWD succeeds the subsequent requested paths were all wrong
+
+
+****************************************************
+* What's New in Synchronet Version 3.10 Revision L *
+****************************************************
+
+General
+~~~~~~~
+o Timed events can be configured to run only on specific days of the month
+  (example: the 1st and 15th of every month)
+
+o Eliminated harmless accept/select errors when shutting down servers
+
+o Win32 build now uses Critical Sections in place of Mutexes (slower)
+
+o Now using thread-safe time functions in Unix builds
+
+o Now using thread-safe "real path" function in OpenBSD build
+
+o New command-line utility (makeuser) to add a user to the user database
+
+o Node window in SBBSCTRL no longer unnecessarily locks node.dab
+  - eliminates locking/reading errors
+
+o QWK Bugfix: was always truncating MESSAGES.DAT, so appending to an existing
+  QWK packet (pre-packed or aborted download) did not work at all (ever)
+  - this also resulted in a side-effect of corrupted indexes (if enabled)
+
+
+Telnet Server
+~~~~~~~~~~~~~
+o Fixed problem detecting number of rows for Windows 2K/XP telnet client 
+  (was reporting 105 lines when used in a scrollable window)
+  - fixed by Deuce
+
+o Ctrl-C now purges both input and output buffers (when appropriate)
+
+o Built-in ctrl key handling (Ctrl-C, Ctrl-T, Ctrl-U, etc) can be disabled
+  with SCFG->System->Advanced->Control Key Pass-through
+  - any keys specified in this bit-map will not be handled internally or by
+    global hot key events
+
+o New toggle option for external programs, events, and message editors:
+  - use Shell to Execute, forces command-line to be executed via system
+    command shell (e.g. cmd.exe, bash/sh, etc.)
+
+o ctrl/attr.cfg now support lower-case attribute character codes
+
+o Improved server shutdown detection in node threads
+
+o Short (single line) error log entry now includes last Win32 error value
+
+o Displays external netmail address before prompting to forward local mail
+
+o The 'F'ind text command while reading messages can now either show message
+  headers only or entire text
+
+
+JavaScript
+~~~~~~~~~~
+o Increased the default JavaScript heap size to 8MB
+
+o JavaScript heap size is configurable
+  - JavaScriptMaxBytes key in the [Global] section of the sbbs.ini file
+  - SBBSCTRL:File->Properties->Advanced->JavaScript Heap
+
+o console.attributes can now be set with an attribute string
+  (Ctrl-A codes without the Ctrl-A escape characters)
+
+o New property: console.ctrlkey_passthru, bit-map specifying which control
+  keys will not be handled internally or by global hot key events
+
+o New array, console.color_list[] contains sysop-configured attributes from
+  ctrl/attr.cfg (which can now be extended with additional color definitions)
+
+o Timed events now have access to user objects (msg_area, file_area, etc)
+
+o Fixed msgbase.put_msg_header() - no longer creates duplicate header fields
+
+o system.spamlog() now takes additional 'from' parameter (typically the SMTP
+  reverse-path)
+
+o Socket poll() method accepts a floating point timeout for fractional timeout
+  values
+
+o bbs.sub_info() and dir_info methods now accept optional sub/dir argument
+
+o All bbs methods that accept sub/dir argument will now default to current sub
+  or dir if not specified
+
+o New properties: bbs.batch_upload_total and bbs.batch_dnload_total
+
+o bbs.batch_download() now checks if download queue is empty, now returns BOOL
+  instead of VOID
+
+o Fixed msg_area.grp_list[].sub_list[].is_operator and is_moderated properties
+  - were true if configured as blank in SCFG (should be false)
+
+o file_area.lib_list[].dir_list[].link property returns (as in v3.10j)
+
+o New properties: file_area.min_diskspace, user_dir, sysop_dir, and upload_dir
+
+o Renamed the File.delete() method to File.remove() - can't use JavaScript 
+  keyword as method name
+
+o New property: console.aborted (bool), true if user hit Ctrl-C to abort I/O
+
+o Renamed property: console.rio_abortable to console.abortable (no local I/O)
+
+o Services now have access to user objects (e.g. msg_area, file_area, etc.),
+  without requiring a false login() call
+
+
+SBBSecho
+~~~~~~~~
+o The TID (Tosser ID) kludge line is only added when exporting messages
+
+
+ADDFILES
+~~~~~~~~
+o Ignores ex-ASCII chars in filenames only when run in ASCII-only mode
+  - support for foreign language chars in filenames
+
+
+Mail Server
+~~~~~~~~~~~
+o Added support for external (native) mail processing commands that can modify
+  a message's header, body, or recipient list, or reject the message with a
+  specific error message based on its contents (SPAM filter, virus scan, etc)
+  - may also be used for mailing lists, file requests, etc
+  - see ctrl/mailproc.cfg for details
+
+o The current hostname is now also used in determing if a received e-mail is
+  addressed to a local or external user
+
+o Better handling of misconfigured/missing DNS server address (for MX-lookups)
+
+o SPAM log now includes the SMTP reverse-path (address) as specified by client
+
+o Added option to enable DNSBL debug log output (MAIL_OPT_DNSBL_DEBUG)
+
+o Active client counter is incremented before (potentially lengthy) DNSBL 
+  lookups
+
+o dnsbl_exempt.cfg is now checked against the IP address and the hostname
+  of the sending server (if either matches, the server is exempt)
+
+o No longer adds the Organization header field to messages received via SMTP
+
+o Now deletes attached file if MSG_KILLFILE aux attribute set
+
+o New log entry when a delivery failure notification message is created
+
+o Fixed failure to create delivery failure notification message:
+  !BOUNCE ERROR -100 (msgbase not open) incrementing data allocation units
+
+
 /* End of V310_NEW.TXT */
-- 
GitLab