Changeset 5099


Ignore:
Timestamp:
May 20, 2015 8:46:11 AM (5 years ago)
Author:
nanang
Message:

Fixed #1854:

  • Hangup the call immediately when there is no active media, this is only for initial INVITE.
  • Stop media and destroy media transport properly upon any error.
Location:
pjproject/trunk/pjsip/src/pjsua-lib
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk/pjsip/src/pjsua-lib/pjsua_call.c

    r5096 r5099  
    38903890    /* Update media channel with the new SDP */ 
    38913891    status = pjsua_media_channel_update(call->index, local_sdp, remote_sdp); 
     3892 
     3893    /* If this is not the initial INVITE, don't disconnect call due to 
     3894     * no media after SDP negotiation. 
     3895     */ 
     3896    if (status == PJMEDIA_SDPNEG_ENOMEDIA && 
     3897        call->inv->state == PJSIP_INV_STATE_CONFIRMED) 
     3898    { 
     3899        status = PJ_SUCCESS; 
     3900    } 
     3901 
     3902    /* Disconnect call after failure in media channel update */ 
    38923903    if (status != PJ_SUCCESS) { 
    38933904        pjsua_perror(THIS_FILE, "Unable to create media session", 
  • pjproject/trunk/pjsip/src/pjsua-lib/pjsua_media.c

    r5048 r5099  
    26502650                                 "for call_id %d media %d", 
    26512651                             call_id, mi)); 
    2652                 continue; 
     2652                goto on_check_med_status; 
    26532653            } 
    26542654 
     
    27082708                                     "for call_id %d media %d", 
    27092709                                     call_id, mi)); 
    2710                         continue; 
     2710                        goto on_check_med_status; 
    27112711                    } 
    27122712                    status = pjmedia_transport_media_create(call_med->tp, 
     
    27182718                                     "for call_id %d media %d", 
    27192719                                     call_id, mi)); 
    2720                         continue; 
     2720                        goto on_check_med_status; 
    27212721                    } 
    27222722                } 
     
    27312731                                     "for call_id %d media %d", 
    27322732                                 call_id, mi)); 
    2733                     continue; 
     2733                    goto on_check_med_status; 
    27342734                } 
    27352735 
     
    27562756                                         "for call_id %d media %d", 
    27572757                                     call_id, mi)); 
    2758                         continue; 
     2758                        goto on_check_med_status; 
    27592759                    } 
    27602760                } 
     
    28262826                                 "for call_id %d media %d", 
    28272827                             call_id, mi)); 
    2828                 continue; 
     2828                goto on_check_med_status; 
    28292829            } 
    28302830 
     
    28612861                                     "for call_id %d media %d", 
    28622862                                 call_id, mi)); 
    2863                     continue; 
     2863                    goto on_check_med_status; 
    28642864                } 
    28652865 
     
    28862886                                         "for call_id %d media %d", 
    28872887                                     call_id, mi)); 
    2888                         continue; 
     2888                        goto on_check_med_status; 
    28892889                    } 
    28902890                } 
     
    29512951        } 
    29522952 
     2953on_check_med_status: 
    29532954        if (status != PJ_SUCCESS) { 
     2955            /* Stop stream */ 
     2956            stop_media_stream(call, mi); 
     2957 
     2958            /* Close the media transport */ 
     2959            if (call_med->tp) { 
     2960                pjsua_set_media_tp_state(call_med, PJSUA_MED_TP_NULL); 
     2961                pjmedia_transport_close(call_med->tp); 
     2962                call_med->tp = call_med->tp_orig = NULL; 
     2963            } 
     2964 
     2965            /* Update media states */ 
     2966            call_med->state = PJSUA_CALL_MEDIA_ERROR; 
     2967            call_med->dir = PJMEDIA_DIR_NONE; 
     2968 
    29542969            PJ_PERROR(1,(THIS_FILE, status, "Error updating media call%02d:%d", 
    29552970                         call_id, mi)); 
    29562971        } else { 
    2957             got_media = PJ_TRUE; 
     2972            /* Only set 'got_media' flag if this media is not disabled */ 
     2973            if (local_sdp->media[mi]->desc.port != 0) 
     2974                got_media = PJ_TRUE; 
    29582975        } 
    29592976    } 
Note: See TracChangeset for help on using the changeset viewer.