Home --> Documentations --> PJSIP Reference
This is a very simple SIP User Agent application that only use PJSIP (without PJSIP-UA). It's able to make and receive call, and play media to the sound device.
60 #include <pjlib-util.h> 64 #define THIS_FILE "simpleua.c" 70 #define AF pj_AF_INET() 81 #define MAX_MEDIA_CNT 2 103 static pjmedia_stream *g_med_stream; 106 #if defined(PJMEDIA_HAS_VIDEO) && (PJMEDIA_HAS_VIDEO != 0) 107 static pjmedia_vid_stream *g_med_vstream; 141 { "mod-simpleua", 12 }, 159 PJ_LOG(4,(THIS_FILE, "RX %d bytes %s from %s %s:%d:\n" 184 PJ_LOG(4,(THIS_FILE, "TX %d bytes %s to %s %s:%d:\n" 203 { "mod-msg-log", 13 }, 225 int main( int argc, char *argv[]) 249 const char *endpt_name; 257 endpt_name = hostname-> ptr; 290 app_perror(THIS_FILE, "Unable to start UDP transport", status); 374 #if defined(PJMEDIA_HAS_G711_CODEC) && PJMEDIA_HAS_G711_CODEC!=0 380 #if defined(PJMEDIA_HAS_VIDEO) && (PJMEDIA_HAS_VIDEO != 0) 391 #if PJMEDIA_HAS_VIDEO && PJMEDIA_HAS_VID_TOOLBOX_CODEC 396 # if defined(PJMEDIA_HAS_OPENH264_CODEC) && PJMEDIA_HAS_OPENH264_CODEC != 0 401 # if defined(PJMEDIA_HAS_VPX_CODEC) && PJMEDIA_HAS_VPX_CODEC != 0 406 # if defined(PJMEDIA_HAS_FFMPEG_VID_CODEC) && PJMEDIA_HAS_FFMPEG_VID_CODEC!=0 426 &g_med_transport[i]); 428 app_perror(THIS_FILE, "Unable to create media transport", status); 440 pj_memcpy(&g_sock_info[i], &g_med_tpinfo[i].sock_info, 458 app_perror(THIS_FILE, "Unable to retrieve local host IP", status); 463 pj_ansi_sprintf(temp, "<sip:simpleuac@%s:%d>", 475 app_perror(THIS_FILE, "Unable to create UAC dialog", status); 562 PJ_LOG(3,(THIS_FILE, "Ready to accept incoming calls...")); 567 for (;!g_complete;) { 573 dump_pool_usage(THIS_FILE, &cp); 582 #if defined(PJMEDIA_HAS_VIDEO) && (PJMEDIA_HAS_VIDEO != 0) 593 #if defined(PJMEDIA_HAS_VIDEO) && (PJMEDIA_HAS_VIDEO != 0) 598 # if defined(PJMEDIA_HAS_FFMPEG_VID_CODEC) && PJMEDIA_HAS_FFMPEG_VID_CODEC!=0 601 # if defined(PJMEDIA_HAS_OPENH264_CODEC) && PJMEDIA_HAS_OPENH264_CODEC != 0 604 # if PJMEDIA_HAS_VIDEO && PJMEDIA_HAS_VID_TOOLBOX_CODEC 607 # if defined(PJMEDIA_HAS_VPX_CODEC) && PJMEDIA_HAS_VPX_CODEC != 0 614 for (i = 0; i < MAX_MEDIA_CNT; ++i) { 615 if (g_med_transport[i]) 652 PJ_LOG(3,(THIS_FILE, "Call DISCONNECTED [reason=%d (%s)]", 656 PJ_LOG(3,(THIS_FILE, "One call completed, application quitting...")); 661 PJ_LOG(3,(THIS_FILE, "Call state changed to %s", 690 unsigned options = 0; 730 pj_str_t reason = pj_str( "Sorry Simple UA can not handle this INVITE"); 742 app_perror(THIS_FILE, "Unable to retrieve local host IP", status); 747 pj_ansi_sprintf(temp, "<sip:simpleuas@%s:%d>", 769 MAX_MEDIA_CNT, g_sock_info, &local_sdp); 852 app_perror(THIS_FILE, "SDP negotiation has failed", status); 871 local_sdp, remote_sdp, 0); 873 app_perror(THIS_FILE, "Unable to create audio stream info",status); 886 g_med_transport[0], NULL, &g_med_stream); 888 app_perror( THIS_FILE, "Unable to create audio stream", status); 895 app_perror( THIS_FILE, "Unable to start audio stream", status); 922 app_perror( THIS_FILE, "Unable to create sound port", status); 923 PJ_LOG(3,(THIS_FILE, "%d %d %d %d", 939 #if defined(PJMEDIA_HAS_VIDEO) && (PJMEDIA_HAS_VIDEO != 0) 949 local_sdp, remote_sdp, 1); 951 app_perror(THIS_FILE, "Unable to create video stream info",status); 964 g_med_transport[1], NULL, 967 app_perror( THIS_FILE, "Unable to create video stream", status); 974 app_perror( THIS_FILE, "Unable to start video stream", status); 986 app_perror(THIS_FILE, "Unable to get default param of video " 987 "renderer device", status); 1005 app_perror(THIS_FILE, "Unable to create video renderer device", 1014 app_perror(THIS_FILE, "Unable to connect renderer to stream", 1026 app_perror(THIS_FILE, "Unable to get default param of video " 1027 "capture device", status); 1045 app_perror(THIS_FILE, "Unable to create video capture device", 1054 app_perror(THIS_FILE, "Unable to connect capturer to stream", 1061 if (g_vid_renderer) { 1064 app_perror(THIS_FILE, "Unable to start video renderer", 1069 if (g_vid_capturer) { 1072 app_perror(THIS_FILE, "Unable to start video capturer",
Definition: sip_module.h:191
pjsip_buffer buf Definition: sip_transport.h:569
struct pjsip_request_line req Definition: sip_msg.h:869
void(* on_media_update)(pjsip_inv_session *inv_ses, pj_status_t status) Definition: sip_inv.h:244
pj_status_t pjsip_inv_usage_init(pjsip_endpoint *endpt, const pjsip_inv_callback *cb)
const pj_str_t * pjsip_get_status_text(int status_code)
#define PJ_ASSERT_RETURN(expr, retval)
pj_status_t pjsip_udp_transport_start6(pjsip_endpoint *endpt, const pj_sockaddr_in6 *local, const pjsip_host_port *a_name, unsigned async_cnt, pjsip_transport **p_transport)
Definition: sip_transport.h:522
PJMEDIA_VID_DEFAULT_CAPTURE_DEV
void pj_pool_release(pj_pool_t *pool)
const char * pjsip_inv_state_name(pjsip_inv_state state)
pjsip_dialog * dlg Definition: sip_inv.h:445
pjmedia_sdp_neg * neg Definition: sip_inv.h:448
pj_status_t pjsip_inv_send_msg(pjsip_inv_session *inv, pjsip_tx_data *tdata)
void * pj_memcpy(void *dst, const void *src, pj_size_t size)
void pjsip_dlg_dec_lock(pjsip_dialog *dlg)
pjsip_method_e id Definition: sip_msg.h:79
pj_status_t pjmedia_vid_stream_info_from_sdp(pjmedia_vid_stream_info *si, pj_pool_t *pool, pjmedia_endpt *endpt, const pjmedia_sdp_session *local, const pjmedia_sdp_session *remote, unsigned stream_idx)
#define PJMEDIA_AUD_DEFAULT_CAPTURE_DEV
pj_ssize_t len Definition: sip_transport.h:335
pj_status_t pjmedia_vid_stream_create(pjmedia_endpt *endpt, pj_pool_t *pool, pjmedia_vid_stream_info *info, pjmedia_transport *tp, void *user_data, pjmedia_vid_stream **p_stream)
pj_status_t pjmedia_stream_start(pjmedia_stream *stream)
pj_status_t pjmedia_snd_port_destroy(pjmedia_snd_port *snd_port)
pj_pool_t * pool Definition: sip_dialog.h:143
pj_status_t pjsip_endpt_respond_stateless(pjsip_endpoint *endpt, pjsip_rx_data *rdata, int st_code, const pj_str_t *st_text, const pjsip_hdr *hdr_list, const pjsip_msg_body *body)
char src_name[PJ_INET6_ADDRSTRLEN] Definition: sip_transport.h:344
pj_status_t pjsip_udp_transport_start(pjsip_endpoint *endpt, const pj_sockaddr_in *local, const pjsip_host_port *a_name, unsigned async_cnt, pjsip_transport **p_transport)
pj_status_t pjsip_inv_create_uas(pjsip_dialog *dlg, pjsip_rx_data *rdata, const pjmedia_sdp_session *local_sdp, unsigned options, pjsip_inv_session **p_inv)
pj_status_t pjmedia_vid_stream_start(pjmedia_vid_stream *stream)
#define PJ_LOG(level, arg)
char * start Definition: sip_types.h:208
struct pjmedia_snd_port pjmedia_snd_port
char * type_name Definition: sip_transport.h:822
pj_status_t pjsip_inv_initial_answer(pjsip_inv_session *inv, pjsip_rx_data *rdata, int st_code, const pj_str_t *st_text, const pjmedia_sdp_session *sdp, pjsip_tx_data **p_tdata)
char * msg_buf Definition: sip_transport.h:359
pj_pool_factory_policy pj_pool_factory_default_policy
void pjsip_endpt_destroy(pjsip_endpoint *endpt)
#define PJMEDIA_AUD_DEFAULT_PLAYBACK_DEV
pj_pool_t * pool Definition: sip_transport.h:305
pj_status_t pjsip_endpt_create(pj_pool_factory *pf, const char *name, pjsip_endpoint **endpt)
pj_status_t pjsip_inv_create_uac(pjsip_dialog *dlg, const pjmedia_sdp_session *local_sdp, unsigned options, pjsip_inv_session **p_inv)
pj_status_t pjmedia_stream_create(pjmedia_endpt *endpt, pj_pool_t *pool, const pjmedia_stream_info *info, pjmedia_transport *tp, void *user_data, pjmedia_stream **p_stream)
Definition: sip_event.h:81
pj_status_t pjsip_endpt_handle_events(pjsip_endpoint *endpt, const pj_time_val *max_timeout)
pj_status_t pjmedia_vid_stream_destroy(pjmedia_vid_stream *stream)
pj_ioqueue_t * pjsip_endpt_get_ioqueue(pjsip_endpoint *endpt)
pj_status_t pjsip_dlg_create_uac(pjsip_user_agent *ua, const pj_str_t *local_uri, const pj_str_t *local_contact, const pj_str_t *remote_uri, const pj_str_t *target, pjsip_dialog **p_dlg)
Definition: sip_transport.h:295
char * cur Definition: sip_types.h:213
pj_status_t pjsip_endpt_register_module(pjsip_endpoint *endpt, pjsip_module *module)
Definition: sip_inv.h:431
pjsip_user_agent * pjsip_ua_instance(void)
pj_status_t pjmedia_snd_port_create(pj_pool_t *pool, int rec_id, int play_id, unsigned clock_rate, unsigned channel_count, unsigned samples_per_frame, unsigned bits_per_sample, unsigned options, pjmedia_snd_port **p_port)
pj_pool_t * pool Definition: sip_inv.h:434
const pj_str_t * pj_gethostname(void)
struct pjsip_rx_data::@24 msg_info
int dst_port Definition: sip_transport.h:616
struct pjsip_rx_data::@23 pkt_info
struct pjsip_rx_data::@22 tp_info
pj_status_t pjmedia_endpt_create(pj_pool_factory *pf, pj_ioqueue_t *ioqueue, unsigned worker_cnt, pjmedia_endpt **p_endpt)
char * pjsip_tx_data_get_info(pjsip_tx_data *tdata)
pj_status_t pj_gethostip(int af, pj_sockaddr *addr)
pj_status_t pjmedia_vid_dev_default_param(pj_pool_t *pool, pjmedia_vid_dev_index id, pjmedia_vid_dev_param *param)
pj_str_t pj_str(char *str)
pj_status_t pjsip_tsx_layer_init_module(pjsip_endpoint *endpt)
pjsip_msg * msg Definition: sip_transport.h:365
pj_status_t pjsip_100rel_init_module(pjsip_endpoint *endpt)
void pj_caching_pool_init(pj_caching_pool *ch_pool, const pj_pool_factory_policy *policy, pj_size_t max_capacity)
pj_status_t pj_sockaddr_init(int af, pj_sockaddr *addr, const pj_str_t *cp, pj_uint16_t port)
char dst_name[PJ_INET6_ADDRSTRLEN] Definition: sip_transport.h:615
pj_status_t pjsip_inv_verify_request(pjsip_rx_data *rdata, unsigned *options, const pjmedia_sdp_session *sdp, pjsip_dialog *dlg, pjsip_endpoint *endpt, pjsip_tx_data **tdata)
PJ_BEGIN_DECL pj_status_t pjlib_util_init(void)
char * pj_sockaddr_print(const pj_sockaddr_t *addr, char *buf, int size, unsigned flags)
void pj_bzero(void *dst, pj_size_t size)
pj_status_t pjsip_dlg_create_uas_and_inc_lock(pjsip_user_agent *ua, pjsip_rx_data *rdata, const pj_str_t *contact, pjsip_dialog **p_dlg)
void(* on_state_changed)(pjsip_inv_session *inv, pjsip_event *e) Definition: sip_inv.h:128
pj_status_t pjsip_ua_init_module(pjsip_endpoint *endpt, const pjsip_ua_init_param *prm)
pj_status_t pjmedia_vid_dev_subsys_init(pj_pool_factory *pf)
struct pjsip_endpoint pjsip_endpoint Definition: sip_types.h:112
Definition: sip_inv.h:115
char * pjsip_rx_data_get_info(pjsip_rx_data *rdata)
pjsip_inv_state state Definition: sip_inv.h:437
pj_status_t pjmedia_stream_destroy(pjmedia_stream *stream)
pjsip_transport * transport Definition: sip_transport.h:308
int src_port Definition: sip_transport.h:347
union pjsip_msg::@17 line
struct pjsip_tx_data::@27 tp_info
pj_status_t pjmedia_snd_port_connect(pjmedia_snd_port *snd_port, pjmedia_port *port)
PJMEDIA_VID_DEFAULT_RENDER_DEV
pj_status_t pjsip_inv_invite(pjsip_inv_session *inv, pjsip_tx_data **p_tdata)
Definition: sip_module.h:54
pj_pool_t * pjmedia_endpt_create_pool(pjmedia_endpt *endpt, const char *name, pj_size_t initial, pj_size_t increment)
Definition: sip_dialog.h:136
pj_status_t pjmedia_stream_get_port(pjmedia_stream *stream, pjmedia_port **p_port)
PJ_BEGIN_DECL pj_status_t pjmedia_codec_g711_init(pjmedia_endpt *endpt)
pj_status_t pjmedia_vid_stream_get_port(pjmedia_vid_stream *stream, pjmedia_dir dir, pjmedia_port **p_port)
void(* on_new_session)(pjsip_inv_session *inv, pjsip_event *e) Definition: sip_inv.h:142
unsigned short pj_uint16_t
pjsip_transport * transport Definition: sip_transport.h:612
pj_status_t pj_init(void)
pj_status_t pjsip_inv_answer(pjsip_inv_session *inv, int st_code, const pj_str_t *st_text, const pjmedia_sdp_session *local_sdp, pjsip_tx_data **p_tdata)
pj_status_t pjmedia_endpt_destroy(pjmedia_endpt *endpt)
pjsip_method method Definition: sip_msg.h:435
pjsip_status_code cause Definition: sip_inv.h:441
void pj_log_set_level(int level)
#define PJ_UNUSED_ARG(arg)
pj_status_t pjmedia_endpt_create_sdp(pjmedia_endpt *endpt, pj_pool_t *pool, unsigned stream_cnt, const pjmedia_sock_info sock_info[], pjmedia_sdp_session **p_sdp)
#define PJ_INET6_ADDRSTRLEN
Definition: sip_module.h:211
PJSIP Open Source, high performance, small footprint, and very very portable SIP stack
Copyright (C) 2006-2008 Teluu Inc.
|