Changeset 2032 for pjproject/trunk/pjsip/src/pjsua-lib/pjsua_media.c
- Timestamp:
- Jun 19, 2008 2:10:28 PM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
pjproject/trunk/pjsip/src/pjsua-lib/pjsua_media.c
r2027 r2032 653 653 switch (op) { 654 654 case PJ_ICE_STRANS_OP_INIT: 655 pjsua_var.calls[id].med_tp_ st= result;655 pjsua_var.calls[id].med_tp_ready = result; 656 656 break; 657 657 case PJ_ICE_STRANS_OP_NEGOTIATION: … … 753 753 ice_cb.on_ice_complete = &on_ice_complete; 754 754 pj_ansi_snprintf(name, sizeof(name), "icetp%02d", i); 755 pjsua_var.calls[i].med_tp_ st= PJ_EPENDING;755 pjsua_var.calls[i].med_tp_ready = PJ_EPENDING; 756 756 757 757 comp_cnt = 1; … … 770 770 /* Wait until transport is initialized, or time out */ 771 771 PJSUA_UNLOCK(); 772 while (pjsua_var.calls[i].med_tp_ st== PJ_EPENDING) {772 while (pjsua_var.calls[i].med_tp_ready == PJ_EPENDING) { 773 773 pjsua_handle_events(100); 774 774 } 775 775 PJSUA_LOCK(); 776 if (pjsua_var.calls[i].med_tp_ st!= PJ_SUCCESS) {776 if (pjsua_var.calls[i].med_tp_ready != PJ_SUCCESS) { 777 777 pjsua_perror(THIS_FILE, "Error initializing ICE media transport", 778 pjsua_var.calls[i].med_tp_ st);779 status = pjsua_var.calls[i].med_tp_ st;778 pjsua_var.calls[i].med_tp_ready); 779 status = pjsua_var.calls[i].med_tp_ready; 780 780 goto on_error; 781 781 } … … 848 848 pjsip_role_e role, 849 849 int security_level, 850 pj_pool_t *tmp_pool, 851 const pjmedia_sdp_session *rem_sdp, 850 852 int *sip_err_code) 851 853 { 854 enum { MEDIA_IDX = 0 }; 852 855 pjsua_call *call = &pjsua_var.calls[call_id]; 856 pj_status_t status; 853 857 854 858 #if defined(PJMEDIA_HAS_SRTP) && (PJMEDIA_HAS_SRTP != 0) … … 856 860 pjmedia_srtp_setting srtp_opt; 857 861 pjmedia_transport *srtp; 858 pj_status_t status;859 862 #endif 860 863 … … 905 908 #endif 906 909 910 /* Create the media transport */ 911 status = pjmedia_transport_media_create(call->med_tp, tmp_pool, 0, 912 rem_sdp, MEDIA_IDX); 913 if (status != PJ_SUCCESS) { 914 if (sip_err_code) *sip_err_code = PJSIP_SC_NOT_ACCEPTABLE; 915 pjsua_media_channel_deinit(call_id); 916 return status; 917 } 918 919 call->med_tp_st = PJSUA_MED_TP_INIT; 907 920 return PJ_SUCCESS; 908 921 } … … 927 940 } 928 941 942 /* Create media if it's not created. This could happen when call is 943 * currently on-hold 944 */ 945 if (call->med_tp_st == PJSUA_MED_TP_IDLE) { 946 pjsip_role_e role; 947 role = (rem_sdp ? PJSIP_ROLE_UAS : PJSIP_ROLE_UAC); 948 status = pjsua_media_channel_init(call_id, role, call->secure_level, 949 pool, rem_sdp, sip_status_code); 950 if (status != PJ_SUCCESS) 951 return status; 952 } 953 929 954 /* Get media socket info */ 930 955 pjmedia_transport_info_init(&tpinfo); … … 936 961 if (status != PJ_SUCCESS) { 937 962 if (sip_status_code) *sip_status_code = 500; 938 goto on_error;963 return status; 939 964 } 940 965 … … 964 989 965 990 /* Give the SDP to media transport */ 966 status = pjmedia_transport_ media_create(call->med_tp, pool, 0,967 sdp, rem_sdp,MEDIA_IDX);991 status = pjmedia_transport_encode_sdp(call->med_tp, pool, sdp, rem_sdp, 992 MEDIA_IDX); 968 993 if (status != PJ_SUCCESS) { 969 994 if (sip_status_code) *sip_status_code = PJSIP_SC_NOT_ACCEPTABLE; 970 goto on_error;995 return status; 971 996 } 972 997 973 998 *p_sdp = sdp; 974 999 return PJ_SUCCESS; 975 976 on_error:977 pjsua_media_channel_deinit(call_id);978 return status;979 980 1000 } 981 1001 … … 984 1004 { 985 1005 pjsua_call *call = &pjsua_var.calls[call_id]; 986 987 //see ticket #525988 //pjmedia_transport_media_stop(call->med_tp);989 1006 990 1007 if (call->conf_slot != PJSUA_INVALID_ID) { … … 1017 1034 stop_media_session(call_id); 1018 1035 1019 pjmedia_transport_media_stop(call->med_tp); 1036 if (call->med_tp_st != PJSUA_MED_TP_IDLE) { 1037 pjmedia_transport_media_stop(call->med_tp); 1038 call->med_tp_st = PJSUA_MED_TP_IDLE; 1039 } 1020 1040 1021 1041 if (call->med_orig && call->med_tp != call->med_orig) { … … 1049 1069 1050 1070 pj_status_t pjsua_media_channel_update(pjsua_call_id call_id, 1051 pjmedia_sdp_session *local_sdp,1071 const pjmedia_sdp_session *local_sdp, 1052 1072 const pjmedia_sdp_session *remote_sdp) 1053 1073 { … … 1113 1133 /* Shutdown transport's session */ 1114 1134 pjmedia_transport_media_stop(call->med_tp); 1135 call->med_tp_st = PJSUA_MED_TP_IDLE; 1115 1136 1116 1137 /* No need because we need keepalive? */ … … 1123 1144 1124 1145 } else { 1125 /* Start media transport */1146 /* Start/restart media transport */ 1126 1147 status = pjmedia_transport_media_start(call->med_tp, 1127 1148 call->inv->pool, … … 1129 1150 if (status != PJ_SUCCESS) 1130 1151 return status; 1152 1153 call->med_tp_st = PJSUA_MED_TP_RUNNING; 1131 1154 1132 1155 /* Override ptime, if this option is specified. */
Note: See TracChangeset
for help on using the changeset viewer.