12. PJSUA2 API Reference Manuals

endpoint.hpp

PJSUA2 Base Agent Operation.

namespace pj

PJSUA2 API is inside pj namespace.

class Endpoint
#include <endpoint.hpp>

Endpoint represents an instance of pjsua library.

There can only be one instance of pjsua library in an application, hence this class is a singleton.

Public Functions
Endpoint()

Default constructor.

virtual ~Endpoint()

Virtual destructor.

Version libVersion() const

Get library version.

void libCreate()

Instantiate pjsua application.

Application must call this function before calling any other functions, to make sure that the underlying libraries are properly initialized. Once this function has returned success, application must call destroy() before quitting.

pjsua_state libGetState() const

Get library state.

Return
library state.

void libInit(const EpConfig & prmEpConfig)

Initialize pjsua with the specified settings.

All the settings are optional, and the default values will be used when the config is not specified.

Note that create() MUST be called before calling this function.

Parameters

void libStart()

Call this function after all initialization is done, so that the library can do additional checking set up.

Application may call this function any time after init().

void libRegisterThread(const string & name)

Register a thread that was created by external or native API to the library.

Note that each time this function is called, it will allocate some memory to store the thread description, which will only be freed when the library is destroyed.

Parameters
  • name -

    The optional name to be assigned to the thread.

bool libIsThreadRegistered()

Check if this thread has been registered to the library.

Note that this function is only applicable for library main & worker threads and external/native threads registered using libRegisterThread().

void libStopWorkerThreads()

Stop all worker threads.

int libHandleEvents(unsigned msec_timeout)

Poll pjsua for events, and if necessary block the caller thread for the specified maximum interval (in miliseconds).

Application doesn’t normally need to call this function if it has configured worker thread (thread_cnt field) in pjsua_config structure, because polling then will be done by these worker threads instead.

If EpConfig::UaConfig::mainThreadOnly is enabled and this function is called from the main thread (by default the main thread is thread that calls libCreate()), this function will also scan and run any pending jobs in the list.

Return
The number of events that have been handled during the poll. Negative value indicates error, and application can retrieve the error as (status = -return_value).
Parameters
  • msec_timeout -

    Maximum time to wait, in miliseconds.

void libDestroy(unsigned prmFlags = 0)

Destroy pjsua.

Application is recommended to perform graceful shutdown before calling this function (such as unregister the account from the SIP server, terminate presense subscription, and hangup active calls), however, this function will do all of these if it finds there are active sessions that need to be terminated. This function will block for few seconds to wait for replies from remote.

Application.may safely call this function more than once if it doesn’t keep track of it’s state.

Parameters
  • prmFlags -

    Combination of pjsua_destroy_flag enumeration.

string utilStrError(pj_status_t prmErr)

Retrieve the error string for the specified status code.

Parameters
  • prmErr -

    The error code.

void utilLogWrite(int prmLevel, const string & prmSender, const string & prmMsg)

Write a log message.

Parameters
  • prmLevel -

    Log verbosity level (1-5)

  • prmSender -

    The log sender.

  • prmMsg -

    The log message.

void utilLogWrite(LogEntry & e)

Write a log entry.

Parameters
  • e -

    The log entry.

pj_status_t utilVerifySipUri(const string & prmUri)

This is a utility function to verify that valid SIP url is given.

If the URL is a valid SIP/SIPS scheme, PJ_SUCCESS will be returned.

Return
PJ_SUCCESS on success, or the appropriate error code.
See
utilVerifyUri()
Parameters
  • prmUri -

    The URL string.

pj_status_t utilVerifyUri(const string & prmUri)

This is a utility function to verify that valid URI is given.

Unlike utilVerifySipUri(), this function will return PJ_SUCCESS if tel: URI is given.

Return
PJ_SUCCESS on success, or the appropriate error code.
See
pjsua_verify_sip_url()
Parameters
  • prmUri -

    The URL string.

Token utilTimerSchedule(unsigned prmMsecDelay, Token prmUserData)

Schedule a timer with the specified interval and user data.

When the interval elapsed, onTimer() callback will be called. Note that the callback may be executed by different thread, depending on whether worker thread is enabled or not.

Return
Token to identify the timer, which could be given to utilTimerCancel().
Parameters
  • prmMsecDelay -

    The time interval in msec.

  • prmUserData -

    Arbitrary user data, to be given back to application in the callback.

void utilTimerCancel(Token prmToken)

Cancel previously scheduled timer with the specified timer token.

Parameters

void utilAddPendingJob(PendingJob * job)

Utility to register a pending job to be executed by main thread.

If EpConfig::UaConfig::mainThreadOnly is false, the job will be executed immediately.

Parameters
  • job -

    The job class.

IntVector utilSslGetAvailableCiphers()

Get cipher list supported by SSL/TLS backend.

void natDetectType(void)

This is a utility function to detect NAT type in front of this endpoint.

Once invoked successfully, this function will complete asynchronously and report the result in onNatDetectionComplete().

After NAT has been detected and the callback is called, application can get the detected NAT type by calling natGetType(). Application can also perform NAT detection by calling natDetectType() again at later time.

Note that STUN must be enabled to run this function successfully.

pj_stun_nat_type natGetType()

Get the NAT type as detected by natDetectType() function.

This function will only return useful NAT type after natDetectType() has completed successfully and onNatDetectionComplete() callback has been called.

Exception: if this function is called while detection is in progress, PJ_EPENDING exception will be raised.

void natCheckStunServers(const StringVector & prmServers, bool prmWait, Token prmUserData)

Auxiliary function to resolve and contact each of the STUN server entries (sequentially) to find which is usable.

The libInit() must have been called before calling this function.

See
natCancelCheckStunServers()
Parameters
  • prmServers -

    Array of STUN servers to try. The endpoint will try to resolve and contact each of the STUN server entry until it finds one that is usable. Each entry may be a domain name, host name, IP address, and it may contain an optional port number. For example:

    • “pjsip.org” (domain name)
    • “sip.pjsip.org” (host name)
    • “pjsip.org:33478” (domain name and a non- standard port number)
    • “10.0.0.1:3478” (IP address and port number)

  • prmWait -

    Specify if the function should block until it gets the result. In this case, the function will block while the resolution is being done, and the callback will be called before this function returns.

  • prmUserData -

    Arbitrary user data to be passed back to application in the callback.

void natCancelCheckStunServers(Token token, bool notify_cb = false)

Cancel pending STUN resolution which match the specified token.

Exception: PJ_ENOTFOUND if there is no matching one, or other error.

Parameters
  • token -

    The token to match. This token was given to natCheckStunServers()

  • notify_cb -

    Boolean to control whether the callback should be called for cancelled resolutions. When the callback is called, the status in the result will be set as PJ_ECANCELLED.

TransportId transportCreate(pjsip_transport_type_e type, const TransportConfig & cfg)

Create and start a new SIP transport according to the specified settings.

Return
The transport ID.
Parameters
  • type -

    Transport type.

  • cfg -

    Transport configuration.

IntVector transportEnum()

Enumerate all transports currently created in the system.

This function will return all transport IDs, and application may then call transportGetInfo() function to retrieve detailed information about the transport.

Return
Array of transport IDs.

TransportInfo transportGetInfo(TransportId id)

Get information about transport.

Return
Transport info.
Parameters
  • id -

    Transport ID.

void transportSetEnable(TransportId id, bool enabled)

Disable a transport or re-enable it.

By default transport is always enabled after it is created. Disabling a transport does not necessarily close the socket, it will only discard incoming messages and prevent the transport from being used to send outgoing messages.

Parameters
  • id -

    Transport ID.

  • enabled -

    Enable or disable the transport.

void transportClose(TransportId id)

Close the transport.

The system will wait until all transactions are closed while preventing new users from using the transport, and will close the transport when its usage count reaches zero.

Parameters
  • id -

    Transport ID.

void hangupAllCalls(void)

Terminate all calls.

This will initiate call hangup for all currently active calls.

void mediaAdd(AudioMedia & media)

Add media to the media list.

Parameters
  • media -

    media to be added.

void mediaRemove(AudioMedia & media)

Remove media from the media list.

Parameters
  • media -

    media to be removed.

bool mediaExists(const AudioMedia & media) const

Check if media has been added to the media list.

Return
True if media has been added, false otherwise.
Parameters
  • media -

    media to be check.

unsigned mediaMaxPorts() const

Get maximum number of media port.

Return
Maximum number of media port in the conference bridge.

unsigned mediaActivePorts() const

Get current number of active media port in the bridge.

Return
The number of active media port.

const AudioMediaVector & mediaEnumPorts() const

Enumerate all media port.

Return
The list of media port.

AudDevManager & audDevManager()

Get the instance of Audio Device Manager.

Return
The Audio Device Manager.

const CodecInfoVector & codecEnum()

Enum all supported codecs in the system.

Return
Array of codec info.

void codecSetPriority(const string & codec_id, pj_uint8_t priority)

Change codec priority.

Parameters
  • codec_id -

    Codec ID, which is a string that uniquely identify the codec (such as “speex/8000”).

  • priority -

    Codec priority, 0-255, where zero means to disable the codec.

CodecParam codecGetParam(const string & codec_id) const

Get codec parameters.

Return
Codec parameters. If codec is not found, Error will be thrown.
Parameters
  • codec_id -

    Codec ID.

void codecSetParam(const string & codec_id, const CodecParam param)

Set codec parameters.

Parameters
  • codec_id -

    Codec ID.

  • param -

    Codec parameter to set. Set to NULL to reset codec parameter to library default settings.

virtual void onNatDetectionComplete(const OnNatDetectionCompleteParam & prm)

Callback when the Endpoint has finished performing NAT type detection that is initiated with natDetectType().

Parameters
  • prm -

    Callback parameters containing the detection result.

virtual void onNatCheckStunServersComplete(const OnNatCheckStunServersCompleteParam & prm)

Callback when the Endpoint has finished performing STUN server checking that is initiated with natCheckStunServers().

Parameters
  • prm -

    Callback parameters.

virtual void onTransportState(const OnTransportStateParam & prm)

This callback is called when transport state has changed.

Parameters
  • prm -

    Callback parameters.

virtual void onTimer(const OnTimerParam & prm)

Callback when a timer has fired.

The timer was scheduled by utilTimerSchedule().

Parameters
  • prm -

    Callback parameters.

virtual void onSelectAccount(OnSelectAccountParam & prm)

This callback can be used by application to override the account to be used to handle an incoming message.

Initially, the account to be used will be calculated automatically by the library. This initial account will be used if application does not implement this callback, or application sets an invalid account upon returning from this callback.

Note that currently the incoming messages requiring account assignment are INVITE, MESSAGE, SUBSCRIBE, and unsolicited NOTIFY. This callback may be called before the callback of the SIP event itself, i.e: incoming call, pager, subscription, or unsolicited-event.

Parameters
  • prm -

    Callback parameters.

Public Static Functions
Endpoint & instance()

Retrieve the singleton instance of the endpoint.

Private Functions
void performPendingJobs()
void clearCodecInfoList()
Private Members
LogWriter * writer
AudioMediaVector mediaList
AudDevManager audioDevMgr
CodecInfoVector codecInfoList
std::map< pj_thread_t *, pj_thread_desc * > threadDescMap
bool mainThreadOnly
void * mainThread
unsigned pendingJobSize
std::list< PendingJob * > pendingJobs
Private Static Functions
void logFunc(int level, const char * data, int len)
void stun_resolve_cb(const pj_stun_resolve_result * result)
void on_timer(pj_timer_heap_t * timer_heap, struct pj_timer_entry * entry)
void on_nat_detect(const pj_stun_nat_detect_result * res)
void on_transport_state(pjsip_transport * tp, pjsip_transport_state state, const pjsip_transport_state_info * info)
Account * lookupAcc(int acc_id, const char * op)
Call * lookupCall(int call_id, const char * op)
void on_incoming_call(pjsua_acc_id acc_id, pjsua_call_id call_id, pjsip_rx_data * rdata)
void on_reg_started(pjsua_acc_id acc_id, pj_bool_t renew)
void on_reg_state2(pjsua_acc_id acc_id, pjsua_reg_info * info)
void on_incoming_subscribe(pjsua_acc_id acc_id, pjsua_srv_pres * srv_pres, pjsua_buddy_id buddy_id, const pj_str_t * from, pjsip_rx_data * rdata, pjsip_status_code * code, pj_str_t * reason, pjsua_msg_data * msg_data)
void on_pager2(pjsua_call_id call_id, const pj_str_t * from, const pj_str_t * to, const pj_str_t * contact, const pj_str_t * mime_type, const pj_str_t * body, pjsip_rx_data * rdata, pjsua_acc_id acc_id)
void on_pager_status2(pjsua_call_id call_id, const pj_str_t * to, const pj_str_t * body, void * user_data, pjsip_status_code status, const pj_str_t * reason, pjsip_tx_data * tdata, pjsip_rx_data * rdata, pjsua_acc_id acc_id)
void on_typing2(pjsua_call_id call_id, const pj_str_t * from, const pj_str_t * to, const pj_str_t * contact, pj_bool_t is_typing, pjsip_rx_data * rdata, pjsua_acc_id acc_id)
void on_mwi_info(pjsua_acc_id acc_id, pjsua_mwi_info * mwi_info)
void on_buddy_state(pjsua_buddy_id buddy_id)
void on_call_state(pjsua_call_id call_id, pjsip_event * e)
void on_call_tsx_state(pjsua_call_id call_id, pjsip_transaction * tsx, pjsip_event * e)
void on_call_media_state(pjsua_call_id call_id)
void on_call_sdp_created(pjsua_call_id call_id, pjmedia_sdp_session * sdp, pj_pool_t * pool, const pjmedia_sdp_session * rem_sdp)
void on_stream_created(pjsua_call_id call_id, pjmedia_stream * strm, unsigned stream_idx, pjmedia_port ** p_port)
void on_stream_destroyed(pjsua_call_id call_id, pjmedia_stream * strm, unsigned stream_idx)
void on_dtmf_digit(pjsua_call_id call_id, int digit)
void on_call_transfer_request(pjsua_call_id call_id, const pj_str_t * dst, pjsip_status_code * code)
void on_call_transfer_request2(pjsua_call_id call_id, const pj_str_t * dst, pjsip_status_code * code, pjsua_call_setting * opt)
void on_call_transfer_status(pjsua_call_id call_id, int st_code, const pj_str_t * st_text, pj_bool_t final, pj_bool_t * p_cont)
void on_call_replace_request(pjsua_call_id call_id, pjsip_rx_data * rdata, int * st_code, pj_str_t * st_text)
void on_call_replace_request2(pjsua_call_id call_id, pjsip_rx_data * rdata, int * st_code, pj_str_t * st_text, pjsua_call_setting * opt)
void on_call_replaced(pjsua_call_id old_call_id, pjsua_call_id new_call_id)
void on_call_rx_offer(pjsua_call_id call_id, const pjmedia_sdp_session * offer, void * reserved, pjsip_status_code * code, pjsua_call_setting * opt)
pjsip_redirect_op on_call_redirected(pjsua_call_id call_id, const pjsip_uri * target, const pjsip_event * e)
pj_status_t on_call_media_transport_state(pjsua_call_id call_id, const pjsua_med_tp_state_info * info)
void on_call_media_event(pjsua_call_id call_id, unsigned med_idx, pjmedia_event * event)
pjmedia_transport * on_create_media_transport(pjsua_call_id call_id, unsigned media_idx, pjmedia_transport * base_tp, unsigned flags)
Private Static Attributes
Endpoint * instance_
struct EpConfig
#include <endpoint.hpp>

Endpoint configuration.

Public Functions
virtual void readObject(const ContainerNode & node)

Read this object from a container.

Parameters
  • node -

    Container to write values from.

virtual void writeObject(ContainerNode & node) const

Write this object to a container.

Parameters
  • node -

    Container to write values to.

Public Members
UaConfig uaConfig

UA config.

LogConfig logConfig

Logging config.

MediaConfig medConfig

Media config.

struct LogConfig
#include <endpoint.hpp>

Logging configuration, which can be (optionally) specified when calling Lib::init().

Public Functions
LogConfig()

Default constructor initialises with default values.

void fromPj(const pjsua_logging_config & lc)

Construct from pjsua_logging_config.

pjsua_logging_config toPj() const

Generate pjsua_logging_config.

virtual void readObject(const ContainerNode & node)

Read this object from a container.

Parameters
  • node -

    Container to write values from.

virtual void writeObject(ContainerNode & node) const

Write this object to a container.

Parameters
  • node -

    Container to write values to.

Public Members
unsigned msgLogging

Log incoming and outgoing SIP message? Yes!

unsigned level

Input verbosity level.

Value 5 is reasonable.

unsigned consoleLevel

Verbosity level for console.

Value 4 is reasonable.

unsigned decor

Log decoration.

string filename

Optional log filename if app wishes the library to write to log file.

unsigned fileFlags

Additional flags to be given to pj_file_open() when opening the log file.

By default, the flag is PJ_O_WRONLY. Application may set PJ_O_APPEND here so that logs are appended to existing file instead of overwriting it.

Default is 0.

LogWriter * writer

Custom log writer, if required.

This instance will be destroyed by the endpoint when the endpoint is destroyed.

struct LogEntry
#include <endpoint.hpp>

Data containing log entry to be written by the LogWriter.

Public Members
int level

Log verbosity level of this message.

string msg

The log message.

long threadId

ID of current thread.

string threadName

The name of the thread that writes this log.

class LogWriter
#include <endpoint.hpp>

Interface for writing log messages.

Applications can inherit this class and supply it in the LogConfig structure to implement custom log writing facility.

Public Functions
virtual ~LogWriter()

Destructor.

virtual void write(const LogEntry & entry) = 0

Write a log entry.

struct MediaConfig
#include <endpoint.hpp>

This structure describes media configuration, which will be specified when calling Lib::init().

Public Functions
MediaConfig()

Default constructor initialises with default values.

void fromPj(const pjsua_media_config & mc)

Construct from pjsua_media_config.

pjsua_media_config toPj() const

Export.

virtual void readObject(const ContainerNode & node)

Read this object from a container.

Parameters
  • node -

    Container to write values from.

virtual void writeObject(ContainerNode & node) const

Write this object to a container.

Parameters
  • node -

    Container to write values to.

Public Members
unsigned clockRate

Clock rate to be applied to the conference bridge.

If value is zero, default clock rate will be used (PJSUA_DEFAULT_CLOCK_RATE, which by default is 16KHz).

unsigned sndClockRate

Clock rate to be applied when opening the sound device.

If value is zero, conference bridge clock rate will be used.

unsigned channelCount

Channel count be applied when opening the sound device and conference bridge.

unsigned audioFramePtime

Specify audio frame ptime.

The value here will affect the samples per frame of both the sound device and the conference bridge. Specifying lower ptime will normally reduce the latency.

Default value: PJSUA_DEFAULT_AUDIO_FRAME_PTIME

unsigned maxMediaPorts

Specify maximum number of media ports to be created in the conference bridge.

Since all media terminate in the bridge (calls, file player, file recorder, etc), the value must be large enough to support all of them. However, the larger the value, the more computations are performed.

Default value: PJSUA_MAX_CONF_PORTS

bool hasIoqueue

Specify whether the media manager should manage its own ioqueue for the RTP/RTCP sockets.

