Difference between revisions of "ReSIProcate 1.7 Release"

From reSIProcate
Jump to navigation Jump to search
Line 5: Line 5:
* [https://www.resiprocate.org/files/pub/reSIProcate/releases Download Directory]
* [https://www.resiprocate.org/files/pub/reSIProcate/releases Download Directory]
* [http://svn.resiprocate.org/rep/resiprocate/tags/resiprocate-1.7 Subversion Path]
* [http://svn.resiprocate.org/rep/resiprocate/tags/resiprocate-1.7.1 Subversion Path]
'''Note:  This version has a serious bug for Windows users with the random number generation logic, that can cause messages to be generated with duplicate transaction id's.  Until we can post a new zip of the fixed source tree, please check out the code from the SVN path above instead.'''
'''Note:  The 1.7 version has a serious bug for Windows users with the random number generation logic, that can cause messages to be generated with duplicate transaction id's.  Until we can post a new tarbal of the fixed source tree (1.7.1), please check out the code from the SVN path above instead.'''
== Subversion ==
== Subversion ==
This release is made from the <code>resiprocate-1.7</code> tag and can be checked out from the following SVN path:
This release is made from the <code>resiprocate-1.7.1</code> tag and can be checked out from the following SVN path:
For the ''standard'' subversion client you can fetch this with either:
For the ''standard'' subversion client you can fetch this with either:
::svn export http://svn.resiprocate.org/rep/resiprocate/tags/resiprocate-1.7
::svn export http://svn.resiprocate.org/rep/resiprocate/tags/resiprocate-1.7.1
::svn checkout http://svn.resiprocate.org/rep/resiprocate/tags/resiprocate-1.7
::svn checkout http://svn.resiprocate.org/rep/resiprocate/tags/resiprocate-1.7.1
= Release Notes v 1.7.1 =
* fixed a critical issue on Windows platforms with Random number generation that can cause TID collisions and a whole bunch of other errors

Latest revision as of 08:55, 8 March 2012

Getting the software[edit]


Note: The 1.7 version has a serious bug for Windows users with the random number generation logic, that can cause messages to be generated with duplicate transaction id's. Until we can post a new tarbal of the fixed source tree (1.7.1), please check out the code from the SVN path above instead.


This release is made from the resiprocate-1.7.1 tag and can be checked out from the following SVN path:


For the standard subversion client you can fetch this with either:

svn export http://svn.resiprocate.org/rep/resiprocate/tags/resiprocate-1.7.1


svn checkout http://svn.resiprocate.org/rep/resiprocate/tags/resiprocate-1.7.1

Release Notes v 1.7.1[edit]

  • fixed a critical issue on Windows platforms with Random number generation that can cause TID collisions and a whole bunch of other errors

Release Notes v 1.7[edit]


New features[edit]

  • added tfdum, a tfm suite for DUM

Build system[edit]

New features[edit]

  • added Darwin support to ax_resip.m4 - thanks to Volodymyr Tarasenko
  • created reprolib, reflow, recon, and reTurn projects for VS2010
  • allow reflow, recon, and reTurn to be built without openssl support
  • allow builds against a non-installed build of openssl
  • updated XCode build
  • iPhone/iOS build support
  • allow resip-ares to be compiled with gprof support
  • allow building against electric fence or debug malloc
  • when building without ccache support, ensure that ccache is not used when gcc is actually an alias that points at ccache

Bug fixes[edit]

  • fixing a bug where RESIP_OSTYPE_*, RESIP_ARCH_*, and RESIP_LARCH_* may be set incorrectly
  • On OS X, support the use of bdb 4.4 in addition to 4.2, since bdb 4.2 is no longer available through MacPorts
  • remove NO_IPHLPAPI from SSL configurations of rutil
  • use -fPIC for static libs, by default; static libs without PIC are unusable by shared libs on x86_64 architecture
  • fixed bug where the build system assumed that any file whose extension starts with 'h' is a header file, which needs to be installed (now installs .h and .h??; might still have false positives, but at least is better)


New features[edit]

  • enhanced ExternalDnsFactory to allow users of librutil to define an external DNS provider at runtime
  • modified windows version of WinCompat::determineSourceInterface API's to return the default NIC address for any destination address that exists on a local NIC
  • implemented rolling log-files in the logging system
  • added windows memory leak detection to testLogger.cxx
  • better support for running test-cases under Windows
  • add support for DNS resolution using only host-file lookups
  • use non-blocking IO for DNS resolver
  • expose resip local logger id to applications
  • added PtrLock class that handles pointer to Lockable (this makes implementing optional locking easy)
  • added a number of performance-oriented functions to Data
  • added support for Windows's RtlGenRandom function to Random. Enabled via compile-time ifdef; disabled by default
  • improved thread-safety of Random
  • force asserts to be enabled in test-cases regardless of whether asserts are enabled in the library builds

Bug fixes[edit]

  • build fix in SysLogBuf.cxx for compilers that do not have an implicit <cstdio> include
  • fixing a bug in ParseBuffer::integer() where we were checking for overflow incorrectly, causing negative integers not to parse. Also, adding testParseBuffer to the tests run by runtests.sh (which, incidentally, had a test for parsing negative numbers all along...)
  • fix 64-bit Windows build failure in stun/Stun.cxx
  • modified the Windows implementation of WinCompat::determineSourceInterface to not return the loopback adapter (
  • fix for errno defines when compiling under VS2005/2008 - should be checking compiler version (< VS2010) and not the target OS version
  • fix bug in WinCompat::determineSourceInterfaceWithIPv6() where only the first adapter was checked
  • fix memory leak in ThreadIf destructor
  • fix build failure on amd64 in SysLogBuf.cxx
  • enable recursive mutex support on OS X (this has been supported since 10.3)
  • fixed some memory leaks in resip logger if using thread local loggers and starting/stopping threads
  • fix for DNS spin issue while waiting for a DNS result
  • fixed bug in stun/Stun.cxx where StunAtrError would be rejected due to an erroneous buffer length check
  • fixed various crash/leak bugs in resip-ares/DNS code
  • fixed some uninitialized members in RRVip::MapKey and Timer
  • fixed bug where Data::charUnencoded() was not compatible with capitalized hex encoding


New features[edit]

  • allow Multipart Mixed boundary token to be defined by an application
  • calls to either SipStack::abandonServerTransaction or SipStack::cancelClientInviteTransaction will invoke the AsyncProcessHandler, if set
  • added the ability for the afterSocketCreationFuncPtr to be called after an outbound TCP socket has been "connected"
  • added checks to ensure that the user has passed in a properly formed ip address when calling addTranport
  • output the CSeq number in SipMessage::brief()
  • better support for running test-cases under Windows
  • updated SipStack interfaces that need to copy SipMessages before sending to use the clone method instead of the copy constructor so that subclasses messages get properly copied
  • use an outbound decorator to handle calculating digest responses, in case a preceding decorator modifies the body (which will invalidate auth-int calculations)
  • allow transports to be configured in a send-only mode (ie; do not open a listen port)
  • added epoll support
  • implemented (optional) RAck fixup for PRACK responses; protects against malicious endpoints changing the RAck in the PRACK response, for TUs that will not cope well
  • added ability for app to receive callbacks when messages are posted to the fallback fifo (Add fallbackPostNotify handler to SipStack constructor)
  • added a lot of flexibility to test/testStack.cxx
  • added atomic check-and-get getNext() function to Fifo (pass negative to getNext(int ms))
  • added a number of transport flags (TXNOW, TXALL, RXALL and KEEP_BUFFER) that can be used to tweak performance characteristics of the transport code
  • better Transport and Connection failure reporting
  • better keepalive support; enough to do client outbound, including flow-timer (ie; close connections if keepalives are not received frequently enough)
  • added a new ConnectionManager::EnableAgressiveGc setting - if enabled this will cause the connection garbage collection to run every time a new connection is formed, instead of just when we run out of FDs
  • added method to Tuple to test if an address is private or not: RFC 1819 for v4 and RFC 4193 for v6
  • added better support for the telephone-subscriber grammar element when used in a SIP URI userinfo
  • modified the TLS certificate common name and sub-alt-name matching rules to follow RFC 5922 by default; allow app to enable wildcard certs if desired
  • force asserts to be enabled in test-cases regardless of whether asserts are enabled in the library builds
  • allow NAPTR failover when pref values are the same
  • allow direct (raw) access to SipMessage body
  • added support for passing a chain of certificates in the TLS handshake process
  • limit the number/length of header-field-values that we are willing to accept in a single SIP message (in connection-based transports), to protect against state exhaustion attacks

Bug fixes[edit]

  • fix NameAddr parser when a '*' contact is used and is followed by uri parameters
  • fixed warning codes to use 399 instead of the non-standard 499
  • better protection against memory leaks in TransactionState when garbage SIP traffic comes from the wire
  • fixed the TCP connection garbage collector, so that it will not tear down all TCP connections when the OS runs out of TCP connections
  • modified the STUN server support in UDP transport to use XorMappedAddress instead of MappedAddress if present in the STUN response
  • fixed bug where Helper::algorithmAndQopSupported() would return true on an unsupported qop type if no algorithm parameter was present (order of operations bug)
  • fix a build failure on gcc 4.2 in ssl/TlsConnection.cxx
  • fix build failure (in makeCert.cxx) when openssl support is disabled
  • fix a build failure in test/testThreads.cxx
  • fixed crash when a TU unregisters in the middle of a transaction
  • fixed threadsafety of RRCache when multiple SipStacks were used in the same process
  • fix for potential memory leak if a ParseException is thrown during request/response construction
  • fix crash-on-shutdown in ContentsFactoryBase when multiple of the same type exist
  • fixed bug where the Via of outgoing requests was ignored by the stack in the TCP case, if it was able to find a transport based on the destination
  • fixed leaks/crashes caused by transaction-id collisions in the transaction processing code
  • fixed crash when TU sends a request to the stack with a malformed Contact (this can easily happen in repro, since repro doesn't necessarily care what is in the Contact header)
  • fixed bug where 503s would not be sent to the TU in the event of a transport failure, when no DNS resolution occurred (sending to a bare IP address, or using flow tokens)
  • fixed some (potentially) uninitialized members in ConnectionBase
  • fixed a double-free bug in TuIM
  • fixed bug where unnecessary string comparisons would be performed when a Content-Language header was parsed on a Contents object
  • fixed bug where TLS and DTLS transports were not being shut down properly
  • fixed bug where unparsed Contents would not be encoded into embedded (in a URI) SIP messages
  • fixed a nasty heap corruption bug when SipMessage::releaseContents() was called for a message with a multipart body
  • fixed leaks of of PKCS7s in Security
  • fixed lots of instances of the egregious "throw;"
  • fixed an improper assert when initializing ContentsFactory types
  • fixed bug where DTLS connections would fail when there were multiple from the same client
  • fixed bug where we were not calling SSL_shutdown to properly terminate a DTLS "connection" when exiting an application
  • fixed bug where sigcomp-id was not being set in the constructor for Compression
  • fixed bug where transports added as (as opposed to the empty string) were not added to the "any interface" maps in the transport selector
  • fixed bug where the automatic contact fillout logic would trip over Contacts with IPV6 addresses in them, when built without IPV6 support
  • fixed a bug in Connection::read() where a buffer could be invalidated before it was used in sigcomp-related code
  • fixed bug where userpart escaping in Uri did not support char values > 127


New features[edit]

  • made DUM InviteSession offer answer logic Content type generic
  • added a new test for simple PUBLISH handling
  • allow INFO and MESSAGE to be sent in early dialogs
  • in InviteSession, cache outgoing NIT requests, to make it easier for implementors to correlate responses
  • added new profile setting to allow additional headers to be passed in SipFrag bodies of notify messages that result from a REFER request
  • added client support for RFC 3840 (user agent capabilities) using Profile
  • added new method to dum InviteSession to allow creating a refer with replaces with application-provided replaces information
  • modified DUM ServerSubscription to allow 3xx responses to be sent
  • much better Contact matching logic in ClientRegistration (ie; I registered one Contact, and the server sent a response with 3 Contacts. Which one is mine, so I know what the expiry is?)
  • expanded the REFER with Replaces API to allow sending a Contents* just like the plain REFER api does
  • added client outbound support, including support for Flow-Timer (includes improvements to the keepalive code)
  • allow a client DUM application to optionally provide a MD5 A1 Hash of a user's password, instead of the clear text version
  • added a RequestValidationHandler so that applications can be notified when an incoming request is rejected because of a validation error in DUM
  • added ability to specify a user-defined Reason when ending an InviteSession
  • force asserts to be enabled in test-cases, regardless of whether asserts are enabled in the library builds

Bug fixes[edit]

  • build fix in DialogEventInfo.hxx for compilers that do not have an implicit <memory> include
  • fix for reception of REFER request - newly generated INVITE was going out with incorrect RTP port
  • fix for extraneous re-invites going out during transfer scenario - due to participant hold setting not being properly copied when one participant is replaced by another
  • fix memory corruption bug when a client INVITE session receives a provisional with a CSeq that does not match the most recent INVITE
  • tweak to RSeq check in INVITE session; check RSeq if a reliable provisional comes in when we didn't use Require: 100rel, but used Supported: 100rel instead. Also, don't treat Supported: 100rel in a provisional response as indicating reliability
  • modified Dialog.cxx and setting of mLocalContact from profile getOverrideHostAndPort so that parameters will be preserved; as it may be required to add the p_addTransport to override host and port settings to direct the stack to stamp the contact header with ;transport=XXX appropriately
  • reuse credentials from UPDATE in ACK, in the case where the UPDATE followed the INVITE
  • fix CSeq double increment in NOTIFY terminated when server subscription is ended by client
  • fixed bug where ServerRegistration would refuse to use the flow-token hack if outbound support was enabled; this prevented flow-token fixup for clients that did not support outbound
  • fixed bug where the Expires header in a SUBSCRIBE/2xx was ignored when the NOTIFY lacked an expiry (either an Expires header, or an expires param on the Subscription-State header)
  • fixed bug where UAS Dialogs were not using the automatic Contact fillout functionality in the stack, because it was setting the Contact header to whatever the Request-URI was on the SIP request
  • fixed bug where Path headers were not copied into response for REGISTER
  • fixed thread-safety bug in UserProfile::isAnonymous()
  • in ClientRegistration, handle case where Retry-After header contains a value of 0
  • fixed bug where reception of a non-terminating NOTIFY would permanently halt teardown of ClientSubscription (if it had already sent an unSUBSCRIBE)
  • fixed bug in ServerInviteSession::sendProvisional(), where passing earlyFlag==false would not prevent a session body from being added to the provisional
  • fixed bug where retries of an initial SUBSCRIBE would have a to-tag
  • fixed bug in ClientPublication where queueing a PUBLISH request (while a previous PUBLISH was outstanding) would cause the CSeq checking logic to fail when the response to the first PUBLISH arrived
  • fixed refer handling so that multiple REFER's within a dialog are handled properly
  • fixed bug where Subscription-Ids were used in subscriptions created by an OOD refer request (not breaking spec, just unnecessary)
  • fixed potential memory corruption bugs in ServerRegistration (certain perfectly legitimate app behaviors would cause these bugs to manifest)
  • fixed uninitialized members in ClientAuthManager, DialogEventStateManager, and MasterProfile
  • fixed tight loop in ClientSubscription/ClientRegistration when receiving an expiry of 5 or less
  • fixed bug where we would not re-schedule refreshes in ClientSubscription if the server reduced the expiry by less than the amount of "wiggle room" we left ourselves earlier (ie; we scheduled our refresh 10 seconds early, then the server reduced our expiry by 9 seconds. We should reschedule so that we have more than the 1 second of wiggle room we're left with)
  • fixed bug where +sip.instance was added to third-party registrations
  • fixed bug where rinstance and +sip.instance could be used on the same contact (redundant)
  • fixed potential leaks associated with malformed Contact and Expiry headers in ClientRegistration
  • fixed a bug in ServerRegistration where the transport parameter was compared in a case-sensitive manner
  • fix for ContactInstanceRecord equality checks - registration server was not treating contacts with the same instance id as equal if the contact URI was different
  • reject INVITE with replaces if session to replace is not found


New features[edit]

  • allow specification of an application defined OPTIONS handler
  • added Request Context Factory to allow app overrides of functions in Request Context
  • added ability for repro to synchronize registrations with another instance
  • log a warning if an IP-address isn't used with the --interfaces command line option
  • added new command-line option --server-text to specify the contents of the 'Server' header when acting as UAS
  • added new command-line option --poll to trigger support for epoll (if enabled in the build)
  • added new parameter 'rcvbuf' to URIs of the --interfaces command-line option. If specified, this sets the receive buffer length for the corresponding socket. This is currently only meaningful for UDP transports.
  • allow the webadmin to be disabled
  • added path header display to repro web interface registrations page
  • added support for Flow-Timer
  • use an HMAC code in FlowTokens; provides integrity protection and protects against forged flow tokens
  • force asserts to be enabled in test-cases regardless of whether asserts are enabled in the library builds
  • perform flow-token fixup when NATs are detected
  • perform flow-token fixup when the first hop is TLS, but the Contact has an IP-address
  • double Record-Route when transport switches occur
  • allow specifying the Record-Route header on a per-transport basis

Bug fixes[edit]

  • fixed some registration storage locking bugs
  • change to repro to ignore port on registration and Location Server lookup if port specified is the default port
  • remove uri parameters from LocationServer lookup, since registration removes all parameters on aor
  • numerous Record-Route and Path header fixes
  • various outbound fixes
  • fixed an erroneous error log when dropping a NIT 408 response (as specified in RFC 4320 section 4.2)
  • fixed bug where Record-Routing would not happen on REFER requests; these can establish a dialog
  • fixed bug where Timer C was being scheduled for non-invite transactions (led to logging spew)
  • fixed a few places where a response could be sent to an ACK
  • fixed a few places where remote modification of a branch parameter (either case-fiddling, or outright trashing) could confuse us


New features[edit]

  • add ability to pass local IP address to TestAsyncClient command line
  • allow multiple XOR_PEER_ADDRESS in Create Permission requests - thanks to Anshuman

Bug fixes[edit]

  • fixed memory leak in d'tor of DataBuffer
  • fixed leak of expired RemotePeers in ChannelManager


New features[edit]

  • add "BroadcastOnly" conversation types - where all participants are considered on hold, but will receive media from the media participant in the conversation - for implementing a Music-On-Hold conversation
  • allow a Media Interface per conversation, instead of one global one
  • use participant handle instead of pointer in Dtmfevent for better thread safety
  • created post convenience methods on Conversation Manager
  • implemented a Music-On-Hold and Park server
  • modified recon onIncomingParticipant and onRequestOutgoingParticipant to pass back profile selected for the request
  • added ability for an OOD REFER request in recon to be redirected
  • added ability for an application to pass an after socket creation function pointer to recon
  • added fn to allow setting of QOS/TOS bit in sipX media interface

Bug fixes[edit]

  • fix for recon bug when we get an inbound INVITE with a replaces header, where a media connection was not being allocated before the bridge mixer readjusted
  • fix bug where audio path/hold state was not being propagated to the new remote participant in the case of a participant replacement
  • fix bug where a re-INVITE with no SDP (ie. requesting an offer) when we were on hold, would not cause us to come off hold (this is how you request someone to come off hold, after all)
  • fix some uses of recon subsystem
  • re-architected Media Interface notification scheme to be thread-safe
  • fixed trap when receiving an OOD refer request
  • fixed bug where NOTIFY requests associated with a OOD refer would not be sent correctly
  • fixed memory leak when rejecting an OOD REFER
  • fixed sending of a redirect request immediately after answering/accepting a call
  • fixed bug where we could try to start sending media before media stream is ready
  • fixed a potential issue/trap in recon when we run out of media ports
  • fixed bug where to/from tags were put in Refer-To headers
  • fixed a bug where we were not including codec information on rejected m= lines


Bug fixes[edit]

  • fixed bug where reception of an ICMP error on a UDP flow would cause the flow to stop receiving data


Bug fixes[edit]

  • fixed a bug in xml rpc server - need to call tryParse multiple times in cases where we end up with two entire requests in one socket read
  • fixed memory leak in xml rpc server with stored requests

tfm (repro)[edit]

New features[edit]

  • added IPV6, TLS, and outbound support
  • added a lot of new tests, including TLS and outbound tests
  • added support for subnot-etags in the SUB/PUB testing classes
  • refactored so that the repro-specific stuff is separate from the generic tfm stuff

Bug fixes[edit]

  • fixed bugs in a number of tests