Ignore:
Timestamp:
Jan 17, 2008 5:29:36 PM (16 years ago)
Author:
nanang
Message:

Ticket #452:

  • Add directory srtp to third_party/build directory
  • Add libsrtp project & integrate it to pjproject vs8 solution
  • Add transport_srtp.h & .c
  • Modify project dependencies to include libsrtp
  • Modify Samples-vc.mak, add libsrtp as third party library
  • Modify transport interface
  • Modify transport_ice & transport_udp to accomodate new transport interface
  • Modify other files that uses transport
File:
1 edited

Legend:

Unmodified
Added
Removed
  • pjproject/branches/users/nanang/pjmedia/src/pjmedia/transport_ice.c

    r1656 r1698  
    5252 * These are media transport operations. 
    5353 */ 
    54 static pj_status_t tp_get_info(pjmedia_transport *tp, 
    55                                pjmedia_sock_info *info); 
    56 static pj_status_t tp_attach( pjmedia_transport *tp, 
    57                               void *stream, 
    58                               const pj_sockaddr_t *rem_addr, 
    59                               const pj_sockaddr_t *rem_rtcp, 
    60                               unsigned addr_len, 
    61                               void (*rtp_cb)(void*, 
    62                                              const void*, 
    63                                              pj_ssize_t), 
    64                               void (*rtcp_cb)(void*, 
    65                                               const void*, 
    66                                               pj_ssize_t)); 
    67 static void        tp_detach( pjmedia_transport *tp, 
    68                               void *strm); 
    69 static pj_status_t tp_send_rtp( pjmedia_transport *tp, 
    70                                 const void *pkt, 
    71                                 pj_size_t size); 
    72 static pj_status_t tp_send_rtcp( pjmedia_transport *tp, 
    73                                  const void *pkt, 
    74                                  pj_size_t size); 
     54static pj_status_t transport_get_info (pjmedia_transport *tp, 
     55                                       pjmedia_sock_info *info); 
     56static pj_status_t transport_attach   (pjmedia_transport *tp, 
     57                                       void *user_data, 
     58                                       const pj_sockaddr_t *rem_addr, 
     59                                       const pj_sockaddr_t *rem_rtcp, 
     60                                       unsigned addr_len, 
     61                                       void (*rtp_cb)(void*, 
     62                                                      const void*, 
     63                                                      pj_ssize_t), 
     64                                       void (*rtcp_cb)(void*, 
     65                                                       const void*, 
     66                                                       pj_ssize_t)); 
     67static void        transport_detach   (pjmedia_transport *tp, 
     68                                       void *strm); 
     69static pj_status_t transport_send_rtp( pjmedia_transport *tp, 
     70                                       const void *pkt, 
     71                                       pj_size_t size); 
     72static pj_status_t transport_send_rtcp(pjmedia_transport *tp, 
     73                                       const void *pkt, 
     74                                       pj_size_t size); 
     75static pj_status_t transport_media_create(pjmedia_transport *tp, 
     76                                       pj_pool_t *pool, 
     77                                       pjmedia_sdp_session *sdp_local, 
     78                                       const pjmedia_sdp_session *sdp_remote); 
     79static pj_status_t transport_media_start (pjmedia_transport *tp, 
     80                                       pj_pool_t *pool, 
     81                                       pjmedia_sdp_session *sdp_local, 
     82                                       const pjmedia_sdp_session *sdp_remote, 
     83                                       unsigned media_index); 
     84static pj_status_t transport_media_stop(pjmedia_transport *tp); 
     85static pj_status_t transport_simulate_lost(pjmedia_transport *tp, 
     86                                       pjmedia_dir dir, 
     87                                       unsigned pct_lost); 
     88static pj_status_t transport_destroy  (pjmedia_transport *tp); 
    7589 
    7690/* 
     
    8599 
    86100 
    87 static pjmedia_transport_op tp_ice_op =  
    88 { 
    89     &tp_get_info, 
    90     &tp_attach, 
    91     &tp_detach, 
    92     &tp_send_rtp, 
    93     &tp_send_rtcp, 
    94     &pjmedia_ice_destroy 
     101static pjmedia_transport_op transport_ice_op =  
     102{ 
     103    &transport_get_info, 
     104    &transport_attach, 
     105    &transport_detach, 
     106    &transport_send_rtp, 
     107    &transport_send_rtcp, 
     108    &transport_media_create, 
     109    &transport_media_start, 
     110    &transport_media_stop, 
     111    &transport_simulate_lost, 
     112    &transport_destroy 
    95113}; 
    96114 
     
    133151    tp_ice->ice_st = ice_st; 
    134152    pj_ansi_strcpy(tp_ice->base.name, ice_st->obj_name); 
    135     tp_ice->base.op = &tp_ice_op; 
     153    tp_ice->base.op = &transport_ice_op; 
    136154    tp_ice->base.type = PJMEDIA_TRANSPORT_TYPE_ICE; 
    137155 
     
    144162    if (p_tp) 
    145163        *p_tp = &tp_ice->base; 
    146  
    147     return PJ_SUCCESS; 
    148 } 
    149  
    150  
    151 /* 
    152  * Destroy ICE media transport. 
    153  */ 
    154 PJ_DEF(pj_status_t) pjmedia_ice_destroy(pjmedia_transport *tp) 
    155 { 
    156     struct transport_ice *tp_ice = (struct transport_ice*)tp; 
    157  
    158     if (tp_ice->ice_st) { 
    159         pj_ice_strans_destroy(tp_ice->ice_st); 
    160         /*Must not touch tp_ice after ice_st is destroyed! 
    161          (it has the pool) 
    162          tp_ice->ice_st = NULL; 
    163          */ 
    164     } 
    165164 
    166165    return PJ_SUCCESS; 
     
    231230                     comp, PJ_EINVAL); 
    232231 
    233     pj_memcpy(comp, tp_ice->ice_st->comp[comp_id-1], sizeof(pj_ice_strans_comp)); 
     232    pj_memcpy(comp, tp_ice->ice_st->comp[comp_id-1],  
     233              sizeof(pj_ice_strans_comp)); 
    234234    return PJ_SUCCESS;               
    235235} 
     
    247247{ 
    248248    struct transport_ice *tp_ice = (struct transport_ice*)tp; 
    249     return pj_ice_strans_init_ice(tp_ice->ice_st, role, local_ufrag, local_passwd); 
     249    return pj_ice_strans_init_ice(tp_ice->ice_st, role, local_ufrag,  
     250                                  local_passwd); 
    250251} 
    251252 
     
    255256 * This will add ICE attributes to the SDP. 
    256257 */ 
    257 PJ_DEF(pj_status_t) pjmedia_ice_modify_sdp(pjmedia_transport *tp, 
    258                                            pj_pool_t *pool, 
    259                                            pjmedia_sdp_session *sdp) 
     258static pj_status_t transport_media_create(pjmedia_transport *tp, 
     259                                       pj_pool_t *pool, 
     260                                       pjmedia_sdp_session *sdp_local, 
     261                                       const pjmedia_sdp_session *sdp_remote) 
    260262{ 
    261263    struct transport_ice *tp_ice = (struct transport_ice*)tp; 
     
    265267    unsigned i, cand_cnt; 
    266268 
     269    PJ_UNUSED_ARG(sdp_remote); 
     270 
    267271    buffer = (char*) pj_pool_alloc(pool, MAXLEN); 
    268272 
     
    270274    attr = pjmedia_sdp_attr_create(pool, "ice-ufrag",  
    271275                                   &tp_ice->ice_st->ice->rx_ufrag); 
    272     sdp->attr[sdp->attr_count++] = attr; 
     276    sdp_local->attr[sdp_local->attr_count++] = attr; 
    273277 
    274278    /* Create ice-pwd attribute */ 
    275279    attr = pjmedia_sdp_attr_create(pool, "ice-pwd",  
    276280                                   &tp_ice->ice_st->ice->rx_pass); 
    277     sdp->attr[sdp->attr_count++] = attr; 
     281    sdp_local->attr[sdp_local->attr_count++] = attr; 
    278282 
    279283    /* Add all candidates (to media level) */ 
     
    330334        value = pj_str(buffer); 
    331335        attr = pjmedia_sdp_attr_create(pool, "candidate", &value); 
    332         sdp->media[0]->attr[sdp->media[0]->attr_count++] = attr; 
     336        sdp_local->media[0]->attr[sdp_local->media[0]->attr_count++] = attr; 
    333337    } 
    334338 
     
    457461    PJ_LOG(4,(tp_ice->ice_st->obj_name,  
    458462              "Disabling local ICE, reason=%s", reason)); 
    459     pjmedia_ice_stop_ice(&tp_ice->base); 
     463    transport_media_stop(&tp_ice->base); 
    460464} 
    461465 
     
    464468 * Start ICE checks when both offer and answer are available. 
    465469 */ 
    466 PJ_DEF(pj_status_t) pjmedia_ice_start_ice(pjmedia_transport *tp, 
    467                                           pj_pool_t *pool, 
    468                                           const pjmedia_sdp_session *rem_sdp, 
    469                                           unsigned media_index) 
     470static pj_status_t transport_media_start(pjmedia_transport *tp, 
     471                                         pj_pool_t *pool, 
     472                                         pjmedia_sdp_session *sdp_local, 
     473                                         const pjmedia_sdp_session *sdp_remote, 
     474                                         unsigned media_index) 
    470475{ 
    471476    struct transport_ice *tp_ice = (struct transport_ice*)tp; 
     
    482487    pj_status_t status; 
    483488 
    484     PJ_ASSERT_RETURN(tp && pool && rem_sdp, PJ_EINVAL); 
    485     PJ_ASSERT_RETURN(media_index < rem_sdp->media_count, PJ_EINVAL); 
    486  
    487     sdp_med = rem_sdp->media[media_index]; 
     489    PJ_UNUSED_ARG(sdp_local); 
     490 
     491    PJ_ASSERT_RETURN(tp && pool && sdp_remote, PJ_EINVAL); 
     492    PJ_ASSERT_RETURN(media_index < sdp_remote->media_count, PJ_EINVAL); 
     493 
     494    sdp_med = sdp_remote->media[media_index]; 
    488495 
    489496    /* Get the SDP connection for the media stream. 
     
    493500    conn = sdp_med->conn; 
    494501    if (conn == NULL) 
    495         conn = rem_sdp->conn; 
     502        conn = sdp_remote->conn; 
    496503 
    497504    if (conn == NULL) { 
     
    508515    if (attr == NULL) { 
    509516        /* Find ice-ufrag attribute in session descriptor */ 
    510         attr = pjmedia_sdp_attr_find2(rem_sdp->attr_count, rem_sdp->attr, 
     517        attr = pjmedia_sdp_attr_find2(sdp_remote->attr_count, sdp_remote->attr, 
    511518                                      "ice-ufrag", NULL); 
    512519        if (attr == NULL) { 
     
    522529    if (attr == NULL) { 
    523530        /* Find ice-pwd attribute in session descriptor */ 
    524         attr = pjmedia_sdp_attr_find2(rem_sdp->attr_count, rem_sdp->attr, 
     531        attr = pjmedia_sdp_attr_find2(sdp_remote->attr_count, sdp_remote->attr, 
    525532                                      "ice-pwd", NULL); 
    526533        if (attr == NULL) { 
     
    609616 
    610617 
    611 PJ_DEF(pj_status_t) pjmedia_ice_stop_ice(pjmedia_transport *tp) 
     618static pj_status_t transport_media_stop(pjmedia_transport *tp) 
    612619{ 
    613620    struct transport_ice *tp_ice = (struct transport_ice*)tp; 
     
    616623 
    617624 
    618 static pj_status_t tp_get_info(pjmedia_transport *tp, 
    619                                pjmedia_sock_info *info) 
     625static pj_status_t transport_get_info(pjmedia_transport *tp, 
     626                                      pjmedia_sock_info *info) 
    620627{ 
    621628    struct transport_ice *tp_ice = (struct transport_ice*)tp; 
     
    649656 
    650657 
    651 static pj_status_t tp_attach( pjmedia_transport *tp, 
    652                               void *stream, 
    653                               const pj_sockaddr_t *rem_addr, 
    654                               const pj_sockaddr_t *rem_rtcp, 
    655                               unsigned addr_len, 
    656                               void (*rtp_cb)(void*, 
    657                                              const void*, 
    658                                              pj_ssize_t), 
    659                               void (*rtcp_cb)(void*, 
    660                                               const void*, 
    661                                               pj_ssize_t)) 
     658static pj_status_t transport_attach  (pjmedia_transport *tp, 
     659                                      void *stream, 
     660                                      const pj_sockaddr_t *rem_addr, 
     661                                      const pj_sockaddr_t *rem_rtcp, 
     662                                      unsigned addr_len, 
     663                                      void (*rtp_cb)(void*, 
     664                                                     const void*, 
     665                                                     pj_ssize_t), 
     666                                      void (*rtcp_cb)(void*, 
     667                                                      const void*, 
     668                                                      pj_ssize_t)) 
    662669{ 
    663670    struct transport_ice *tp_ice = (struct transport_ice*)tp; 
     
    674681 
    675682 
    676 static void tp_detach(pjmedia_transport *tp, 
    677                       void *strm) 
     683static void transport_detach(pjmedia_transport *tp, 
     684                             void *strm) 
    678685{ 
    679686    struct transport_ice *tp_ice = (struct transport_ice*)tp; 
     
    687694 
    688695 
    689 static pj_status_t tp_send_rtp(pjmedia_transport *tp, 
    690                                const void *pkt, 
    691                                pj_size_t size) 
     696static pj_status_t transport_send_rtp(pjmedia_transport *tp, 
     697                                      const void *pkt, 
     698                                      pj_size_t size) 
    692699{ 
    693700    struct transport_ice *tp_ice = (struct transport_ice*)tp; 
     
    709716 
    710717 
    711 static pj_status_t tp_send_rtcp(pjmedia_transport *tp, 
    712                                 const void *pkt, 
    713                                 pj_size_t size) 
     718static pj_status_t transport_send_rtcp(pjmedia_transport *tp, 
     719                                       const void *pkt, 
     720                                       pj_size_t size) 
    714721{ 
    715722    struct transport_ice *tp_ice = (struct transport_ice*)tp; 
     
    799806 
    800807/* Simulate lost */ 
    801 PJ_DEF(pj_status_t) pjmedia_ice_simulate_lost( pjmedia_transport *tp, 
    802                                                pjmedia_dir dir, 
    803                                                unsigned pct_lost) 
     808static pj_status_t transport_simulate_lost(pjmedia_transport *tp, 
     809                                           pjmedia_dir dir, 
     810                                           unsigned pct_lost) 
    804811{ 
    805812    struct transport_ice *ice = (struct transport_ice*) tp; 
     
    816823} 
    817824 
     825 
     826/* 
     827 * Destroy ICE media transport. 
     828 */ 
     829static pj_status_t transport_destroy(pjmedia_transport *tp) 
     830{ 
     831    struct transport_ice *tp_ice = (struct transport_ice*)tp; 
     832 
     833    if (tp_ice->ice_st) { 
     834        pj_ice_strans_destroy(tp_ice->ice_st); 
     835        /*Must not touch tp_ice after ice_st is destroyed! 
     836         (it has the pool) 
     837         tp_ice->ice_st = NULL; 
     838         */ 
     839    } 
     840 
     841    return PJ_SUCCESS; 
     842} 
     843 
Note: See TracChangeset for help on using the changeset viewer.