1Common Code Library: Modification history
2
3v1.0.0  - Initial version, based on RAT v3.2.7
4	* 14 November 1998
5
6v1.0.1  - Added HMAC authentication code
7	- Added timeout to udp_recv()
8	- Added authentication of Mbus messages
9	- Added RTP library
10	- Added select and fd_set functions to net_udp.[ch]
11	- IPv6 code now runs on the pre-release stack for Solaris 2.7
12	- Mbus code support a configuration file on Unix, and the registry
13	  on Win32, to save/restore settings
14	- Add udp_host_addr() to get a text-version of the address to which
15	  a socket is bound.
16	- Set IPv6 ttl and loopback state correctly on Solaris
17	- Move mbus hearbeat code into this library
18	- Remove key expiry from the mbus code, since it created race
19	  conditions when multiple tools for a single conference were
20	  started either side of the expiry time.
21	- Update mbus addressing scheme - names are now sets of tokens, if the
22	  set of tokens in the destination address is a subset of the address
23	  of the entity receiving that message then the message is accepted. An
24	  empty set is a valid destination address for a message, and that will
25	  be accepted by all receivers (ie: a wildcard).
26	- Remove channel ID from mbus code.
27	- Fix configure script to work with solaris 2.7 where inet_aton() and
28	  inet_pton() have prototypes but no implementation.
29	* 31 March 1999 [rat v4.0.0]
30
31v1.0.2  - Assorted fixes to RTP library
32	- Fix bounds overruns in memory.c - will now run with -DDEBUG_MEM
33	  with the bounds checker on.
34	- Add timestamp to mbus packet headers.
35	- Add mbus_qmsgf()
36	- Cleanup mbus transmission path
37	- Add support for DES encryption to the mbus (on by default)
38	- Fix DES code
39	- Mbus keeps a cache of other entities, and only allows sending of
40	  reliable messages to known unicast addresses.
41	- Mbus error function now takes a "type of error" argument
42	- Added xrealloc()
43	- Fix reordering of mbus messages
44	* 14 May 1999 [rat v4.0.1]
45
46v1.0.3  - Fix inet_aton() in net_udp.c
47	* 15 May 1999 [rat v4.0.2]
48
49v1.0.4  - Fix compilation with Microsoft IPv6 stack
50	- Solaris 2.5.1 doesn't have vsnprintf(), use vsprintf() instead
51	  and don't worry about the possible buffer overflow problems.
52	  Reported by Holger Wirtz.
53	- Added mbus_addr_valid()
54	- Added timeout to mbus_recv()
55	- Fixes to mbus code from Dirk Kutscher
56	* 2 June 1999 [rat v4.0.3]
57
58v1.0.5  - Not quite sure what happened with this version, but if you have
59	  it it's probably not a good idea to use it! :-)
60
61v1.0.6  - Add ability to send to one port whilst receiving on another,
62	  requested by Henning Schulzrinne.
63	- Add mbus_cmd_handler() to change the function handling the
64	  reception of mbus commands.
65	- Compilation fixes for Irix 6.5 contributed by Bob Olson.
66	- Add extra sanity checking to mbus_recv()
67	- Add extra sanity checking to mbus_parse_*
68	- Fix source address passed to mbus_recv() callback - was missing
69	  the "(" and ")" around it.
70	- Fix memory leak in mbus_recv()
71	- Fixes for configure script on 64 bit IRIX from Peter Orbaek
72	- Move base64 tests into test_base64.c and integrate with the test suite
73	* Released 5 July 1999
74
75v1.0.7  - Add udp_exit to close sockets and leave multicast groups if necessary.
76	- Fix mbus_exit close sockets.
77	- Move the code to deal with the mbus configuration into mbus_config.c
78	  which will make it easier to write an mbus packet logger without code
79	  duplication (such a logger can't easily be part of mbus.c, since it's
80	  needs conflict with correct protocol operation).
81	- Note that v1.3 of the Microsoft Research IPv6 stack requires an explicit
82	  route to be added for multicast traffic before a group can be joined. If
83	  you get errors in the IPV6_ADD_MEMBERSHIP setsockopt, this is probably
84	  the reason. We could specify an interface explicitly, but which one to
85	  pick?
86	- Updates to the IPv6 code for the Detexis Musica IPv6 stack
87	- Updates to the RTP code from Markus Germeier: time-out and delete sources,
88	  fix X but in RTP header, add support for sending BYE packets.
89	- Add inet_pton() and inet_ntop() implementations, for those platforms
90	  which are missing them.
91	- Add gettimeofday() workaround for win32
92	- Add drand48() workaround for win32
93	* Released 20 August 1999
94
95v1.0.8  - Add mbus_sent_all()
96	- Add loop count to mbus_recv(), so it will always return after 10
97	  packets have been received. The prevents a denial of service attack
98	  if packets are sent faster than the timeout period.
99	- Add binary tree.
100	- Add OpenBSD fixes from Angelos D. Keromytis
101	- Add Jerry Isdale's debug_dump() routine.
102	- Add fix to RTP init_seq() to correct bug(?) in RFC1889 which
103	  means we incorrectly report the one packet lost in the first
104	  reporting interval. Fix by Bill Fenner.
105	- Make the RTP create_source() routine return a pointer to the
106	  source. Patch from Bill Fenner.
107	- Changes to the probation code in rtp.c from Bill Fenner.
108	- Fix types in the RTP source struct.
109	- Add a SOURCE_CREATED event to the RTP callback.
110	- Add option to accept RTP packets before a corresponding RTCP
111	  packet has been received.
112	- Add RX_RR_EMPTY event to the RTP code, to indicate that an empty
113	  reception report (ie: no report blocks) has been received.
114	- Add RX_RTCP_START and RX_RTCP_FINISH events to the RTP code.
115	- debug_msg() now displays the pid
116	- The mbus code now maintains the list of active sources more correctly,
117	  making mbus_addr_valid() useful
118	- rtp_init() now takes separate rx_port and tx_port, instead of a
119	  single port for both sending and receiving.
120	- Add rtp_get_addr(), rtp_get_rx_port(), rtp_get_tx_port() and rtp_get_ttl()
121	- Change return type of rtp_recv to int (was void).  Returns TRUE if
122	  packets were processed, FALSE otherwise.
123	- Timeout RRs from the RTP database, if they're not refreshed for
124	  3 times the RTCP reporting interval
125	- rtp_update() only expires sources once per reporting interval, to
126	  avoid burning too many cycles.
127	- Mbus updates contributed by Markus Germeier
128		- we now can configure the multicast address and port which the
129		  mbus should use in ~/.mbus
130		- honor the SCOPE setting in ~/.mbus
131		- expire sources we haven't heard from for a while
132		- fixes small memory leak in remove_other_addr
133		- mbus_exit now sends a mbus.quit and cleans up other_* structures
134	- RTP updates contributed by Timur Friedman.
135		- Add support for RTCP APP packets
136		- Add support for a promiscuous mode to the RTP code, when in
137		  promiscuous mode there is no wait for a minimum number of RTP
138		  packets before recognizing a source.
139		- Add the functions rtp_setopt() and rtp_getopt() that can be used
140		  to control various options (right now just promiscuous mode).
141		- Split rtp_recv_data() into two functions.
142	* 5 October 1999
143
144v1.0.9  - Ignore ECONNREFUSED in net_udp.c
145	- Add mbus_rendezvous_waiting() and mbus_rendezvous_go() to enable
146	  easy rendezvous between multiple processes.
147	- Change rtp_setopt() and rtp_getopt() to take boolean options only.
148	- Remove rtp_weak_validation(), use rtp_setopt(RTP_OPT_WEAK_VALIDATION)
149	  instead.
150	- Delete RTP database entries which haven't been heard from for
151	  more than 5 times the RTCP reporting interval.
152	* 2 November 1999 [rat v4.1.1]
153
154v1.0.10 - Mbus updates from Markus Germeier, which fix compatibility with
155	  the Uni Bremen implementation:
156		- mbus.bye() signals an entity when it leaves. (mbus.quit commands
157		  an entity to leave)
158		- Generate and work with 64 bit DES keys. Generate parity bits for key.
159		  Check if key in configuration file sets parity bits correctly.
160		- mbus_heartbeat(m, 1) should send an mbus.hello() every second and
161		  not every two seconds
162		- HMAC-MD5 should read HMAC-MD5-96
163		- Honor the MBUS environment variable for the MBUS configuration file
164		- The TZI Mbus implementations generate spaces in configuration file,
165		  which mislead the UCL Mbus to dump core. Allow Spaces in .mbus
166		- Address must be unique
167		- Delete failed reliable messages if err_handler is present
168	- Fix uninitialized use of session->last_update in RTP code
169	- Fix assertion failures in RTP library when sending RTCP packets
170	- Recognize, but ignore, profile specific extensions to RTCP SR/RR packets
171	- Update RTCP reporting interval calculation
172	- Implement reverse reconsideration of RTCP reporting interval
173	- Fix tv_diff in rtp.c to handle negative results
174	- Remove rtp_get_encryption_key(), the user of the library is assumed to
175	  remember the passphrase used and doesn't need access to the internal
176	  form of the key.
177	- GNU autoconf modifications from Bill Fenner
178	- Global change of integer types, and removal of compatibility defines:
179		u_int8  -> u_int8_t
180		u_int16 -> u_int16_t
181		u_int32 -> u_int32_t
182	  and the same for the signed varients.
183	- Implement encryption in the RTP code
184	- Ignore connection refused errors in IPv4 UDP send.
185	- Hide definition of struct mbus_config
186	- Add a version number to the mbus config file
187	- Fixes for FreeBSD v3.2 with INRIA IPv6 stack from Fred Templin
188	- Add configure check for sin6_len in struct sockaddr_in6 (seems
189	  that FreeBSD has this, but many systems don't)
190	- Fix batching of multiple mbus messages into one packet.
191	* 13 December 1999 [rat v4.1.2]
192
193v1.1.0  - Changed autoconf generated header to uclconf.h.
194	- Changed library name to uclmmbase to be consistent with other libs.
195	- Add RTP_OPT_FILTER_MY_PACKETS
196	- Cleanup test routines
197	- Fix various potential buffer overflow problems
198	- Update copyright notices to welcome in the new millennium
199	- Previous versions of udp_send() would sometimes return -1 on error,
200	  and would sometimes abort(). We now always return -1 and never abort.
201	- Add test routines for code in net_udp.c
202	- Fix SCOPE parameter in mbus configuration on windows
203	- Fix sending of hearbeat messages whilst in mbus.waiting() and mbus.go() loops
204	- Tidy up mbus_qmsg();
205	- Add workaround for buffer overflow bug in _dprintf() which caused
206	  a crash under Windows NT service pack 6. This is not a real fix, we
207	  need to use vsnprintf() in there, but Windows doesn't implement it
208	  and I don't have time before we give the demo... Sigh, only two
209	  days wasted.
210	- Fix buffer overflow in _dprintf() on Windows, using _vsnprintf().
211	- Update IPv6 support for Microsoft Research IPv6 stack, v1.4
212		- Use the versions of inet_ntop() and inet_pton() provided with the
213		  IPv6 stack, but retain our own implementation when building with
214		  IPv4 support only.
215		- Use getaddrinfo() rather than getnodebyname() to get our IPv6 address if
216		  running with the Microsoft Research IPv6 stack.
217		- We now require getaddrinfo() to be present in all IPv6 stacks: those which
218		  do not have this call (eg: the Musica IPv6 stack) MUST provide a workaround
219		  implementation.
220	  versions of MSR IPv6 prior to 1.4 are no longer supported.
221	- Update IPv6 support for Red Hat Linux 6.1
222	- Fix generation of version.h on Win32
223	- Add VC++ project file to build the test suite under Win32
224	- Add extra debug code to the mbus library
225	- Rewrite mbus code: mbus_parser.[ch] exist now, and include routines moved from the
226	  main mbus.[ch] files. Note that the interface to the mbus_parse_*() functions has
227	  now changed and is not backwards compatible.
228	- Remove the mbus_addr() function, add an extra parameter to mbus_init() instead.
229	* 28 January 2000
230
231v1.1.1  - Add extra debugging code
232	* 1 February 2000
233
234v1.1.2  - Add routines for handling NTP format timestamps, in ntp.[ch]
235	- Add udp_addr_valid.
236	- Fix cname setup for Win32.
237	- Add udp_init_if() call, to open a UDP/IP socket bound to a
238	  specific interface
239	- Add rtp_init_if() call, to open an RTP socket bound to a
240	  specific interface
241	- Add asarray.[ch] string holding associative array.
242	- Fix compilation with -Wwrite-strings and -Wcast-align
243	- Split mbus_addr_match() and mbus_add_identical() into mbus_addr.[ch]
244	* 14 February 2000
245
246v1.1.3  - Fix debug_set_core_dir() when not debugging.
247	* 14 February 2000
248
249v1.1.4  - Add tests for mbus_parser.c/mbus_addr.c and fix bugs found
250	- Fix use of free()'d memory in mbus.c
251	* 24 February 2000
252
253v1.1.5  - Remove SunOS and Solaris defines from the configure script, they
254	  shouldn't be necessary any longer.
255	- Add workaround for missing getaddrinfo() on some platforms.
256	- Remove most of the abort() statements from udp_init(), we now
257	  return NULL in most cases of an error.
258	- Fix header extension handling when padding bit set for RTP packets.
259	- Change RTP event type #defines into rtp_event_type so compiler can
260	  check all cases are covered in decision blocks.
261	- Fix waiting_ack next is set to null when message is put on ack list.
262	- Add check for udp socket allocation success in mbus_init.
263	- Add get_appname to util.[ch].
264	- Bound ttl to max 127 in rtp.c rather than asserting <= 127.
265	- Change rtp_init to return NULL in rtp.c if ports or ttl
266	  inappropriate.
267	- Clarify that rtp_recv(), rtp_send_data() and rtp_send_ctrl() take an
268	  RTP format timestamp for the current time.
269	* 17 April 2000
270
271v1.2.0	- Add udp_fd() function, to retrieve the underlying file descriptor.
272	- udp_get_host_addr4() will now return NULL on failure, and leave
273	  errno set.
274	- Workaround failure to get host IP address when setting the RTP
275	  CNAME (we use user@127.0.0.1 as the CNAME in this case).
276	- Fix rtp_send_data() to correctly handle header extensions. This required
277	  a change to the API: the extn_len parameter now counts the length on the
278	  extension in 32 bit words minus one, and there is an additional extn_type
279	  parameter. If you don't use header extensions in your application, set the
280	  additional parameter to zero.
281	- Fix reception of packets with RTP header extension.
282	* 16 May 2000
283
284v1.2.1	* 16 June 2000 [rat v4.2.5]
285
286v1.2.2	- Fix bug in mbus transmit code which caused messages to have the same sequence
287	  number as the preceeding ack.
288	- Remove get_appname() function from util.[ch], since it didn't
289	  work in all cases (sometimes argv[0] doesn't contain anything
290	  sensible).
291	- Fix RTP header extension code (patch from Jori <jori@lumumba.luc.ac.be>)
292	  as part of RTP interoperability tests.
293	- FreeBSD 4.1 doesn't support binding to an IPv6 multicast address, must
294	  bind to in6addr_any instead (reported by Shirasaki Yasuhiro).
295	- Fix validation of RTCP packets with padding (reported by Vladimir Brauner).
296	- Fix padding octet count in RTCP packets sent with padding (Vladimir Brauner).
297	- Fix RTCP timer reconsideration (Vladimir Brauner).
298	* 22 August 2000 [rat v4.2.8]
299
300v1.2.3	- Add prototype for rtp_del_csrc() which will be needed by the
301 	  mixer in rat.
302	* 8 September 2000 [rat v4.2.9]
303
304v1.2.4	- Implement rtp_add_csrc() and rtp_del_csrc().
305	- ifdef'ed out FreeBSD bug check in test_net_udp.c for Win32.
306	  Prevents compilation of test cases otherwise.  Reported by Micheal
307	  Stovenour <michael.stovenour@lucent.com>.
308	* 1 November 2000 [rat v4.2.10]
309
310v1.2.5	- More informative error message when the lock on the mbus configuration
311	  file cannot be gained.
312	- rtp_init()/rtp_init_if() now take "const char *" for the address
313	- Fix expiration of our own SSRC from the RTP database, if filtering our
314	  packets.
315	- Mark entries in the RTP source database as active senders if we can an
316	  SR packet from them.
317	- Cleanup RTP database once per second, rather than once per reporting
318	  interval. This is needed to ensure that reverse reconsideration works
319	  correctly, and sources are correctly deleted after BYEs are received.
320	- Fix reverse reconsideration of the RTCP interval
321	- Change socket_error to support formatted messages.
322	- Add socket_error messages for gethostbyname failures.
323	- Include lower layer overhead when calculating average RTCP size
324	  (patch from Timur Friedman).
325	- Add support for SDES PRIV (the correct formatting of the PRIV item
326	  into prefix length, prefix and value is left to the caller).
327	- Change xmalloc to fill allocated buffer with dummy value when DEBUG
328	  is defined.  Change DEBUG_MEM version to use same dummy value rather
329	  than a random value, reduces chances of uninitialized pointers
330	  trashing data before crashing.
331	- Add callback types to rtp.h - rtp_callback and rtcp_app_callback.
332	- For consistency rtp_{get,set}opt -> rtp_{get,set}_option.
333	- Remove unnecessary components from qfdes enumeration declarations.
334	- New directories (src, tests, docs, examples).
335	- Fixed Win32 .{dsw,dsp} files for new directory structure.
336	- Documented net_udp.c.
337	- Move strfind to util.[ch] from mbus_addr.[ch].
338	- Fix CSRC handling (patch from Ivo Sedlacek <ivo.sedlacek@anfdata.cz>)
339	- Fix uninitialized field in SDES PRIV handling (Robert Olson)
340	- Documented debug.[ch], hmac.[ch], md5.[ch], memory.[ch], rtp.[ch].
341	- Added small rtp example.
342	- Change configure to only select doc for build if gtkdoc installed.
343	* 5 April 2001 [rat v4.2.14]
344
3451.2.6	- Fix so that we no longer send an RTCP BYE if we leave the session
346          before sending any other packets.
347	- Fix initial estimate of average RTCP packet size.
348	- Implement RTCP BYE reconsideration.
349	- Fix RTCP transmission interval.
350	- Fix handling of probationary sources in the RTP code (a source is
351	  no longer treated as probationary if we've received RTCP packet
352	  from it).
353	* 24 April 2001 [rat v4.2.16]
354
3551.2.7	- Add support for Rijndael encryption to the RTP library, contributed
356          by Robert Olson <olson@mcs.anl.gov>.
357	- Fix IPv6 support on Linux
358	- Add configuration for Windows 2000 IPv6 stack
359	- Connect/disconnect to socket before/after getsockname call to make
360	  it work
361	* 18 May 2001 [rat v4.2.17]
362
3631.2.8   - Created a new socket for use for getsockname - there were too
364          many bugs with disconnecting an IPv6 connected socket.
365	- Fixed include ordering for Win2k.
366	* 25 May 2001 [rat v4.2.18] [nte v2.2]
367
3681.2.9	- Fix complience with draft-ietf-mmusic-mbus-transport-06.txt (patch
369	  from Lars Fischer)
370	* 21 June 2001 [rat v4.2.19]
371
3721.2.10	- RTCP APP packets can exactly fill the buffer (Timur Friedman)
373	- Compilation fix for Debian Linux/IA64 (Jesus M.  Gonzalez-Barahona)
374	- Fix uninitialised variables in mbus.c (Eric Gerlach)
375	* 24 September 2001
376
3771.2.11	- Fix _xrealloc() in debug mode (Chris Greenhalgh)
378	- Update configure script to better support IPv6 (Suzuki Shinsuke)
379	- Fix count of CSRCs in mixer (Ladan Gharai)
380	- Fixes for MacOS X and Win32 (Bill May)
381	- Add udp_sendv() (Colin Perkins/Bill May)
382	- Explicitly set send/recv buffer sizes to 1Mbyte (Colin Perkins)
383	- Fix sense of RTP_OPT_WEAK_VALIDATION (Colin Perkins)
384	- Make RTP_OPT_WEAK_VALIDATION more aggressive, for use when speed
385	  is more important than correctness (Colin Perkins)
386	- Assorted performance tweaks to RTP code (Colin Perkins)
387	- Add RTP_OPT_REUSE_PACKET_BUFS (Colin Perkins)
388	- Fix potential crash in init_rng (Bill May)
389	- Add rtp_send_data_iov() (Bill May)
390	* 15 April 2002
391
3921.2.12	- Compilation fixes for Win32
393	* 23 July 2002
394
3951.2.13  - Compilation fixes for Solaris8 (Kristian Hasler)
396        * 01 April 2003
397
3981.2.14  - Increase size of mreq structure by 4 because of bug in Win2k MSv6
399          library
400        - Added msvc build for a non-debug ipv6 win2k release.
401        * 30 April 2003
402
4031.2.15  - Added SAP/SDP support from Ivan Judson <judson@mcs.anl.gov>
404        - Removed changes to mreq (see 1.2.14) - bug fixed in XP
405        - Added code in mbus_recv function to ignore duplicate reliable messages
406        * 19 June 2003
407
4081.2.16  - Fix compilation with gcc33 (uint8_t value compared against 255).
409	- Fix compilation on MacOS X 10.3.4
410
411Still to do...
412	- IPv6 code sometimes doesn't get the correct interface address,
413	  since it does a gethostbyname() and looks that up, yet that can
414	  return the IPv4 hostname only on some machines.
415	- Doesn't do DNS AAAA lookups when given a name rather than an IP address.
416	- Mbus code should check timestamp in received headers, and discard
417	  messages if it decreases, as a hinderance to replay attacks.
418	- Mbus code should be more paranoid about handling garbage inputs, we
419	  can likely get all sorts of buffer overflows by feeding random data
420	  into it.
421	- rtp_recv should split into rtp_select and rtp_recv. Jitter issues
422	  otherwise, as pointed out by Orion.
423	- Allow a callback for background processing during mbus_rendezvous_*()
424	- mbus_exit() queues an mbus.bye() message, but that never gets sent.
425	- Handling of SSRC collisions is broken.
426	- When weak RTP validation is enabled, spurious sources can be
427	  added to the database (from the CSRC area of a packet?). Reported
428	  by Xiaotao Wu <xiaotaow@cs.columbia.edu>
429	- RTP estimate of lower layer overhead is IPv4 specific.
430
431