| 1 | Common Code Library: Modification history |
|---|
| 2 | |
|---|
| 3 | v1.0.0 - Initial version, based on RAT v3.2.7 |
|---|
| 4 | * 14 November 1998 |
|---|
| 5 | |
|---|
| 6 | v1.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 | |
|---|
| 31 | v1.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 | |
|---|
| 46 | v1.0.3 - Fix inet_aton() in net_udp.c |
|---|
| 47 | * 15 May 1999 [rat v4.0.2] |
|---|
| 48 | |
|---|
| 49 | v1.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 | |
|---|
| 58 | v1.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 | |
|---|
| 61 | v1.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 | |
|---|
| 75 | v1.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 | |
|---|
| 95 | v1.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 | |
|---|
| 144 | v1.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 | |
|---|
| 154 | v1.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 | |
|---|
| 193 | v1.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 | |
|---|
| 231 | v1.1.1 - Add extra debugging code |
|---|
| 232 | * 1 February 2000 |
|---|
| 233 | |
|---|
| 234 | v1.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 | |
|---|
| 246 | v1.1.3 - Fix debug_set_core_dir() when not debugging. |
|---|
| 247 | * 14 February 2000 |
|---|
| 248 | |
|---|
| 249 | v1.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 | |
|---|
| 253 | v1.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 | |
|---|
| 263 | Still to do... |
|---|
| 264 | - IPv6 code sometimes doesn't get the correct interface address, |
|---|
| 265 | since it does a gethostbyname() and looks that up, yet that can |
|---|
| 266 | return the IPv4 hostname only on some machines. |
|---|
| 267 | - Doesn't do DNS AAAA lookups when given a name rather than an IP address. |
|---|
| 268 | - Mbus code should check timestamp in received headers, and discard |
|---|
| 269 | messages if it decreases, as a hinderance to replay attacks. |
|---|
| 270 | - Mbus code should be more paranoid about handling garbage inputs, we |
|---|
| 271 | can likely get all sorts of buffer overflows by feeding random data |
|---|
| 272 | into it. |
|---|
| 273 | - rtp_recv should split into rtp_select and rtp_recv. Jitter issues |
|---|
| 274 | otherwise, as pointed out by Orion. |
|---|
| 275 | - Allow a callback for background processing during mbus_rendezvous_*() |
|---|
| 276 | - mbus_exit() queues an mbus.bye() message, but that never gets sent. |
|---|
| 277 | - Handling of SSRC collisions is broken. |
|---|
| 278 | |
|---|