Release Notes for 0.8.0 [http://www.pjsip.org/trac/milestone/release-0.8.0] 2007-11-11 New Features PRACK and UPDATE PRACK (ticket #385) and UPDATE (ticket #5) have been implemented on this release, including all the quirks with the management of SDP offer and answer session when these SIP methods are involved. Symbian Symbian support is getting more matured, with the implementation of Symbian sound device abstraction (ticket #2) and support for building the libraries as Dynamic Shared Object (DSO) files, which are needed for building developing for S60 3rd Edition using Code Warrior (ticket #354). Updated STUN, TURN, and ICE STUN, TURN, and ICE have been updated to the latest specification (ticket #374, #382). Many bugs have also been fixed. Custom SIP Presence Status Text While previously PJSIP only supports basic online/offline status, now PJSIP supports specifying and receiving custom presence status text by implementing subset of RPID (ticket #336) More robust NAT handling For SIP, keep-alive mechanism has been implemented for UDP transport at PJSUA-LIB level (ticket #407), and both TCP and TLS transports at the transport level (ticket #95). Because of these the default registration interval is now extended to 5 minutes. The client registration session will also keep the transport open until it is destroyed, so that server can send SIP requests using this transport (mandatory for TLS, and could be useful for TCP) (ticket #390). For SIP UDP transport, pjsua-lib by default (pjsua_acc_config.auto_update_nat setting) will monitor the STUN mapped address as reported by registrar. When it detects that the mapped SIP transport address has changed, it will unregister previous Contact, create a new Contact based on the new transport address, and restart the registration. This would happen automatically without application assistance (ticket #381). For media, ICE transport will automatically change its transport address based on the address returned in the STUN keep-alive packets (ticket #372). Also pjsua-lib will now reports to application via a callback when ICE negotiation has failed (ticket #370). More Robust SIP authentication PJSIP now supports responding to authentication challenge for any realms, by specifying wildcard ("*") as the realm in the credential (ticket #231). Although some have commented about security implications of this, a lot of people will find this feature to be very useful. Basic support for 3GPP/IMS Ticket #396 adds support for 3GPP/IMS digest AKA authentication (AKAv1-MD5 and AKAv2-MD5). Ticket #400 adds support for Service-Route header processing. Much improved audio latency on Windows Audio latency on Windows (Win32) has been improved by several hundreds milliseconds. This should make the echo cancellation (AEC) works better too, so default EC tail length has been decreased from 800 ms to 200 ms. Ticket #393 changed basic audio frame time, from 20 ms (hard coded as PTIME macro in pjsua_media.c) to 10 ms, and make this configurable. Default PortAudio sound driver backend was also made configurable, with the default is WMME (ticket #384). The default number of sound buffers (PJMEDIA_SOUND_BUFFER_COUNT) has been reduced from 16 to 6 (ticket #394). WMME audio latency buffering in PortAudio is now limited by 100 ms by default (ticket #395). For more information, please see Audio latency question in PJSIP FAQ. Enhancements Details common #354 Build the libraries as dynamic libraries (.DSO) in Symbian pjlib #314 Added PJ_SAFE_POOL configuration in PJLIB to track down memory corruptions #315 Ability to override pj_assert #333 Added buffer overflow detection in vsprintf emulation for Symbian #358 Link dynamically with IPHLPAPI.LIB (thanks Jim Gomez) #367 Hash table will duplicate the hash key (thanks Scott Lu) #403 Ability to specify RConnection instance etc in PJLIB Symbian pjlib-util #325 More tunable settings in DNS resolver #326 Add unit tests for DNS resolver and DNS SRV resolver #329 Added utility function to parse DNS A response #330 Changed DNS SRV resolver to use the new DNS A response parser #332 Enlarge default buffer size for caching DNS responses from 512 to 1000 bytes pjnath #374 Update STUN specification from rfc3489bis-06 to rfc3489bis-10 #382 Update ICE from draft-ietf-mmusic-ice-14 to ice-18 specification #392 Added configuration to enable old, rfc3489bis-06 and older, style of MESSAGE-INTEGRITY and FINGERPRINT calculation #399 Added tool to perform NAT type detection/classification pjmedia #2 Symbian sound device implementation #335 Detect timestamp jump to avoid excessive CPU usage in master clock (thanks ChenHuan) #373 Packet loss simulation in PJMEDIA ICE transport #377 Support for sending RTCP RR #384 Prefer to use Direct Sound as the sound device backend on Windows #388 Support for receiving RTP packet with no payload #394 Reduce PJMEDIA_SOUND_BUFFER_COUNT default setting from 16 to 6 to reduce audio latency #395 Added configuration to control maximum PortAudio sound buffer latency #398 Support for Secret Rabbit Code (aka libsamplerate) sample rate conversionl library pjsip #5 Support for SIP UPDATE (RFC 3311) and fix the offer/answer negotiation #95 Keep-alive mechanism for TCP and TLS transports #231 Add the ability to respond to any realms in SIP authentication #324 Allow '#' character in the user part of URI of incoming message (thanks Esbjörn Dominique) #331 Changed PJSIP DNS SRV resolver to use PJLIB-UTIL DNS SRV resolver #336 Support for specifying custom presence status text in PJSIP SIMPLE #337 Ability to restart PJSIP UDP transport #338 Handle maddr parameter in URI when sending SIP requests #339 Respond correctly to incoming INVITE/re-INVITE without offer and receive answer in ACK #341 Sending raw data with PJSIP transport #342 Add PJSIP configuration to optimize the size of outgoing SIP messages #352 Configuration to turn OFF Via sent-by checking in SIP responses to support IP address change #379 Implement merged request detection #385 Support for reliable provisional response (100rel, PRACK) #390 Register session will keep transport instance so that keep-alive is sent #396 Support for 3GPP/IMS digest AKA (AKAv1-MD5) SIP authentication #410 Endless authentication retries when 401/407 response contains no challenge pjsua-lib #334 Added on_pager_status2() callback to receive the full SIP message of IM delivery status (thanks Paul Levin) #370 Notification to application when ICE negotiation fails #381 Auto-update IP address/port in Contact header according to the IP address/port received in REGISTER response #391 Added framework to send and receive arbitrary requests within call in PJSUA-LIB, with samples to send/receive DTMF with INFO in pjsua application #393 Added configuration to set basic audio frame length to minimize audio latency #400 Support for Service-Route header (RFC 3608) #405 Subscribe to buddy presence upon receiving incoming subscription from the buddy #406 New PJSUA API to update buddy's presence subscription #407 Keep alive for UDP transport #409 Update Contact address/port from the rport in REGISTER response to work with symmetric NATs applications #345 Option to select random start port in pjsua #350 Support for parsing quoted arguments in pjsua config file (thanks Scott M Ober) #360 Support for strict routed requests in proxy sample (thanks Helmut Wolf) #389 Added new commands in pjsua to change codec priorities and send UPDATE Known Issues Known issues that have been or will be fixed on this release: common #365 Fix log decoration (thanks Thiago Paiva Flores) #380 Build problems because of mount directory problem on Mingw (thanks Lafras Henning) pjlib #340 File access problem on WinCE #343 Canceling pending ioqueue operation in Symbian causes assertion failure #348 Various bugs in string comparison functions #376 Bug in ioqueue prevents re-registering more than PJ_IOQUEUE_MAX_HANDLES (thanks Phil Torre) pjlib-util #328 Possible alignment error in DNS encoding pjnath #321 Assertion in ICE stream transport when STUN is not used (thanks Frank Nießen) #322 Crash in ICE when adding peer reflexive candidate #344 ICE negotiation failed when remote doesn't support RTCP #368 STUN keep-alive timed out when ICE is used #369 ICE negotiation fails after endpoint has been idle for long time #372 Handle case where STUN mapped address has changed in ICE pjmedia #317 Duplicated audio when playing WAV playlist (thanks Jagdish Jangid) #357 Missing tonegen.[h/c] in Windows CE project file (thanks Paul Levin) #361 Extraneous RTP packet with RFC 2833 DTMF events (thanks Pedro Sanchez) #363 Incorrect RTP marker and timestamp in DTMF event/RFC 2833 packet (thanks Pedro Sanchez) #366 Crash in SDP negotiator when initial local SDP is not specified in pjmedia_sdp_neg_create_w_local_offer() (thanks Philippe Leuba) pjsip #316 Crash in registration session when transport returns error on sending authentication retry #318 CSeq generation may produce negative number on Blackfin/VisualDSP++ (thanks Jarek Szymkowski) #346 Possible deadlock in event subscription framework when subscribe is followed immediately with unsubscribe #347 Assertion failure when handling incoming presence subscription with Expires=0 #349 Crash when sending PUBLISH when network is unreachable #356 Prototype and definition mismatch causing crash in sip_auth_server.c (thanks Truong Thanh Quang) #359 Wrong Via branch generation in proxy causing the same branch value to be generated for RFC 2543 clients (thanks Helmut Wolf) #362 Transaction timer I in Completed state should be zero for reliable transports (thanks Ivan F. Skripov) #371 Bug with REGISTER expiration calculation (thanks Philippe Leuba) #383 Bug with handling Via received and rport parameters for response message #387 UAS dialog should add Contact header in 1xx response #397 Bug with handling large SIP message body (thanks Helmut Wolf) #401 Unable to register when account URI contains display name #402 Endless error loop when TCP accept() continuously returns error #408 Route set shouldn't be updated once it has been set (thanks Anshuman S. Rawat) pjsua-lib #319 Assertion failure in pjsua when adding buddy with invalid host (thanks Paul Levin) #320 Assertion error in pjsua when unregistering/removing account while network is disconnected (thanks Bo Huang) #327 SIPS URI in Contact header generated by pjsua causing problems with OpenSER #351 Possible deadlock in pjsua-api presence subscription (thanks Paul Levin) #353 Memory "leak" with pjsua file player/recorder #355 Account ID is not initialized in pjsua_call_info for outgoing call (thanks Lemmel) #386 Over-deinitialize sound subsystem in pjsua_media.c (thanks Jiandong Ruan) applications