If yes, ioqueue will be created and at least one worker thread will be created too. If no, the RTP/RTCP sockets will share the same ioqueue as SIP sockets, and no worker thread is needed.

Normally application would say yes here, unless it wants to run everything from a single thread.

unsigned threadCnt

Specify the number of worker threads to handle incoming RTP packets.

A value of one is recommended for most applications.

unsigned quality

Media quality, 0-10, according to this table: 5-10: resampling use large filter, 3-4: resampling use small filter, 1-2: resampling use linear.

The media quality also sets speex codec quality/complexity to the number.

Default: 5 (PJSUA_DEFAULT_CODEC_QUALITY).

unsigned ptime

Specify default codec ptime.

Default: 0 (codec specific)

bool noVad

Disable VAD?

Default: 0 (no (meaning VAD is enabled))

unsigned ilbcMode

iLBC mode (20 or 30).

Default: 30 (PJSUA_DEFAULT_ILBC_MODE)

unsigned txDropPct

Percentage of RTP packet to drop in TX direction (to simulate packet lost).

Default: 0

unsigned rxDropPct

Percentage of RTP packet to drop in RX direction (to simulate packet lost).

Default: 0

unsigned ecOptions

Echo canceller options (see pjmedia_echo_create())

Default: 0.

unsigned ecTailLen

Echo canceller tail length, in miliseconds.

Setting this to zero will disable echo cancellation.

Default: PJSUA_DEFAULT_EC_TAIL_LEN

unsigned sndRecLatency

Audio capture buffer length, in milliseconds.

Default: PJMEDIA_SND_DEFAULT_REC_LATENCY

unsigned sndPlayLatency

Audio playback buffer length, in milliseconds.

Default: PJMEDIA_SND_DEFAULT_PLAY_LATENCY

int jbInit

Jitter buffer initial prefetch delay in msec.

The value must be between jb_min_pre and jb_max_pre below.

Default: -1 (to use default stream settings, currently 150 msec)

int jbMinPre

Jitter buffer minimum prefetch delay in msec.

Default: -1 (to use default stream settings, currently 60 msec)

int jbMaxPre

Jitter buffer maximum prefetch delay in msec.

Default: -1 (to use default stream settings, currently 240 msec)

int jbMax

Set maximum delay that can be accomodated by the jitter buffer msec.

Default: -1 (to use default stream settings, currently 360 msec)

int sndAutoCloseTime

Specify idle time of sound device before it is automatically closed, in seconds.

Use value -1 to disable the auto-close feature of sound device

Default : 1

bool vidPreviewEnableNative

Specify whether built-in/native preview should be used if available.

In some systems, video input devices have built-in capability to show preview window of the device. Using this built-in preview is preferable as it consumes less CPU power. If built-in preview is not available, the library will perform software rendering of the input. If this field is set to PJ_FALSE, software preview will always be used.

Default: PJ_TRUE

struct OnNatCheckStunServersCompleteParam
#include <endpoint.hpp>

Argument to Endpoint::onNatCheckStunServersComplete() callback.

Public Members
Token userData

Arbitrary user data that was passed to Endpoint::natCheckStunServers() function.

pj_status_t status

This will contain PJ_SUCCESS if at least one usable STUN server is found, otherwise it will contain the last error code during the operation.

string name

The server name that yields successful result.

This will only contain value if status is successful.

SocketAddress addr

The server IP address and port in “IP:port” format.

This will only contain value if status is successful.

struct OnNatDetectionCompleteParam
#include <endpoint.hpp>

Argument to Endpoint::onNatDetectionComplete() callback.

Public Members
pj_status_t status

Status of the detection process.

If this value is not PJ_SUCCESS, the detection has failed and nat_type field will contain PJ_STUN_NAT_TYPE_UNKNOWN.

string reason

The text describing the status, if the status is not PJ_SUCCESS.

pj_stun_nat_type natType

This contains the NAT type as detected by the detection procedure.

This value is only valid when the status is PJ_SUCCESS.

string natTypeName

Text describing that NAT type.

struct OnSelectAccountParam
#include <endpoint.hpp>

Parameter of Endpoint::onSelectAccount() callback.

Public Members
SipRxData rdata

The incoming request.

int accountIndex

The account index to be used to handle the request.

Upon entry, this will be filled by the account index chosen by the library. Application may change it to another value to use another account.

struct OnTimerParam
#include <endpoint.hpp>

Parameter of Endpoint::onTimer() callback.

Public Members
Token userData

Arbitrary user data that was passed to Endpoint::utilTimerSchedule() function.

unsigned msecDelay

The interval of this timer, in miliseconds.

struct OnTransportStateParam
#include <endpoint.hpp>

Parameter of Endpoint::onTransportState() callback.

Public Members
TransportHandle hnd

The transport handle.

pjsip_transport_state state

Transport current state.

pj_status_t lastError

The last error code related to the transport state.

struct PendingJob
Public Functions
virtual void execute(bool is_pending) = 0

Perform the job.

virtual ~PendingJob()

Virtual destructor.

struct UaConfig
#include <endpoint.hpp>

SIP User Agent related settings.

Public Functions
UaConfig()

Default constructor to initialize with default values.

void fromPj(const pjsua_config & ua_cfg)

Construct from pjsua_config.

pjsua_config toPj() const

Export to pjsua_config.

virtual void readObject(const ContainerNode & node)

Read this object from a container.

Parameters
  • node -

    Container to write values from.

virtual void writeObject(ContainerNode & node) const

Write this object to a container.

Parameters
  • node -

    Container to write values to.

Public Members
unsigned maxCalls

Maximum calls to support (default: 4).

The value specified here must be smaller than the compile time maximum settings PJSUA_MAX_CALLS, which by default is 32. To increase this limit, the library must be recompiled with new PJSUA_MAX_CALLS value.

unsigned threadCnt

Number of worker threads.

Normally application will want to have at least one worker thread, unless when it wants to poll the library periodically, which in this case the worker thread can be set to zero.

bool mainThreadOnly

When this flag is non-zero, all callbacks that come from thread other than main thread will be posted to the main thread and to be executed by Endpoint::libHandleEvents() function.

This includes the logging callback. Note that this will only work if threadCnt is set to zero and Endpoint::libHandleEvents() is performed by main thread. By default, the main thread is set from the thread that invoke Endpoint::libCreate()

Default: false

StringVector nameserver

Array of nameservers to be used by the SIP resolver subsystem.

The order of the name server specifies the priority (first name server will be used first, unless it is not reachable).

string userAgent

Optional user agent string (default empty).

If it’s empty, no User-Agent header will be sent with outgoing requests.

StringVector stunServer

Array of STUN servers to try.

The library will try to resolve and contact each of the STUN server entry until it finds one that is usable. Each entry may be a domain name, host name, IP address, and it may contain an optional port number. For example:

  • “pjsip.org” (domain name)
  • “sip.pjsip.org” (host name)
  • “pjsip.org:33478” (domain name and a non-standard port number)
  • “10.0.0.1:3478” (IP address and port number)

When nameserver is configured in the pjsua_config.nameserver field, if entry is not an IP address, it will be resolved with DNS SRV resolution first, and it will fallback to use DNS A resolution if this fails. Port number may be specified even if the entry is a domain name, in case the DNS SRV resolution should fallback to a non-standard port.

When nameserver is not configured, entries will be resolved with pj_gethostbyname() if it’s not an IP address. Port number may be specified if the server is not listening in standard STUN port.

bool stunIgnoreFailure

This specifies if the library startup should ignore failure with the STUN servers.

If this is set to PJ_FALSE, the library will refuse to start if it fails to resolve or contact any of the STUN servers.

Default: TRUE

int natTypeInSdp

Support for adding and parsing NAT type in the SDP to assist troubleshooting.

The valid values are:

  • 0: no information will be added in SDP, and parsing is disabled.
  • 1: only the NAT type number is added.
  • 2: add both NAT type number and name.

Default: 1

bool mwiUnsolicitedEnabled

Handle unsolicited NOTIFY requests containing message waiting indication (MWI) info.

Unsolicited MWI is incoming NOTIFY requests which are not requested by client with SUBSCRIBE request.

If this is enabled, the library will respond 200/OK to the NOTIFY request and forward the request to Endpoint::onMwiInfo() callback.

See also AccountMwiConfig.enabled.

Default: PJ_TRUE

account.hpp

PJSUA2 Account operations.

namespace pj

PJSUA2 API is inside pj namespace.

Typedefs
typedef std::vector< AuthCredInfo > AuthCredInfoVector

Array of SIP credentials.

class Account
#include <account.hpp>

Account.

Public Functions
Account()

Constructor.

virtual ~Account()

Destructor.

Note that if the account is deleted, it will also delete the corresponding account in the PJSUA-LIB.

void create(const AccountConfig & cfg, bool make_default = false)

Create the account.

Parameters
  • cfg -

    The account config.

  • make_default -

    Make this the default account.

void modify(const AccountConfig & cfg)

Modify the account to use the specified account configuration.

Depending on the changes, this may cause unregistration or reregistration on the account.

Parameters
  • cfg -

    New account config to be applied to the account.

bool isValid() const

Check if this account is still valid.

Return
True if it is.

void setDefault()

Set this as default account to be used when incoming and outgoing requests don’t match any accounts.

Return
PJ_SUCCESS on success.

bool isDefault() const

Check if this account is the default account.

Default account will be used for incoming and outgoing requests that don’t match any other accounts.

Return
True if this is the default account.

int getId() const

Get PJSUA-LIB account ID or index associated with this account.

Return
Integer greater than or equal to zero.

AccountInfo getInfo() const

Get account info.

Return
Account info.

void setRegistration(bool renew)

Update registration or perform unregistration.

Application normally only needs to call this function if it wants to manually update the registration or to unregister from the server.

Parameters
  • renew -

    If False, this will start unregistration process.

void setOnlineStatus(const PresenceStatus & pres_st)

Set or modify account’s presence online status to be advertised to remote/presence subscribers.

This would trigger the sending of outgoing NOTIFY request if there are server side presence subscription for this account, and/or outgoing PUBLISH if presence publication is enabled for this account.

Parameters
  • pres_st -

    Presence online status.

void setTransport(TransportId tp_id)

Lock/bind this account to a specific transport/listener.

Normally application shouldn’t need to do this, as transports will be selected automatically by the library according to the destination.

When account is locked/bound to a specific transport, all outgoing requests from this account will use the specified transport (this includes SIP registration, dialog (call and event subscription), and out-of-dialog requests such as MESSAGE).

Note that transport id may be specified in AccountConfig too.

Parameters
  • tp_id -

    The transport ID.

void presNotify(const PresNotifyParam & prm)

Send NOTIFY to inform account presence status or to terminate server side presence subscription.

If application wants to reject the incoming request, it should set the param PresNotifyParam.state to PJSIP_EVSUB_STATE_TERMINATED.

Parameters
  • prm -

    The sending NOTIFY parameter.

const BuddyVector & enumBuddies() const

Enumerate all buddies of the account.

Return
The buddy list.

Buddy * findBuddy(string uri, FindBuddyMatch * buddy_match = NULL) const

Find a buddy in the buddy list with the specified URI.

Exception: if buddy is not found, PJ_ENOTFOUND will be thrown.

Return
The pointer to buddy.
Parameters
  • uri -

    The buddy URI.

  • buddy_match -

    The buddy match algo.

void addBuddy(Buddy * buddy)

An internal function to add a Buddy to Account buddy list.

This function must never be used by application.

void removeBuddy(Buddy * buddy)

An internal function to remove a Buddy from Account buddy list.

This function must never be used by application.

virtual void onIncomingCall(OnIncomingCallParam & prm)

Notify application on incoming call.

Parameters
  • prm -

    Callback parameter.

virtual void onRegStarted(OnRegStartedParam & prm)

Notify application when registration or unregistration has been initiated.

Note that this only notifies the initial registration and unregistration. Once registration session is active, subsequent refresh will not cause this callback to be called.

Parameters
  • prm -

    Callback parameter.

virtual void onRegState(OnRegStateParam & prm)

Notify application when registration status has changed.

Application may then query the account info to get the registration details.

Parameters
  • prm -

    Callback parameter.

virtual void onIncomingSubscribe(OnIncomingSubscribeParam & prm)

Notification when incoming SUBSCRIBE request is received.

Application may use this callback to authorize the incoming subscribe request (e.g. ask user permission if the request should be granted).

If this callback is not implemented, all incoming presence subscription requests will be accepted.

If this callback is implemented, application has several choices on what to do with the incoming request:

  • it may reject the request immediately by specifying non-200 class final response in the IncomingSubscribeParam.code parameter.
  • it may immediately accept the request by specifying 200 as the IncomingSubscribeParam.code parameter. This is the default value if application doesn’t set any value to the IncomingSubscribeParam.code parameter. In this case, the library will automatically send NOTIFY request upon returning from this callback.
  • it may delay the processing of the request, for example to request user permission whether to accept or reject the request. In this case, the application MUST set the IncomingSubscribeParam.code argument to 202, then IMMEDIATELY calls presNotify() with state PJSIP_EVSUB_STATE_PENDING and later calls presNotify() again to accept or reject the subscription request.

Any IncomingSubscribeParam.code other than 200 and 202 will be treated as 200.

Application MUST return from this callback immediately (e.g. it must not block in this callback while waiting for user confirmation).

Parameters
  • prm -

    Callback parameter.

virtual void onInstantMessage(OnInstantMessageParam & prm)

Notify application on incoming instant message or pager (i.e.

MESSAGE request) that was received outside call context.

Parameters
  • prm -

    Callback parameter.

virtual void onInstantMessageStatus(OnInstantMessageStatusParam & prm)

Notify application about the delivery status of outgoing pager/instant message (i.e.

MESSAGE) request.

Parameters
  • prm -

    Callback parameter.

virtual void onTypingIndication(OnTypingIndicationParam & prm)

Notify application about typing indication.

Parameters
  • prm -

    Callback parameter.

virtual void onMwiInfo(OnMwiInfoParam & prm)

Notification about MWI (Message Waiting Indication) status change.

This callback can be called upon the status change of the SUBSCRIBE request (for example, 202/Accepted to SUBSCRIBE is received) or when a NOTIFY reqeust is received.

Parameters
  • prm -

    Callback parameter.

Public Static Functions
Account * lookup(int acc_id)

Get the Account class for the specified account Id.

Return
The Account instance or NULL if not found.
Parameters
  • acc_id -

    The account ID to lookup

Private Members
pjsua_acc_id id
string tmpReason
BuddyVector buddyList
Friends
friend class Endpoint
struct AccountCallConfig
#include <account.hpp>

Account‘s call settings.

This will be specified in AccountConfig.

Public Functions
virtual void readObject(const ContainerNode & node)

Read this object from a container node.

Parameters
  • node -

    Container to read values from.

virtual void writeObject(ContainerNode & node) const

Write this object to a container node.

Parameters
  • node -

    Container to write values to.

Public Members
pjsua_call_hold_type holdType

Specify how to offer call hold to remote peer.

Please see the documentation on pjsua_call_hold_type for more info.

Default: PJSUA_CALL_HOLD_TYPE_DEFAULT

pjsua_100rel_use prackUse

Specify how support for reliable provisional response (100rel/ PRACK) should be used for all sessions in this account.

See the documentation of pjsua_100rel_use enumeration for more info.

Default: PJSUA_100REL_NOT_USED

pjsua_sip_timer_use timerUse

Specify the usage of Session Timers for all sessions.

See the pjsua_sip_timer_use for possible values.

Default: PJSUA_SIP_TIMER_OPTIONAL

unsigned timerMinSESec

Specify minimum Session Timer expiration period, in seconds.

Must not be lower than 90. Default is 90.

unsigned timerSessExpiresSec

Specify Session Timer expiration period, in seconds.

Must not be lower than timerMinSE. Default is 1800.

struct AccountConfig
#include <account.hpp>

Account configuration.

Public Functions
AccountConfig()

Default constructor will initialize with default values.

void toPj(pjsua_acc_config & cfg) const

This will return a temporary pjsua_acc_config instance, which contents are only valid as long as this AccountConfig structure remains valid AND no modifications are done to it AND no further toPj() function call is made.

Any call to toPj() function will invalidate the content of temporary pjsua_acc_config that was returned by the previous call.

void fromPj(const pjsua_acc_config & prm, const pjsua_media_config * mcfg)

Initialize from pjsip.

virtual void readObject(const ContainerNode & node)

Read this object from a container node.

Parameters
  • node -

    Container to read values from.

virtual void writeObject(ContainerNode & node) const

Write this object to a container node.

Parameters
  • node -

    Container to write values to.

Public Members
int priority

Account priority, which is used to control the order of matching incoming/outgoing requests.

The higher the number means the higher the priority is, and the account will be matched first.

string idUri

The Address of Record or AOR, that is full SIP URL that identifies the account.

The value can take name address or URL format, and will look something like “sip:account@serviceprovider”.

This field is mandatory.

AccountRegConfig regConfig

Registration settings.

AccountSipConfig sipConfig

SIP settings.

AccountCallConfig callConfig

Call settings.

AccountPresConfig presConfig

Presence settings.

AccountMwiConfig mwiConfig

MWI (Message Waiting Indication) settings.

AccountNatConfig natConfig

NAT settings.

AccountMediaConfig mediaConfig

Media settings (applicable for both audio and video).

AccountVideoConfig videoConfig

Video settings.

struct AccountInfo
#include <account.hpp>

Account information.

Application can query the account information by calling Account::getInfo().

Public Functions
void fromPj(const pjsua_acc_info & pai)

Import from pjsip data.

Public Members
pjsua_acc_id id

The account ID.

bool isDefault

Flag to indicate whether this is the default account.

string uri

Account URI.

bool regIsConfigured

Flag to tell whether this account has registration setting (reg_uri is not empty).

bool regIsActive

Flag to tell whether this account is currently registered (has active registration session).

int regExpiresSec

An up to date expiration interval for account registration session.

pjsip_status_code regStatus

Last registration status code.

If status code is zero, the account is currently not registered. Any other value indicates the SIP status code of the registration.

string regStatusText

String describing the registration status.

pj_status_t regLastErr

Last registration error code.

When the status field contains a SIP status code that indicates a registration failure, last registration error code contains the error code that causes the failure. In any other case, its value is zero.

bool onlineStatus

Presence online status for this account.

string onlineStatusText

Presence online status text.

struct AccountMediaConfig
#include <account.hpp>

Account media config (applicable for both audio and video).

This will be specified in AccountConfig.

Public Functions
virtual void readObject(const ContainerNode & node)

Read this object from a container node.

Parameters
  • node -

    Container to read values from.

virtual void writeObject(ContainerNode & node) const

Write this object to a container node.

Parameters
  • node -

    Container to write values to.

Public Members
TransportConfig transportConfig

Media transport (RTP) configuration.

bool lockCodecEnabled

If remote sends SDP answer containing more than one format or codec in the media line, send re-INVITE or UPDATE with just one codec to lock which codec to use.

Default: True (Yes).

bool streamKaEnabled

Specify whether stream keep-alive and NAT hole punching with non-codec-VAD mechanism (see PJMEDIA_STREAM_ENABLE_KA) is enabled for this account.

Default: False

pjmedia_srtp_use srtpUse

