ReSIProcate 1.1 Release

From reSIProcate
Revision as of 15:55, 7 September 2007 by Pckizer (talk | contribs) (Make the TOC float right so the first page shown contains some content rather than just the TOC)
Jump to navigation Jump to search

Getting the software

Download

Subversion

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

https://svn.resiprocate.org/rep/resiprocate/tags/resiprocate-1.1

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

svn export https://svn.resiprocate.org/rep/resiprocate/tags/resiprocate-1.1

or

svn checkout https://svn.resiprocate.org/rep/resiprocate/tags/resiprocate-1.1

Note that the scheme is https.

Release Notes v 1.1

General

New features

  • updated license blocks
  • sipdial, a very simple dialer demo

Build System

New features

  • shared library support for OS X
  • location of db4 headers is now configurable (only matters when building repro/tfm)
  • ares install path can now be configured
  • added ability to specify a particular copy of OpenSSL to use

Bug fixes

  • fixed shared library build on x86_64
  • fixed install-paths for header files of stack and dum
  • fixed spurious error messages when generating binaries
  • made configure script work properly with stock sh

rutil

New features

  • DNS resolver will now pay attention to host entries in the NetInfoManager (OS X)
  • removed ATL dependencies (Windows)
  • allow the tagging written by the logging system to be turned off

Bug fixes

  • fixed bug where DNS resolver would assert when attempting to do a query with no network connectivity (on OS X)

stack

New features

  • SIGCOMP (RFC 3320) support
  • new non-INVITE transaction behavior with respect to 100 Trying (see RFC 4320)
  • wrote LazyParser::isWellFormed() This allows exception-safe checking of whether header-field-values are well-formed or not
  • changed handling of bad ACK/200 (ie, ACK/200 with same tid as original INVITE), previous code did not work reliably (a feature because this is an act of protocol repair)
  • update to Identity test-case to reflect draft changes
  • a much more thorough DNS resolver unit-test
  • added a base-class StatisticsHandler, allowing third-party code access to the statistics generated by the stack
  • added ability to retrieve/set encodingParameters from rtpmap line for audio codecs this represents number of channels ie: a=rtpmap: 0 pcmu/8000/2 (where 2 is the encodingParameters)
  • more readable logging of sip messages
  • added support for AnswerMode and PrivAnswerMode headers
  • allow codecs with no encoding parameters to be equal to a codec with an encoding parameter of "1" - ie. Note: for audio channels the encoding parameter represents the number of channels and the default is 1

Bug fixes

  • fixed a bug where a TU sending multiple requests with the same tid (ie, ACK/200) could cause an assertion in the stack, if DNS resolution had not yet been completed
  • fixed a bug that could corrupt a TransactionMap::iterator if the same tid was added multiple times. Also fixed another bug that was causing this bug to exhibit
  • fixed a bug where malformed IPV6 addresses in sip uris or vias could cause the stack to assert
  • fixed bug where lower-order bits of IPV6 addresses were chopped off (Windows)
  • fixed a bug in SdpContents where a "u=" was not being encoded
  • fixed bug where the TransportSelector would automatically fill in the wrong end of the Record-Route stack
  • hardened the stack against garbage Referred-By and Record-Route headers
  • stack now checks whether required header-field-values are not the empty-string
  • fixed a bug that was causing CPU spin while establishing a TLS client connection
  • major fixes to the RFC 3263 DNS logic
    • DNS logic now pays attention to what transport types the stack supports when choosing targets (won't choose a TCP target if we don't have a TCP transport, for example)
    • fixed an assert bug that could be triggered by the 3263 DNS logic if the stack was not running any UDP transports
    • blacklists are now done on a Tuple+hostname basis, instead of a DNS-path basis.
    • fixed a bug where failure in an A lookup could cause us to not pursue additional SRV records
    • fixed a bug where NAPTRs were being selected incorrectly for sips uris
    • blacklists actually have a duration that can be set now (ie, we pay attention to the value of Retry-After now)
    • stack no longer breaks spec by blacklisting on 408, 500, 600, or 503 without Retry-After
  • fixed openssl memory deallocation issue
  • when sending responses, only use default port if no port is specified in either rport or elsewhere in topmost Via
  • fixed a bug where non-standard settings to Uri encoding tables, if made _before_ initialization, would be lost when initialization occurred
  • removed a default param in SipStack::addTransport that would cause an assertion if used
  • compensated for a reentrancy issue with random() on SMP systems, when openssl wasn't built in, in Helper::computeCallId()
  • disable DTLS test-case if USE_DTLS wasn't defined
  • in SDP parsing, don't read TTL if connection address is IPV6
  • in SDP parsing, fixes for ipv6 multicast ranges in connection line
  • fix to medium::getConnections, so that it will not return session level connections, if a media level connections are present
  • fixed escaping of headers embedded in SIP URIs
  • fixed a compiler warning in SipStack.cxx
  • fixed issue with truncation of blacklist durations
  • fixed type of expires parameter (was a UInt32Parameter, is now a QuotedDataParameter)
  • fixed bugs on Windows 2000 related to iphlpapi.dll and freaddrinfo
  • fixed an issue in 400 message generated by TransactionState, so that proper reason text gets populated in message

