Milestone release-2.2

Completed 9 years ago (Feb 27, 2014 3:09:03 AM)


Total number of tickets: 110 - closed: 110 - active: 0


5 / 5


15 / 15


5 / 5


4 / 4


9 / 9


5 / 5


2 / 2


5 / 5


29 / 29


27 / 27


3 / 3


1 / 1

New Features


PJSUA2 is an object-oriented abstraction on top of ​PJSUA API. It's written in C++, has SWIG binding to Python and Java. A draft documentation is available in

Android Port

Android port is now available, using PJSUA2 API for Java. Please see Getting-Started/Android for more info.

Third Party Echo Canceller

A third party echo canceller implementation from BDSound was added. It supports Windows, Android, Mac OS X, iOS, and Linux. See ticket #1636 for more info.

Support for Windows 64bit

Implemented in ticket #1680

Ticket List:

Android port

Build system for Android target
Android audio device
pjsua2: New high level API in C++ on top of PJSUA-LIB
SWIG binding for JNI for the new high level API
apjsua sample application for Android
Guide for Android native debugging and deployment topics
Android branch integration

List of Enhancements


Add support for Apple iOS LLVM compiler (clang)
BlackBerry BB10 Integration
Support for Windows 64bit (Win64)
Fix parallel build support (thanks to Mark Michelson for the patch)
Enable building the libraries as shared libraries/DLLs for GNU targets
Add configure flags for external libsrtp and disabling libresample (thanks David Lee for the patch)
pjsua2 branch integration

pjlib, pjlib-util:

Continuation of Group Lock Fixes
CLI integration


No results

pjmedia, pjmedia-audiodev:

Add BDsound IMproved Audio Device (bdIMAD) integration
Stop media endpoint's worker threads first when destroying media subsystem
Add setting for RTP socket buffer size
Allow multiple codecs in SDP answer (thanks to Joshua Colp for the patch)
Add playback and capture callbacks for echo canceller algo
Deprecation of srtp_deinit() (thanks Tzafrir Cohen for the report)
Add flash support for DTMF based on RFC 2833
Update to bdSound's bdiMad audio device to support output routing


No results

pjsip, pjsua-lib:

Callback to allow application to respond to re-INVITE manually (thanks Ruud Klaver for the patch)
Modify SIP transaction to use group lock to avoid deadlock etc.
Add pjsua_call_set_hold2() API to allow update of Contact header
Option to switch media session to the latest early media SDP received on forked early media
Option to add "alias" param in Via header in sending request
Option to use SO_REUSEADDR for TCP and TLS listeners and use it by default on non-Windows platforms
Handle incoming UPDATE before 101-199 response is received
Option to use the IP address found in REGISTER response in the SDP
Use Request URI when matching incoming request to account if the To URI contains tel: URL
Callback for specifying account to handle incoming message
Configurable local port range for UDP media transport
Allow media type change during SDP negotiation
Add support for different To and Target URI in outgoing call and sending IM (thanks Johan Lantz for the suggestion)
IP change detection (Contact rewrite method) based on any REGISTER final response (e.g. 401)
Sending new re-INVITE after the on-progress re-INVITE transaction is terminated.

applications, python, unit-tests, third-party:

pjsua app using CLI framework
Python enhancement: added QoS and RTP settings in account config
Python enhancement: added received message into incoming call callback
PyGUI: New Python GUI Application based on pjsua2+SWIG API
New Android application based on pjsua2+SWIG API
Remove milenage library from linking setting (thanks Tzafrir Cohen for the patch)

List of Bugs


Miscellaneous fixes
Miscellaneous fixes (backported to 1.x)
General bug fixes with analysis tools

pjlib, pjlib-util:

Timer heap new API pj_timer_heap_cancel_if_active() should not assert if given bad entry
Crash in socket registration in ioqueue
Ioqueue epoll stops processing socket events
Fail to replace UDP socket during iOS wakeup causing app to be killed when IPv6 is used simultaneously
Deadlock on DNS when cached query is available
Fixed scanner in processing escaped quote right after quote begin
Bug in resolver when updating cache entry


Crash in TURN session when DNS callback invoked after TURN session destroyed
Deadlock in NAT detect
ICE stream transport fails to send packet before ICE nego completes
Possible buffer overflow in ICE session
Assertion in ICE connectivity check (thanks Amit Chowdhary for the report)

pjmedia, pjmedia-audiodev:

BB10 audio device fixes (EC, hardcoded settings, etc)
SDP offer version number is not incremented if re-INVITE offer is rejected
Deadlock when third party media employs external lock and ICE is active
Proper error handling in WAV writer
Error setting audio output route in BlackBerry 10 (BB10) version 10.2.1


Assertion when SDL initialization fails on library startup
Video devices may still be built even when video is disabled (thanks Tzafrir Cohen for the patch)

pjsip, pjsua-lib:

Incorrect SDP direction attribute in answering call unhold request after double holds
Remove Contact header in MESSAGE requests (thanks to Anil Giri for the report)
Crash if on_redirected() callback is not implemented and UAC receives 422 response (thanks to Romain Jezequel for the report)
Fixed crash in pjsua_media_channel_update() if one media gets rejected
Registration is terminated permanently on 480 (Temporarily Not Available) response when it should have been retried
Handling transport disconnection when the transaction state is still in null state
Media transport may not be cleaned up if call is hung up quickly
Deadlock and crash problem in transaction related to transport
Premature termination of REFER (call transfer) subscription
SIP TLS transport not destroyed after verification error
Close sound device when outgoing call fails
Incoming CANCEL request isn't reported in any callbacks
Media feature tag "" is not used because of wrong account initialization sequence
[incompatible] pjsua_call_update() API should not release hold
Possible broken SDP negotiator state after previous re-INVITE is rejected
Fail to generate contact when making call via UDP on WM6
Call slot unavailable after some fail calls due to codec mismatch
Assertion on retransmitting a pending message
Handle case when call unhold failed
Modified account proxy not applied in the reregistration
Configurable RTCP SDES/BYE in outgoing RTCP packets
Unfreed transmit buffer (pjsip_tx_data) upon stack shutdown/restart
Fixes for via_rewrite feature
Failed assertion when scheduling timer in the registration client
The bound address is not updated when UDP transport is restarted
Assertion in timer in SIP transaction: Timer being rescheduled when already running
Header lists are not updated in pjsua_acc_modify() and bug in pjsua_acc_get_config()
Follow account config in generating contact's secure scheme
Race condition fix in SIP transaction
Must not send BYE before ACK is received
Workaround for stuck in TCP/TLS shutdown when another thread is destroying the transport
Assertion in accessing conference from on_call_state() callback while pjsua destroy is on progress (thanks Johan Lantz for the report)
Delayed call disconnection state after receiving malformed 422 response (thanks Marcus Froeschl for the report)
Session timers refresher needs to send BYE if it never gets a response to the session refresh request
ACK is not sent upon receiving 200/OK retransmission if re-INVITE is sent
Issues in event subscription server timer (thanks Mark Michelson for the report)
Fix TCP/TLS transport leak problem
Fix polling mechanism during STUN server resolution
Deadlock between ioqueue key mutex and SIP dialog when adding video media with ICE and STUN enabled
Infinite loop when re-INVITE is received while adding new media

applications, python, unit-tests, third-party:

Warnings when building/linking the Python module due to different linker architecture

Note: See TracRoadmap for help on using the roadmap.