Specify whether secure media transport should be used for this account.

Valid values are PJMEDIA_SRTP_DISABLED, PJMEDIA_SRTP_OPTIONAL, and PJMEDIA_SRTP_MANDATORY.

Default: PJSUA_DEFAULT_USE_SRTP

int srtpSecureSignaling

Specify whether SRTP requires secure signaling to be used.

This option is only used when use_srtp option above is non-zero.

Valid values are: 0: SRTP does not require secure signaling 1: SRTP requires secure transport such as TLS 2: SRTP requires secure end-to-end transport (SIPS)

Default: PJSUA_DEFAULT_SRTP_SECURE_SIGNALING

pjsua_ipv6_use ipv6Use

Specify whether IPv6 should be used on media.

Default is not used.

struct AccountMwiConfig
#include <account.hpp>

Account MWI (Message Waiting Indication) settings.

This will be specified in AccountConfig.

Public Functions
virtual void readObject(const ContainerNode & node)

Read this object from a container node.

Parameters
  • node -

    Container to read values from.

virtual void writeObject(ContainerNode & node) const

Write this object to a container node.

Parameters
  • node -

    Container to write values to.

Public Members
bool enabled

Subscribe to message waiting indication events (RFC 3842).

See also UaConfig.mwiUnsolicitedEnabled setting.

Default: FALSE

unsigned expirationSec

Specify the default expiration time (in seconds) for Message Waiting Indication (RFC 3842) event subscription.

This must not be zero.

Default: PJSIP_MWI_DEFAULT_EXPIRES (3600)

struct AccountNatConfig
#include <account.hpp>

Account‘s NAT (Network Address Translation) settings.

This will be specified in AccountConfig.

Public Functions
virtual void readObject(const ContainerNode & node)

Read this object from a container node.

Parameters
  • node -

    Container to read values from.

virtual void writeObject(ContainerNode & node) const

Write this object to a container node.

Parameters
  • node -

    Container to write values to.

Public Members
pjsua_stun_use sipStunUse

Control the use of STUN for the SIP signaling.

Default: PJSUA_STUN_USE_DEFAULT

pjsua_stun_use mediaStunUse

Control the use of STUN for the media transports.

Default: PJSUA_STUN_USE_DEFAULT

bool iceEnabled

Enable ICE for the media transport.

Default: False

int iceMaxHostCands

Set the maximum number of ICE host candidates.

Default: -1 (maximum not set)

bool iceAggressiveNomination

Specify whether to use aggressive nomination.

Default: True

unsigned iceNominatedCheckDelayMsec

For controlling agent if it uses regular nomination, specify the delay to perform nominated check (connectivity check with USE-CANDIDATE attribute) after all components have a valid pair.

Default value is PJ_ICE_NOMINATED_CHECK_DELAY.

int iceWaitNominationTimeoutMsec

For a controlled agent, specify how long it wants to wait (in milliseconds) for the controlling agent to complete sending connectivity check with nominated flag set to true for all components after the controlled agent has found that all connectivity checks in its checklist have been completed and there is at least one successful (but not nominated) check for every component.

Default value for this option is ICE_CONTROLLED_AGENT_WAIT_NOMINATION_TIMEOUT. Specify -1 to disable this timer.

bool iceNoRtcp

Disable RTCP component.

Default: False

bool iceAlwaysUpdate

Always send re-INVITE/UPDATE after ICE negotiation regardless of whether the default ICE transport address is changed or not.

When this is set to False, re-INVITE/UPDATE will be sent only when the default ICE transport address is changed.

Default: yes

bool turnEnabled

Enable TURN candidate in ICE.

string turnServer

Specify TURN domain name or host name, in in “DOMAIN:PORT” or “HOST:PORT” format.

pj_turn_tp_type turnConnType

Specify the connection type to be used to the TURN server.

Valid values are PJ_TURN_TP_UDP or PJ_TURN_TP_TCP.

Default: PJ_TURN_TP_UDP

string turnUserName

Specify the username to authenticate with the TURN server.

int turnPasswordType

Specify the type of password.

Currently this must be zero to indicate plain-text password will be used in the password.

string turnPassword

Specify the password to authenticate with the TURN server.

int contactRewriteUse

This option is used to update the transport address and the Contact header of REGISTER request.

When this option is enabled, the library will keep track of the public IP address from the response of REGISTER request. Once it detects that the address has changed, it will unregister current Contact, update the Contact with transport address learned from Via header, and register a new Contact to the registrar. This will also update the public name of UDP transport if STUN is configured.

See also contactRewriteMethod field.

Default: TRUE

int contactRewriteMethod

Specify how Contact update will be done with the registration, if contactRewriteEnabled is enabled.

The value is bitmask combination of pjsua_contact_rewrite_method. See also pjsua_contact_rewrite_method.

Value PJSUA_CONTACT_REWRITE_UNREGISTER(1) is the legacy behavior.

Default value: PJSUA_CONTACT_REWRITE_METHOD (PJSUA_CONTACT_REWRITE_NO_UNREG | PJSUA_CONTACT_REWRITE_ALWAYS_UPDATE)

int contactUseSrcPort

Specify if source TCP port should be used as the initial Contact address if TCP/TLS transport is used.

Note that this feature will be automatically turned off when nameserver is configured because it may yield different destination address due to DNS SRV resolution. Also some platforms are unable to report the local address of the TCP socket when it is still connecting. In these cases, this feature will also be turned off.

Default: 1 (yes).

int viaRewriteUse

This option is used to overwrite the “sent-by” field of the Via header for outgoing messages with the same interface address as the one in the REGISTER request, as long as the request uses the same transport instance as the previous REGISTER request.

Default: TRUE

int sdpNatRewriteUse

This option controls whether the IP address in SDP should be replaced with the IP address found in Via header of the REGISTER response, ONLY when STUN and ICE are not used.

If the value is FALSE (the original behavior), then the local IP address will be used. If TRUE, and when STUN and ICE are disabled, then the IP address found in registration response will be used.

Default: PJ_FALSE (no)

int sipOutboundUse

Control the use of SIP outbound feature.

SIP outbound is described in RFC 5626 to enable proxies or registrar to send inbound requests back to UA using the same connection initiated by the UA for its registration. This feature is highly useful in NAT-ed deployemtns, hence it is enabled by default.

Note: currently SIP outbound can only be used with TCP and TLS transports. If UDP is used for the registration, the SIP outbound feature will be silently ignored for the account.

Default: TRUE

string sipOutboundInstanceId

Specify SIP outbound (RFC 5626) instance ID to be used by this account.

If empty, an instance ID will be generated based on the hostname of this agent. If application specifies this parameter, the value will look like “<urn:uuid:00000000-0000-1000-8000-AABBCCDDEEFF>” without the double-quotes.

Default: empty

string sipOutboundRegId

Specify SIP outbound (RFC 5626) registration ID.

The default value is empty, which would cause the library to automatically generate a suitable value.

Default: empty

unsigned udpKaIntervalSec

Set the interval for periodic keep-alive transmission for this account.

If this value is zero, keep-alive will be disabled for this account. The keep-alive transmission will be sent to the registrar’s address, after successful registration.

Default: 15 (seconds)

string udpKaData

Specify the data to be transmitted as keep-alive packets.

Default: CR-LF

struct AccountPresConfig
#include <account.hpp>

Account presence config.

This will be specified in AccountConfig.

Public Functions
virtual void readObject(const ContainerNode & node)

Read this object from a container node.

Parameters
  • node -

    Container to read values from.

virtual void writeObject(ContainerNode & node) const

Write this object to a container node.

Parameters
  • node -

    Container to write values to.

Public Members
SipHeaderVector headers

The optional custom SIP headers to be put in the presence subscription request.

bool publishEnabled

If this flag is set, the presence information of this account will be PUBLISH-ed to the server where the account belongs.

Default: PJ_FALSE

bool publishQueue

Specify whether the client publication session should queue the PUBLISH request should there be another PUBLISH transaction still pending.

If this is set to false, the client will return error on the PUBLISH request if there is another PUBLISH transaction still in progress.

Default: PJSIP_PUBLISHC_QUEUE_REQUEST (TRUE)

unsigned publishShutdownWaitMsec

Maximum time to wait for unpublication transaction(s) to complete during shutdown process, before sending unregistration.

The library tries to wait for the unpublication (un-PUBLISH) to complete before sending REGISTER request to unregister the account, during library shutdown process. If the value is set too short, it is possible that the unregistration is sent before unpublication completes, causing unpublication request to fail.

Value is in milliseconds.

Default: PJSUA_UNPUBLISH_MAX_WAIT_TIME_MSEC (2000)

string pidfTupleId

Optional PIDF tuple ID for outgoing PUBLISH and NOTIFY.

If this value is not specified, a random string will be used.

struct AccountRegConfig
#include <account.hpp>

Account registration config.

This will be specified in AccountConfig.

Public Functions
virtual void readObject(const ContainerNode & node)

Read this object from a container node.

Parameters
  • node -

    Container to read values from.

virtual void writeObject(ContainerNode & node) const

Write this object to a container node.

Parameters
  • node -

    Container to write values to.

Public Members
string registrarUri

This is the URL to be put in the request URI for the registration, and will look something like “sip:serviceprovider”.

This field should be specified if registration is desired. If the value is empty, no account registration will be performed.

bool registerOnAdd

Specify whether the account should register as soon as it is added to the UA.

Application can set this to PJ_FALSE and control the registration manually with pjsua_acc_set_registration().

Default: True

SipHeaderVector headers

The optional custom SIP headers to be put in the registration request.

unsigned timeoutSec

Optional interval for registration, in seconds.

If the value is zero, default interval will be used (PJSUA_REG_INTERVAL, 300 seconds).

unsigned retryIntervalSec

Specify interval of auto registration retry upon registration failure (including caused by transport problem), in second.

Set to 0 to disable auto re-registration. Note that if the registration retry occurs because of transport failure, the first retry will be done after firstRetryIntervalSec seconds instead. Also note that the interval will be randomized slightly by approximately +/- ten seconds to avoid all clients re-registering at the same time.

See also firstRetryIntervalSec setting.

Default: PJSUA_REG_RETRY_INTERVAL

unsigned firstRetryIntervalSec

This specifies the interval for the first registration retry.

The registration retry is explained in retryIntervalSec. Note that the value here will also be randomized by +/- ten seconds.

Default: 0

unsigned delayBeforeRefreshSec

Specify the number of seconds to refresh the client registration before the registration expires.

Default: PJSIP_REGISTER_CLIENT_DELAY_BEFORE_REFRESH, 5 seconds

bool dropCallsOnFail

Specify whether calls of the configured account should be dropped after registration failure and an attempt of re-registration has also failed.

Default: FALSE (disabled)

unsigned unregWaitSec

Specify the maximum time to wait for unregistration requests to complete during library shutdown sequence.

Default: PJSUA_UNREG_TIMEOUT

unsigned proxyUse

Specify how the registration uses the outbound and account proxy settings.

This controls if and what Route headers will appear in the REGISTER request of this account. The value is bitmask combination of PJSUA_REG_USE_OUTBOUND_PROXY and PJSUA_REG_USE_ACC_PROXY bits. If the value is set to 0, the REGISTER request will not use any proxy (i.e. it will not have any Route headers).

Default: 3 (PJSUA_REG_USE_OUTBOUND_PROXY | PJSUA_REG_USE_ACC_PROXY)

struct AccountSipConfig
#include <account.hpp>

Various SIP settings for the account.

This will be specified in AccountConfig.

Public Functions
virtual void readObject(const ContainerNode & node)

Read this object from a container node.

Parameters
  • node -

    Container to read values from.

virtual void writeObject(ContainerNode & node) const

Write this object to a container node.

Parameters
  • node -

    Container to write values to.

Public Members
AuthCredInfoVector authCreds

Array of credentials.

If registration is desired, normally there should be at least one credential specified, to successfully authenticate against the service provider. More credentials can be specified, for example when the requests are expected to be challenged by the proxies in the route set.

StringVector proxies

Array of proxy servers to visit for outgoing requests.

Each of the entry is translated into one Route URI.

string contactForced

Optional URI to be put as Contact for this account.

It is recommended that this field is left empty, so that the value will be calculated automatically based on the transport address.

string contactParams

Additional parameters that will be appended in the Contact header for this account.

This will affect the Contact header in all SIP messages sent on behalf of this account, including but not limited to REGISTER, INVITE, and SUBCRIBE requests or responses.

The parameters should be preceeded by semicolon, and all strings must be properly escaped. Example: ”;my-param=X;another-param=Hi%20there”

string contactUriParams

Additional URI parameters that will be appended in the Contact URI for this account.

This will affect the Contact URI in all SIP messages sent on behalf of this account, including but not limited to REGISTER, INVITE, and SUBCRIBE requests or responses.

The parameters should be preceeded by semicolon, and all strings must be properly escaped. Example: ”;my-param=X;another-param=Hi%20there”

bool authInitialEmpty

If this flag is set, the authentication client framework will send an empty Authorization header in each initial request.

Default is no.

string authInitialAlgorithm

Specify the algorithm to use when empty Authorization header is to be sent for each initial request (see above)

TransportId transportId

Optionally bind this account to specific transport.

This normally is not a good idea, as account should be able to send requests using any available transports according to the destination. But some application may want to have explicit control over the transport to use, so in that case it can set this field.

Default: -1 (PJSUA_INVALID_ID)

See
Account::setTransport()

struct AccountVideoConfig
#include <account.hpp>

Account video config.

This will be specified in AccountConfig.

Public Functions
virtual void readObject(const ContainerNode & node)

Read this object from a container node.

Parameters
  • node -

    Container to read values from.

virtual void writeObject(ContainerNode & node) const

Write this object to a container node.

Parameters
  • node -

    Container to write values to.

Public Members
bool autoShowIncoming

Specify whether incoming video should be shown to screen by default.

This applies to incoming call (INVITE), incoming re-INVITE, and incoming UPDATE requests.

Regardless of this setting, application can detect incoming video by implementing on_call_media_state() callback and enumerating the media stream(s) with pjsua_call_get_info(). Once incoming video is recognised, application may retrieve the window associated with the incoming video and show or hide it with pjsua_vid_win_set_show().

Default: False

bool autoTransmitOutgoing

Specify whether outgoing video should be activated by default when making outgoing calls and/or when incoming video is detected.

This applies to incoming and outgoing calls, incoming re-INVITE, and incoming UPDATE. If the setting is non-zero, outgoing video transmission will be started as soon as response to these requests is sent (or received).

Regardless of the value of this setting, application can start and stop outgoing video transmission with pjsua_call_set_vid_strm().

Default: False

unsigned windowFlags

Specify video window’s flags.

The value is a bitmask combination of pjmedia_vid_dev_wnd_flag.

Default: 0

pjmedia_vid_dev_index defaultCaptureDevice

Specify the default capture device to be used by this account.

If vidOutAutoTransmit is enabled, this device will be used for capturing video.

Default: PJMEDIA_VID_DEFAULT_CAPTURE_DEV

pjmedia_vid_dev_index defaultRenderDevice

Specify the default rendering device to be used by this account.

Default: PJMEDIA_VID_DEFAULT_RENDER_DEV

pjmedia_vid_stream_rc_method rateControlMethod

Rate control method.

Default: PJMEDIA_VID_STREAM_RC_SIMPLE_BLOCKING.

unsigned rateControlBandwidth

Upstream/outgoing bandwidth.

If this is set to zero, the video stream will use codec maximum bitrate setting.

Default: 0 (follow codec maximum bitrate).

class FindBuddyMatch
#include <account.hpp>

Wrapper class for Buddy matching algo.

Default algo is a simple substring lookup of search-token in the Buddy URIs, with case sensitive. Application can implement its own matching algo by overriding this class and specifying its instance in Account::findBuddy().

Public Functions
virtual bool match(const string & token, const Buddy & buddy)

Default algo implementation.

virtual ~FindBuddyMatch()

Destructor.

struct OnIncomingCallParam
#include <account.hpp>

This structure contains parameters for onIncomingCall() account callback.

Public Members
int callId

The library call ID allocated for the new call.

SipRxData rdata

The incoming INVITE request.

struct OnIncomingSubscribeParam
#include <account.hpp>

This structure contains parameters for onIncomingSubscribe() callback.

Public Members
void * srvPres

Server presence subscription instance.

If application delays the acceptance of the request, it will need to specify this object when calling Account::presNotify().

string fromUri

Sender URI.

SipRxData rdata

The incoming message.

pjsip_status_code code

The status code to respond to the request.

The default value is 200. Application may set this to other final status code to accept or reject the request.

string reason

The reason phrase to respond to the request.

SipTxOption txOption

Additional data to be sent with the response, if any.

struct OnInstantMessageParam
#include <account.hpp>

Parameters for onInstantMessage() account callback.

Public Members
string fromUri

Sender From URI.

string toUri

To URI of the request.

string contactUri

Contact URI of the sender.

string contentType

MIME type of the message body.

string msgBody

The message body.

SipRxData rdata

The whole message.

struct OnInstantMessageStatusParam
#include <account.hpp>

Parameters for onInstantMessageStatus() account callback.

Public Members
Token userData

Token or a user data that was associated with the pager transmission.

string toUri

Destination URI.

string msgBody

The message body.

pjsip_status_code code

The SIP status code of the transaction.

string reason

The reason phrase of the transaction.

SipRxData rdata

The incoming response that causes this callback to be called.

If the transaction fails because of time out or transport error, the content will be empty.

struct OnMwiInfoParam
#include <account.hpp>

Parameters for onMwiInfo() account callback.

Public Members
pjsip_evsub_state state

MWI subscription state.

SipRxData rdata

The whole message buffer.

struct OnRegStartedParam
#include <account.hpp>

This structure contains parameters for onRegStarted() account callback.

Public Members
bool renew

True for registration and False for unregistration.

struct OnRegStateParam
#include <account.hpp>

This structure contains parameters for onRegState() account callback.

Public Members
pj_status_t status

Registration operation status.

pjsip_status_code code

SIP status code received.

string reason

SIP reason phrase received.

SipRxData rdata

The incoming message.

int expiration

Next expiration interval.

struct OnTypingIndicationParam
#include <account.hpp>

Parameters for onTypingIndication() account callback.

Public Members
string fromUri

Sender/From URI.

string toUri

To URI.

string contactUri

The Contact URI.

bool isTyping

Boolean to indicate if sender is typing.

SipRxData rdata

The whole message buffer.

struct PresNotifyParam
#include <account.hpp>

Parameters for presNotify() account method.

Public Members
void * srvPres

Server presence subscription instance.

pjsip_evsub_state state

Server presence subscription state to set.

string stateStr

Optionally specify the state string name, if state is not “active”, “pending”, or “terminated”.

string reason

If the new state is PJSIP_EVSUB_STATE_TERMINATED, optionally specify the termination reason.

bool withBody

If the new state is PJSIP_EVSUB_STATE_TERMINATED, this specifies whether the NOTIFY request should contain message body containing account’s presence information.

SipTxOption txOption

Optional list of headers to be sent with the NOTIFY request.

media.hpp

PJSUA2 media operations.

namespace pj

PJSUA2 API is inside pj namespace.

Typedefs
typedef std::vector< MediaFormat * > MediaFormatVector

Array of MediaFormat.

typedef void * MediaPort

