Ignore:
Timestamp:
Sep 15, 2007 8:30:16 AM (17 years ago)
Author:
bennylp
Message:

Ticket #370: Implemented callback notification to application when ICE negotiation fails (via on_call_media_state callback)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk/pjmedia/src/pjmedia/transport_ice.c

    r1266 r1435  
    2626    pjmedia_transport    base; 
    2727    pj_ice_strans       *ice_st; 
     28    pjmedia_ice_cb       cb; 
    2829 
    2930    pj_time_val          start_ice; 
     
    9697                                       unsigned comp_cnt, 
    9798                                       pj_stun_config *stun_cfg, 
     99                                       const pjmedia_ice_cb *cb, 
    98100                                       pjmedia_transport **p_tp) 
    99101{ 
     
    123125    tp_ice->base.op = &tp_ice_op; 
    124126    tp_ice->base.type = PJMEDIA_TRANSPORT_TYPE_ICE; 
     127 
     128    if (cb) 
     129        pj_memcpy(&tp_ice->cb, cb, sizeof(pjmedia_ice_cb)); 
    125130 
    126131    ice_st->user_data = (void*)tp_ice; 
     
    687692 
    688693static void ice_on_ice_complete(pj_ice_strans *ice_st,  
    689                                 pj_status_t status) 
     694                                pj_status_t result) 
    690695{ 
    691696    struct transport_ice *tp_ice = (struct transport_ice*) ice_st->user_data; 
     
    699704    PJ_TIME_VAL_SUB(end_ice, tp_ice->start_ice); 
    700705 
    701     if (status != PJ_SUCCESS) { 
     706    if (result != PJ_SUCCESS) { 
    702707        char errmsg[PJ_ERR_MSG_SIZE]; 
    703         pj_strerror(status, errmsg, sizeof(errmsg)); 
     708        pj_strerror(result, errmsg, sizeof(errmsg)); 
    704709        PJ_LOG(1,(ice_st->obj_name,  
    705710                  "ICE negotiation failed after %d:%03ds: %s",  
    706711                  (int)end_ice.sec, (int)end_ice.msec, 
    707712                  errmsg)); 
    708         return; 
    709     } 
    710  
    711     check = &ice_st->ice->valid_list.checks[0]; 
     713    } else { 
     714        check = &ice_st->ice->valid_list.checks[0]; 
    712715     
    713     lcand = check->lcand; 
    714     rcand = check->rcand; 
    715  
    716     pj_ansi_strcpy(src_addr, pj_inet_ntoa(lcand->addr.ipv4.sin_addr)); 
    717     pj_ansi_strcpy(dst_addr, pj_inet_ntoa(rcand->addr.ipv4.sin_addr)); 
    718  
    719     PJ_LOG(3,(ice_st->obj_name,  
    720               "ICE negotiation completed in %d.%03ds. Sending from " 
    721               "%s:%d to %s:%d", 
    722               (int)end_ice.sec, (int)end_ice.msec, 
    723               src_addr, pj_ntohs(lcand->addr.ipv4.sin_port), 
    724               dst_addr, pj_ntohs(rcand->addr.ipv4.sin_port))); 
    725 } 
    726  
    727  
     716        lcand = check->lcand; 
     717        rcand = check->rcand; 
     718 
     719        pj_ansi_strcpy(src_addr, pj_inet_ntoa(lcand->addr.ipv4.sin_addr)); 
     720        pj_ansi_strcpy(dst_addr, pj_inet_ntoa(rcand->addr.ipv4.sin_addr)); 
     721 
     722        PJ_LOG(4,(ice_st->obj_name,  
     723                  "ICE negotiation completed in %d.%03ds. Sending from " 
     724                  "%s:%d to %s:%d", 
     725                  (int)end_ice.sec, (int)end_ice.msec, 
     726                  src_addr, pj_ntohs(lcand->addr.ipv4.sin_port), 
     727                  dst_addr, pj_ntohs(rcand->addr.ipv4.sin_port))); 
     728    } 
     729 
     730    /* Notify application */ 
     731    if (tp_ice->cb.on_ice_complete) 
     732        (*tp_ice->cb.on_ice_complete)(&tp_ice->base, result); 
     733} 
     734 
     735 
Note: See TracChangeset for help on using the changeset viewer.