DUM

New features

  • allow configuration of whether the request-uri should be used in merged-request detection (B2BUAs and gateways need to do this)
  • allow UPDATE to be used for a target refresh
  • allow re-INVITES and UPDATEs to update the Peer P-Asserted-Identity
  • allow ServerAuthManager to be configured to challenge with 401 instead of 407
  • added optional earlyFlag to ServerInviteSession provisional to allow caller to suppress addition of SDP answer to provisional body (after calling provideAnswer) if desired

Bug fixes

  • fixed bug where reception of a REFER could cause a crash if no clientsubscriptionmanager is present
  • fixed a bug where a bad in-dialog response (modified to-tag) would prompt a dialog creation, and cause a crash
  • fixed various memory leaks caused by garbage from the wire
  • only 2xx responses to the original request can effect the route-set
  • fixed bug where sending a PUBLISH while a previous PUBLISH (for the same state) was pending would cause an empty PUBLISH to be sent
  • do not create dialog state on a 180 response with no to-tag
  • fixed two cases where the absence of an Expires header would be interpreted as an Expires of 0 (in ClientPublication)
  • fix to make sure onSuccess is called after a timed retry on registration failure
  • fixed a bug where mime type accessors in MasterProfile were using the subscript operator on the underlying map, potentially creating useless empty entries in the map that shouldn't be there
  • ensure onSuccess callback is called after a successful registration following an onFailure or onRequestRetry (in ClientRegistration)
  • added some missing states to isAccepted() (in InviteSession.cxx)
  • fixed a bug where InviteSession would send BYE/481 if we _received_ a BYE while a BYE we _sent_ was pending. (Both sides send BYE, race-condition) Now sends a BYE/200
  • ClientInviteSession can now handle BYE gracefully in any situation
  • fixed an erroneous log statement for stray responses
  • fixed some error logs in InviteSession related to bad state in provideOffer
  • removed an assert in InviteSession::targetRefresh
  • use consistent method for determining chalenge realm; fixes issue where challenge realm was hardcoded to requestUri host after stale nonce was received
  • fix to make sure initial publish (no sip-if-match) arriving without a body generates a 400

repro

New features

  • lots of hardening against garbage in sip messages (fixed a lot of leaks that could be triggered by bad sip requests)
  • Changed the handling of ACKs completely; they no longer follow the same code path as other requests (nothing will cause us to perform location service of any kind on an ACK now)
  • stopped using the cid Uri-parameter hack for telling the stack what connection to send a request on (no more "cid=" in the request Uri; "cid=" may appear in Route-type headers however)
  • updated .vcproj (Windows)
  • modified getConfig calls to avoid copies

Bug fixes

  • if certServer is enabled, only PUBLISH and SUBSCRIBE with certificate or credential event types will be passed to dum
  • fixed a bug where a Record-Route could be inserted with a scheme that did not match the scheme of topmost Route header, if present
  • improved the code that determines whether we are responsible for a given Request-Uri (could run into problems while running on a non-standard port)
  • retransmissions of ACK/200 all use the same tid now, also only a single Ack200Done message will be posted now
  • fixed repro problem where cert server defaults to on, and cannot be disabled
  • fixed an issue where repro would reject registrations that contain unknown Accept header values, if the cert server was enabled and MasterProfile validateAccept was enabled.
  • fixed an issue with port checking code when running repro on a non-standard port (not 5060), and reaching it either via DNS SRV resolution or a UA outbound proxy setting
  • UserStore - corrected naming domain->realm
  • ConfigStore - added cache of DB
  • UserAuthGrabber - corrected issue comparing domain to realm
  • repro project - added missing header files

tfm

New features

  • ipv6 support
  • support for testing PRACK
  • added the ability to test receiving a SUBSCRIBE as the FIRST message in response to an INVITE request. i.e. the SUBSCRIBE creates the dialog as opposed to 1xx or 2xx response

Bug fixes

Release Notes v 1.0.3

  • fixed a bug where malformed IPV6 addresses in sip uris or vias could cause the stack to assert

Release Notes v 1.0.2

  • Fixed a bug in the SRV load-leveling logic that could cause the stack to crash.
  • Fixed race-conditions in DUM that could cause a crash if a client reused transaction ids rapidly.

Release Notes v 1.0.1

  • Fixed a bug that would cause the stack to crash if it received a request with a single empty Via header.

Release Notes v 1.0

General Changes