Media port, corresponds to pjmedia_port.

typedef std::vector< AudioMedia * > AudioMediaVector

Array of Audio Media.

typedef std::vector< ToneDesc > ToneDescVector

Array of tone descriptor.

typedef std::vector< ToneDigit > ToneDigitVector

Array of tone digits.

typedef std::vector< ToneDigitMapDigit > ToneDigitMapVector

Tone digit map.

typedef std::vector< AudioDevInfo * > AudioDevInfoVector

Array of audio device info.

typedef std::vector< CodecInfo * > CodecInfoVector

Array of codec info.

class AudDevManager
#include <media.hpp>

Audio device manager.

Public Functions
int getCaptureDev() const

Get currently active capture sound devices.

If sound devices has not been created, it is possible that the function returns -1 as device IDs.

Return
Device ID of the capture device.

AudioMedia & getCaptureDevMedia()

Get the AudioMedia of the capture audio device.

Return
Audio media for the capture device.

int getPlaybackDev() const

Get currently active playback sound devices.

If sound devices has not been created, it is possible that the function returns -1 as device IDs.

Return
Device ID of the playback device.

AudioMedia & getPlaybackDevMedia()

Get the AudioMedia of the speaker/playback audio device.

Return
Audio media for the speaker/playback device.

void setCaptureDev(int capture_dev) const

Select or change capture sound device.

Application may call this function at any time to replace current sound device.

Parameters
  • capture_dev -

    Device ID of the capture device.

void setPlaybackDev(int playback_dev) const

Select or change playback sound device.

Application may call this function at any time to replace current sound device.

Parameters
  • playback_dev -

    Device ID of the playback device.

const AudioDevInfoVector & enumDev()

Enum all audio devices installed in the system.

Return
The list of audio device info.

void setNullDev()

Set pjsua to use null sound device.

The null sound device only provides the timing needed by the conference bridge, and will not interract with any hardware.

MediaPort * setNoDev()

Disconnect the main conference bridge from any sound devices, and let application connect the bridge to it’s own sound device/master port.

Return
The port interface of the conference bridge, so that application can connect this to it’s own sound device or master port.

void setEcOptions(unsigned tail_msec, unsigned options)

Change the echo cancellation settings.

The behavior of this function depends on whether the sound device is currently active, and if it is, whether device or software AEC is being used.

If the sound device is currently active, and if the device supports AEC, this function will forward the change request to the device and it will be up to the device on whether support the request. If software AEC is being used (the software EC will be used if the device does not support AEC), this function will change the software EC settings. In all cases, the setting will be saved for future opening of the sound device.

If the sound device is not currently active, this will only change the default AEC settings and the setting will be applied next time the sound device is opened.

Parameters
  • tail_msec -

    The tail length, in miliseconds. Set to zero to disable AEC.

  • options -

    Options to be passed to pjmedia_echo_create(). Normally the value should be zero.

unsigned getEcTail() const

Get current echo canceller tail length.

Return
The EC tail length in milliseconds, If AEC is disabled, the value will be zero.

bool sndIsActive() const

Check whether the sound device is currently active.

The sound device may be inactive if the application has set the auto close feature to non-zero (the sndAutoCloseTime setting in MediaConfig), or if null sound device or no sound device has been configured via the setNoDev() function.

void refreshDevs()

Refresh the list of sound devices installed in the system.

This method will only refresh the list of audio device so all active audio streams will be unaffected. After refreshing the device list, application MUST make sure to update all index references to audio devices before calling any method that accepts audio device index as its parameter.

unsigned getDevCount() const

Get the number of sound devices installed in the system.

Return
The number of sound devices installed in the system.

AudioDevInfo getDevInfo(int id) const

Get device information.

Return
The device information which will be filled in by this method once it returns successfully.
Parameters
  • id -

    The audio device ID.

int lookupDev(const string & drv_name, const string & dev_name) const

Lookup device index based on the driver and device name.

Return
The device ID. If the device is not found, Error will be thrown.
Parameters
  • drv_name -

    The driver name.

  • dev_name -

    The device name.

string capName(pjmedia_aud_dev_cap cap) const

Get string info for the specified capability.

Return
Capability name.
Parameters
  • cap -

    The capability ID.

void setExtFormat(const MediaFormatAudio & format, bool keep = true)

This will configure audio format capability (other than PCM) to the sound device being used.

If sound device is currently active, the method will forward the setting to the sound device instance to be applied immediately, if it supports it.

This method is only valid if the device has PJMEDIA_AUD_DEV_CAP_EXT_FORMAT capability in AudioDevInfo.caps flags, otherwise Error will be thrown.

Note that in case the setting is kept for future use, it will be applied to any devices, even when application has changed the sound device to be used.

Parameters
  • format -

    The audio format.

  • keep -

    Specify whether the setting is to be kept for future use.

MediaFormatAudio getExtFormat() const

Get the audio format capability (other than PCM) of the sound device being used.

If sound device is currently active, the method will forward the request to the sound device. If sound device is currently inactive, and if application had previously set the setting and mark the setting as kept, then that setting will be returned. Otherwise, this method will raise error.

This method is only valid if the device has PJMEDIA_AUD_DEV_CAP_EXT_FORMAT capability in AudioDevInfo.caps flags, otherwise Error will be thrown.

Return
The audio format.

void setInputLatency(unsigned latency_msec, bool keep = true)

This will configure audio input latency control or query capability to the sound device being used.

If sound device is currently active, the method will forward the setting to the sound device instance to be applied immediately, if it supports it.

This method is only valid if the device has PJMEDIA_AUD_DEV_CAP_INPUT_LATENCY capability in AudioDevInfo.caps flags, otherwise Error will be thrown.

Note that in case the setting is kept for future use, it will be applied to any devices, even when application has changed the sound device to be used.

Parameters
  • latency_msec -

    The input latency.

  • keep -

    Specify whether the setting is to be kept for future use.

unsigned getInputLatency() const

Get the audio input latency control or query capability of the sound device being used.

If sound device is currently active, the method will forward the request to the sound device. If sound device is currently inactive, and if application had previously set the setting and mark the setting as kept, then that setting will be returned. Otherwise, this method will raise error.

This method is only valid if the device has PJMEDIA_AUD_DEV_CAP_INPUT_LATENCY capability in AudioDevInfo.caps flags, otherwise Error will be thrown.

Return
The audio input latency.

void setOutputLatency(unsigned latency_msec, bool keep = true)

This will configure audio output latency control or query capability to the sound device being used.

If sound device is currently active, the method will forward the setting to the sound device instance to be applied immediately, if it supports it.

This method is only valid if the device has PJMEDIA_AUD_DEV_CAP_OUTPUT_LATENCY capability in AudioDevInfo.caps flags, otherwise Error will be thrown.

Note that in case the setting is kept for future use, it will be applied to any devices, even when application has changed the sound device to be used.

Parameters
  • latency_msec -

    The output latency.

  • keep -

    Specify whether the setting is to be kept for future use.

unsigned getOutputLatency() const

Get the audio output latency control or query capability of the sound device being used.

If sound device is currently active, the method will forward the request to the sound device. If sound device is currently inactive, and if application had previously set the setting and mark the setting as kept, then that setting will be returned. Otherwise, this method will raise error.

This method is only valid if the device has PJMEDIA_AUD_DEV_CAP_OUTPUT_LATENCY capability in AudioDevInfo.caps flags, otherwise Error will be thrown.

Return
The audio output latency.

void setInputVolume(unsigned volume, bool keep = true)

This will configure audio input volume level capability to the sound device being used.

If sound device is currently active, the method will forward the setting to the sound device instance to be applied immediately, if it supports it.

This method is only valid if the device has PJMEDIA_AUD_DEV_CAP_INPUT_VOLUME_SETTING capability in AudioDevInfo.caps flags, otherwise Error will be thrown.

Note that in case the setting is kept for future use, it will be applied to any devices, even when application has changed the sound device to be used.

Parameters
  • volume -

    The input volume level, in percent.

  • keep -

    Specify whether the setting is to be kept for future use.

unsigned getInputVolume() const

Get the audio input volume level capability of the sound device being used.

If sound device is currently active, the method will forward the request to the sound device. If sound device is currently inactive, and if application had previously set the setting and mark the setting as kept, then that setting will be returned. Otherwise, this method will raise error.

This method is only valid if the device has PJMEDIA_AUD_DEV_CAP_INPUT_VOLUME_SETTING capability in AudioDevInfo.caps flags, otherwise Error will be thrown. *

Return
The audio input volume level, in percent.

void setOutputVolume(unsigned volume, bool keep = true)

This will configure audio output volume level capability to the sound device being used.

If sound device is currently active, the method will forward the setting to the sound device instance to be applied immediately, if it supports it.

This method is only valid if the device has PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING capability in AudioDevInfo.caps flags, otherwise Error will be thrown.

Note that in case the setting is kept for future use, it will be applied to any devices, even when application has changed the sound device to be used.

Parameters
  • volume -

    The output volume level, in percent.

  • keep -

    Specify whether the setting is to be kept for future use.

unsigned getOutputVolume() const

Get the audio output volume level capability of the sound device being used.

If sound device is currently active, the method will forward the request to the sound device. If sound device is currently inactive, and if application had previously set the setting and mark the setting as kept, then that setting will be returned. Otherwise, this method will raise error.

This method is only valid if the device has PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING capability in AudioDevInfo.caps flags, otherwise Error will be thrown.

Return
The audio output volume level, in percent.

unsigned getInputSignal() const

Get the audio input signal level capability of the sound device being used.

If sound device is currently active, the method will forward the request to the sound device. If sound device is currently inactive, and if application had previously set the setting and mark the setting as kept, then that setting will be returned. Otherwise, this method will raise error.

This method is only valid if the device has PJMEDIA_AUD_DEV_CAP_INPUT_SIGNAL_METER capability in AudioDevInfo.caps flags, otherwise Error will be thrown.

Return
The audio input signal level, in percent.

unsigned getOutputSignal() const

Get the audio output signal level capability of the sound device being used.

If sound device is currently active, the method will forward the request to the sound device. If sound device is currently inactive, and if application had previously set the setting and mark the setting as kept, then that setting will be returned. Otherwise, this method will raise error.

This method is only valid if the device has PJMEDIA_AUD_DEV_CAP_OUTPUT_SIGNAL_METER capability in AudioDevInfo.caps flags, otherwise Error will be thrown.

Return
The audio output signal level, in percent.

void setInputRoute(pjmedia_aud_dev_route route, bool keep = true)

This will configure audio input route capability to the sound device being used.

If sound device is currently active, the method will forward the setting to the sound device instance to be applied immediately, if it supports it.

This method is only valid if the device has PJMEDIA_AUD_DEV_CAP_INPUT_ROUTE capability in AudioDevInfo.caps flags, otherwise Error will be thrown.

Note that in case the setting is kept for future use, it will be applied to any devices, even when application has changed the sound device to be used.

Parameters
  • route -

    The audio input route.

  • keep -

    Specify whether the setting is to be kept for future use.

pjmedia_aud_dev_route getInputRoute() const

Get the audio input route capability of the sound device being used.

If sound device is currently active, the method will forward the request to the sound device. If sound device is currently inactive, and if application had previously set the setting and mark the setting as kept, then that setting will be returned. Otherwise, this method will raise error.

This method is only valid if the device has PJMEDIA_AUD_DEV_CAP_INPUT_ROUTE capability in AudioDevInfo.caps flags, otherwise Error will be thrown.

Return
The audio input route.

void setOutputRoute(pjmedia_aud_dev_route route, bool keep = true)

This will configure audio output route capability to the sound device being used.

If sound device is currently active, the method will forward the setting to the sound device instance to be applied immediately, if it supports it.

This method is only valid if the device has PJMEDIA_AUD_DEV_CAP_OUTPUT_ROUTE capability in AudioDevInfo.caps flags, otherwise Error will be thrown.

Note that in case the setting is kept for future use, it will be applied to any devices, even when application has changed the sound device to be used.

Parameters
  • route -

    The audio output route.

  • keep -

    Specify whether the setting is to be kept for future use.

pjmedia_aud_dev_route getOutputRoute() const

Get the audio output route capability of the sound device being used.

If sound device is currently active, the method will forward the request to the sound device. If sound device is currently inactive, and if application had previously set the setting and mark the setting as kept, then that setting will be returned. Otherwise, this method will raise error.

This method is only valid if the device has PJMEDIA_AUD_DEV_CAP_OUTPUT_ROUTE capability in AudioDevInfo.caps flags, otherwise Error will be thrown.

Return
The audio output route.

void setVad(bool enable, bool keep = true)

This will configure audio voice activity detection capability to the sound device being used.

If sound device is currently active, the method will forward the setting to the sound device instance to be applied immediately, if it supports it.

This method is only valid if the device has PJMEDIA_AUD_DEV_CAP_VAD capability in AudioDevInfo.caps flags, otherwise Error will be thrown.

Note that in case the setting is kept for future use, it will be applied to any devices, even when application has changed the sound device to be used.

Parameters
  • enable -

    Enable/disable voice activity detection feature. Set true to enable.

  • keep -

    Specify whether the setting is to be kept for future use.

bool getVad() const

Get the audio voice activity detection capability of the sound device being used.

If sound device is currently active, the method will forward the request to the sound device. If sound device is currently inactive, and if application had previously set the setting and mark the setting as kept, then that setting will be returned. Otherwise, this method will raise error.

This method is only valid if the device has PJMEDIA_AUD_DEV_CAP_VAD capability in AudioDevInfo.caps flags, otherwise Error will be thrown.

Return
The audio voice activity detection feature.

void setCng(bool enable, bool keep = true)

This will configure audio comfort noise generation capability to the sound device being used.

If sound device is currently active, the method will forward the setting to the sound device instance to be applied immediately, if it supports it.

This method is only valid if the device has PJMEDIA_AUD_DEV_CAP_CNG capability in AudioDevInfo.caps flags, otherwise Error will be thrown.

Note that in case the setting is kept for future use, it will be applied to any devices, even when application has changed the sound device to be used.

Parameters
  • enable -

    Enable/disable comfort noise generation feature. Set true to enable.

  • keep -

    Specify whether the setting is to be kept for future use.

bool getCng() const

Get the audio comfort noise generation capability of the sound device being used.

If sound device is currently active, the method will forward the request to the sound device. If sound device is currently inactive, and if application had previously set the setting and mark the setting as kept, then that setting will be returned. Otherwise, this method will raise error.

This method is only valid if the device has PJMEDIA_AUD_DEV_CAP_CNG capability in AudioDevInfo.caps flags, otherwise Error will be thrown.

Return
The audio comfort noise generation feature.

void setPlc(bool enable, bool keep = true)

This will configure audio packet loss concealment capability to the sound device being used.

If sound device is currently active, the method will forward the setting to the sound device instance to be applied immediately, if it supports it.

This method is only valid if the device has PJMEDIA_AUD_DEV_CAP_PLC capability in AudioDevInfo.caps flags, otherwise Error will be thrown.

Note that in case the setting is kept for future use, it will be applied to any devices, even when application has changed the sound device to be used.

Parameters
  • enable -

    Enable/disable packet loss concealment feature. Set true to enable.

  • keep -

    Specify whether the setting is to be kept for future use.

bool getPlc() const

Get the audio packet loss concealment capability of the sound device being used.

If sound device is currently active, the method will forward the request to the sound device. If sound device is currently inactive, and if application had previously set the setting and mark the setting as kept, then that setting will be returned. Otherwise, this method will raise error.

This method is only valid if the device has PJMEDIA_AUD_DEV_CAP_PLC capability in AudioDevInfo.caps flags, otherwise Error will be thrown.

Return
The audio packet loss concealment feature.

Private Functions
AudDevManager()

Constructor.

~AudDevManager()

Destructor.

void clearAudioDevList()
int getActiveDev(bool is_capture) const
Private Members
AudioDevInfoVector audioDevList
AudioMedia * devMedia
Friends
friend class Endpoint
struct AudioDevInfo
#include <media.hpp>

Audio device information structure.

Public Functions
void fromPj(const pjmedia_aud_dev_info & dev_info)

Construct from pjmedia_aud_dev_info.

~AudioDevInfo()

Destructor.

Public Members
string name

The device name.

unsigned inputCount

Maximum number of input channels supported by this device.

If the value is zero, the device does not support input operation (i.e. it is a playback only device).

unsigned outputCount

Maximum number of output channels supported by this device.

If the value is zero, the device does not support output operation (i.e. it is an input only device).

unsigned defaultSamplesPerSec

Default sampling rate.

string driver

The underlying driver name.

unsigned caps

Device capabilities, as bitmask combination of pjmedia_aud_dev_cap.

unsigned routes

Supported audio device routes, as bitmask combination of pjmedia_aud_dev_route.

The value may be zero if the device does not support audio routing.

MediaFormatVector extFmt

Array of supported extended audio formats.

class AudioMedia
#include <media.hpp>

Audio Media.

Public Functions
ConfPortInfo getPortInfo() const

Get information about the specified conference port.

int getPortId() const

Get port Id.

void startTransmit(const AudioMedia & sink) const

Establish unidirectional media flow to sink.

This media port will act as a source, and it may transmit to multiple destinations/sink. And if multiple sources are transmitting to the same sink, the media will be mixed together. Source and sink may refer to the same Media, effectively looping the media.

If bidirectional media flow is desired, application needs to call this method twice, with the second one called from the opposite source media.

Parameters
  • sink -

    The destination Media.

void stopTransmit(const AudioMedia & sink) const

Stop media flow to destination/sink port.

Parameters
  • sink -

    The destination media.

void adjustRxLevel(float level)

Adjust the signal level to be transmitted from the bridge to this media port by making it louder or quieter.

Parameters
  • level -

    Signal level adjustment. Value 1.0 means no level adjustment, while value 0 means to mute the port.

void adjustTxLevel(float level)

Adjust the signal level to be received from this media port (to the bridge) by making it louder or quieter.

Parameters
  • level -

    Signal level adjustment. Value 1.0 means no level adjustment, while value 0 means to mute the port.

unsigned getRxLevel() const

Get the last received signal level.

Return
Signal level in percent.

unsigned getTxLevel() const

Get the last transmitted signal level.

Return
Signal level in percent.

virtual ~AudioMedia()

Virtual Destructor.

Public Static Functions
ConfPortInfo getPortInfoFromId(int port_id)

Get information from specific port id.

AudioMedia * typecastFromMedia(Media * media)

Typecast from base class Media.

This is useful for application written in language that does not support downcasting such as Python.

Return
The object as AudioMedia instance
Parameters
  • media -

    The object to be downcasted

Protected Functions
AudioMedia()

Default Constructor.

void registerMediaPort(MediaPort port)

This method needs to be called by descendants of this class to register the media port created to the conference bridge and Endpoint‘s media list.

param port the media port to be registered to the conference bridge.

void unregisterMediaPort()

This method needs to be called by descendants of this class to remove the media port from the conference bridge and Endpoint‘s media list.

Descendant should only call this method if it has registered the media with the previous call to registerMediaPort().

Protected Attributes
int id

Conference port Id.

Private Members
pj_caching_pool mediaCachingPool
pj_pool_t * mediaPool
class AudioMediaPlayer
#include <media.hpp>

Audio Media Player.

Public Functions
AudioMediaPlayer()

