Milestone release-0.8.0
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
Enhancements that have been or will be applied on this release:
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
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
Known Issues
Known issues that have been or will be fixed on this release:
common
pjlib
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
No results