Overall project changes

  • The resiprocate/os directory has been broken into two separate directories: rutil, and resip/stack.
  • DUM now lives in resip/dum. repro no longer resides within the resiprocate directory.
    • rutil consists of non-sip specific utility classes.
    • resip/stack consists of everything else that used to reside in resiprocate/os.

Build System

New Features

  • interactive configure script
  • implemented RESIP_FIXED_POINT compilation flag
  • added a PEDANTIC_STACK build flag that causes the stack to fully parse all incoming messages, and 400 if it finds garbage.
  • added support for stdext::hash_map for Visual Studio .NET 2003 builds
  • build system now handles absence of gperf gracefully

Bug fixes

  • changes so that build with openSSL 0.98 works
  • VS.NET project files - changed all C-Runtime libraries to use Multithreaded DLL - consistent with sipX projects
  • various OS X build fixes
  • fixed clean and distclean build system targets
  • header files are no longer installed with mode 755 (is 644 now)
  • ares is now installed (using shared libraries required its presence)

rutil

New features

  • synchronous A-record lookup in DnsUtil
  • added Data::replace

Bug fixes

  • fixed initialization of OpenSSL
  • use SO_REUSEADDR for windows sockets
  • fix to remove race condition in AbstractFifo::getNext(int ms)
  • many openSSL memory leak fixes
  • Fixed Data::hash for non-plaintext.
  • Fixed a memory corruption bug in oDataStream.
  • fixes to Data::find
  • fixes to conversion methods in Data
  • fixed static initialization bug in Log.cxx where we were exhausting pthread_keys
  • fixed a memory leak in DnsStub
  • removed a dependency on resip/stack (moved SelectInterruptor to resip/stack)
  • OpenSSLInit no longer writes stuff to std::cerr (bypassing the logging system)

Stack

New Features

  • allow StatisticsManager to be disabled at runtime
  • added a MasterProfile setting (allowBadRegistrationsEnabled) to allow DUM to accept Registrations that have a To: tag
  • added getTlsPeerName method to SipMessage
  • added clearDnsCache to SipStack (thread safe)
  • added logDnsCache to SipStack (thread safe) - outputs DNS Cache to WarningLog for debugging
  • modified TLS client domain name check to look through all possible peer names
  • support for namespaces in pidf documents
  • STUN client support (in UdpTransport class)
  • Added capability for adding a MessageDecorator through a dum profile
  • s/mime encryption for SDP and IM
  • lots of new documentation
  • added Identity strength accessor to SecurityAttributes
  • runtime detection of ares/resip USE_IPV6 mismatch
  • ENUM support
  • support for privacy as per rfc3325
  • support for service-route (IMS)
  • added a mechanism to register for a callback just before a SipMessage is sent on the wire

Bug fixes

  • fixed initialization of array that determines whether headers should be comma encoded
  • fixed many transactionstate memory leaks
  • fix to SdpContents for duplicate fmtp attributes
  • fix submitted by Justin Matthews for potential invalid pointer access of mDnsResult
  • remove trailing spaces from non-quoted display name (NameAddr)
  • fix memory leak of SecurityAttributes
  • SdpContents: fixed bug in Session::Time operator=
  • some time_t use fixes so that we compatible with VS.NET 2005's default definition of time_t - which is a 64-bit integer
  • fixed UInt64 conversion for nonce stuff - digest auth was failing
  • fixed many transport memory leaks - the biggest one is with receiving CRLF keep alives on UDP transports
  • made domain name cert check for Client SSL connection non-case sensitive
  • fix for computeTag to use passed in size
  • fix for CSeqCategory and RAckCategory to use unsigned integers for sequence numbers
  • fix for Tuple IPV6 hash on linux platforms
  • changed ExpiresCategory.cxx to be an UInt32 so that Expires parameter can handle up to 2^32-1 as in RFC
  • Fixed a few assert/memory leak bugs in TransactionState caused by method mismatches between Request Line and CSeq.
  • Fixed numerous memory leaks in TransactionState that couold be caused by certain malformed headers.
  • TransactionState no longer 503s ACK when overloaded
  • Major fixes to connection management in the stack (including memory corruption bugs)
  • Fixed issue where we were sending TLS over the wrong IP version when we had TLS transports on both versions open.
  • Fixed many integral-value overflow bugs.
  • Fixed a few other parser bugs (for q-value, senthost in Via, branch parameter in Via)
  • implemented auto_ptr version of SipStack::send() and SipStack::sendTo()
  • implemented auto_ptr based SipStack::post() and postMs()
  • Fixed handling of stray CANCELs
  • made codec comparison case insensitive (findFirstMatchingCodec function)
  • modified stunTest to use nonblocking socket and selectable timeout
  • Added some missing closesocket calls to the rutil\STUN functions (note that stun has since been moved to resip/stack)
  • removed the static "done" check in Security::Initialize(), it caused a bug when the object was instantiated a second time
  • Corrected the Codec constructor for telephone-event and frf-dialed-event constants. A payload type of 8000 was used. (Not wrong but usually 101 is used. 8000 rather is the bandwidth)
  • Added two more codec constants. (G723 and GSM)
  • removed the bogus sleep stuff from stunSendTest
  • fixed parse bug in Phone::parse
  • fixed a bad free in Security
  • fixed SipFrag memory corruption issue
  • fixed nonce generation
  • fixed a memory leak in Security
  • fixed array overflow bug in SecurityAttributes
  • fixed a per-key/cert leak in Security
  • fixed a memory leak caused by malformed Content-Length over a stream-based transport (TCP or TLS)
  • support for short version of event (o)

