Changeset 4542


Ignore:
Timestamp:
Jun 21, 2013 7:47:41 AM (11 years ago)
Author:
ming
Message:

Re #1682: Use account specific variable to keep track of the next rtp port to use.

Location:
pjproject/trunk/pjsip
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk/pjsip/include/pjsua-lib/pjsua_internal.h

    r4342 r4542  
    264264    pjsip_evsub     *mwi_sub;       /**< MWI client subscription        */ 
    265265    pjsip_dialog    *mwi_dlg;       /**< Dialog for MWI sub.            */ 
     266 
     267    pj_uint16_t      next_rtp_port; /**< Next RTP port to be used.      */ 
    266268} pjsua_acc; 
    267269 
  • pjproject/trunk/pjsip/src/pjsua-lib/pjsua_acc.c

    r4537 r4542  
    653653    pj_bzero(&acc->via_addr, sizeof(acc->via_addr)); 
    654654    acc->via_tp = NULL; 
     655    acc->next_rtp_port = 0; 
    655656 
    656657    /* Remove from array */ 
  • pjproject/trunk/pjsip/src/pjsua-lib/pjsua_media.c

    r4539 r4542  
    3030#endif 
    3131 
    32 /* Next RTP port to be used */ 
    33 static pj_uint16_t next_rtp_port; 
    34  
    3532static void pjsua_media_config_dup(pj_pool_t *pool, 
    3633                                   pjsua_media_config *dst, 
     
    220217    } 
    221218 
    222     /* Reset RTP port */ 
    223     next_rtp_port = 0; 
    224  
    225219    pj_log_pop_indent(); 
    226220 
     
    247241    char addr_buf[PJ_INET6_ADDRSTRLEN+10]; 
    248242    pj_sock_t sock[2]; 
    249  
    250     use_ipv6 = (pjsua_var.acc[call_med->call->acc_id].cfg.ipv6_media_use != 
    251                 PJSUA_IPV6_DISABLED); 
     243    pjsua_acc *acc = &pjsua_var.acc[call_med->call->acc_id]; 
     244 
     245    use_ipv6 = (acc->cfg.ipv6_media_use != PJSUA_IPV6_DISABLED); 
    252246    af = use_ipv6 ? pj_AF_INET6() : pj_AF_INET(); 
    253247 
     
    261255    } 
    262256 
    263     if (next_rtp_port == 0) 
    264         next_rtp_port = (pj_uint16_t)cfg->port; 
    265  
    266     if (next_rtp_port == 0) 
    267         next_rtp_port = (pj_uint16_t)40000; 
     257    if (acc->next_rtp_port == 0) 
     258        acc->next_rtp_port = (pj_uint16_t)cfg->port; 
     259 
     260    if (acc->next_rtp_port == 0) 
     261        acc->next_rtp_port = (pj_uint16_t)DEFAULT_RTP_PORT; 
    268262 
    269263    for (i=0; i<2; ++i) 
     
    281275 
    282276    /* Loop retry to bind RTP and RTCP sockets. */ 
    283     for (i=0; i<RTP_RETRY; ++i, next_rtp_port += 2) { 
     277    for (i=0; i<RTP_RETRY; ++i, acc->next_rtp_port += 2) { 
    284278 
    285279        if (cfg->port > 0 && cfg->port_range > 0 && 
    286             next_rtp_port > cfg->port + cfg->port_range) 
     280            (acc->next_rtp_port > cfg->port + cfg->port_range || 
     281             acc->next_rtp_port < cfg->port)) 
    287282        { 
    288             next_rtp_port = (pj_uint16_t)cfg->port; 
     283            acc->next_rtp_port = (pj_uint16_t)cfg->port; 
    289284        } 
    290285 
     
    302297 
    303298        /* Bind RTP socket */ 
    304         pj_sockaddr_set_port(&bound_addr, next_rtp_port); 
     299        pj_sockaddr_set_port(&bound_addr, acc->next_rtp_port); 
    305300        status=pj_sock_bind(sock[0], &bound_addr, 
    306301                            pj_sockaddr_get_len(&bound_addr)); 
     
    325320 
    326321        /* Bind RTCP socket */ 
    327         pj_sockaddr_set_port(&bound_addr, (pj_uint16_t)(next_rtp_port+1)); 
     322        pj_sockaddr_set_port(&bound_addr, (pj_uint16_t)(acc->next_rtp_port+1)); 
    328323        status=pj_sock_bind(sock[1], &bound_addr, 
    329324                            pj_sockaddr_get_len(&bound_addr)); 
     
    417412 
    418413            status = pj_sockaddr_init(af, &mapped_addr[0], &cfg->public_addr, 
    419                                       (pj_uint16_t)next_rtp_port); 
     414                                      (pj_uint16_t)acc->next_rtp_port); 
    420415            if (status != PJ_SUCCESS) 
    421416                goto on_error; 
    422417 
    423418            status = pj_sockaddr_init(af, &mapped_addr[1], &cfg->public_addr, 
    424                                       (pj_uint16_t)(next_rtp_port+1)); 
     419                                      (pj_uint16_t)(acc->next_rtp_port+1)); 
    425420            if (status != PJ_SUCCESS) 
    426421                goto on_error; 
     
    445440                pj_sockaddr_copy_addr(&mapped_addr[i], &bound_addr); 
    446441                pj_sockaddr_set_port(&mapped_addr[i], 
    447                                      (pj_uint16_t)(next_rtp_port+i)); 
     442                                     (pj_uint16_t)(acc->next_rtp_port+i)); 
    448443            } 
    449444 
     
    472467                                sizeof(addr_buf), 3))); 
    473468 
    474     next_rtp_port += 2; 
     469    acc->next_rtp_port += 2; 
    475470    return PJ_SUCCESS; 
    476471 
Note: See TracChangeset for help on using the changeset viewer.