Changeset 162 for pjproject/trunk/pjsip/src/pjsua/pjsua_core.c
- Timestamp:
- Feb 9, 2006 12:13:40 AM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
pjproject/trunk/pjsip/src/pjsua/pjsua_core.c
r160 r162 22 22 #define THIS_FILE "pjsua.c" 23 23 24 struct pjsua_t pjsua; 25 24 struct pjsua pjsua; 25 26 /* 27 * Default local URI, if not specified in cmd-line 28 */ 26 29 #define PJSUA_LOCAL_URI "<sip:user@127.0.0.1>" 27 30 28 static char *PJSUA_DUMMY_SDP_OFFER = 29 "v=0\r\n" 30 "o=offer 2890844526 2890844526 IN IP4 127.0.0.1\r\n" 31 "s= \r\n" 32 "c=IN IP4 127.0.0.1\r\n" 33 "t=0 0\r\n" 34 "m=audio 49170 RTP/AVP 0\r\n" 35 "a=rtpmap:0 PCMU/8000\r\n"; 36 37 static char *PJSUA_DUMMY_SDP_ANSWER = 38 "v=0\r\n" 39 "o=answer 2890844730 2890844730 IN IP4 127.0.0.1\r\n" 40 "s= \r\n" 41 "c=IN IP4 127.0.0.1\r\n" 42 "t=0 0\r\n" 43 "m=audio 49920 RTP/AVP 0\r\n" 44 "a=rtpmap:0 PCMU/8000\r\n"; 31 45 32 46 33 /* … … 75 62 76 63 pjsua.local_uri = pj_str(PJSUA_LOCAL_URI); 64 65 /* Init route set list: */ 66 67 pj_list_init(&pjsua.route_set); 77 68 } 78 69 … … 144 135 */ 145 136 pjsip_inv_session *inv; 137 struct pjsua_inv_data *inv_data; 146 138 pjmedia_sdp_session *answer; 147 139 148 /* Create dummy SDP answer: */ 149 150 151 status = pjmedia_sdp_parse(pjsua.pool, PJSUA_DUMMY_SDP_ANSWER, 152 pj_native_strlen(PJSUA_DUMMY_SDP_ANSWER), 153 &answer); 140 141 /* Get media capability from media endpoint: */ 142 143 status = pjmedia_endpt_create_sdp( pjsua.med_endpt, rdata->tp_info.pool, 144 1, &pjsua.med_skinfo, &answer ); 154 145 if (status != PJ_SUCCESS) { 155 146 … … 181 172 182 173 } 174 175 176 /* Create and attach pjsua data to the dialog: */ 177 178 inv_data = pj_pool_zalloc(dlg->pool, sizeof(struct pjsua_inv_data)); 179 dlg->mod_data[pjsua.mod.id] = inv_data; 180 183 181 184 182 /* Answer with 100 (using the dialog, not invite): */ … … 223 221 static void pjsua_inv_on_state_changed(pjsip_inv_session *inv, pjsip_event *e) 224 222 { 223 224 /* Destroy media session when invite session is disconnected. */ 225 if (inv->state == PJSIP_INV_STATE_DISCONNECTED) { 226 struct pjsua_inv_data *inv_data; 227 228 inv_data = inv->dlg->mod_data[pjsua.mod.id]; 229 if (inv_data && inv_data->session) { 230 pjmedia_session_destroy(inv_data->session); 231 inv_data->session = NULL; 232 } 233 234 } 235 225 236 pjsua_ui_inv_on_state_changed(inv, e); 226 237 } … … 237 248 238 249 PJ_TODO(HANDLE_FORKED_DIALOG); 250 } 251 252 /* 253 * 254 */ 255 static void pjsua_inv_on_media_update(pjsip_inv_session *inv, 256 pj_status_t status) 257 { 258 struct pjsua_inv_data *inv_data; 259 const pjmedia_sdp_session *local_sdp; 260 const pjmedia_sdp_session *remote_sdp; 261 262 if (status != PJ_SUCCESS) { 263 264 pjsua_perror("SDP negotiation has failed", status); 265 return; 266 267 } 268 269 /* Destroy existing media session, if any. */ 270 271 inv_data = inv->dlg->mod_data[pjsua.mod.id]; 272 if (inv_data && inv_data->session) { 273 pjmedia_session_destroy(inv_data->session); 274 inv_data->session = NULL; 275 } 276 277 /* Get local and remote SDP */ 278 279 status = pjmedia_sdp_neg_get_active_local(inv->neg, &local_sdp); 280 if (status != PJ_SUCCESS) { 281 pjsua_perror("Unable to retrieve currently active local SDP", status); 282 return; 283 } 284 285 286 status = pjmedia_sdp_neg_get_active_remote(inv->neg, &remote_sdp); 287 if (status != PJ_SUCCESS) { 288 pjsua_perror("Unable to retrieve currently active remote SDP", status); 289 return; 290 } 291 292 293 /* Create new media session. 294 * The media session is active immediately. 295 */ 296 297 status = pjmedia_session_create( pjsua.med_endpt, 1, &pjsua.med_skinfo, 298 local_sdp, remote_sdp, &inv_data->session ); 299 if (status != PJ_SUCCESS) { 300 pjsua_perror("Unable to create media session", status); 301 return; 302 } 303 239 304 } 240 305 … … 364 429 pjsua.sip_sock = sock[SIP_SOCK]; 365 430 pj_memcpy(&pjsua.sip_sock_name, &mapped_addr[SIP_SOCK], sizeof(pj_sockaddr_in)); 366 pjsua.rtp_sock = sock[RTP_SOCK]; 367 pj_memcpy(&pjsua.rtp_sock_name, &mapped_addr[RTP_SOCK], sizeof(pj_sockaddr_in)); 368 pjsua.rtcp_sock = sock[RTCP_SOCK]; 369 pj_memcpy(&pjsua.rtcp_sock_name, &mapped_addr[RTCP_SOCK], sizeof(pj_sockaddr_in)); 431 432 pjsua.med_skinfo.rtp_sock = sock[RTP_SOCK]; 433 pj_memcpy(&pjsua.med_skinfo.rtp_addr_name, 434 &mapped_addr[RTP_SOCK], sizeof(pj_sockaddr_in)); 435 436 pjsua.med_skinfo.rtcp_sock = sock[RTCP_SOCK]; 437 pj_memcpy(&pjsua.med_skinfo.rtcp_addr_name, 438 &mapped_addr[RTCP_SOCK], sizeof(pj_sockaddr_in)); 370 439 371 440 PJ_LOG(4,(THIS_FILE, "SIP UDP socket reachable at %s:%d", … … 373 442 pj_ntohs(pjsua.sip_sock_name.sin_port))); 374 443 PJ_LOG(4,(THIS_FILE, "RTP socket reachable at %s:%d", 375 pj_inet_ntoa(pjsua. rtp_sock_name.sin_addr),376 pj_ntohs(pjsua. rtp_sock_name.sin_port)));444 pj_inet_ntoa(pjsua.med_skinfo.rtp_addr_name.sin_addr), 445 pj_ntohs(pjsua.med_skinfo.rtp_addr_name.sin_port))); 377 446 PJ_LOG(4,(THIS_FILE, "RTCP UDP socket reachable at %s:%d", 378 pj_inet_ntoa(pjsua. rtcp_sock_name.sin_addr),379 pj_ntohs(pjsua. rtcp_sock_name.sin_port)));447 pj_inet_ntoa(pjsua.med_skinfo.rtcp_addr_name.sin_addr), 448 pj_ntohs(pjsua.med_skinfo.rtcp_addr_name.sin_port))); 380 449 381 450 return PJ_SUCCESS; … … 479 548 inv_cb.on_state_changed = &pjsua_inv_on_state_changed; 480 549 inv_cb.on_new_session = &pjsua_inv_on_new_session; 550 inv_cb.on_media_update = &pjsua_inv_on_media_update; 481 551 482 552 /* Initialize invite session module: */ … … 552 622 pj_caching_pool_destroy(&pjsua.cp); 553 623 pjsua_perror("Stack initialization has returned error", status); 624 return status; 625 } 626 627 628 /* Init media endpoint: */ 629 630 status = pjmedia_endpt_create(&pjsua.cp.factory, &pjsua.med_endpt); 631 if (status != PJ_SUCCESS) { 632 pj_caching_pool_destroy(&pjsua.cp); 633 pjsua_perror("Media stack initialization has returned error", status); 554 634 return status; 555 635 } … … 677 757 } 678 758 679 /* Initialize global route_set: */ 680 681 PJ_TODO(INIT_GLOBAL_ROUTE_SET); 759 /* If outbound_proxy is specified, put it in the route_set: */ 760 761 if (pjsua.outbound_proxy.slen) { 762 763 pjsip_route_hdr *route; 764 const pj_str_t hname = { "Route", 5 }; 765 int parsed_len; 766 767 route = pjsip_parse_hdr( pjsua.pool, &hname, 768 pjsua.outbound_proxy.ptr, 769 pjsua.outbound_proxy.slen, 770 &parsed_len); 771 if (route == NULL) { 772 pjsua_perror("Invalid outbound proxy URL", PJSIP_EINVALIDURI); 773 return PJSIP_EINVALIDURI; 774 } 775 776 pj_list_push_back(&pjsua.route_set, route); 777 } 682 778 683 779 … … 770 866 pjmedia_sdp_session *offer; 771 867 pjsip_inv_session *inv; 868 struct pjsua_inv_data *inv_data; 772 869 pjsip_tx_data *tdata; 773 870 pj_status_t status; … … 787 884 } 788 885 789 /* Create dummy SDP for offer: */ 790 791 status = pjmedia_sdp_parse(dlg->pool, PJSUA_DUMMY_SDP_OFFER, 792 pj_native_strlen(PJSUA_DUMMY_SDP_OFFER), 793 &offer); 794 if (status != PJ_SUCCESS) { 795 pjsua_perror("Dummy SDP offer parsing failed", status); 886 /* Get media capability from media endpoint: */ 887 888 status = pjmedia_endpt_create_sdp( pjsua.med_endpt, dlg->pool, 889 1, &pjsua.med_skinfo, &offer); 890 if (status != PJ_SUCCESS) { 891 pjsua_perror("pjmedia unable to create SDP", status); 796 892 goto on_error; 797 893 } … … 806 902 807 903 904 /* Create and associate our data in the session. */ 905 906 inv_data = pj_pool_zalloc( dlg->pool, sizeof(struct pjsua_inv_data)); 907 dlg->mod_data[pjsua.mod.id] = inv_data; 908 909 808 910 /* Set dialog Route-Set: */ 809 911 810 PJ_TODO(INIT_DIALOG_ROUTE_SET); 912 if (!pj_list_empty(&pjsua.route_set)) 913 pjsip_dlg_set_route_set(dlg, &pjsua.route_set); 914 811 915 812 916 /* Set credentials: */
Note: See TracChangeset
for help on using the changeset viewer.