|
|
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.