Ignore:
Timestamp:
May 20, 2015 8:46:11 AM (9 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.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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.