Ignore:
Timestamp:
Feb 9, 2006 12:13:40 AM (18 years ago)
Author:
bennylp
Message:

Integration of pjmedia and pjsip error subsystem to pjlib

File:
1 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk/pjsip/src/pjsua/pjsua_core.c

    r160 r162  
    2222#define THIS_FILE   "pjsua.c" 
    2323 
    24 struct pjsua_t pjsua; 
    25  
     24struct pjsua pjsua; 
     25 
     26/*  
     27 * Default local URI, if not specified in cmd-line  
     28 */ 
    2629#define PJSUA_LOCAL_URI     "<sip:user@127.0.0.1>" 
    2730 
    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 
    4532 
    4633/* 
     
    7562 
    7663    pjsua.local_uri = pj_str(PJSUA_LOCAL_URI); 
     64 
     65    /* Init route set list: */ 
     66 
     67    pj_list_init(&pjsua.route_set); 
    7768} 
    7869 
     
    144135             */ 
    145136            pjsip_inv_session *inv; 
     137            struct pjsua_inv_data *inv_data; 
    146138            pjmedia_sdp_session *answer; 
    147139 
    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 ); 
    154145            if (status != PJ_SUCCESS) { 
    155146 
     
    181172 
    182173            } 
     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 
    183181 
    184182            /* Answer with 100 (using the dialog, not invite): */ 
     
    223221static void pjsua_inv_on_state_changed(pjsip_inv_session *inv, pjsip_event *e) 
    224222{ 
     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 
    225236    pjsua_ui_inv_on_state_changed(inv, e); 
    226237} 
     
    237248 
    238249    PJ_TODO(HANDLE_FORKED_DIALOG); 
     250} 
     251 
     252/* 
     253 * 
     254 */ 
     255static 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 
    239304} 
    240305 
     
    364429    pjsua.sip_sock = sock[SIP_SOCK]; 
    365430    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)); 
    370439 
    371440    PJ_LOG(4,(THIS_FILE, "SIP UDP socket reachable at %s:%d", 
     
    373442              pj_ntohs(pjsua.sip_sock_name.sin_port))); 
    374443    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))); 
    377446    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))); 
    380449 
    381450    return PJ_SUCCESS; 
     
    479548        inv_cb.on_state_changed = &pjsua_inv_on_state_changed; 
    480549        inv_cb.on_new_session = &pjsua_inv_on_new_session; 
     550        inv_cb.on_media_update = &pjsua_inv_on_media_update; 
    481551 
    482552        /* Initialize invite session module: */ 
     
    552622        pj_caching_pool_destroy(&pjsua.cp); 
    553623        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); 
    554634        return status; 
    555635    } 
     
    677757    } 
    678758 
    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    } 
    682778 
    683779 
     
    770866    pjmedia_sdp_session *offer; 
    771867    pjsip_inv_session *inv; 
     868    struct pjsua_inv_data *inv_data; 
    772869    pjsip_tx_data *tdata; 
    773870    pj_status_t status; 
     
    787884    } 
    788885 
    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); 
    796892        goto on_error; 
    797893    } 
     
    806902 
    807903 
     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 
    808910    /* Set dialog Route-Set: */ 
    809911 
    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 
    811915 
    812916    /* Set credentials: */ 
Note: See TracChangeset for help on using the changeset viewer.