Milestone release-0.5.10

Completed 16 years ago (Feb 19, 2007 4:35:11 AM)


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


11 / 11


5 / 5


11 / 11


24 / 24


21 / 21


3 / 3

Release Notes for 0.5.10


When updating to version 0.5.10, please be aware of the following changes:

  • Since Visual Studio 8/2005 support is now included in the distribution, you will need to delete your VS 2005 project files and use the one that are with the tarball instead.
  • There is an API change with pjsip_tpmgr_acquire_transport() function. This should not break any applications unless you are dealing with the very low level SIP transport.

Other than those, things should be compatible with 0.5.9 version.

New Features

This release contains the following new features.

Python Wrapper for PJSUA-API

An experimental implementation of Python module to access PJSUA-API is available in pjsip-apps/src/py_pjsua directory. The PJSUA-API Documentation has been updated with the Python information (e.g. every structure and function are accompanied by the corresponding Python information). Also have a look at the mini SIP/Media Python Tutorial.

Visual Studio 2005 Support

After long overdue, this release would now support Visual Studio 2005 IDE (ticket #72). Please find new workspace for VS6/VS8 in pjproject root directory. The VS6 will continue to be supported.

TLS Support

An experimental TLS support based on OpenSSL library is implemented (see ticket #3).

Currently the TLS transport still blocks in SSL_connect() and SSL_accept() (although the TCP connect/accept procedure is non-blocking). An enhancement for this is planned (see ticket #63).

Explicit Transport Binding

Previously, transport is selected automatically from transport hash table to send outgoing requests/responses, based on the rules in various RFCs. This works okay for typical user agent application, but some other types of applications (such as proxies or test agents) want to have more control over which transport to be used to send messages.

This release adds functions to control transport to be used by dialogs, transactions, client registration, and low-level API to set which transport to be used when sending messages:

  • pjsip_dlg_set_transport()
  • pjsip_tsx_set_transport()
  • pjsip_regc_set_transport()
  • pjsip_tx_data_set_transport()
  • pjsua_acc_set_transport()

See ticket #50 for more info.

DTMF Callback Support

Previously PJSUA-API lacks capability to report incoming DTMF digits to application. This feature has been implemented (see ticket #48).

More NAT Friendly

  • The RTP stream now can be configured to periodically transmit RTP packets during silence period, to maintain NAT binding and to prevent intelligent server from terminating the call because of inactivity (see ticket #56).
  • Disable VAD for the first few hundreds of milliseconds after the stream is started to open local and remote NAT bindings and to let remote knows about the source address of the RTP packets (see ticket #53).

More Robust SDP Parsing

  • Allow parsing of SDP message containing invalid whitespaces (ticket #64).
  • Allow empty format list in pjmedia_sdp_validate() when media port is zero (ticket #75).

Thanks Briac Hardouin.

Faster and Better G.711 ALaw/ULaw Codec

Toni Rutar has contributed a table based implementation of G.711 ALaw/ULaw codec which is much faster than existing one, and it doesn't have codec impairment of existing PCMA implementation. The new implementation will be used by default, but the old implementation can still be used for small footprint devices (see ticket #26)

WAV File Playlist

David Clark has contributed a WAV file playlist media port (to play multiple WAV files in a play list). Many thanks. (see ticket #67). Alain Totouom uses the playlist and found/fixed some problems :D (see ticket #86).


Multiple WAV Files in pjsua

pjsua now can accepts multiple --play-file to load multiple WAV files (ticket #77)

More Robust Timeout Handling in Client Registration

Handle the situation where server crashes after sending 100/Trying to REGISTER, with a timeout timer (ticket #99 and #89).

Play tone option in pjsua

Added --play-tone option in pjsua (ticket #62)

Playing Tone in a Loop

Added PJMEDIA_TONEGEN_LOOP option in tone generator/pjmedia to play tone continuously (ticket #62).

QoS/ToS Abstraction in PJLIB

Added socket constants abstraction to set up socket TOS/QoS in PJLIB (ticket #83, thanks Roman Puls for the suggestion and info).


  • Individual conference port audio level adjustment (ticket #51)
  • API to retrieve media port associated with file player/writer (ticket #52)
  • Playlist creation APIs (ticket #67).


  • Add socket handles to UDP media transport info (ticket #34)
  • One can now feed a simple text file containing commands to pjsua via shell redirection (thanks Steven Halerman).
  • Added PJSUA_MAX_PLAYER and PJSUA_MAX_RECORDER constants in PJSUA-API (ticket #102, thanks David Clark for the report)

Bug Fixes

Many bugs have been fixed. Thanks for everybody who have reported them!

PJLIB/PJLIB-UTIL bug fixes (major bugs are in bold font):

  • The select ioqueue ignores the flag specified in pj_ioqueue_recv()/recvfrom() (ticket #49)
  • When host doesn't have any NIC interfaces, it should return instead of error (ticket #71)
  • Broken compilation with gcc-2.9x or older (ticket #66).
  • Th pj_gethostbyname() function should return the correct error code when fails (ticket #80)
  • Win32 now uses native Win32 API for file I/O to get rid of FOPEN_MAX limit (ticket #103, thanks David Clark for the report)
  • Write outside buffer in PJLIB's win32 error string (ticket #106)

PJSIP bug fixes:

  • Authentication loops forever when (malfunction) server keeps rejecting request with stale=true (ticket #25)
  • TCP (and TLS) transport is incorrectly removed from hash table when TCP connection is closed by remote and new connection is created to replace it (ticket #42)
  • Accept, Allow, Supported, and other array of tokens header should allow empty content (ticket #45)
  • pjsip_regc_unregister() now will unregister local contact instead of all contacts (with "*") (ticket #35)
  • Unable to send registration in registration callback (ticket #34)
  • Registration did not respond to 401/407 challenge on unregistration after it has been marked for deletion (ticket #73)
  • Registration crashes when NIC is plugged-off during registration refresh(ticket #81, thanks Richard Allister for reporting the bug)
  • Bug with URI copying in strict routing handling causing duplicate "<<" characters in Route header (ticket #97, thanks Ryder Rishel for investigating and fixing the problem).
  • pjsip_ctype_hdr_clone() doesn't duplicate media subtype (ticket #104, thanks Igor S for the report!)

PJMEDIA bug fixes:

  • Crash in echo suppressor on Windows Mobile (ticket #43)
  • A wrong "Invalid RTP version" message is printed in some cases (ticket #47)
  • Wrong PortAudio? error mapping causes PortAudio? to malfunction (ticket #55)
  • Frame timestamp was not propagated correctly by the conference bridge (minor, ticket #70).
  • RTCP discard statistic should be increased when invalid RTP packet is received (ticket #37)
  • More stable audio on Windows Mobile (ticket #74, thanks ChenHuang? for the report and solution)
  • Allow empty format list in pjmedia_sdp_validate() when media port is zero (ticket #75, thanks Briac Hardouin for the report and solution).
  • Bug in PortAudio? on MacOSX 10.4 causing no audio input when device is opened with non-native clock rate (ticket #76, thanks Norman Franke for the report and solution)
  • Bug in conference bridge/resampling causing noisy audio with some clock rate settings (ticket #78, thanks Norman Franke for the report)
  • Bug in conference bridge in level adjustment calculation (ticket #94, thanks frank wiersma for the fix).
  • Fixed linking errors when codecs are disabled from configure script (ticket #82, thanks Thomas Reitmayr)
  • Audio saturation when level is applied to conference (ticket #109)

PJSUA-API bug fixes:

  • Cannot re-initialize PJSUA with pjsua_create() after pjsua_destroy() (ticket #29)
  • Misleading error message in PJSUA when outgoing call fails because of invalid URI (ticket #38)
  • Bug when account is deleted and new account is created, previous session is not completely cleared (ticket #68)
  • pjsua_transport_close() doesn't properly close transports (especially TLS) (ticket #84, thanks Alain Totouom)
  • Error when binding SIP transport to specific interface (ticket #98, thanks Hoi-Ho Chan for reporting).
  • Error when specifying port zero for SIP transports (ticket #101).
Note: See TracRoadmap for help on using the roadmap.