Changeset 1879 for pjproject/trunk/pjnath/src/pjturn-srv/allocation.c
- Timestamp:
- Mar 20, 2008 4:32:06 PM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
pjproject/trunk/pjnath/src/pjturn-srv/allocation.c
r1877 r1879 669 669 if (status != PJ_SUCCESS) { 670 670 /* Unable to allocate port */ 671 PJ_LOG(4,(THIS_FILE, " bind() failed: err %d",671 PJ_LOG(4,(THIS_FILE, "Unable to allocate relay, giving up: err %d", 672 672 status)); 673 673 pj_sock_close(relay->tp.sock); … … 689 689 pj_sockaddr_copy_addr(&relay->hkey.addr, &alloc->listener->addr); 690 690 } 691 if (!pj_sockaddr_has_addr(&relay->hkey.addr)) { 692 pj_sockaddr tmp_addr; 693 pj_gethostip(af, &tmp_addr); 694 pj_sockaddr_copy_addr(&relay->hkey.addr, &tmp_addr); 695 } 691 696 692 697 /* Init ioqueue */ … … 752 757 } 753 758 754 /* Add LIFETIME. */ 755 pj_stun_msg_add_uint_attr(tdata->pool, tdata->msg, 756 PJ_STUN_ATTR_LIFETIME, interval); 757 758 /* Add BANDWIDTH */ 759 pj_stun_msg_add_uint_attr(tdata->pool, tdata->msg, 760 PJ_STUN_ATTR_BANDWIDTH, 761 alloc->bandwidth); 759 /* Add LIFETIME if this is not ChannelBind. */ 760 if (PJ_STUN_GET_METHOD(tdata->msg->hdr.type)!=PJ_STUN_CHANNEL_BIND_METHOD){ 761 pj_stun_msg_add_uint_attr(tdata->pool, tdata->msg, 762 PJ_STUN_ATTR_LIFETIME, interval); 763 764 /* Add BANDWIDTH if lifetime is not zero */ 765 if (interval != 0) { 766 pj_stun_msg_add_uint_attr(tdata->pool, tdata->msg, 767 PJ_STUN_ATTR_BANDWIDTH, 768 alloc->bandwidth); 769 } 770 } 762 771 763 772 status = pj_stun_session_send_msg(alloc->sess, PJ_TRUE, … … 774 783 /* Create new permission */ 775 784 static pj_turn_permission *create_permission(pj_turn_allocation *alloc, 776 const pj_sockaddr_t *peer_addr,777 unsigned addr_len)785 const pj_sockaddr_t *peer_addr, 786 unsigned addr_len) 778 787 { 779 788 pj_turn_permission *perm; … … 795 804 perm->expiry.sec += PJ_TURN_PERM_TIMEOUT; 796 805 806 /* Register to hash table */ 807 pj_hash_set(alloc->pool, alloc->peer_table, &perm->hkey.peer_addr, 808 pj_sockaddr_get_len(&perm->hkey.peer_addr), 0, perm); 809 797 810 return perm; 798 811 } … … 805 818 806 819 pj_gettimeofday(&now); 807 if (PJ_TIME_VAL_ LT(perm->expiry, now)) {820 if (PJ_TIME_VAL_GT(perm->expiry, now)) { 808 821 /* Permission has not expired */ 809 822 return perm; … … 811 824 812 825 /* Remove from permission hash table */ 813 pj_hash_set(NULL, alloc->peer_table, &perm->hkey , sizeof(perm->hkey),814 826 pj_hash_set(NULL, alloc->peer_table, &perm->hkey.peer_addr, 827 pj_sockaddr_get_len(&perm->hkey.peer_addr), 0, NULL); 815 828 816 829 /* Remove from channel hash table, if assigned a channel number */ … … 829 842 unsigned addr_len) 830 843 { 831 pj_turn_permission_key key;832 844 pj_turn_permission *perm; 833 845 834 pj_bzero(&key, sizeof(key));835 pj_memcpy(&key, peer_addr, addr_len);836 837 846 /* Lookup in peer hash table */ 838 perm = (pj_turn_permission*) pj_hash_get(alloc->peer_table, &key,839 sizeof(key), NULL);840 return check_permission_expiry(perm);847 perm = (pj_turn_permission*) pj_hash_get(alloc->peer_table, peer_addr, 848 addr_len, NULL); 849 return perm ? check_permission_expiry(perm) : NULL; 841 850 } 842 851 … … 850 859 851 860 /* Lookup in peer hash table */ 852 perm = (pj_turn_permission*) pj_hash_get(alloc-> peer_table, &chnum16,861 perm = (pj_turn_permission*) pj_hash_get(alloc->ch_table, &chnum16, 853 862 sizeof(chnum16), NULL); 854 return check_permission_expiry(perm);863 return perm ? check_permission_expiry(perm) : NULL; 855 864 } 856 865 … … 931 940 /* Discard */ 932 941 PJ_LOG(4,(alloc->obj_name, 933 "ChannelData from %s discarded: not found",934 alloc->info ));942 "ChannelData from %s discarded: ch#0x%x not found", 943 alloc->info, pj_ntohs(cd->ch_number))); 935 944 goto on_return; 936 945 } … … 992 1001 993 1002 /* Copy data */ 994 pj_memcpy(rel->tp. rx_pkt+sizeof(pj_turn_channel_data), pkt, len);1003 pj_memcpy(rel->tp.tx_pkt+sizeof(pj_turn_channel_data), pkt, len); 995 1004 996 1005 /* Send to client */ … … 1010 1019 return; 1011 1020 } 1021 1022 pj_stun_msg_add_sockaddr_attr(tdata->pool, tdata->msg, 1023 PJ_STUN_ATTR_PEER_ADDR, PJ_TRUE, 1024 src_addr, pj_sockaddr_get_len(src_addr)); 1025 pj_stun_msg_add_binary_attr(tdata->pool, tdata->msg, 1026 PJ_STUN_ATTR_DATA, 1027 (const pj_uint8_t*)pkt, len); 1028 1029 pj_stun_session_send_msg(alloc->sess, PJ_FALSE, 1030 &alloc->hkey.clt_addr, 1031 pj_sockaddr_get_len(&alloc->hkey.clt_addr), 1032 tdata); 1012 1033 } 1013 1034 } … … 1187 1208 refresh_permission(p1); 1188 1209 1210 /* Send response */ 1211 send_reply_ok(alloc, rdata); 1212 1189 1213 /* Done */ 1190 1214 return PJ_SUCCESS; … … 1212 1236 /* Assign channel number to permission */ 1213 1237 p2->channel = PJ_STUN_GET_CH_NB(ch_attr->value); 1238 1239 /* Register to hash table */ 1240 pj_assert(sizeof(p2->channel==2)); 1241 pj_hash_set(alloc->pool, alloc->ch_table, &p2->channel, 1242 sizeof(p2->channel), 0, p2); 1214 1243 1215 1244 /* Update */
Note: See TracChangeset
for help on using the changeset viewer.