Constructor.

void createPlayer(const string & file_name, unsigned options = 0)

Create a file player, and automatically add this player to the conference bridge.

Parameters
  • file_name -

    The filename to be played. Currently only WAV files are supported, and the WAV file MUST be formatted as 16bit PCM mono/single channel (any clock rate is supported).

  • options -

    Optional option flag. Application may specify PJMEDIA_FILE_NO_LOOP to prevent playback loop.

void createPlaylist(const StringVector & file_names, const string & label = "", unsigned options = 0)

Create a file playlist media port, and automatically add the port to the conference bridge.

Parameters
  • file_names -

    Array of file names to be added to the play list. Note that the files must have the same clock rate, number of channels, and number of bits per sample.

  • label -

    Optional label to be set for the media port.

  • options -

    Optional option flag. Application may specify PJMEDIA_FILE_NO_LOOP to prevent looping.

AudioMediaPlayerInfo getInfo() const

Get additional info about the player.

This operation is only valid for player. For playlist, Error will be thrown.

Return
the info.

pj_uint32_t getPos() const

Get current playback position in samples.

This operation is not valid for playlist.

Return
Current playback position, in samples.

void setPos(pj_uint32_t samples)

Set playback position in samples.

This operation is not valid for playlist.

Parameters
  • samples -

    The desired playback position, in samples.

virtual ~AudioMediaPlayer()

Destructor.

virtual bool onEof()

Register a callback to be called when the file player reading has reached the end of file, or when the file reading has reached the end of file of the last file for a playlist.

If the file or playlist is set to play repeatedly, then the callback will be called multiple times.

Return
If the callback returns false, the playback will stop. Note that if application destroys the player in the callback, it must return false here.

Public Static Functions
AudioMediaPlayer * typecastFromAudioMedia(AudioMedia * media)

Typecast from base class AudioMedia.

This is useful for application written in language that does not support downcasting such as Python.

Return
The object as AudioMediaPlayer instance
Parameters
  • media -

    The object to be downcasted

Private Members
int playerId

Player Id.

Private Static Functions
pj_status_t eof_cb(pjmedia_port * port, void * usr_data)

Low level PJMEDIA callback.

struct AudioMediaPlayerInfo
#include <media.hpp>

This structure contains additional info about AudioMediaPlayer.

Public Members
pjmedia_format_id formatId

Format ID of the payload.

unsigned payloadBitsPerSample

The number of bits per sample of the file payload.

For example, the value is 16 for PCM WAV and 8 for Alaw/Ulas WAV files.

pj_uint32_t sizeBytes

The WAV payload size in bytes.

pj_uint32_t sizeSamples

The WAV payload size in samples.

class AudioMediaRecorder
#include <media.hpp>

Audio Media Recorder.

Public Functions
AudioMediaRecorder()

Constructor.

void createRecorder(const string & file_name, unsigned enc_type = 0, pj_ssize_t max_size = 0, unsigned options = 0)

Create a file recorder, and automatically connect this recorder to the conference bridge.

The recorder currently supports recording WAV file. The type of the recorder to use is determined by the extension of the file (e.g. ”.wav”).

Parameters
  • file_name -

    Output file name. The function will determine the default format to be used based on the file extension. Currently ”.wav” is supported on all platforms.

  • enc_type -

    Optionally specify the type of encoder to be used to compress the media, if the file can support different encodings. This value must be zero for now.

  • max_size -

    Maximum file size. Specify zero or -1 to remove size limitation. This value must be zero or -1 for now.

  • options -

    Optional options, which can be used to specify the recording file format. Supported options are PJMEDIA_FILE_WRITE_PCM, PJMEDIA_FILE_WRITE_ALAW, and PJMEDIA_FILE_WRITE_ULAW. Default is zero or PJMEDIA_FILE_WRITE_PCM.

virtual ~AudioMediaRecorder()

Destructor.

Public Static Functions
AudioMediaRecorder * typecastFromAudioMedia(AudioMedia * media)

Typecast from base class AudioMedia.

This is useful for application written in language that does not support downcasting such as Python.

Return
The object as AudioMediaRecorder instance
Parameters
  • media -

    The object to be downcasted

Private Members
int recorderId

Recorder Id.

struct CodecInfo
#include <media.hpp>

This structure describes codec information.

Public Functions
void fromPj(const pjsua_codec_info & codec_info)

Construct from pjsua_codec_info.

Public Members
string codecId

Codec unique identification.

pj_uint8_t priority

Codec priority (integer 0-255).

string desc

Codec description.

struct ConfPortInfo
#include <media.hpp>

This structure descibes information about a particular media port that has been registered into the conference bridge.

Public Functions
void fromPj(const pjsua_conf_port_info & port_info)

Construct from pjsua_conf_port_info.

Public Members
int portId

Conference port number.

string name

Port name.

MediaFormatAudio format

Media audio format information.

float txLevelAdj

Tx level adjustment.

Value 1.0 means no adjustment, value 0 means the port is muted, value 2.0 means the level is amplified two times.

float rxLevelAdj

Rx level adjustment.

Value 1.0 means no adjustment, value 0 means the port is muted, value 2.0 means the level is amplified two times.

IntVector listeners

