Changeset 1879 for pjproject/trunk/pjnath/src/pjnath/turn_session.c
- Timestamp:
- Mar 20, 2008 4:32:06 PM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
pjproject/trunk/pjnath/src/pjnath/turn_session.c
r1877 r1879 189 189 sess->ka_interval = PJ_TURN_KEEP_ALIVE_SEC; 190 190 sess->user_data = user_data; 191 sess->next_ch = PJ_TURN_CHANNEL_MIN; 191 192 192 193 /* Copy callback */ … … 326 327 /* Send REFRESH with LIFETIME=0 */ 327 328 can_destroy = PJ_FALSE; 328 se ss->pending_destroy = PJ_TRUE;329 send_refresh(sess, 0); 329 330 break; 330 331 case PJ_TURN_STATE_DEALLOCATING: … … 779 780 pj_stun_msg_add_uint_attr(tdata->pool, tdata->msg, 780 781 PJ_STUN_ATTR_CHANNEL_NUMBER, 781 PJ_STUN_SET_CH_NB( sess->next_ch));782 PJ_STUN_SET_CH_NB(ch_num)); 782 783 783 784 /* Add PEER-ADDRESS attribute */ … … 1024 1025 1025 1026 /* Save relayed address */ 1026 pj_memcpy(&sess->relay_addr, &raddr_attr->sockaddr, sizeof(pj_sockaddr)); 1027 if (raddr_attr) { 1028 /* If we already have relay address, check if the relay address 1029 * in the response matches our relay address. 1030 */ 1031 if (pj_sockaddr_has_addr(&sess->relay_addr)) { 1032 if (pj_sockaddr_cmp(&sess->relay_addr, &raddr_attr->sockaddr)) { 1033 on_session_fail(sess, method, PJNATH_EINSTUNMSG, 1034 pj_cstr(&s, "Error: different RELAY-ADDRESS is" 1035 "returned by server")); 1036 return; 1037 } 1038 } else { 1039 /* Otherwise save the relayed address */ 1040 pj_memcpy(&sess->relay_addr, &raddr_attr->sockaddr, 1041 sizeof(pj_sockaddr)); 1042 } 1043 } 1027 1044 1028 1045 /* Success */ … … 1181 1198 pj_stun_data_attr *data_attr; 1182 1199 1200 PJ_UNUSED_ARG(pkt); 1201 PJ_UNUSED_ARG(pkt_len); 1183 1202 PJ_UNUSED_ARG(src_addr); 1184 1203 PJ_UNUSED_ARG(src_addr_len); … … 1210 1229 /* Notify application */ 1211 1230 if (sess->cb.on_rx_data) { 1212 (*sess->cb.on_rx_data)(sess, pkt, pkt_len,1231 (*sess->cb.on_rx_data)(sess, data_attr->data, data_attr->length, 1213 1232 &peer_attr->sockaddr, 1214 1233 pj_sockaddr_get_len(&peer_attr->sockaddr)); … … 1299 1318 1300 1319 if (bind_channel) { 1320 pj_uint32_t hval = 0; 1301 1321 /* Register by channel number */ 1302 1322 pj_assert(peer->ch_id != PJ_TURN_INVALID_CHANNEL && peer->bound); 1303 pj_assert(pj_hash_get(sess->peer_table, &peer->ch_id, 1304 sizeof(peer->ch_id), NULL)==0); 1305 1306 pj_hash_set(sess->pool, sess->peer_table, &peer->ch_id, 1307 sizeof(peer->ch_id), 0, peer); 1323 1324 if (pj_hash_get(sess->peer_table, &peer->ch_id, 1325 sizeof(peer->ch_id), &hval)==0) { 1326 pj_hash_set(sess->pool, sess->peer_table, &peer->ch_id, 1327 sizeof(peer->ch_id), hval, peer); 1328 } 1308 1329 } 1309 1330 } … … 1406 1427 delay.msec = 0; 1407 1428 1429 sess->timer.id = TIMER_KEEP_ALIVE; 1408 1430 pj_timer_heap_schedule(sess->timer_heap, &sess->timer, &delay); 1409 1431 } … … 1415 1437 pj_lock_release(sess->lock); 1416 1438 do_destroy(sess); 1417 } 1418 } 1419 1439 } else { 1440 pj_assert(!"Unknown timer event"); 1441 pj_lock_release(sess->lock); 1442 } 1443 } 1444
Note: See TracChangeset
for help on using the changeset viewer.