|
|
1.1 ! root 1: Synchronet Message Base Specification Modification History ! 2: ========================================================== ! 3: ! 4: ****************************** ! 5: 01/20/94 Initial Release v1.00 ! 6: ****************************** ! 7: ! 8: Quite a few spelling errors in SMB.TXT corrected. ! 9: ! 10: Estimated maximum number of messages (in Introduction of SMB.TXT) formula ! 11: corrected (1500 rounded to nearest 256 is 1536, not 2048). ! 12: ! 13: Pages 32 and 38 (SENDEREXT and RECIPIENTEXT header field types) incorrectly ! 14: stated the index record contains CRC-32s, when in fact the index contains ! 15: CRC-16s of the agent names or extensions. ! 16: ! 17: FORWARDTO header field types incorrectly stated they were for replies, rather ! 18: than forwarding instructions. ! 19: ! 20: Trigger header field types incorrectly stated they were "attachments" rather ! 21: than triggers. ! 22: ! 23: Bug fixed in smb_open() function in smblib.c: was allocating buffer via ! 24: setvbuf for wrong file pointer when opening header file. Caused loss of ! 25: memory (2k) everytime smb_open() was called. ! 26: ! 27: Bug fixed in smb_getmsghdr() function in smblib.c: msg->from_agent,to_agent, ! 28: and replyto_agent were not initialized properly. ! 29: ! 30: Added from_ext, to_ext, and replyto_ext fields to msg struct. Initialized ! 31: with call to smb_getmsghdr() function. These are convenience pointers for ! 32: the to, from, and replyto agent extensions (user numbers, usually). ! 33: ! 34: Fixed a nasty bug in the smb_freemsgdat() function, causing odd values in the ! 35: SDA file and cross-linked messages when fast allocation mode was not used for ! 36: new messages. ! 37: ! 38: smb_putmsghdr() function replaced by smb_putmsg() and it calls smb_putmsghdr() ! 39: and smb_putmsgidx() - previously smb_putmsghdr() actually wrote the header ! 40: and the index. So you must change any occurances of smb_putmsghdr() to ! 41: smb_putmsg() if you intend to write to both the index and header records. ! 42: ! 43: smb_open() now takes a "retry_time" parameter (number of seconds) to lock ! 44: and read the message base header and verify the "id" and "version". Added ! 45: new error codes: -1 indicates failure to lock message base header, -2 indicates ! 46: id mismatch, and -3 indicates incompatible message base version. ! 47: ! 48: rewind() and clearerr() calls added to library functions to eliminate the ! 49: problem of "sticky" error flags when using fread() and fwrite(). Reordered ! 50: the use of chsize() to force seeking (with fseek()) before using the file ! 51: descriptor operation (chsize()) would would fail under some circumstances. ! 52: ! 53: smb_getmsgidx() function now uses "fast" message number look-up algorythm. ! 54: ! 55: Added smb_getlastidx() function to retrieve the last index in the message ! 56: base. ! 57: ! 58: Allocation strategy for hfield and dfield elements of the smbmsg_t structure ! 59: were changed to require less memory. Rather than an array of pointers (pointer ! 60: to a pointer) of type hfield_t or dfield_t, they are simply an array (pointer) ! 61: of type hfield_t or dfield_t. The only change you need to make are any ! 62: references to "smbmsg_t.hfield[x]->etc" to "smbmsg_t.hfield[x].etc". ! 63: ! 64: Added several new error codes to smb_getmsghdr(). -7 indicates missing one ! 65: of the three mandatory header fields (sender, recipient, or subject). -8 ! 66: indicates that total_dfields element of smbhdr_t is incorrect (extends beyond ! 67: smbhdr_t.length). -9 indicates incompatible header version. ! 68: ! 69: New error code to smb_addcrc(), -4 indicates error getting length of file. ! 70: ! 71: smb_putmsghdr() returns -2 on failure write header, -3 on failure to write ! 72: dfield, -4 on failure to write hfield (fixed), -5 on failure to write hfield ! 73: (data), and -6 on failure to pad record with NULLs. ! 74: ! 75: Bugs fixed in sample conversion source code and SMBUTIL: Overwriting first ! 76: two bytes of next record when using self-packing storage, SBBSFIDO would ! 77: crash on blank kludge lines, SEEN-BYs weren't converted properly by SBBSFIDO, ! 78: and more. ! 79: ! 80: *** IMPORTANT *** ! 81: Index format changed, added message time field to idxrec_t for fast pointer ! 82: manipulation by (import) date/time stamp. This is SMB format v1.10 and is ! 83: not compatible with the v1.00 format. A conversion program (100TO110.EXE) ! 84: is included with source code for converted any existing message bases. ! 85: ! 86: CHKSMB, a utility for checking message bases for corruption, included with ! 87: SMBLIB. ! 88: ! 89: SMBUTIL and CHKSMB both accept wildcard arguments for processing multiple ! 90: message bases. ! 91: ! 92: idxrec_t.to and idxrec_t.from may contain USER NUMBER instead of CRC of user ! 93: names. This implementation is currently specific to E-mail boxes on Synchronet ! 94: BBS. E-mail from non-local users are stored with a "from" field of 0. ! 95: ! 96: ********************** ! 97: 03/28/94 Release v1.10 ! 98: ********************** ! 99: ! 100: Forgot to include this file (oops). ! 101: ! 102: *********************** ! 103: 03/28/94 Release v1.10a ! 104: *********************** ! 105: ! 106: Fixed problem with buffered fread() routine attempting to read into a locked ! 107: regions. ! 108: ! 109: Added smb_stack() function for saving (pushing) currently open message base ! 110: and ability to pop it off later. ! 111: ! 112: Added fix for keeping original sender information in smbmsg_t structure when ! 113: a message has been forwarded. ! 114: ! 115: CHKSMB now correctly support multiple destination messages (without reporting ! 116: missallocated active data blocks) and now reports packable bytes available. ! 117: ! 118: SMBUTIL can now conditionally compress a message base, only if so many K are ! 119: compressable. ! 120: ! 121: Fixed problem with incorrect UTC value. ! 122: ! 123: Added NET_WWIV network type. ! 124: ! 125: ********************** ! 126: 06/02/94 Release v1.11 ! 127: ********************** ! 128: ! 129: Created Watcom compatible MAKEFILE for DOS, 32-bit DOS, and 32-bit OS/2 ! 130: versions of SMBUTIL. ! 131: ! 132: Enhanced macro definitions in SMBDEFS.H for MALLOC, FREE, and REALLOC to ! 133: support Watcom and other compilers other than Borland. Also added LMALLOC ! 134: and LFREE macros for large allocation (>64k) operations. ! 135: ! 136: Fixed problem with multiple calls to setvbuf() when using Watcom C libraries. ! 137: Memory allocated by setvbuf() would never be released. To work around this ! 138: Watcom C bug, a static buffer, shd_buf[], is now used instead. ! 139: ! 140: Fixed bug in smb_getmsghdr() that would cause it to return -6 when attempting ! 141: to allocate 0 length header fields. ! 142: ! 143: Added LZH.C to SMBLIB for message data compression/decompression. ! 144: ! 145: Removed the 16-bit CRC functions from SMBUTIL and put them in CRC16.C (now part ! 146: of SMBLIB) for easier integration into other applications. ! 147: ! 148: Added Hyper Allocation storage method to specification: smbstatus_t.reserved ! 149: changed to smbstatus_t.attr and SMB_HYPERALLOC bit is set when Hyper Allocation ! 150: storage is used for a message base. This is the only change between v1.10 and ! 151: v1.20 of the message base format. No other bits in smbstatus_t.attr are ! 152: currently defined. See the specification for definition of the Hyper Allocation ! 153: storage method. ! 154: ! 155: Changed SMB Storage and Retrieval Protocol chapters in the specification to ! 156: Pseudo-code examples. ! 157: ! 158: Added SMBLIB Storage and Retrieval C example chapters to the specification. ! 159: ! 160: Added field descriptions for message base header record fields and Status Info ! 161: (base header #1) record fields to the specification. ! 162: ! 163: Changed SMBLIB smb_addmsghdr() 'fast' argument to 'storage' to specify the ! 164: storage method to use (either SMB_SELFPACK, SMB_FASTALLOC, or SMB_HYPERALLOC). ! 165: Previous usage (0 for self-pack, 1 for fast) still compatible. ! 166: ! 167: Added smb_hallocdat() and smb_hallochdr() to SMBLIB functions for the Hyper ! 168: Allocation storage method. ! 169: ! 170: Added SMB_STACK_XCHNG operation to smb_stack() function, to exchange the top ! 171: of the stack with the currently open message base. ! 172: ! 173: ********************** ! 174: 02/14/95 Release v1.20 ! 175: ********************** ! 176: ! 177: smb_close() was modified in the following ways: ! 178: Only attempts to close non-NULL file pointers ! 179: If shd_fp is currently open, calls smb_unlocksmbhdr() before closing ! 180: (just in case it was left locked by application) ! 181: ! 182: smb_open() was modified in the following ways: ! 183: Initializes all file pointers to NULL ! 184: calls smb_close() if any of the files couldn't be opened ! 185: ! 186: smb_locksmbhdr() was modified in the following ways: ! 187: If lock fails, attempts to unlock the header before next lock ! 188: attempt (just incase application attempts to lock a locked ! 189: header without first unlocking it) ! 190: ! 191: smb_lockmsghdr() was modified in the following ways: ! 192: If lock fails, attempts to unlock the header before next lock ! 193: attempt (same reason stated above) ! 194: ! 195: CHKSMB (1.21) was modified in the following ways: ! 196: Tests for valid translations strings in the .SDT files ! 197: Displays totals for bytes used by header and data blocks, bytes used ! 198: by deleted messages, and bytes saved by LZH compression ! 199: ! 200: SMBUTIL (1.21) underwent some minor cosmetic changes. ! 201: ! 202: *********************** ! 203: 03/18/95 Release v1.20a ! 204: *********************** ! 205: ! 206: SMBUTIL (1.22) now compiles correctly under Watcom, using correct time zone ! 207: information. SMBUTIL maint() will no longer delete messages if max_age is ! 208: specified in the SMB header and the when_imported time for a message is in the ! 209: future. ! 210: ! 211: Fixed problem in LZH.C that would cause lzh_decode() to generate exception ! 212: errors when compiled with a 32-bit compiler. ! 213: ! 214: CHKSMB (1.22) now supports /E command line switch to display extended ! 215: information about corrupted messages. CHKSMB.C is now Watcom compatible. ! 216: ! 217: Added fflush() calls to all smblib functions that write to the SDT, SHA, or SDA ! 218: files. This eliminates the problem of duplicate data offsets (data blocks for ! 219: multiple messages pointing to the same location) causing corrupted SDT files ! 220: (unsupported translation types reported by CHKSMB). ! 221: ! 222: Added fflush() call after writing to SDT file in SMB_PUT example in SMB.TXT. ! 223: ! 224: Fixed example *2SMB.C files to be compatible with SMBLIB v1.20 smb_create() ! 225: function. ! 226: ! 227: Fixed smb_hallocdat() function prototype to stop redeclaration warnings. ! 228: ! 229: Minor typos in specification fixed. ! 230: ! 231: *********************** ! 232: 04/24/95 Release v1.20b ! 233: *********************** ! 234: ! 235: Added SMB_EMAIL (1<<0) attribute definition for the message base status header ! 236: to specify a local e-mail message base where index "to" and "from" fields are ! 237: stored as user numbers, not CRC-16s (this is the only change between v1.20 ! 238: and v1.21 of the SMB format). ! 239: ! 240: Version 1.21 of FIXSMB no longer needs the "/M" switch to correctly fix a ! 241: Synchronet e-mail message base (as long as the SMB_EMAIL status attr is set). ! 242: ! 243: Version 1.23 of SMBUTIL can now import text into a Synchronet e-mail message ! 244: base (as long as the SMB_EMAIL status attr has been set). It will ask for the ! 245: sender and recipient user numbers. Fixed an apparently nasty bug that would ! 246: cause damage to message bases when (I)mporting (check for SMB_HYPERALLOC ! 247: attribute was backwards). Excess baggage in the SMBUTIL source code was also ! 248: removed (no longer supports /L, /F, and /D command line switches). Only ! 249: supports self-packing and hyper-allocated message bases (it will not damage ! 250: fast allocated bases, however). "SMBUTIL M" now correctly handles message bases ! 251: that contain messages that have been pre-flagged for deletion (MSG_DELETE attr ! 252: set). ! 253: ! 254: Changed smb_open(int retry_count) function: if retry_count is 0, then a "fast ! 255: open" method is used which doesn't lock and read the status header to check ! 256: for compatibility and validity of message base. ! 257: ! 258: Added SMBLIB_VERSION definition (string constant) to contain the current ! 259: version and revision (if applicable) of the SMB library. This version number ! 260: may not always be the same as SMB_VERSION (version of the SMB format) or the ! 261: current version of the specification. It may be helpful to include a display ! 262: of this version number somewhere in your application (i.e. printf("SMBLIB v%s" ! 263: ,SMBLIB_VERSION);). ! 264: ! 265: Changed smb_stack() example in the Performance Issues chapter to keep two ! 266: message bases always open using SMB_STACK_XCHNG. ! 267: ! 268: Fixed bug in SMBUTIL that would cause an infinite loop when analysing an ! 269: extrememly corrupted HyperAllocated message base. ! 270: ! 271: Fixed bug in smb_stack() function when using SMB_STACK_XCHNG operation. Would ! 272: previously set current message base to an undefined message base, rather than ! 273: the message base on top of the stack (last pushed or exchanged). ! 274: ! 275: CHKSMB v1.22 compiled in the 1.20b release did not support wildcards (wasn't ! 276: linked with WILDARGS.OBJ) - this has been fixed and is the only change in ! 277: CHKSMB v1.23. ! 278: ! 279: ********************** ! 280: 05/31/95 Release v1.21 ! 281: ********************** ! 282: ! 283: Add uchar forwarded element to smbmsg_t structure. This variable is initialized ! 284: by the smb_getmsghdr() function. If the message has been forwarded, it will ! 285: be set to non-zero. ! 286: ! 287: Fixed bug in LZH.C which caused lzh_decode() to produce incorrect results ! 288: (usually t's and spaces) when compiled with a 32-bit compiler. ! 289: ! 290: Added HUGE16 and FAR16 macros to SMBDEFS.H for huge and far pointers for ! 291: 16-bit compilers only (default pointer type for 32-bit compilers). ! 292: ! 293: Fixed bug in FIXSMB.C that would initialize the SDA file to the wrong length. ! 294: ! 295: Added net type NET_MHS for MHS gateways. ! 296: ! 297: SMBUTIL (1.24) will no longer free deleted headers when maintaining a message ! 298: base if the /A (no analysis) command line switch is used. This speeds up the ! 299: message base maintenance/pack operation significantly by using: SMBUTIL /A MP ! 300: ! 301: *********************** ! 302: 08/31/95 Release v1.21a ! 303: *********************** ! 304: ! 305: All smb_*() functions changed to accept pointers to an smb_t structure. This ! 306: eliminates the use of global variables (making DLLs difficult or impossible ! 307: to program). A pointer is used even if the function doesn't modify the data ! 308: to maintain a consistent API and compatibility with languages that don't ! 309: support the passing of user defined types by value (e.g. Visual Basic). ! 310: ! 311: The smb_t structure contains a retry_time element that defines the maximum ! 312: number of seconds to wait while trying to open a locked message base or record. ! 313: If this element of the passed smb_t variable is 0, a default value of 10 ! 314: seconds is used. ! 315: ! 316: Added smb_getmsgtxt() and smb_freemsgtxt() functions to SMBLIB.C (only included ! 317: if SMB_GETMSGTXT is defined). ! 318: ! 319: ******************* ! 320: 11/18/95 Beta v2.00 ! 321: ******************* ! 322: ! 323: Bug in smb_getmsgtxt() with message data field lengths less than 2. ! 324: ! 325: ********************** ! 326: 03/22/96 Release v2.01 ! 327: **********************
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.