Changeset 1104 for pjproject/trunk/pjmedia/src/pjmedia/transport_ice.c
- Timestamp:
- Mar 25, 2007 6:44:51 PM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
pjproject/trunk/pjmedia/src/pjmedia/transport_ice.c
r1101 r1104 70 70 * And these are ICE callbacks. 71 71 */ 72 static void ice_on_rx_data(pj_ice_st *ice_st, 73 unsigned comp_id, unsigned cand_id, 72 static void ice_on_rx_data(pj_ice_st *ice_st, unsigned comp_id, 74 73 void *pkt, pj_size_t size, 75 74 const pj_sockaddr_t *src_addr, … … 100 99 pj_ice_st_cb ice_st_cb; 101 100 struct transport_ice *tp_ice; 102 unsigned i;103 101 pj_status_t status; 104 102 … … 111 109 112 110 /* Create ICE */ 113 status = pj_ice_st_create(stun_cfg, name, NULL, &ice_st_cb, &ice_st); 111 status = pj_ice_st_create(stun_cfg, name, comp_cnt, NULL, 112 &ice_st_cb, &ice_st); 114 113 if (status != PJ_SUCCESS) 115 114 return status; 116 115 117 /* Add components */118 for (i=0; i<comp_cnt; ++i) {119 status = pj_ice_st_add_comp(ice_st, i+1);120 if (status != PJ_SUCCESS)121 goto on_error;122 }123 116 124 117 /* Create transport instance and attach to ICE */ … … 136 129 137 130 return PJ_SUCCESS; 138 139 on_error:140 pj_ice_st_destroy(ice_st);141 return status;142 131 } 143 132 … … 158 147 159 148 160 PJ_DECL(pj_ice_st*) pjmedia_ice_get_ice_st(pjmedia_transport *tp) 149 PJ_DEF(pj_status_t) pjmedia_ice_start_init( pjmedia_transport *tp, 150 unsigned options, 151 const pj_sockaddr_in *start_addr, 152 const pj_sockaddr_in *stun_srv, 153 const pj_sockaddr_in *turn_srv) 154 { 155 struct transport_ice *tp_ice = (struct transport_ice*)tp; 156 unsigned comp_id; 157 pj_status_t status; 158 159 status = pj_ice_st_set_stun_srv(tp_ice->ice_st, stun_srv, turn_srv); 160 if (status != PJ_SUCCESS) 161 return status; 162 163 status = pj_ice_st_create_comp(tp_ice->ice_st, 1, options, start_addr, 164 &comp_id); 165 if (status != PJ_SUCCESS) 166 return status; 167 168 if (tp_ice->ice_st->comp_cnt > 1) { 169 pj_sockaddr_in addr; 170 171 pj_memcpy(&addr, &tp_ice->ice_st->comp[0]->local_addr.ipv4, 172 sizeof(pj_sockaddr_in)); 173 if (start_addr) 174 addr.sin_addr.s_addr = start_addr->sin_addr.s_addr; 175 else 176 addr.sin_addr.s_addr = 0; 177 178 addr.sin_port = (pj_uint16_t)(pj_ntohs(addr.sin_port)+1); 179 status = pj_ice_st_create_comp(tp_ice->ice_st, 2, options, 180 &addr, &comp_id); 181 if (status != PJ_SUCCESS) 182 return status; 183 } 184 return status; 185 } 186 187 188 PJ_DEF(pj_status_t) pjmedia_ice_get_init_status(pjmedia_transport *tp) 189 { 190 struct transport_ice *tp_ice = (struct transport_ice*)tp; 191 return pj_ice_st_get_comps_status(tp_ice->ice_st); 192 } 193 194 195 PJ_DEF(pj_status_t) pjmedia_ice_get_comp( pjmedia_transport *tp, 196 unsigned comp_id, 197 pj_ice_st_comp *comp) 198 { 199 struct transport_ice *tp_ice = (struct transport_ice*)tp; 200 PJ_ASSERT_RETURN(tp && comp_id && comp_id <= tp_ice->ice_st->comp_cnt && 201 comp, PJ_EINVAL); 202 203 pj_memcpy(comp, tp_ice->ice_st->comp[comp_id-1], sizeof(pj_ice_st_comp)); 204 return PJ_SUCCESS; 205 } 206 207 PJ_DEF(pj_ice_st*) pjmedia_ice_get_ice_st(pjmedia_transport *tp) 161 208 { 162 209 struct transport_ice *tp_ice = (struct transport_ice*)tp; … … 416 463 { 417 464 struct transport_ice *tp_ice = (struct transport_ice*)tp; 418 int rel_idx = -1, srflx_idx = -1, host_idx = -1, idx = -1;419 unsigned i;465 pj_ice_st *ice_st = tp_ice->ice_st; 466 pj_ice_st_comp *comp; 420 467 421 468 pj_bzero(info, sizeof(*info)); 422 469 info->rtp_sock = info->rtcp_sock = PJ_INVALID_SOCKET; 423 470 424 for (i=0; i<tp_ice->ice_st->itf_cnt; ++i) { 425 pj_ice_st_interface *itf = tp_ice->ice_st->itfs[i]; 426 427 if (itf->type == PJ_ICE_CAND_TYPE_HOST && host_idx == -1) 428 host_idx = i; 429 else if (itf->type == PJ_ICE_CAND_TYPE_RELAYED && rel_idx == -1) 430 rel_idx = i; 431 else if (itf->type == PJ_ICE_CAND_TYPE_SRFLX && srflx_idx == -1) 432 srflx_idx = i; 433 } 434 435 if (idx == -1 && srflx_idx != -1) 436 idx = srflx_idx; 437 else if (idx == -1 && rel_idx != -1) 438 idx = rel_idx; 439 else if (idx == -1 && host_idx != -1) 440 idx = host_idx; 441 442 PJ_ASSERT_RETURN(idx != -1, PJ_EBUG); 443 444 pj_memcpy(&info->rtp_addr_name, &tp_ice->ice_st->itfs[idx]->addr, 471 /* Retrieve address of default candidate for component 1 (RTP) */ 472 comp = ice_st->comp[0]; 473 pj_assert(comp->default_cand >= 0); 474 info->rtp_sock = comp->sock; 475 pj_memcpy(&info->rtp_addr_name, 476 &comp->cand_list[comp->default_cand].addr, 445 477 sizeof(pj_sockaddr_in)); 478 479 /* Retrieve address of default candidate for component 12(RTCP) */ 480 if (ice_st->comp_cnt > 1) { 481 comp = ice_st->comp[1]; 482 pj_assert(comp->default_cand >= 0); 483 info->rtp_sock = comp->sock; 484 pj_memcpy(&info->rtp_addr_name, 485 &comp->cand_list[comp->default_cand].addr, 486 sizeof(pj_sockaddr_in)); 487 } 488 446 489 447 490 return PJ_SUCCESS; … … 492 535 { 493 536 struct transport_ice *tp_ice = (struct transport_ice*)tp; 494 if (tp_ice->ice_st->ice) { 495 return pj_ice_st_send_data(tp_ice->ice_st, 1, pkt, size); 496 } else { 497 return pj_ice_st_sendto(tp_ice->ice_st, 1, 0, 498 pkt, size, &tp_ice->remote_rtp, 499 sizeof(pj_sockaddr_in)); 500 } 537 return pj_ice_st_sendto(tp_ice->ice_st, 1, 538 pkt, size, &tp_ice->remote_rtp, 539 sizeof(pj_sockaddr_in)); 501 540 } 502 541 … … 506 545 pj_size_t size) 507 546 { 508 #if 0 509 struct transport_ice *tp_ice = (struct transport_ice*)tp; 510 return pj_ice_st_send_data(tp_ice->ice_st, 1, pkt, size); 511 #else 512 PJ_TODO(SUPPORT_RTCP); 513 PJ_UNUSED_ARG(tp); 514 PJ_UNUSED_ARG(pkt); 515 PJ_UNUSED_ARG(size); 516 return PJ_SUCCESS; 517 #endif 518 } 519 520 521 static void ice_on_rx_data(pj_ice_st *ice_st, 522 unsigned comp_id, unsigned cand_id, 547 struct transport_ice *tp_ice = (struct transport_ice*)tp; 548 if (tp_ice->ice_st->comp_cnt > 1) { 549 return pj_ice_st_sendto(tp_ice->ice_st, 2, 550 pkt, size, &tp_ice->remote_rtp, 551 sizeof(pj_sockaddr_in)); 552 } else { 553 return PJ_SUCCESS; 554 } 555 } 556 557 558 static void ice_on_rx_data(pj_ice_st *ice_st, unsigned comp_id, 523 559 void *pkt, pj_size_t size, 524 560 const pj_sockaddr_t *src_addr, … … 532 568 (*tp_ice->rtcp_cb)(tp_ice->stream, pkt, size); 533 569 534 PJ_UNUSED_ARG(cand_id);535 570 PJ_UNUSED_ARG(src_addr); 536 571 PJ_UNUSED_ARG(src_addr_len); 572 573 PJ_TODO(SWITCH_SOURCE_ADDRESS); 537 574 } 538 575
Note: See TracChangeset
for help on using the changeset viewer.