Difference between revisions of "ReSIProcate 1.1 Release"

From reSIProcate
Jump to: navigation, search
m (Make the TOC float right so the first page shown contains some content rather than just the TOC)
m (Change right-floated TOC to the Template rather than manually specified <div>)
 
Line 1: Line 1:
<div style="float:right">
+
{{TOCright}}
__TOC__
 
</div>
 
 
= Getting the software =
 
= Getting the software =
  

Latest revision as of 16:02, 7 September 2007

Getting the software[edit]

Download[edit]

Subversion[edit]

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[edit]

General[edit]

New features[edit]

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

Build System[edit]

New features[edit]

  • 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[edit]

  • 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[edit]

New features[edit]

  • 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[edit]

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

stack[edit]

New features[edit]

  • 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[edit]

  • 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[edit]

New features[edit]

  • 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[edit]

  • 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[edit]

New features[edit]

  • 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[edit]

  • 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[edit]

New features[edit]

  • 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[edit]

Release Notes v 1.0.3[edit]

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

Release Notes v 1.0.2[edit]

  • 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[edit]

  • 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[edit]

General Changes[edit]

Overall project changes[edit]

  • 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[edit]

New Features[edit]

  • 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[edit]

  • 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[edit]

New features[edit]

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

Bug fixes[edit]

  • 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[edit]

New Features[edit]

  • 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[edit]

  • 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[edit]

New Features[edit]

  • 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[edit]

  • 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[edit]

New features[edit]

  • 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[edit]

  • 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[edit]

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