Array of listeners (in other words, ports where this port is transmitting to.

class Media
#include <media.hpp>

Media.

Public Functions
virtual ~Media()

Virtual destructor.

pjmedia_type getType() const

Get type of the media.

Return
The media type.

Protected Functions
Media(pjmedia_type med_type)

Constructor.

Private Members
pjmedia_type type

Media type.

struct MediaFormat
#include <media.hpp>

This structure contains all the information needed to completely describe a media.

Public Members
pj_uint32_t id

The format id that specifies the audio sample or video pixel format.

Some well known formats ids are declared in pjmedia_format_id enumeration.

See
pjmedia_format_id

pjmedia_type type

The top-most type of the media, as an information.

struct MediaFormatAudio
#include <media.hpp>

This structure describe detail information about an audio media.

Public Functions
void fromPj(const pjmedia_format & format)

Construct from pjmedia_format.

pjmedia_format toPj() const

Export to pjmedia_format.

Public Members
unsigned clockRate

Audio clock rate in samples or Hz.

unsigned channelCount

Number of channels.

unsigned frameTimeUsec

Frame interval, in microseconds.

unsigned bitsPerSample

Number of bits per sample.

pj_uint32_t avgBps

Average bitrate.

pj_uint32_t maxBps

Maximum bitrate.

struct MediaFormatVideo
#include <media.hpp>

This structure describe detail information about an video media.

Public Members
unsigned width

Video width.

unsigned height

Video height.

int fpsNum

Frames per second numerator.

int fpsDenum

Frames per second denumerator.

pj_uint32_t avgBps

Average bitrate.

pj_uint32_t maxBps

Maximum bitrate.

class ToneDesc
#include <media.hpp>

Tone descriptor (abstraction for pjmedia_tone_desc)

Public Functions
ToneDesc()
~ToneDesc()
class ToneDigit
#include <media.hpp>

Tone digit (abstraction for pjmedia_tone_digit)

Public Functions
ToneDigit()
~ToneDigit()
struct ToneDigitMapDigit
#include <media.hpp>

A digit in tone digit map.

Public Members
string digit
int freq1
int freq2
class ToneGenerator
#include <media.hpp>

Tone generator.

Public Functions
ToneGenerator()

Constructor.

~ToneGenerator()

Destructor.

void createToneGenerator(unsigned clock_rate = 16000, unsigned channel_count = 1)

Create tone generator.

bool isBusy() const

Check if the tone generator is still busy producing some tones.

Return
Non-zero if busy.

void stop()

Instruct the tone generator to stop current processing.

void rewind()

Rewind the playback.

This will start the playback to the first tone in the playback list.

void play(const ToneDescVector & tones, bool loop = false)

Instruct the tone generator to play single or dual frequency tones with the specified duration.

The new tones will be appended to currently playing tones, unless stop() is called before calling this function. The playback will begin as soon as the tone generator is connected to other media.

Parameters
  • tones -

    Array of tones to be played.

  • loop -

    Play the tone in a loop.

void playDigits(const ToneDigitVector & digits, bool loop = false)

Instruct the tone generator to play multiple MF digits with each of the digits having individual ON/OFF duration.

Each of the digit in the digit array must have the corresponding descriptor in the digit map. The new tones will be appended to currently playing tones, unless stop() is called before calling this function. The playback will begin as soon as the tone generator is connected to a sink media.

Parameters
  • digits -

    Array of MF digits.

  • loop -

    Play the tone in a loop.

ToneDigitMapVector getDigitMap() const

Get the digit-map currently used by this tone generator.

Return
The digitmap currently used by the tone generator

void setDigitMap(const ToneDigitMapVector & digit_map)

Set digit map to be used by the tone generator.

Parameters
  • digit_map -

    Digitmap to be used by the tone generator.

Private Members
pj_pool_t * pool
pjmedia_port * tonegen
pjmedia_tone_digit_map digitMap

call.hpp

PJSUA2 Call manipulation.

namespace pj

PJSUA2 API is inside pj namespace.

Typedefs
typedef void * CodecParam

Codec parameters, corresponds to pjmedia_codec_param or pjmedia_vid_codec_param.

typedef void * MediaStream

Media stream, corresponds to pjmedia_stream.

typedef void * MediaTransport

Media transport, corresponds to pjmedia_transport.

typedef std::vector< CallMediaInfo > CallMediaInfoVector

Array of call media info.

class Call
#include <call.hpp>

Call.

Public Functions
Call(Account & acc, int call_id = PJSUA_INVALID_ID)

Constructor.

virtual ~Call()

Destructor.

CallInfo getInfo() const

Obtain detail information about this call.

Return
Call info.

bool isActive() const

Check if this call has active INVITE session and the INVITE session has not been disconnected.

Return
True if call is active.

int getId() const

Get PJSUA-LIB call ID or index associated with this call.

Return
Integer greater than or equal to zero.

bool hasMedia() const

Check if call has an active media session.

Return
True if yes.

Media * getMedia(unsigned med_idx) const

Get media for the specified media index.

Return
The media or NULL if invalid or inactive.
Parameters

pjsip_dialog_cap_status remoteHasCap(int htype, const string & hname, const string & token) const

Check if remote peer support the specified capability.

Return
PJSIP_DIALOG_CAP_SUPPORTED if the specified capability is explicitly supported, see pjsip_dialog_cap_status for more info.
Parameters
  • htype -

    The header type (pjsip_hdr_e) to be checked, which value may be:

    • PJSIP_H_ACCEPT
    • PJSIP_H_ALLOW
    • PJSIP_H_SUPPORTED

  • hname -

    If htype specifies PJSIP_H_OTHER, then the header name must be supplied in this argument. Otherwise the value must be set to empty string (“”).

  • token -

    The capability token to check. For example, if htype is PJSIP_H_ALLOW, then token specifies the method names; if htype is PJSIP_H_SUPPORTED, then token specifies the extension names such as “100rel”.

void setUserData(Token user_data)

Attach application specific data to the call.

Application can then inspect this data by calling getUserData().

Parameters
  • user_data -

    Arbitrary data to be attached to the call.

Token getUserData() const

Get user data attached to the call, which has been previously set with setUserData().

Return
The user data.

pj_stun_nat_type getRemNatType()

Get the NAT type of remote’s endpoint.

This is a proprietary feature of PJSUA-LIB which sends its NAT type in the SDP when natTypeInSdp is set in UaConfig.

This function can only be called after SDP has been received from remote, which means for incoming call, this function can be called as soon as call is received as long as incoming call contains SDP, and for outgoing call, this function can be called only after SDP is received (normally in 200/OK response to INVITE). As a general case, application should call this function after or in onCallMediaState() callback.

Return
The NAT type.
See
Endpoint::natGetType(), natTypeInSdp

void makeCall(const string & dst_uri, const CallOpParam & prm)

Make outgoing call to the specified URI.

Parameters
  • dst_uri -

    URI to be put in the To header (normally is the same as the target URI).

  • prm.opt -

    Optional call setting.

  • prm.txOption -

    Optional headers etc to be added to outgoing INVITE request.

void answer(const CallOpParam & prm)

Send response to incoming INVITE request with call setting param.

Depending on the status code specified as parameter, this function may send provisional response, establish the call, or terminate the call. Notes about call setting:

  • if call setting is changed in the subsequent call to this function, only the first call setting supplied will applied. So normally application will not supply call setting before getting confirmation from the user.
  • if no call setting is supplied when SDP has to be sent, i.e: answer with status code 183 or 2xx, the default call setting will be used, check CallSetting for its default values.

Parameters
  • prm.opt -

    Optional call setting.

  • prm.statusCode -

    Status code, (100-699).

  • prm.reason -

    Optional reason phrase. If empty, default text will be used.

  • prm.txOption -

    Optional list of headers etc to be added to outgoing response message. Note that this message data will be persistent in all next answers/responses for this INVITE request.

void hangup(const CallOpParam & prm)

Hangup call by using method that is appropriate according to the call state.

This function is different than answering the call with 3xx-6xx response (with answer()), in that this function will hangup the call regardless of the state and role of the call, while answer() only works with incoming calls on EARLY state.

Parameters
  • prm.statusCode -

    Optional status code to be sent when we’re rejecting incoming call. If the value is zero, “603/Decline” will be sent.

  • prm.reason -

    Optional reason phrase to be sent when we’re rejecting incoming call. If empty, default text will be used.

  • prm.txOption -

    Optional list of headers etc to be added to outgoing request/response message.

void setHold(const CallOpParam & prm)

Put the specified call on hold.

This will send re-INVITE with the appropriate SDP to inform remote that the call is being put on hold. The final status of the request itself will be reported on the onCallMediaState() callback, which inform the application that the media state of the call has changed.

Parameters
  • prm.options -

    Bitmask of pjsua_call_flag constants. Currently, only the flag PJSUA_CALL_UPDATE_CONTACT can be used.

  • prm.txOption -

    Optional message components to be sent with the request.

void reinvite(const CallOpParam & prm)

Send re-INVITE.

The final status of the request itself will be reported on the onCallMediaState() callback, which inform the application that the media state of the call has changed.

Parameters
  • prm.opt -

    Optional call setting, if empty, the current call setting will remain unchanged.

  • prm.opt.flag -

    Bitmask of pjsua_call_flag constants. Specifying PJSUA_CALL_UNHOLD here will release call hold.

  • prm.txOption -

    Optional message components to be sent with the request.

void update(const CallOpParam & prm)

Send UPDATE request.

Parameters
  • prm.opt -

    Optional call setting, if empty, the current call setting will remain unchanged.

  • prm.txOption -

    Optional message components to be sent with the request.

void xfer(const string & dest, const CallOpParam & prm)

Initiate call transfer to the specified address.

This function will send REFER request to instruct remote call party to initiate a new INVITE session to the specified destination/target.

If application is interested to monitor the successfulness and the progress of the transfer request, it can implement onCallTransferStatus() callback which will report the progress of the call transfer request.

Parameters
  • dest -

    URI of new target to be contacted. The URI may be in name address or addr-spec format.

  • prm.txOption -

    Optional message components to be sent with the request.

void xferReplaces(const Call & dest_call, const CallOpParam & prm)

Initiate attended call transfer.

This function will send REFER request to instruct remote call party to initiate new INVITE session to the URL of destCall. The party at dest_call then should “replace” the call with us with the new call from the REFER recipient.

Parameters
  • dest_call -

    The call to be replaced.

  • prm.options -

    Application may specify PJSUA_XFER_NO_REQUIRE_REPLACES to suppress the inclusion of “Require: replaces” in the outgoing INVITE request created by the REFER request.

  • prm.txOption -

    Optional message components to be sent with the request.

void processRedirect(pjsip_redirect_op cmd)

Accept or reject redirection response.

Application MUST call this function after it signaled PJSIP_REDIRECT_PENDING in the onCallRedirected() callback, to notify the call whether to accept or reject the redirection to the current target. Application can use the combination of PJSIP_REDIRECT_PENDING command in onCallRedirected() callback and this function to ask for user permission before redirecting the call.

Note that if the application chooses to reject or stop redirection (by using PJSIP_REDIRECT_REJECT or PJSIP_REDIRECT_STOP respectively), the call disconnection callback will be called before this function returns. And if the application rejects the target, the onCallRedirected() callback may also be called before this function returns if there is another target to try.

Parameters
  • cmd -

    Redirection operation to be applied to the current target. The semantic of this argument is similar to the description in the onCallRedirected() callback, except that the PJSIP_REDIRECT_PENDING is not accepted here.

void dialDtmf(const string & digits)

Send DTMF digits to remote using RFC 2833 payload formats.

Parameters
  • digits -

    DTMF string digits to be sent.

void sendInstantMessage(const SendInstantMessageParam & prm)

Send instant messaging inside INVITE session.

Parameters
  • prm.contentType -

    MIME type.

  • prm.content -

    The message content.

  • prm.txOption -

    Optional list of headers etc to be included in outgoing request. The body descriptor in the txOption is ignored.

  • prm.userData -

    Optional user data, which will be given back when the IM callback is called.

void sendTypingIndication(const SendTypingIndicationParam & prm)

Send IM typing indication inside INVITE session.

Parameters
  • prm.isTyping -

    True to indicate to remote that local person is currently typing an IM.

  • prm.txOption -

    Optional list of headers etc to be included in outgoing request.

void sendRequest(const CallSendRequestParam & prm)

Send arbitrary request with the call.

This is useful for example to send INFO request. Note that application should not use this function to send requests which would change the invite session’s state, such as re-INVITE, UPDATE, PRACK, and BYE.

Parameters
  • prm.method -

    SIP method of the request.

  • prm.txOption -

    Optional message body and/or list of headers to be included in outgoing request.

string dump(bool with_media, const string indent)

Dump call and media statistics to string.

Return
Call dump and media statistics string.
Parameters
  • with_media -

    True to include media information too.

  • indent -

    Spaces for left indentation.

int vidGetStreamIdx() const

Get the media stream index of the default video stream in the call.

Typically this will just retrieve the stream index of the first activated video stream in the call. If none is active, it will return the first inactive video stream.

Return
The media stream index or -1 if no video stream is present in the call.

bool vidStreamIsRunning(int med_idx, pjmedia_dir dir) const

Determine if video stream for the specified call is currently running (i.e.

has been created, started, and not being paused) for the specified direction.

Return
True if stream is currently running for the specified direction.
Parameters
  • med_idx -

    Media stream index, or -1 to specify default video media.

  • dir -

    The direction to be checked.

void vidSetStream(pjsua_call_vid_strm_op op, const CallVidSetStreamParam & param)

Add, remove, modify, and/or manipulate video media stream for the specified call.

This may trigger a re-INVITE or UPDATE to be sent for the call.

Parameters
  • op -

    The video stream operation to be performed, possible values are pjsua_call_vid_strm_op.

  • param -

    The parameters for the video stream operation (see CallVidSetStreamParam).

StreamInfo getStreamInfo(unsigned med_idx) const

Get media stream info for the specified media index.

Return
The stream info.
Parameters
  • med_idx -

    Media stream index.

StreamStat getStreamStat(unsigned med_idx) const

Get media stream statistic for the specified media index.

Return
The stream statistic.
Parameters
  • med_idx -

    Media stream index.

MediaTransportInfo getMedTransportInfo(unsigned med_idx) const

Get media transport info for the specified media index.

Return
The transport info.
Parameters
  • med_idx -

    Media stream index.

void processMediaUpdate(OnCallMediaStateParam & prm)

Internal function (callled by Endpoint( to process update to call medias when call media state changes.

void processStateChange(OnCallStateParam & prm)

Internal function (called by Endpoint) to process call state change.

virtual void onCallState(OnCallStateParam & prm)

Notify application when call state has changed.

Application may then query the call info to get the detail call states by calling getInfo() function.

Parameters
  • prm -

    Callback parameter.

virtual void onCallTsxState(OnCallTsxStateParam & prm)

This is a general notification callback which is called whenever a transaction within the call has changed state.

Application can implement this callback for example to monitor the state of outgoing requests, or to answer unhandled incoming requests (such as INFO) with a final response.

Parameters
  • prm -

    Callback parameter.

virtual void onCallMediaState(OnCallMediaStateParam & prm)

Notify application when media state in the call has changed.

Normal application would need to implement this callback, e.g. to connect the call’s media to sound device. When ICE is used, this callback will also be called to report ICE negotiation failure.

Parameters
  • prm -

    Callback parameter.

virtual void onCallSdpCreated(OnCallSdpCreatedParam & prm)

Notify application when a call has just created a local SDP (for initial or subsequent SDP offer/answer).

Application can implement this callback to modify the SDP, before it is being sent and/or negotiated with remote SDP, for example to apply per account/call basis codecs priority or to add custom/proprietary SDP attributes.

Parameters
  • prm -

    Callback parameter.

virtual void onStreamCreated(OnStreamCreatedParam & prm)

Notify application when media session is created and before it is registered to the conference bridge.

Application may return different media port if it has added media processing port to the stream. This media port then will be added to the conference bridge instead.

Parameters
  • prm -

    Callback parameter.

virtual void onStreamDestroyed(OnStreamDestroyedParam & prm)

Notify application when media session has been unregistered from the conference bridge and about to be destroyed.

Parameters
  • prm -

    Callback parameter.

virtual void onDtmfDigit(OnDtmfDigitParam & prm)

Notify application upon incoming DTMF digits.

Parameters
  • prm -

    Callback parameter.

virtual void onCallTransferRequest(OnCallTransferRequestParam & prm)

Notify application on call being transferred (i.e.

REFER is received). Application can decide to accept/reject transfer request by setting the code (default is 202). When this callback is not implemented, the default behavior is to accept the transfer.

Parameters
  • prm -

    Callback parameter.

virtual void onCallTransferStatus(OnCallTransferStatusParam & prm)

Notify application of the status of previously sent call transfer request.

Application can monitor the status of the call transfer request, for example to decide whether to terminate existing call.

Parameters
  • prm -

    Callback parameter.

virtual void onCallReplaceRequest(OnCallReplaceRequestParam & prm)

Notify application about incoming INVITE with Replaces header.

Application may reject the request by setting non-2xx code.

Parameters
  • prm -

    Callback parameter.

virtual void onCallReplaced(OnCallReplacedParam & prm)

Notify application that an existing call has been replaced with a new call.

This happens when PJSUA-API receives incoming INVITE request with Replaces header.

After this callback is called, normally PJSUA-API will disconnect this call and establish a new call newCallId.

Parameters
  • prm -

    Callback parameter.

virtual void onCallRxOffer(OnCallRxOfferParam & prm)

Notify application when call has received new offer from remote (i.e.

re-INVITE/UPDATE with SDP is received). Application can decide to accept/reject the offer by setting the code (default is 200). If the offer is accepted, application can update the call setting to be applied in the answer. When this callback is not implemented, the default behavior is to accept the offer using current call setting.

Parameters
  • prm -

    Callback parameter.

virtual void onInstantMessage(OnInstantMessageParam & prm)

Notify application on incoming MESSAGE request.

Parameters
  • prm -

    Callback parameter.

virtual void onInstantMessageStatus(OnInstantMessageStatusParam & prm)

Notify application about the delivery status of outgoing MESSAGE request.

Parameters
  • prm -

    Callback parameter.

virtual void onTypingIndication(OnTypingIndicationParam & prm)

Notify application about typing indication.

Parameters
  • prm -

    Callback parameter.

virtual pjsip_redirect_op onCallRedirected(OnCallRedirectedParam & prm)

This callback is called when the call is about to resend the INVITE request to the specified target, following the previously received redirection response.

Application may accept the redirection to the specified target, reject this target only and make the session continue to try the next target in the list if such target exists, stop the whole redirection process altogether and cause the session to be disconnected, or defer the decision to ask for user confirmation.

This callback is optional, the default behavior is to NOT follow the redirection response.

Return
Action to be performed for the target. Set this parameter to one of the value below:
  • PJSIP_REDIRECT_ACCEPT: immediately accept the redirection. When set, the call will immediately resend INVITE request to the target.
  • PJSIP_REDIRECT_ACCEPT_REPLACE: immediately accept the redirection and replace the To header with the current target. When set, the call will immediately resend INVITE request to the target.
  • PJSIP_REDIRECT_REJECT: immediately reject this target. The call will continue retrying with next target if present, or disconnect the call if there is no more target to try.
  • PJSIP_REDIRECT_STOP: stop the whole redirection process and immediately disconnect the call. The onCallState() callback will be called with PJSIP_INV_STATE_DISCONNECTED state immediately after this callback returns.
  • PJSIP_REDIRECT_PENDING: set to this value if no decision can be made immediately (for example to request confirmation from user). Application then MUST call processRedirect() to either accept or reject the redirection upon getting user decision.
Parameters
  • prm -

    Callback parameter.

virtual void onCallMediaTransportState(OnCallMediaTransportStateParam & prm)

This callback is called when media transport state is changed.

Parameters
  • prm -

    Callback parameter.

virtual void onCallMediaEvent(OnCallMediaEventParam & prm)

Notification about media events such as video notifications.

This callback will most likely be called from media threads, thus application must not perform heavy processing in this callback. Especially, application must not destroy the call or media in this callback. If application needs to perform more complex tasks to handle the event, it should post the task to another thread.

Parameters
  • prm -

    Callback parameter.

virtual void onCreateMediaTransport(OnCreateMediaTransportParam & prm)

This callback can be used by application to implement custom media transport adapter for the call, or to replace the media transport with something completely new altogether.

This callback is called when a new call is created. The library has created a media transport for the call, and it is provided as the mediaTp argument of this callback. The callback may change it with the instance of media transport to be used by the call.

Parameters
  • prm -

    Callback parameter.

Public Static Functions
Call * lookup(int call_id)

Get the Call class for the specified call Id.

Return
The Call instance or NULL if not found.
Parameters
  • call_id -

    The call ID to lookup

Private Members
Account & acc
pjsua_call_id id
Token userData
std::vector< Media * > medias
struct CallInfo
#include <call.hpp>

Call information.

Application can query the call information by calling Call::getInfo().

Public Functions
void fromPj(const pjsua_call_info & pci)

Convert from pjsip.

Public Members
pjsua_call_id id

Call identification.

pjsip_role_e role

Initial call role (UAC == caller)

pjsua_acc_id accId

The account ID where this call belongs.

string localUri

Local URI.

string localContact

Local Contact.

string remoteUri

Remote URI.

string remoteContact

Remote contact.

string callIdString

Dialog Call-ID string.

CallSetting setting

Call setting.

pjsip_inv_state state

Call state.

string stateText

Text describing the state.

pjsip_status_code lastStatusCode

Last status code heard, which can be used as cause code.

string lastReason

The reason phrase describing the last status.

CallMediaInfoVector media

Array of active media information.

CallMediaInfoVector provMedia

Array of provisional media information.

This contains the media info in the provisioning state, that is when the media session is being created/updated (SDP offer/answer is on progress).

TimeVal connectDuration

Up-to-date call connected duration (zero when call is not established)

TimeVal totalDuration

Total call duration, including set-up time.

bool remOfferer

Flag if remote was SDP offerer.

unsigned remAudioCount

Number of audio streams offered by remote.

unsigned remVideoCount

Number of video streams offered by remote.

struct CallMediaInfo
#include <call.hpp>

Call media information.

Public Functions
CallMediaInfo()

Default constructor.

void fromPj(const pjsua_call_media_info & prm)

Convert from pjsip.

Public Members
unsigned index

Media index in SDP.

pjmedia_type type

Media type.

pjmedia_dir dir

Media direction.

pjsua_call_media_status status

Call media status.

int audioConfSlot

The conference port number for the call.

Only valid if the media type is audio.

pjsua_vid_win_id videoIncomingWindowId

The window id for incoming video, if any, or PJSUA_INVALID_ID.

Only valid if the media type is video.

pjmedia_vid_dev_index videoCapDev

The video capture device for outgoing transmission, if any, or PJMEDIA_VID_INVALID_DEV.

Only valid if the media type is video.

struct CallOpParam
#include <call.hpp>

This structure contains parameters for Call::answer(), Call::hangup(), Call::reinvite(), Call::update(), Call::xfer(), Call::xferReplaces(), Call::setHold().

Public Functions
CallOpParam(bool useDefaultCallSetting = false)

Default constructor initializes with zero/empty values.

Setting useDefaultCallSetting to true will initialize opt with default call setting values.

Public Members
CallSetting opt

The call setting.

pjsip_status_code statusCode

Status code.

string reason

Reason phrase.

unsigned options

Options.

SipTxOption txOption

List of headers etc to be added to outgoing response message.

Note that this message data will be persistent in all next answers/responses for this INVITE request.

struct CallSendRequestParam
#include <call.hpp>

This structure contains parameters for Call::sendRequest()

Public Functions
CallSendRequestParam()

Default constructor initializes with zero/empty values.

Public Members
string method

SIP method of the request.

SipTxOption txOption

Message body and/or list of headers etc to be included in outgoing request.

struct CallSetting
#include <call.hpp>

Call settings.

Public Functions
CallSetting(pj_bool_t useDefaultValues = false)

Default constructor initializes with empty or default values.

bool isEmpty() const

Check if the settings are set with empty values.

Return
True if the settings are empty.

void fromPj(const pjsua_call_setting & prm)

Convert from pjsip.

pjsua_call_setting toPj() const

Convert to pjsip.

Public Members
unsigned flag

Bitmask of pjsua_call_flag constants.

Default: PJSUA_CALL_INCLUDE_DISABLED_MEDIA

unsigned reqKeyframeMethod

This flag controls what methods to request keyframe are allowed on the call.

Value is bitmask of pjsua_vid_req_keyframe_method.

Default: PJSUA_VID_REQ_KEYFRAME_SIP_INFO | PJSUA_VID_REQ_KEYFRAME_RTCP_PLI

unsigned audioCount

Number of simultaneous active audio streams for this call.

Setting this to zero will disable audio in this call.

Default: 1

unsigned videoCount

Number of simultaneous active video streams for this call.

Setting this to zero will disable video in this call.

Default: 1 (if video feature is enabled, otherwise it is zero)

struct CallVidSetStreamParam
#include <call.hpp>

This structure contains parameters for Call::vidSetStream()

Public Functions
CallVidSetStreamParam()

Default constructor.

Public Members
int medIdx

Specify the media stream index.

This can be set to -1 to denote the default video stream in the call, which is the first active video stream or any first video stream if none is active.

This field is valid for all video stream operations, except PJSUA_CALL_VID_STRM_ADD.

Default: -1 (first active video stream, or any first video stream if none is active)

pjmedia_dir dir

Specify the media stream direction.

This field is valid for the following video stream operations: PJSUA_CALL_VID_STRM_ADD and PJSUA_CALL_VID_STRM_CHANGE_DIR.

Default: PJMEDIA_DIR_ENCODING_DECODING

pjmedia_vid_dev_index capDev

Specify the video capture device ID.

This can be set to PJMEDIA_VID_DEFAULT_CAPTURE_DEV to specify the default capture device as configured in the account.

This field is valid for the following video stream operations: PJSUA_CALL_VID_STRM_ADD and PJSUA_CALL_VID_STRM_CHANGE_CAP_DEV.

Default: PJMEDIA_VID_DEFAULT_CAPTURE_DEV.

struct JbufState
#include <call.hpp>

This structure describes jitter buffer state.

Public Functions
void fromPj(const pjmedia_jb_state & prm)

Convert from pjsip.

Public Members
unsigned frameSize

Individual frame size, in bytes.

unsigned minPrefetch

Minimum allowed prefetch, in frms.

unsigned maxPrefetch

Maximum allowed prefetch, in frms.

unsigned burst

Current burst level, in frames.

unsigned prefetch

Current prefetch value, in frames.

unsigned size

Current buffer size, in frames.

unsigned avgDelayMsec

Average delay, in ms.

unsigned minDelayMsec

Minimum delay, in ms.

unsigned maxDelayMsec

Maximum delay, in ms.

unsigned devDelayMsec

Standard deviation of delay, in ms.

unsigned avgBurst

Average burst, in frames.

unsigned lost

Number of lost frames.

unsigned discard

Number of discarded frames.

unsigned empty

Number of empty on GET events.

struct MathStat
#include <call.hpp>

This structure describes statistics state.

Public Functions
MathStat()

Default constructor.

void fromPj(const pj_math_stat & prm)

Convert from pjsip.

Public Members
int n

number of samples

int max

maximum value

int min

minimum value

int last

last value

int mean

mean

struct MediaEvent
#include <call.hpp>

This structure describes a media event.

It corresponds to the pjmedia_event structure.

Public Functions
void fromPj(const pjmedia_event & ev)

Convert from pjsip.

Public Members
pjmedia_event_type type

The event type.

MediaFmtChangedEvent fmtChanged

Media format changed event data.

GenericData ptr

Pointer to storage to user event data, if it’s outside this struct.

union pj::MediaEvent::@1 data

Additional data/parameters about the event.

The type of data will be specific to the event type being reported.

void * pjMediaEvent

Pointer to original pjmedia_event.

Only valid when the struct is converted from PJSIP’s pjmedia_event.

struct MediaFmtChangedEvent
#include <call.hpp>

This structure describes a media format changed event.

Public Members
unsigned newWidth

The new width.

unsigned newHeight

The new height.

struct MediaTransportInfo
#include <call.hpp>

This structure describes media transport informations.

It corresponds to the pjmedia_transport_info structure.

Public Functions
void fromPj(const pjmedia_transport_info & info)

Convert from pjsip.

Public Members
SocketAddress srcRtpName

Remote address where RTP originated from.

SocketAddress srcRtcpName

Remote address where RTCP originated from.

struct OnCallMediaEventParam
#include <call.hpp>

This structure contains parameters for Call::onCallMediaEvent() callback.

Public Members
unsigned medIdx

The media stream index.

MediaEvent ev

The media event.

struct OnCallMediaStateParam
#include <call.hpp>

This structure contains parameters for Call::onCallMediaState() callback.

struct OnCallMediaTransportStateParam
#include <call.hpp>

This structure contains parameters for Call::onCallMediaTransportState() callback.

Public Members
unsigned medIdx

The media index.

pjsua_med_tp_st state

The media transport state.

pj_status_t status

The last error code related to the media transport state.

int sipErrorCode

Optional SIP error code.

struct OnCallRedirectedParam
#include <call.hpp>

This structure contains parameters for Call::onCallRedirected() callback.

Public Members
string targetUri

The current target to be tried.

SipEvent e

The event that caused this callback to be called.

This could be the receipt of 3xx response, or 4xx/5xx response received for the INVITE sent to subsequent targets, or empty (e.type == PJSIP_EVENT_UNKNOWN) if this callback is called from within Call::processRedirect() context.

struct OnCallReplacedParam
#include <call.hpp>

This structure contains parameters for Call::onCallReplaced() callback.

Public Members
pjsua_call_id newCallId

The new call id.

struct OnCallReplaceRequestParam
#include <call.hpp>

This structure contains parameters for Call::onCallReplaceRequest() callback.

Public Members
SipRxData rdata

The incoming INVITE request to replace the call.

pjsip_status_code statusCode

Status code to be set by application.

Application should only return a final status (200-699)

string reason

Optional status text to be set by application.

CallSetting opt

The current call setting, application can update this setting for the call being replaced.

struct OnCallRxOfferParam
#include <call.hpp>

This structure contains parameters for Call::onCallRxOffer() callback.

Public Members
SdpSession offer

The new offer received.

pjsip_status_code statusCode

Status code to be returned for answering the offer.

On input, it contains status code 200. Currently, valid values are only 200 and 488.

CallSetting opt

The current call setting, application can update this setting for answering the offer.

struct OnCallSdpCreatedParam
#include <call.hpp>

This structure contains parameters for Call::onCallSdpCreated() callback.

Public Members
SdpSession sdp

The SDP has just been created.

SdpSession remSdp

The remote SDP, will be empty if local is SDP offerer.

struct OnCallStateParam
#include <call.hpp>

This structure contains parameters for Call::onCallState() callback.

Public Members
SipEvent e

Event which causes the call state to change.

struct OnCallTransferRequestParam
#include <call.hpp>

This structure contains parameters for Call::onCallTransferRequest() callback.

Public Members
string dstUri

The destination where the call will be transferred to.

pjsip_status_code statusCode

Status code to be returned for the call transfer request.

On input, it contains status code 200.

CallSetting opt

The current call setting, application can update this setting for the call being transferred.

struct OnCallTransferStatusParam
#include <call.hpp>

This structure contains parameters for Call::onCallTransferStatus() callback.

Public Members
pjsip_status_code statusCode

Status progress of the transfer request.

string reason

Status progress reason.

bool finalNotify

If true, no further notification will be reported.

The statusCode specified in this callback is the final status.

bool cont

Initially will be set to true, application can set this to false if it no longer wants to receive further notification (for example, after it hangs up the call).

struct OnCallTsxStateParam
#include <call.hpp>

This structure contains parameters for Call::onCallTsxState() callback.

Public Members
SipEvent e

Transaction event that caused the state change.

struct OnCreateMediaTransportParam
#include <call.hpp>

This structure contains parameters for Call::onCreateMediaTransport() callback.

Public Members
unsigned mediaIdx

The media index in the SDP for which this media transport will be used.

MediaTransport mediaTp

The media transport which otherwise will be used by the call has this callback not been implemented.

Application can change this to its own instance of media transport to be used by the call.

unsigned flags

Bitmask from pjsua_create_media_transport_flag.

struct OnDtmfDigitParam
#include <call.hpp>

This structure contains parameters for Call::onDtmfDigit() callback.

Public Members
string digit

DTMF ASCII digit.

struct OnStreamCreatedParam
#include <call.hpp>

This structure contains parameters for Call::onStreamCreated() callback.

Public Members
MediaStream stream

Media stream.

unsigned streamIdx

Stream index in the media session.

MediaPort pPort

On input, it specifies the media port of the stream.

Application may modify this pointer to point to different media port to be registered to the conference bridge.

struct OnStreamDestroyedParam
#include <call.hpp>

This structure contains parameters for Call::onStreamDestroyed() callback.

Public Members
MediaStream stream

Media stream.

unsigned streamIdx

Stream index in the media session.

struct RtcpSdes
#include <call.hpp>

RTCP SDES structure.

Public Functions
void fromPj(const pjmedia_rtcp_sdes & prm)

Convert from pjsip.

Public Members
string cname

RTCP SDES type CNAME.

string name

RTCP SDES type NAME.

string email

RTCP SDES type EMAIL.

string phone

RTCP SDES type PHONE.

string loc

RTCP SDES type LOC.

string tool

RTCP SDES type TOOL.

string note

RTCP SDES type NOTE.

struct RtcpStat
#include <call.hpp>

Bidirectional RTP stream statistics.

Public Functions
void fromPj(const pjmedia_rtcp_stat & prm)

Convert from pjsip.

Public Members
TimeVal start

Time when session was created.

RtcpStreamStat txStat

Encoder stream statistics.

RtcpStreamStat rxStat

Decoder stream statistics.

MathStat rttUsec

Round trip delay statistic.

pj_uint32_t rtpTxLastTs

Last TX RTP timestamp.

pj_uint16_t rtpTxLastSeq

Last TX RTP sequence.

MathStat rxIpdvUsec

Statistics of IP packet delay variation in receiving direction.

It is only used when PJMEDIA_RTCP_STAT_HAS_IPDV is set to non-zero.

MathStat rxRawJitterUsec

Statistic of raw jitter in receiving direction.

It is only used when PJMEDIA_RTCP_STAT_HAS_RAW_JITTER is set to non-zero.

RtcpSdes peerSdes

Peer SDES.

struct RtcpStreamStat
#include <call.hpp>

Unidirectional RTP stream statistics.

Public Functions
void fromPj(const pjmedia_rtcp_stream_stat & prm)

Convert from pjsip.

Public Members
TimeVal update

Time of last update.

unsigned updateCount

Number of updates (to calculate avg)

unsigned pkt

Total number of packets.

unsigned bytes

Total number of payload/bytes.

unsigned discard

Total number of discarded packets.

unsigned loss

Total number of packets lost.

unsigned reorder

Total number of out of order packets.

unsigned dup

Total number of duplicates packets.

MathStat lossPeriodUsec

Loss period statistics.

unsigned burst

Burst/sequential packet lost detected.

unsigned random

Random packet lost detected.

struct pj::RtcpStreamStat::@0 lossType

Types of loss detected.

MathStat jitterUsec

Jitter statistics.

struct SdpSession
#include <call.hpp>

This structure describes SDP session description.

It corresponds to the pjmedia_sdp_session structure.

Public Functions
void fromPj(const pjmedia_sdp_session & sdp)

Convert from pjsip.

Public Members
string wholeSdp

The whole SDP as a string.

void * pjSdpSession

Pointer to its original pjmedia_sdp_session.

Only valid when the struct is converted from PJSIP’s pjmedia_sdp_session.

struct StreamInfo
#include <call.hpp>

Media stream info.

Public Functions
void fromPj(const pjsua_stream_info & info)

Convert from pjsip.

Public Members
pjmedia_type type

Media type of this stream.

pjmedia_tp_proto proto

Transport protocol (RTP/AVP, etc.)

pjmedia_dir dir

Media direction.

SocketAddress remoteRtpAddress

Remote RTP address.

SocketAddress remoteRtcpAddress

Optional remote RTCP address.

unsigned txPt

Outgoing codec payload type.

unsigned rxPt

Incoming codec payload type.

string codecName

Codec name.

unsigned codecClockRate

Codec clock rate.

CodecParam codecParam

Optional codec param.

struct StreamStat
#include <call.hpp>

Media stream statistic.

Public Functions
void fromPj(const pjsua_stream_stat & prm)

Convert from pjsip.

Public Members
RtcpStat rtcp

RTCP statistic.

JbufState jbuf

Jitter buffer statistic.

presence.hpp

PJSUA2 Presence Operations.

namespace pj

PJSUA2 API is inside pj namespace.

Typedefs
typedef std::vector< Buddy * > BuddyVector

Array of buddies.

class Buddy
#include <presence.hpp>

Buddy.

Public Functions
Buddy()

Constructor.

virtual ~Buddy()

Destructor.

Note that if the Buddy instance is deleted, it will also delete the corresponding buddy in the PJSUA-LIB.

void create(Account & acc, const BuddyConfig & cfg)

Create buddy and register the buddy to PJSUA-LIB.

Parameters
  • acc -

    The account for this buddy.

  • cfg -

    The buddy config.

bool isValid() const

Check if this buddy is valid.

Return
True if it is.

BuddyInfo getInfo() const

Get detailed buddy info.

Return
Buddy info.

void subscribePresence(bool subscribe)

Enable/disable buddy’s presence monitoring.

Once buddy’s presence is subscribed, application will be informed about buddy’s presence status changed via onBuddyState() callback.

Parameters
  • subscribe -

    Specify true to activate presence subscription.

void updatePresence(void)

Update the presence information for the buddy.

Although the library periodically refreshes the presence subscription for all buddies, some application may want to refresh the buddy’s presence subscription immediately, and in this case it can use this function to accomplish this.

Note that the buddy’s presence subscription will only be initiated if presence monitoring is enabled for the buddy. See subscribePresence() for more info. Also if presence subscription for the buddy is already active, this function will not do anything.

Once the presence subscription is activated successfully for the buddy, application will be notified about the buddy’s presence status in the onBuddyState() callback.

void sendInstantMessage(const SendInstantMessageParam & prm)

Send instant messaging outside dialog, using this buddy’s specified account for route set and authentication.

Parameters
  • prm -

    Sending instant message parameter.

void sendTypingIndication(const SendTypingIndicationParam & prm)

Send typing indication outside dialog.

Parameters
  • prm -

    Sending instant message parameter.

virtual void onBuddyState()

Notify application when the buddy state has changed.

Application may then query the buddy info to get the details.

Private Members
pjsua_buddy_id id

Buddy ID.

Account * acc

Account.

struct BuddyConfig
#include <presence.hpp>

This structure describes buddy configuration when adding a buddy to the buddy list with Buddy::create().

Public Functions
virtual void readObject(const ContainerNode & node)

Read this object from a container node.

Parameters
  • node -

    Container to read values from.

virtual void writeObject(ContainerNode & node) const

Write this object to a container node.

Parameters
  • node -

    Container to write values to.

Public Members
string uri

Buddy URL or name address.

bool subscribe

Specify whether presence subscription should start immediately.

struct BuddyInfo
#include <presence.hpp>

This structure describes buddy info, which can be retrieved by via Buddy::getInfo().

Public Functions
void fromPj(const pjsua_buddy_info & pbi)

Import from pjsip structure.

Public Members
string uri

The full URI of the buddy, as specified in the configuration.

string contact

Buddy‘s Contact, only available when presence subscription has been established to the buddy.

bool presMonitorEnabled

Flag to indicate that we should monitor the presence information for this buddy (normally yes, unless explicitly disabled).

pjsip_evsub_state subState

If presMonitorEnabled is true, this specifies the last state of the presence subscription.

If presence subscription session is currently active, the value will be PJSIP_EVSUB_STATE_ACTIVE. If presence subscription request has been rejected, the value will be PJSIP_EVSUB_STATE_TERMINATED, and the termination reason will be specified in subTermReason.

string subStateName

String representation of subscription state.

pjsip_status_code subTermCode

Specifies the last presence subscription termination code.

This would return the last status of the SUBSCRIBE request. If the subscription is terminated with NOTIFY by the server, this value will be set to 200, and subscription termination reason will be given in the subTermReason field.

string subTermReason

Specifies the last presence subscription termination reason.

If presence subscription is currently active, the value will be empty.

PresenceStatus presStatus

Presence status.

struct PresenceStatus
#include <presence.hpp>

This describes presence status.

Public Functions
PresenceStatus()

Constructor.

Public Members
pjsua_buddy_status status

Buddy‘s online status.

string statusText

Text to describe buddy’s online status.

pjrpid_activity activity

Activity type.

string note

Optional text describing the person/element.

string rpidId

Optional RPID ID string.

persistent.hpp

PJSUA2 Persistent Services.

namespace pj

PJSUA2 API is inside pj namespace.

struct container_node_internal_data
#include <persistent.hpp>

Internal data for ContainerNode.

See ContainerNode implementation notes for more info.

Public Members
void * doc

The document.

void * data1

Internal data 1.

void * data2

Internal data 2.

class ContainerNode
#include <persistent.hpp>

A container node is a placeholder for storing other data elements, which could be boolean, number, string, array of strings, or another container.

Each data in the container is basically a name/value pair, with a type internally associated with it so that written data can be read in the correct type. Data is read and written serially, hence the order of reading must be the same as the order of writing.

Application can read data from it by using the various read methods, and write data to it using the various write methods. Alternatively, it may be more convenient to use the provided macros below to read and write the data, because these macros set the name automatically:

  • NODE_READ_BOOL(node,item)
  • NODE_READ_UNSIGNED(node,item)
  • NODE_READ_INT(node,item)
  • NODE_READ_FLOAT(node,item)
  • NODE_READ_NUM_T(node,type,item)
  • NODE_READ_STRING(node,item)
  • NODE_READ_STRINGV(node,item)
  • NODE_READ_OBJ(node,item)
  • NODE_WRITE_BOOL(node,item)
  • NODE_WRITE_UNSIGNED(node,item)
  • NODE_WRITE_INT(node,item)
  • NODE_WRITE_FLOAT(node,item)
  • NODE_WRITE_NUM_T(node,type,item)
  • NODE_WRITE_STRING(node,item)
  • NODE_WRITE_STRINGV(node,item)
  • NODE_WRITE_OBJ(node,item)

Implementation notes:

The ContainerNode class is subclass-able, but not in the usual C++ way. With the usual C++ inheritance, some methods will be made pure virtual and must be implemented by the actual class. However, doing so will require dynamic instantiation of the ContainerNode class, which means we will need to pass around the class as pointer, for example as the return value of readContainer() and writeNewContainer() methods. Then we will need to establish who needs or how to delete these objects, or use shared pointer mechanism, each of which is considered too inconvenient or complicated for the purpose.

So hence we use C style “inheritance”, where the methods are declared in container_node_op and the data in container_node_internal_data structures. An implementation of ContainerNode class will need to set up these members with values that makes sense to itself. The methods in container_node_op contains the pointer to the actual implementation of the operation, which would be specific according to the format of the document. The methods in this ContainerNode class are just thin wrappers which call the implementation in the container_node_op structure.

Public Functions
bool hasUnread() const

Determine if there is unread element.

If yes, then app can use one of the readXxx() functions to read it.

string unreadName() const

Get the name of the next unread element.

int readInt(const string & name = "") const

Read an integer value from the document and return the value.

This will throw Error if the current element is not a number. The read position will be advanced to the next element.

Return
The value.
Parameters
  • name -

    If specified, then the function will check if the name of the next element matches the specified name and throw Error if it doesn’t match.

float readNumber(const string & name = "") const

Read a number value from the document and return the value.

This will throw Error if the current element is not a number. The read position will be advanced to the next element.

Return
The value.
Parameters
  • name -

    If specified, then the function will check if the name of the next element matches the specified name and throw Error if it doesn’t match.

bool readBool(const string & name = "") const

Read a boolean value from the container and return the value.

This will throw Error if the current element is not a boolean. The read position will be advanced to the next element.

Return
The value.
Parameters
  • name -

    If specified, then the function will check if the name of the next element matches the specified name and throw Error if it doesn’t match.

string readString(const string & name = "") const

Read a string value from the container and return the value.

This will throw Error if the current element is not a string. The read position will be advanced to the next element.

Return
The value.
Parameters
  • name -

    If specified, then the function will check if the name of the next element matches the specified name and throw Error if it doesn’t match.

StringVector readStringVector(const string & name = "") const

Read a string array from the container.

This will throw Error if the current element is not a string array. The read position will be advanced to the next element.

Return
The value.
Parameters
  • name -

    If specified, then the function will check if the name of the next element matches the specified name and throw Error if it doesn’t match.

void readObject(PersistentObject & obj) const

Read the specified object from the container.

This is equal to calling PersistentObject.readObject(ContainerNode);

Parameters
  • obj -

    The object to read.

ContainerNode readContainer(const string & name = "") const

Read a container from the container.

This will throw Error if the current element is not a container. The read position will be advanced to the next element.

Return
Container object.
Parameters
  • name -

    If specified, then the function will check if the name of the next element matches the specified name and throw Error if it doesn’t match.

ContainerNode readArray(const string & name = "") const

Read array container from the container.

This will throw Error if the current element is not an array. The read position will be advanced to the next element.

Return
Container object.
Parameters
  • name -

    If specified, then the function will check if the name of the next element matches the specified name and throw Error if it doesn’t match.

void writeNumber(const string & name, float num)

Write a number value to the container.

Parameters
  • name -

    The name for the value in the container.

  • num -

    The value to be written.

void writeInt(const string & name, int num)

Write a number value to the container.

Parameters
  • name -

    The name for the value in the container.

  • num -

    The value to be written.

void writeBool(const string & name, bool value)

Write a boolean value to the container.

Parameters
  • name -

    The name for the value in the container.

  • value -

    The value to be written.

void writeString(const string & name, const string & value)

Write a string value to the container.

Parameters
  • name -

    The name for the value in the container.

  • value -

    The value to be written.

void writeStringVector(const string & name, const StringVector & arr)

Write string vector to the container.

Parameters
  • name -

    The name for the value in the container.

  • arr -

    The vector to be written.

void writeObject(const PersistentObject & obj)

Write an object to the container.

This is equal to calling PersistentObject.writeObject(ContainerNode);

Parameters
  • obj -

    The object to be written

ContainerNode writeNewContainer(const string & name)

Create and write an empty Object node that can be used as parent for subsequent write operations.

Return
A sub-container.
Parameters
  • name -

    The name for the new container in the container.

ContainerNode writeNewArray(const string & name)

Create and write an empty array node that can be used as parent for subsequent write operations.

Return
A sub-container.
Parameters
  • name -

    The name for the array.

Public Members
container_node_op * op

Method table.

container_node_internal_data data

Internal data.

class PersistentDocument
#include <persistent.hpp>

This a the abstract base class for a persistent document.

A document is created either by loading from a string or a file, or by constructing it manually when writing data to it. The document then can be saved to either string or to a file. A document contains one root ContainerNode where all data are stored under.

Document is read and written serially, hence the order of reading must be the same as the order of writing. The PersistentDocument class provides API to read and write to the root node, but for more flexible operations application can use the ContainerNode methods instead. Indeed the read and write API in PersistentDocument is just a shorthand which calls the relevant methods in the ContainerNode. As a tip, normally application only uses the readObject() and writeObject() methods declared here to read/write top level objects, and use the macros that are explained in ContainerNode documentation to read/write more detailed data.

Public Functions
virtual ~PersistentDocument()

Virtual destructor.

virtual void loadFile(const string & filename) = 0

Load this document from a file.

Parameters
  • filename -

    The file name.

virtual void loadString(const string & input) = 0

Load this document from string.

Parameters
  • input -

    The string.

virtual void saveFile(const string & filename) = 0

Write this document to a file.

Parameters
  • filename -

    The file name.

virtual string saveString() = 0

Write this document to string.

Return
The string document.

virtual ContainerNode & getRootContainer() const = 0

Get the root container node for this document.

Return
The root node.

bool hasUnread() const

Determine if there is unread element.

If yes, then app can use one of the readXxx() functions to read it.

Return
True if there is.

string unreadName() const

Get the name of the next unread element.

It will throw Error if there is no more element to read.

Return
The name of the next element .

int readInt(const string & name = "") const

Read an integer value from the document and return the value.

This will throw Error if the current element is not a number. The read position will be advanced to the next element.

Return
The value.
Parameters
  • name -

    If specified, then the function will check if the name of the next element matches the specified name and throw Error if it doesn’t match.

float readNumber(const string & name = "") const

Read a float value from the document and return the value.

This will throw Error if the current element is not a number. The read position will be advanced to the next element.

Return
The value.
Parameters
  • name -

    If specified, then the function will check if the name of the next element matches the specified name and throw Error if it doesn’t match.

bool readBool(const string & name = "") const

Read a boolean value from the container and return the value.

This will throw Error if the current element is not a boolean. The read position will be advanced to the next element.

Return
The value.
Parameters
  • name -

    If specified, then the function will check if the name of the next element matches the specified name and throw Error if it doesn’t match.

string readString(const string & name = "") const

Read a string value from the container and return the value.

This will throw Error if the current element is not a string. The read position will be advanced to the next element.

Return
The value.
Parameters
  • name -

    If specified, then the function will check if the name of the next element matches the specified name and throw Error if it doesn’t match.

StringVector readStringVector(const string & name = "") const

Read a string array from the container.

This will throw Error if the current element is not a string array. The read position will be advanced to the next element.

Return
The value.
Parameters
  • name -

    If specified, then the function will check if the name of the next element matches the specified name and throw Error if it doesn’t match.

void readObject(PersistentObject & obj) const

Read the specified object from the container.

This is equal to calling PersistentObject.readObject(ContainerNode);

Parameters
  • obj -

    The object to read.

ContainerNode readContainer(const string & name = "") const

Read a container from the container.

This will throw Error if the current element is not an object. The read position will be advanced to the next element.

Return
Container object.
Parameters
  • name -

    If specified, then the function will check if the name of the next element matches the specified name and throw Error if it doesn’t match.

ContainerNode readArray(const string & name = "") const

Read array container from the container.

This will throw Error if the current element is not an array. The read position will be advanced to the next element.

Return
Container object.
Parameters
  • name -

    If specified, then the function will check if the name of the next element matches the specified name and throw Error if it doesn’t match.

void writeNumber(const string & name, float num)

Write a number value to the container.

Parameters
  • name -

    The name for the value in the container.

  • num -

    The value to be written.

void writeInt(const string & name, int num)

Write a number value to the container.

Parameters
  • name -

    The name for the value in the container.

  • num -

    The value to be written.

void writeBool(const string & name, bool value)

Write a boolean value to the container.

Parameters
  • name -

    The name for the value in the container.

  • value -

    The value to be written.

void writeString(const string & name, const string & value)

Write a string value to the container.

Parameters
  • name -

    The name for the value in the container.

  • value -

    The value to be written.

void writeStringVector(const string & name, const StringVector & arr)

Write string vector to the container.

Parameters
  • name -

    The name for the value in the container.

  • arr -

    The vector to be written.

void writeObject(const PersistentObject & obj)

Write an object to the container.

This is equal to calling PersistentObject.writeObject(ContainerNode);

Parameters
  • obj -

    The object to be written

ContainerNode writeNewContainer(const string & name)

Create and write an empty Object node that can be used as parent for subsequent write operations.

Return
A sub-container.
Parameters
  • name -

    The name for the new container in the container.

ContainerNode writeNewArray(const string & name)

Create and write an empty array node that can be used as parent for subsequent write operations.

Return
A sub-container.
Parameters
  • name -

    The name for the array.

class PersistentObject
#include <persistent.hpp>

This is the abstract base class of objects that can be serialized to/from persistent document.

Public Functions
virtual void readObject(const ContainerNode & node) = 0

Read this object from a container node.

Parameters
  • node -

    Container to read values from.

virtual void writeObject(ContainerNode & node) const = 0

Write this object to a container node.

Parameters
  • node -

    Container to write values to.

json.hpp

namespace pj

PJSUA2 API is inside pj namespace.

class JsonDocument
#include <json.hpp>

Persistent document (file) with JSON format.

Public Functions
JsonDocument()

Default constructor.

~JsonDocument()

Destructor.

virtual void loadFile(const string & filename)

Load this document from a file.

Parameters
  • filename -

    The file name.

virtual void loadString(const string & input)

Load this document from string.

Parameters
  • input -

    The string.

virtual void saveFile(const string & filename)

Write this document to a file.

Parameters
  • filename -

    The file name.

virtual string saveString()

Write this document to string.

virtual ContainerNode & getRootContainer() const

Get the root container node for this document.

pj_json_elem * allocElement() const

An internal function to create JSON element.

pj_pool_t * getPool()

An internal function to get the pool.

Private Functions
void initRoot() const
Private Members
pj_caching_pool cp
ContainerNode rootNode
pj_json_elem * root
pj_pool_t * pool

siptypes.hpp

namespace pj

PJSUA2 API is inside pj namespace.

Typedefs
typedef std::vector< SipHeader > SipHeaderVector

Array of strings.

typedef std::vector< SipMultipartPart > SipMultipartPartVector

Array of multipart parts.

struct AuthCredInfo
#include <siptypes.hpp>

Credential information.

Credential contains information to authenticate against a service.

Public Functions
AuthCredInfo()

Default constructor.

AuthCredInfo(const string & scheme, const string & realm, const string & user_name, const int data_type, const string data)

Construct a credential with the specified parameters.

virtual void readObject(const ContainerNode & node)

Read this object from a container node.

Parameters
  • node -

    Container to read values from.

virtual void writeObject(ContainerNode & node) const

Write this object to a container node.

Parameters
  • node -

    Container to write values to.

Public Members
string scheme

The authentication scheme (e.g.

“digest”).

string realm

Realm on which this credential is to be used.

Use “*” to make a credential that can be used to authenticate against any challenges.

string username

Authentication user name.

int dataType

Type of data that is contained in the “data” field.

Use 0 if the data contains plain text password.

string data

The data, which can be a plain text password or a hashed digest.

string akaK

Permanent subscriber key.

string akaOp

Operator variant key.

string akaAmf

Authentication Management Field.

struct RxMsgEvent
#include <siptypes.hpp>

This structure describes message arrival event.

Public Members
SipRxData rdata

The receive data buffer.

struct SendInstantMessageParam
#include <siptypes.hpp>

This structure contains parameters for sending instance message methods, e.g: Buddy::sendInstantMessage(), Call:sendInstantMessage().

Public Functions
SendInstantMessageParam()

Default constructor initializes with zero/empty values.

Public Members
string contentType

MIME type.

Default is “text/plain”.

string content

The message content.

SipTxOption txOption

List of headers etc to be included in outgoing request.

Token userData

User data, which will be given back when the IM callback is called.

struct SendTypingIndicationParam
#include <siptypes.hpp>

This structure contains parameters for sending typing indication methods, e.g: Buddy::sendTypingIndication(), Call:sendTypingIndication().

Public Functions
SendTypingIndicationParam()

Default constructor initializes with zero/empty values.

Public Members
bool isTyping

True to indicate to remote that local person is currently typing an IM.

SipTxOption txOption

List of headers etc to be included in outgoing request.

struct SipEvent
#include <siptypes.hpp>

This structure describe event descriptor to fully identify a SIP event.

It corresponds to the pjsip_event structure in PJSIP library.

Public Functions
SipEvent()

Default constructor.

void fromPj(const pjsip_event & ev)

Construct from PJSIP’s pjsip_event.

Public Members
pjsip_event_id_e type

The event type, can be any value of pjsip_event_id_e.

TimerEvent timer

Timer event.

TsxStateEvent tsxState

Transaction state has changed event.

TxMsgEvent txMsg

Message transmission event.

TxErrorEvent txError

Transmission error event.

RxMsgEvent rxMsg

Message arrival event.

UserEvent user

User event.

struct pj::SipEvent::@3 body

The event body, which fields depends on the event type.

void * pjEvent

Pointer to its original pjsip_event.

Only valid when the struct is constructed from PJSIP’s pjsip_event.

struct SipHeader
#include <siptypes.hpp>

Simple SIP header.

Public Functions
void fromPj(const pjsip_hdr *)

Initiaize from PJSIP header.

pjsip_generic_string_hdr & toPj() const

Convert to PJSIP header.

Public Members
string hName

Header name.

string hValue

Header value.

Private Members
pjsip_generic_string_hdr pjHdr

Interal buffer for conversion to PJSIP header.

struct SipMediaType
#include <siptypes.hpp>

SIP media type containing type and subtype.

For example, for “application/sdp”, the type is “application” and the subtype is “sdp”.

Public Functions
void fromPj(const pjsip_media_type & prm)

Construct from PJSIP’s pjsip_media_type.

pjsip_media_type toPj() const

Convert to PJSIP’s pjsip_media_type.

Public Members
string type

Media type.

string subType

Media subtype.

struct SipMultipartPart
#include <siptypes.hpp>

This describes each multipart part.

Public Functions
void fromPj(const pjsip_multipart_part & prm)

Initiaize from PJSIP’s pjsip_multipart_part.

pjsip_multipart_part & toPj() const

Convert to PJSIP’s pjsip_multipart_part.

Public Members
SipHeaderVector headers

Optional headers to be put in this multipart part.

SipMediaType contentType

The MIME type of the body part of this multipart part.

string body

The body part of tthis multipart part.

Private Members
pjsip_multipart_part pjMpp

Interal buffer for conversion to PJSIP pjsip_multipart_part.

pjsip_msg_body pjMsgBody
struct SipRxData
#include <siptypes.hpp>

This structure describes an incoming SIP message.

It corresponds to the pjsip_rx_data structure in PJSIP library.

Public Functions
SipRxData()

Default constructor.

void fromPj(pjsip_rx_data & rdata)

Construct from PJSIP’s pjsip_rx_data.

Public Members
string info

A short info string describing the request, which normally contains the request method and its CSeq.

string wholeMsg

The whole message data as a string, containing both the header section and message body section.

SocketAddress srcAddress

Source address of the message.

void * pjRxData

Pointer to original pjsip_rx_data.

Only valid when the struct is constructed from PJSIP’s pjsip_rx_data.

struct SipTransaction
#include <siptypes.hpp>

This structure describes SIP transaction object.

It corresponds to the pjsip_transaction structure in PJSIP library.

Public Functions
SipTransaction()

Default constructor.

void fromPj(pjsip_transaction & tsx)

Construct from PJSIP’s pjsip_transaction.

Public Members
pjsip_role_e role

Role (UAS or UAC)

string method

The method.

int statusCode

Last status code seen.

string statusText

Last reason phrase.

pjsip_tsx_state_e state

State.

SipTxData lastTx

Msg kept for retrans.

void * pjTransaction

pjsip_transaction.

struct SipTxData
#include <siptypes.hpp>

This structure describes an outgoing SIP message.

It corresponds to the pjsip_tx_data structure in PJSIP library.

Public Functions
SipTxData()

Default constructor.

void fromPj(pjsip_tx_data & tdata)

Construct from PJSIP’s pjsip_tx_data.

Public Members
string info

A short info string describing the request, which normally contains the request method and its CSeq.

string wholeMsg

The whole message data as a string, containing both the header section and message body section.

SocketAddress dstAddress

Destination address of the message.

void * pjTxData

Pointer to original pjsip_tx_data.

Only valid when the struct is constructed from PJSIP’s pjsip_tx_data.

struct SipTxOption
#include <siptypes.hpp>

Additional options when sending outgoing SIP message.

This corresponds to pjsua_msg_data structure in PJSIP library.

Public Functions
bool isEmpty() const

Check if the options are empty.

If the options are set with empty values, there will be no additional information sent with outgoing SIP message.

Return
True if the options are empty.

void fromPj(const pjsua_msg_data & prm)

Initiaize from PJSUA’s pjsua_msg_data.

void toPj(pjsua_msg_data & msg_data) const

Convert to PJSUA’s pjsua_msg_data.

Public Members
string targetUri

Optional remote target URI (i.e.

Target header). If empty (“”), the target will be set to the remote URI (To header). At the moment this field is only used when sending initial INVITE and MESSAGE requests.

SipHeaderVector headers

Additional message headers to be included in the outgoing message.

string contentType

MIME type of the message body, if application specifies the messageBody in this structure.

string msgBody

Optional message body to be added to the message, only when the message doesn’t have a body.

SipMediaType multipartContentType

Content type of the multipart body.

If application wants to send multipart message bodies, it puts the parts in multipartParts and set the content type in multipartContentType. If the message already contains a body, the body will be added to the multipart bodies.

SipMultipartPartVector multipartParts

Array of multipart parts.

If application wants to send multipart message bodies, it puts the parts in parts and set the content type in multipart_ctype. If the message already contains a body, the body will be added to the multipart bodies.

struct TimerEvent
#include <siptypes.hpp>

This structure describes timer event.

Public Members
TimerEntry entry

The timer entry.

struct TlsConfig
#include <siptypes.hpp>

TLS transport settings, to be specified in TransportConfig.

Public Functions
TlsConfig()

Default constructor initialises with default values.

pjsip_tls_setting toPj() const

Convert to pjsip.

void fromPj(const pjsip_tls_setting & prm)

Convert from pjsip.

virtual void readObject(const ContainerNode & node)

Read this object from a container node.

Parameters
  • node -

    Container to read values from.

virtual void writeObject(ContainerNode & node) const

Write this object to a container node.

Parameters
  • node -

    Container to write values to.

Public Members
string CaListFile

Certificate of Authority (CA) list file.

string certFile

Public endpoint certificate file, which will be used as client- side certificate for outgoing TLS connection, and server-side certificate for incoming TLS connection.

string privKeyFile

Optional private key of the endpoint certificate to be used.

string password

Password to open private key.

pjsip_ssl_method method

TLS protocol method from pjsip_ssl_method.

Default is PJSIP_SSL_UNSPECIFIED_METHOD (0), which in turn will use PJSIP_SSL_DEFAULT_METHOD, which default value is PJSIP_TLSV1_METHOD.

IntVector ciphers

Ciphers and order preference.

The Endpoint::utilSslGetAvailableCiphers() can be used to check the available ciphers supported by backend. If the array is empty, then default cipher list of the backend will be used.

bool verifyServer

Specifies TLS transport behavior on the server TLS certificate verification result:

  • If verifyServer is disabled, TLS transport will just notify the application via pjsip_tp_state_callback with state PJSIP_TP_STATE_CONNECTED regardless TLS verification result.
  • If verifyServer is enabled, TLS transport will be shutdown and application will be notified with state PJSIP_TP_STATE_DISCONNECTED whenever there is any TLS verification error, otherwise PJSIP_TP_STATE_CONNECTED will be notified.

In any cases, application can inspect pjsip_tls_state_info in the callback to see the verification detail.

Default value is false.

bool verifyClient

Specifies TLS transport behavior on the client TLS certificate verification result:

  • If verifyClient is disabled, TLS transport will just notify the application via pjsip_tp_state_callback with state PJSIP_TP_STATE_CONNECTED regardless TLS verification result.
  • If verifyClient is enabled, TLS transport will be shutdown and application will be notified with state PJSIP_TP_STATE_DISCONNECTED whenever there is any TLS verification error, otherwise PJSIP_TP_STATE_CONNECTED will be notified.

In any cases, application can inspect pjsip_tls_state_info in the callback to see the verification detail.

Default value is PJ_FALSE.

bool requireClientCert

When acting as server (incoming TLS connections), reject incoming connection if client doesn’t supply a TLS certificate.

This setting corresponds to SSL_VERIFY_FAIL_IF_NO_PEER_CERT flag. Default value is PJ_FALSE.

unsigned msecTimeout

TLS negotiation timeout to be applied for both outgoing and incoming connection, in milliseconds.

If zero, the SSL negotiation doesn’t have a timeout.

Default: zero

pj_qos_type qosType

QoS traffic type to be set on this transport.

When application wants to apply QoS tagging to the transport, it’s preferable to set this field rather than qosParam fields since this is more portable.

Default value is PJ_QOS_TYPE_BEST_EFFORT.

pj_qos_params qosParams

Set the low level QoS parameters to the transport.

This is a lower level operation than setting the qosType field and may not be supported on all platforms.

By default all settings in this structure are disabled.

bool qosIgnoreError

Specify if the transport should ignore any errors when setting the QoS traffic type/parameters.

Default: PJ_TRUE

struct TransportConfig
#include <siptypes.hpp>

Parameters to create a transport instance.

Public Functions
TransportConfig()

Default constructor initialises with default values.

void fromPj(const pjsua_transport_config & prm)

Convert from pjsip.

pjsua_transport_config toPj() const

Convert to pjsip.

virtual void readObject(const ContainerNode & node)

Read this object from a container node.

Parameters
  • node -

    Container to read values from.

virtual void writeObject(ContainerNode & node) const

Write this object to a container node.

Parameters
  • node -

    Container to write values to.

Public Members
unsigned port

UDP port number to bind locally.

This setting MUST be specified even when default port is desired. If the value is zero, the transport will be bound to any available port, and application can query the port by querying the transport info.

unsigned portRange

Specify the port range for socket binding, relative to the start port number specified in port.

Note that this setting is only applicable when the start port number is non zero.

Default value is zero.

string publicAddress

Optional address to advertise as the address of this transport.

Application can specify any address or hostname for this field, for example it can point to one of the interface address in the system, or it can point to the public address of a NAT router where port mappings have been configured for the application.

Note: this option can be used for both UDP and TCP as well!

string boundAddress

Optional address where the socket should be bound to.

This option SHOULD only be used to selectively bind the socket to particular interface (instead of 0.0.0.0), and SHOULD NOT be used to set the published address of a transport (the public_addr field should be used for that purpose).

Note that unlike public_addr field, the address (or hostname) here MUST correspond to the actual interface address in the host, since this address will be specified as bind() argument.

TlsConfig tlsConfig

This specifies TLS settings for TLS transport.

It is only be used when this transport config is being used to create a SIP TLS transport.

pj_qos_type qosType

QoS traffic type to be set on this transport.

When application wants to apply QoS tagging to the transport, it’s preferable to set this field rather than qosParam fields since this is more portable.

Default is QoS not set.

pj_qos_params qosParams

Set the low level QoS parameters to the transport.

This is a lower level operation than setting the qosType field and may not be supported on all platforms.

Default is QoS not set.

struct TransportInfo
#include <siptypes.hpp>

This structure describes transport information returned by Endpoint::transportGetInfo() function.

Public Functions
void fromPj(const pjsua_transport_info & info)

Construct from pjsua_transport_info.

Public Members
TransportId id

PJSUA transport identification.

pjsip_transport_type_e type

Transport type.

string typeName

Transport type name.

string info

Transport string info/description.

unsigned flags

Transport flags (see pjsip_transport_flags_e).

SocketAddress localAddress

Local/bound address.

SocketAddress localName

Published address (or transport address name).

unsigned usageCount

Current number of objects currently referencing this transport.

struct TsxStateEvent
#include <siptypes.hpp>

This structure describes transaction state changed event.

Public Members
SipRxData rdata

The incoming message.

SipTxData tdata

The outgoing message.

TimerEntry timer

The timer.

pj_status_t status

Transport error status.

GenericData data

Generic data.

struct pj::TsxStateEvent::@2 src

Event source.

SipTransaction tsx

The transaction.

pjsip_tsx_state_e prevState

Previous state.

pjsip_event_id_e type

Type of event source:

  • PJSIP_EVENT_TX_MSG
  • PJSIP_EVENT_RX_MSG,
  • PJSIP_EVENT_TRANSPORT_ERROR
  • PJSIP_EVENT_TIMER
  • PJSIP_EVENT_USER

struct TxErrorEvent
#include <siptypes.hpp>

This structure describes transmission error event.

Public Members
SipTxData tdata

The transmit data.

SipTransaction tsx

The transaction.

struct TxMsgEvent
#include <siptypes.hpp>

This structure describes message transmission event.

Public Members
SipTxData tdata

The transmit data buffer.

struct UserEvent
#include <siptypes.hpp>

This structure describes user event.

Public Members
GenericData user1

User data 1.

GenericData user2

User data 2.

GenericData user3

User data 3.

GenericData user4

User data 4.

types.hpp

PJSUA2 Base Types.

Defines
PJSUA2_RAISE_ERROR(status)

Raise Error exception.

PJSUA2_RAISE_ERROR2(status, op)

Raise Error exception.

PJSUA2_RAISE_ERROR3(status, op, txt)

Raise Error exception.

PJSUA2_CHECK_RAISE_ERROR2(status, op)

Raise Error exception if the expression fails.

PJSUA2_CHECK_RAISE_ERROR(status)

Raise Error exception if the status fails.

PJSUA2_CHECK_EXPR(expr)

Raise Error exception if the expression fails.

namespace pj

PJSUA2 API is inside pj namespace.

Typedefs
typedef std::vector< std::string > StringVector

Array of strings.

typedef std::vector< int > IntVector

Array of integers.

typedef void * Token

Type of token, i.e.

arbitrary application user data

typedef string SocketAddress

Socket address, encoded as string.

The socket address contains host and port number in “host[:port]” format. The host part may contain hostname, domain name, IPv4 or IPv6 address. For IPv6 address, the address will be enclosed with square brackets, e.g. “[::1]:5060”.

typedef int TransportId

Transport ID is an integer.

typedef void * TransportHandle

Transport handle, corresponds to pjsip_transport instance.

typedef void * TimerEntry

Timer entry, corresponds to pj_timer_entry.

typedef void * GenericData

Generic data.

Enums
Anonymous enum

Constants.

Values:

  • INVALID_ID = = -1 -

    Invalid ID, equal to PJSUA_INVALID_ID.

  • SUCCESS = = 0 -

    Success, equal to PJ_SUCCESS.

struct Error
#include <types.hpp>

This structure contains information about an error that is thrown as an exception.

Public Functions
string info(bool multi_line = false) const

Build error string.

Error()

Default constructor.

Error(pj_status_t prm_status, const string & prm_title, const string & prm_reason, const string & prm_src_file, int prm_src_line)

Construct an Error instance from the specified parameters.

If prm_reason is empty, it will be filled with the error description for the status code.

Public Members
pj_status_t status

The error code.

string title

The PJSUA API operation that throws the error.

string reason

The error message.

string srcFile

The PJSUA source file that throws the error.

int srcLine

The line number of PJSUA source file that throws the error.

struct TimeVal
#include <types.hpp>

Representation of time value.

Public Functions
void fromPj(const pj_time_val & prm)

Convert from pjsip.

Public Members
long sec

The seconds part of the time.

long msec

The miliseconds fraction of the time.

struct Version
#include <types.hpp>

Version information.

Public Members
int major

Major number.

int minor

Minor number.

int rev

Additional revision number.

string suffix

Version suffix (e.g.

“-svn”)

string full

The full version info (e.g.

“2.1.0-svn”)

unsigned numeric

PJLIB version number as three bytes with the following format: 0xMMIIRR00, where MM: major number, II: minor number, RR: revision number, 00: always zero for now.

config.hpp

PJSUA2 Base Agent Operation.

Defines
PJSUA2_ERROR_HAS_EXTRA_INFO

Specify if the Error exception info should contain operation and source file information.