DUM

New Features

  • allow Initial invite without an offer (dum)
  • added support for sending and receiving MESSAGE requests in an Invite Session
  • added support for re-invite with no offer
  • allow contents to be sent in acceptNit (InviteSession)
  • added onConnectedConfirmed callback for ACK (without answer) on initial invite
  • add rinstance parameter to registration contacts so that we can tell which contacts from the 200 response are ours (dum)
  • added profile reset method (dum)
  • added ability to get peer capabilities from InviteSession
  • added store of all peer names presented in a certificate's subjectAltName list
    • if no subjectAltName, then commonName is used
  • implemented command pattern/target based feature handling in dum
  • support for Allow-Events header in DUM
  • added new signature for makeInviteSessionFromRefer - that allows specifying the User Profile to use. (this is required when creating an Invite Session from a refer with no-subscription)

Bug fixes

  • fix for shutdown assertions if outstanding invite sessions
  • fix for receiving stray dialog/dialogset matching messages during delayed destruction
  • fix for ending() a registration while in the process of retrying
  • ensure all 4xx responses to invites are handled correctly in dum
  • fix for dialogset destruction bug - cleaned up redirect logic used to destroy dialog, but keep dialogset around
  • change ClientSubscription.cxx and ServerSubscription.cxx to send all messages via the Dialog::send interface, instead of the DialogUsageManager::send interface. This allows requests to be tracked by the Dialog - so that it can correctly respond to Digest challenges.
  • fixes to dum states for initiating a BYE while waiting for an ACK
  • dum fix for setting correct reason text for NIT responses
  • many misc. fixes to InviteSession state machine
  • ServerPublication: fix for uninitialized mExpires in onInitial callback
  • fix for early SDP in provisional's (dum)
  • allow additional provisionals in EarlyProvidedAnswer state (dum)
  • ServerAuthManager - do not challenge ACKS or CANCELs
  • make subscription state checks non-case sensitive
  • corrected some missing sets of mProposedRemoteSdp
  • fixed Glare state handling in dispatchGlare
  • fixed mProposedLocalSdp memory leaks auto_ptr::release change to auto_ptr::reset
  • fix for getLocalSdp and getRemoteSdp if values are not yet set
  • 2xx retransmission is now detected and handled properly - no more incorrect handler callbacks (dum)
  • fix issue with receiving 2xx retrans when dialog is destroying - reported by Justin Matthews
  • fixed MessageWaitingContents encoder attributes
  • be resilient to implementations that send sdp in 200/Update event though we didn't send an offer (ie. Cisco 7960)
  • InviteSession: separate mLastSessionRefresh into mLastLocalSessionRefresh and mLastRemoteSessionRefresh fixes bug where remote message headers could get used in outbound requests
  • fix for calling end on a client SUBSCRIBE (or PUBLISH) dialog before any response is received
  • ClientRegistration - use Expires header if no Contacts are present
  • modified dum so that expiration values use UInt32 instead of int for storage
  • fixed initialization of AppDialogSet::mIsReUsed
  • ServerAuthManager no longer challenges ACK
  • InviteSession now handles re-invites with late offer
  • fixed bug where DUM was ignoring Expires in SUBSCRIBE/2xx
  • fixed uninitialized SharedPtr in DialogSet

Repro

New features

  • Framework for better control of forking in repro.
  • Many improvements to Processor architecture in repro (with respect to asynchronous work), with helper classes for easily setting up thread-banks for async tasks.
  • Support for Q-Value based forking in repro.
  • Implemented Timer C in repro.
  • added recursive redirect support to repro
  • support for ACL in repro
  • rpm build for repro

Bug fixes

  • Fixed an assert bug in repro's WebAdmin that would allow an unprivileged user to cause an assert.
  • repro no longer will forward 503s
  • fixed a stl::vector<>::front call to a (potentially) empty container
  • repro no longer challenges ACK or BYE
  • fixed numerous memory leaks in repro
  • major assert sweep of repro


TFM

  • a functor-driven test-framework, and lots of test-cases for repro.