Ignore:
Timestamp:
Mar 20, 2008 4:32:06 PM (14 years ago)
Author:
bennylp
Message:

More ticket #485: client and server self tested

File:
1 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk/pjnath/src/pjturn-srv/allocation.c

    r1877 r1879  
    669669    if (status != PJ_SUCCESS) { 
    670670        /* 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",  
    672672                  status)); 
    673673        pj_sock_close(relay->tp.sock); 
     
    689689        pj_sockaddr_copy_addr(&relay->hkey.addr, &alloc->listener->addr); 
    690690    } 
     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    } 
    691696 
    692697    /* Init ioqueue */ 
     
    752757    } 
    753758 
    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    } 
    762771 
    763772    status = pj_stun_session_send_msg(alloc->sess, PJ_TRUE,  
     
    774783/* Create new permission */ 
    775784static 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) 
    778787{ 
    779788    pj_turn_permission *perm; 
     
    795804    perm->expiry.sec += PJ_TURN_PERM_TIMEOUT; 
    796805 
     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 
    797810    return perm; 
    798811} 
     
    805818 
    806819    pj_gettimeofday(&now); 
    807     if (PJ_TIME_VAL_LT(perm->expiry, now)) { 
     820    if (PJ_TIME_VAL_GT(perm->expiry, now)) { 
    808821        /* Permission has not expired */ 
    809822        return perm; 
     
    811824 
    812825    /* Remove from permission hash table */ 
    813     pj_hash_set(NULL, alloc->peer_table, &perm->hkey, sizeof(perm->hkey), 
    814                 0, NULL); 
     826    pj_hash_set(NULL, alloc->peer_table, &perm->hkey.peer_addr,  
     827                pj_sockaddr_get_len(&perm->hkey.peer_addr), 0, NULL); 
    815828 
    816829    /* Remove from channel hash table, if assigned a channel number */ 
     
    829842                          unsigned addr_len) 
    830843{ 
    831     pj_turn_permission_key key; 
    832844    pj_turn_permission *perm; 
    833845 
    834     pj_bzero(&key, sizeof(key)); 
    835     pj_memcpy(&key, peer_addr, addr_len); 
    836  
    837846    /* 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; 
    841850} 
    842851 
     
    850859 
    851860    /* 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, 
    853862                                            sizeof(chnum16), NULL); 
    854     return check_permission_expiry(perm); 
     863    return perm ? check_permission_expiry(perm) : NULL; 
    855864} 
    856865 
     
    931940            /* Discard */ 
    932941            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))); 
    935944            goto on_return; 
    936945        } 
     
    9921001 
    9931002        /* 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); 
    9951004 
    9961005        /* Send to client */ 
     
    10101019            return; 
    10111020        } 
     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); 
    10121033    } 
    10131034} 
     
    11871208            refresh_permission(p1); 
    11881209 
     1210            /* Send response */ 
     1211            send_reply_ok(alloc, rdata); 
     1212 
    11891213            /* Done */ 
    11901214            return PJ_SUCCESS; 
     
    12121236        /* Assign channel number to permission */ 
    12131237        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); 
    12141243 
    12151244        /* Update */ 
Note: See TracChangeset for help on using the changeset viewer.