Ignore:
Timestamp:
Feb 21, 2006 12:11:18 AM (18 years ago)
Author:
bennylp
Message:

Initial conference implementation

File:
1 edited

Legend:

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

    r201 r205  
    136136 * Initialize sockets and optionally get the public address via STUN.  
    137137 */ 
    138 static pj_status_t init_sockets() 
     138static pj_status_t init_sockets(pj_bool_t sip, 
     139                                pjmedia_sock_info *skinfo) 
    139140{ 
    140141    enum {  
     
    152153    pj_sock_t sock[3]; 
    153154    pj_sockaddr_in mapped_addr[3]; 
    154     pj_status_t status; 
     155    pj_status_t status = PJ_SUCCESS; 
    155156 
    156157    for (i=0; i<3; ++i) 
    157158        sock[i] = PJ_INVALID_SOCKET; 
    158159 
    159     /* Create and bind SIP UDP socket. */ 
    160     status = pj_sock_socket(PJ_AF_INET, PJ_SOCK_DGRAM, 0, &sock[SIP_SOCK]); 
    161     if (status != PJ_SUCCESS) { 
    162         pjsua_perror(THIS_FILE, "socket() error", status); 
    163         goto on_error; 
    164     } 
     160    if (sip) { 
     161        /* Create and bind SIP UDP socket. */ 
     162        status = pj_sock_socket(PJ_AF_INET, PJ_SOCK_DGRAM, 0, &sock[SIP_SOCK]); 
     163        if (status != PJ_SUCCESS) { 
     164            pjsua_perror(THIS_FILE, "socket() error", status); 
     165            goto on_error; 
     166        } 
    165167     
    166     status = pj_sock_bind_in(sock[SIP_SOCK], 0, pjsua.sip_port); 
    167     if (status != PJ_SUCCESS) { 
    168         pjsua_perror(THIS_FILE, "bind() error", status); 
    169         goto on_error; 
     168        status = pj_sock_bind_in(sock[SIP_SOCK], 0, pjsua.sip_port); 
     169        if (status != PJ_SUCCESS) { 
     170            pjsua_perror(THIS_FILE, "bind() error", status); 
     171            goto on_error; 
     172        } 
    170173    } 
    171174 
     
    230233                pj_memcpy(&mapped_addr[i], &addr, sizeof(addr)); 
    231234 
    232             mapped_addr[SIP_SOCK].sin_port = pj_htons((pj_uint16_t)pjsua.sip_port); 
     235            if (sip) 
     236                mapped_addr[SIP_SOCK].sin_port = pj_htons((pj_uint16_t)pjsua.sip_port); 
     237            else 
     238                mapped_addr[RTP_SOCK].sin_port = pj_htons((pj_uint16_t)rtp_port); 
    233239            mapped_addr[RTP_SOCK].sin_port = pj_htons((pj_uint16_t)rtp_port); 
    234240            mapped_addr[RTCP_SOCK].sin_port = pj_htons((pj_uint16_t)(rtp_port+1)); 
     
    257263    } 
    258264 
    259     pjsua.sip_sock = sock[SIP_SOCK]; 
    260     pj_memcpy(&pjsua.sip_sock_name, &mapped_addr[SIP_SOCK], sizeof(pj_sockaddr_in)); 
    261  
    262     pjsua.med_skinfo.rtp_sock = sock[RTP_SOCK]; 
    263     pj_memcpy(&pjsua.med_skinfo.rtp_addr_name,  
     265    if (sip) { 
     266        pjsua.sip_sock = sock[SIP_SOCK]; 
     267        pj_memcpy(&pjsua.sip_sock_name, &mapped_addr[SIP_SOCK], sizeof(pj_sockaddr_in)); 
     268    } 
     269 
     270    skinfo->rtp_sock = sock[RTP_SOCK]; 
     271    pj_memcpy(&skinfo->rtp_addr_name,  
    264272              &mapped_addr[RTP_SOCK], sizeof(pj_sockaddr_in)); 
    265273 
    266     pjsua.med_skinfo.rtcp_sock = sock[RTCP_SOCK]; 
    267     pj_memcpy(&pjsua.med_skinfo.rtcp_addr_name,  
     274    skinfo->rtcp_sock = sock[RTCP_SOCK]; 
     275    pj_memcpy(&skinfo->rtcp_addr_name,  
    268276              &mapped_addr[RTCP_SOCK], sizeof(pj_sockaddr_in)); 
    269277 
    270     PJ_LOG(4,(THIS_FILE, "SIP UDP socket reachable at %s:%d", 
    271               pj_inet_ntoa(pjsua.sip_sock_name.sin_addr),  
    272               pj_ntohs(pjsua.sip_sock_name.sin_port))); 
     278    if (sip) { 
     279        PJ_LOG(4,(THIS_FILE, "SIP UDP socket reachable at %s:%d", 
     280                  pj_inet_ntoa(pjsua.sip_sock_name.sin_addr),  
     281                  pj_ntohs(pjsua.sip_sock_name.sin_port))); 
     282    } 
    273283    PJ_LOG(4,(THIS_FILE, "RTP socket reachable at %s:%d", 
    274               pj_inet_ntoa(pjsua.med_skinfo.rtp_addr_name.sin_addr),  
    275               pj_ntohs(pjsua.med_skinfo.rtp_addr_name.sin_port))); 
     284              pj_inet_ntoa(skinfo->rtp_addr_name.sin_addr),  
     285              pj_ntohs(skinfo->rtp_addr_name.sin_port))); 
    276286    PJ_LOG(4,(THIS_FILE, "RTCP UDP socket reachable at %s:%d", 
    277               pj_inet_ntoa(pjsua.med_skinfo.rtcp_addr_name.sin_addr),  
    278               pj_ntohs(pjsua.med_skinfo.rtcp_addr_name.sin_port))); 
     287              pj_inet_ntoa(skinfo->rtcp_addr_name.sin_addr),  
     288              pj_ntohs(skinfo->rtcp_addr_name.sin_port))); 
    279289 
    280290    return PJ_SUCCESS; 
     
    282292on_error: 
    283293    for (i=0; i<3; ++i) { 
     294        if (sip && i==0) 
     295            continue; 
    284296        if (sock[i] != PJ_INVALID_SOCKET) 
    285297            pj_sock_close(sock[i]); 
     
    485497    } 
    486498 
     499    /* Init conference bridge. */ 
     500 
     501    status = pjmedia_conf_create(pjsua.pool, 8, 8000, 160, 16, &pjsua.mconf); 
     502    if (status != PJ_SUCCESS) { 
     503        pj_caching_pool_destroy(&pjsua.cp); 
     504        pjsua_perror(THIS_FILE,  
     505                     "Media stack initialization has returned error",  
     506                     status); 
     507        return status; 
     508    } 
     509 
    487510    /* Init pjmedia-codecs: */ 
    488511 
     
    511534    int i;  /* Must be signed */ 
    512535    pjsip_transport *udp_transport; 
    513     pj_status_t status; 
     536    pj_status_t status = PJ_SUCCESS; 
    514537 
    515538    /* Init sockets (STUN etc): */ 
    516  
    517     status = init_sockets(); 
    518     if (status != PJ_SUCCESS) { 
    519         pjsua_perror(THIS_FILE, "init_sockets() has returned error",  
    520                     status); 
    521         return status; 
    522     } 
    523  
     539    for (i=0; i<PJ_ARRAY_SIZE(pjsua.med_sock_info); ++i) { 
     540        status = init_sockets(i==0, &pjsua.med_sock_info[i]); 
     541        if (status != PJ_SUCCESS) { 
     542            pjsua_perror(THIS_FILE, "init_sockets() has returned error",  
     543                        status); 
     544            return status; 
     545        } 
     546    } 
    524547 
    525548    /* Add UDP transport: */ 
Note: See TracChangeset for help on using the changeset viewer.