# What's New in Synchronet v3.12

- Web Server (New!)
  - HTTP 1.0 and 1.1
  - Virtual Hosts
  - CGI (currently on Unix only)
  - Server-side JavaScript (SSJS) for dynamically-generated web content
  - Default HTML user interface for creating new user accounts and reading messages
  - Standard format HTTP access logs (`data/logs/http-*`)
  - Configurable MIME file type support (`ctrl/mime_types.ini`)
  - ... and many more cool features thanks to Stephen Hurd (Deuce)
- Mail Server
  - Supports SMTP authentication (PLAIN, LOGIN, or CRAM-MD5) when using an external relay server
  - Creates default MIME Content-Type for non-Internet messages (`charset=IBM437`)
  - Supports `user@[ip_address]` notation
  - Supports RFC822 header fields in `Field[white-space]:` format
  - Fixed receipt of SMTP telegrams (inter-BBS instant-messages)
  - Fixed possible buffer overflow scenarios
  - Fixed UDP DNS MX-record look-up bug
  - If posting via authenticatd SMTP (e.g. `sub:code@yourbbs.com`), verifies user meets access requirements
  - Much-improved external mail processor support using new `ctrl/mailproc.ini`
    - Or `ctrl/mailproc.host.ini` if it exists
    - Includes ListServer module as example mail processor
    - See listserver.txt for details
  - Mail processors may run only for specific recipients (or a set of recipients)
  - Additional mail processor command-line specifiers:
    - `%R` (Reverse path)
    - `%S` (Sender's name)
    - `%A` (Sender's address)
  - JavaScript mail processor modules:
    - can now use `log()` to write to the mail server log window
      (AKA `write`, `writeln`, and `print`)
    - have access to global variables: `sender_name`, `sender_address`, and `reverse_path`
- Telnet/RLogin Server
  - Telnet option negotiation overhaul:
    - Compatibility with more clients
    - Gets/stores terminal type
    - Supports negotiated window size (much more reliable than ANSI cursor position reports)
  - Telnet server now escapes the telnet IAC (ASCII 255) character
  - Many RLogin improvements and behavior changes (ask Deuce for details)
  - Switched "Allowed RLogin address list" from `data/rlogin.can` to `ctrl/rlogin.cfg`
  - QWK/REP packing/unpacking semaphore file allows multiple hosts to process QWK events (for FTP server)
  - Counts and logs number of "short sends" on client socket
  - Fixed crashes/segfaults when re-loading configuration files
  - Fixed "Monitor Time Left" external program toggle option
  - Fixed calculation of upload/download and post/call ratios over 50% in Access Requirement Strings
  - Beeps at user when reaching end of allowed string input
  - Batch download file list now contains the long filenames if the file transfer protocol is "Native 32-bit"
  - Rejects filenames begining with a dash as a "suspicious filename"
  - Use default `SHELL` value of `/bin/sh` if environment variable not set for Unix version
  - Created `PROT` ARS keyword (e.g. "Telnet" or "RLogin")
  - The `%p` command-line specifier now expands to the client's protocol (e.g. "Telnet" or "RLogin")
  - Allow spinning cursor to be completely disabled by users (even for pause prompts)
  - `input_thread_mutex` lock fix (work-around necessary for some Linux distros)
  - Eliminated hard-coded "Continue?" prompt during new user procedure, using text.dat line 564 instead
- FTP Server
  - Supports both shared and non-shared open modes when sending files (for download)
  - Guest/anonymous HTML clients can now toggle on/off extended file descriptions in `00index.html`
  - Don't update existing (pre-packed?) QWK packet when downloading or "sizing" a QWK packet via FTP
- Synchronet Services
  - Configurable stack size for service threads
  - Improved `client_add()` and `client_remove()` methods
  - Eliminated support for legacy `ctrl/services.cfg`
    - Must use `ctrl/services.ini` or `ctrl/services.host.ini` now
  - Fixed termination request with active clients
- All Servers
  - Automatic bind-retry on failure (typically, "address/port already in use")
  - Much more flexible semaphore file format for recycling or shutting-down servers using the local file system
    - Format: `ctrl/action[.host][.service]`
    - Examples:
      - `ctrl/recycle` - recycle all services on all hosts
      - `ctrl/recycle.vert` - recycle all services on system with hostname "vert"
      - `ctrl/shutdown.vert.telnet` - shutdown telnet service on vert only
        service may be "telnet", "ftp", "mail", "web" or "services"
    - Legacy (`ctrl/*.rec`) recycle semaphore files still supported
  - Startup initialization file (`ctrl/sbbs.ini`) is re-parsed upon server recycle
  - Much more responsive to requests for termination (immediate) and shutdown (when not in use)
- Message Bases (SMBLIB v2.40)
  - Performance and reliability improvements
  - The e-mail message base (`data/mail`) now supports an unlimited number of messages (within SMB limits)
  - High-level functions added for the convenience of 3rd party developers
  - New security header fields track who posted what messages from where
  - New hash database
    - to perform fast look-ups of message-IDs for threading and duplicate checking
    - robust body text dupe checking (better than legacy CRC history method)
    - hash history file is never purged or deleted so old dupes cannot return
    - no chance for false positives
  - Auto-thread linkage
    - resulting thread-links will be used extensively in future threaded message displays (ala web-boards)
  - New SMBUTIL commands:
    - `d` delete all messages
    - `h` dump hash database
  - New SMBUTIL options:
    - `-c[m]` create message base if it doesn't exist (m=max msgs)
    - `-l` LZH-compress imported message text
    - `-o` print errors on stdout (instead of stderr)
    - `-p` wait for keypress (pause) on exit
    - `-!` wait for keypress (pause) on error
    - `-b` beep on error (quiet is now the default)
  - New CHKSMB options:
    - `-b` beep on error (quiet is now the default)
    - `-h` do not check hash database
  - FIXSMB may now be used to repair multiple message bases with a single command
    Example: `fixsmb data/*.shd`
  - FIXSMB now removes "in-transit" attributes (holding messages in the mail server queue)
  - FIXSMB will now add message hashes to the hash database (if missing)
- JavaScript
  - JSexec new global methods:
    - `chdir()` (change current directory)
    - `putenv()` (create/set environment variable)
  - Background (multi-threaded) script support using `load(true, filename, args)`
  - New Queue class for bi-directional communications between modules/threads
  - New `bbs.mods` object for a common global repository for 3rd party modifications/modules
  - Reduced memory usage (using the undocumented JSPROP_SHARED attribute for properties)
  - `MsgBase.save_msg()` will accept any variable type for the body text
    and will automatically convert to a string (even arrays of objects)
  - For a complete list of JavaScript Object Model changes, see v312_jsnew.html
- Full-screen Utilities (e.g. SCFG, EchoCfg, etc.)
  - Mouse support returns to Win32
  - Strings longer than the screen width can now be edited
  - Support ANSI terminals (remote input doesn't currently work on NT-based OSes)
  - Support X consoles on Unix
  - Compatibility with terminals/keyboards lacking some extended keys.
    The following are now equivalanet in ulist (menus) and string input:
    - ^B = home
    - ^E = end
    - ^V = insert (string input only)
    - ^Z = help (F1)
    and in menus only:
    - + = insert
    - - = delete
    - backspace = escape (not new)
    - ^U = pgup
    - ^D = pgdn
    - ^C = copy (F5)
    - ^V = paste (F6)
  - ... and many more cool features thanks to Stephen Hurd (Deuce)
- Windows NT Services
  - Supports mute/umute and sysop available/unavailable control from the Synchronet Control Panel
  - Event log messages no longer contain warnings about "missing event source descriptions"
- Synchronet Control Panel (for Win32)
  - Now stores common server settings in `ctrl/sbbs.ini` instead of Windows Registry
    - Legacy registry settings are automatically imported
    - Allows easy interoperation with `sbbsNTsvcs.exe` and `sbbs.exe`
    - The startup .ini file can now be specified on the `sbbsctrl.exe` comand-line
    - Will use `ctrl/host.ini` by default, if it exists
  - Optionally use Windows file associations when editing or viewing text/ansi/ascii files
  - Synchronet Control Panel configuration (window sizes/positions/colors, etc) may be exported-to
    or imported-from `ctrl/sbbsctrl.ini`
- Synchronet Console
  - Added commands:
    - (R)ecycle/(S)hutdown/(T)erminate any server (or all servers)
    - (!) to execute an external (system) command

For many more changes since v3.10, see v311_new.html and v311_jsnew.html

Copyright © 2005 Rob Swindell
$Id: v312_new.html,v 1.6 2005/08/12 00:54:36 rswindell Exp $