]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-9775: Fixed some bugs, unit test now successfully sends, processes, responds,...
authorShane Bryldt <astaelan@gmail.com>
Fri, 2 Dec 2016 22:42:39 +0000 (22:42 +0000)
committerMike Jerris <mike@jerris.com>
Wed, 25 Jan 2017 20:59:34 +0000 (14:59 -0600)
libs/libks/src/dht/ks_dht.c
libs/libks/src/dht/ks_dht.h
libs/libks/src/dht/ks_dht_message.c
libs/libks/src/dht/ks_dht_transaction.c
libs/libks/test/testdht2.c

index 18f0d5e9961f6e1c0abc8a120592a0e884d774ec..c82b1c49f17b8b74ccaad326f982d2c45567a58a 100644 (file)
@@ -90,7 +90,7 @@ KS_DECLARE(ks_status_t) ks_dht2_init(ks_dht2_t *dht, const ks_dht2_nodeid_raw_t
        
        dht->recv_buffer_length = 0;
 
-       dht->transactionid_next = rand() % 0xFFFF;
+       dht->transactionid_next = 1; //rand();
        ks_hash_create(&dht->transactions_hash, KS_HASH_MODE_INT, KS_HASH_FLAG_RWLOCK, dht->pool);
        
        return KS_STATUS_SUCCESS;
@@ -471,8 +471,8 @@ KS_DECLARE(ks_status_t) ks_dht2_process_response(ks_dht2_t *dht, ks_sockaddr_t *
 {
        struct bencode *r;
        ks_dht2_transaction_t *transaction;
+       uint32_t *tid;
        uint32_t transactionid;
-       uint16_t *tid;
        ks_status_t ret = KS_STATUS_FAIL;
 
        ks_assert(dht);
@@ -489,8 +489,8 @@ KS_DECLARE(ks_status_t) ks_dht2_process_response(ks_dht2_t *dht, ks_sockaddr_t *
 
        message->args = r;
 
-       tid = (uint16_t *)message->transactionid;
-       transactionid = ntohs(*tid);
+       tid = (uint32_t *)message->transactionid;
+       transactionid = ntohl(*tid);
 
        transaction = ks_hash_search(dht->transactions_hash, (void *)&transactionid, KS_READLOCKED);
        ks_hash_read_unlock(dht->transactions_hash);
@@ -541,7 +541,6 @@ KS_DECLARE(ks_status_t) ks_dht2_process_query_ping(ks_dht2_t *dht, ks_sockaddr_t
                return KS_STATUS_FAIL;
        }
 
-       //ks_log(KS_LOG_DEBUG, "Message query ping id is '%s'\n", id->id);
        ks_log(KS_LOG_DEBUG, "Message query ping is valid\n");
 
        ret = ks_dht2_send_response_ping(dht, raddr, message->transactionid, message->transactionid_length);
@@ -560,6 +559,8 @@ KS_DECLARE(ks_status_t) ks_dht2_process_response_ping(ks_dht2_t *dht, ks_sockadd
        ks_assert(raddr);
        ks_assert(message);
 
+       ks_log(KS_LOG_DEBUG, "Message response ping is reached\n");
+
        return KS_STATUS_SUCCESS;
 }
 
@@ -600,15 +601,14 @@ KS_DECLARE(ks_status_t) ks_dht2_send_query_ping(ks_dht2_t *dht, ks_sockaddr_t *r
                goto done;
        }
 
-       // @todo transaction expiration and raddr
-
-       // @todo transactions_hash mutex?
-       ks_hash_insert(dht->transactions_hash, (void *)&transactionid, transaction);
-
+       // @todo transaction expiration and raddr for validation
+       
+       ks_hash_insert(dht->transactions_hash, (void *)&transaction->transactionid, transaction);
+       
        // @note a joins response.data and will be freed with it
        ben_dict_set(a, ben_blob("id", 2), ben_blob(dht->nodeid.id, KS_DHT_NODEID_LENGTH));
 
-       ks_log(KS_LOG_DEBUG, "Sending message query ping\n");
+       ks_log(KS_LOG_DEBUG, "Sending message query ping with transaction id %d\n", transactionid);
        ret = ks_dht2_send(dht, raddr, &query);
 
  done:
index 7629d2da3bc11976ad349af9c0b7066afa5a7ade..b6ed56c3ae502af46ce2ae5186fda0a603cefe7a 100644 (file)
@@ -54,7 +54,7 @@ struct ks_dht2_endpoint_s {
 
 struct ks_dht2_transaction_s {
        ks_pool_t *pool;
-       uint16_t transactionid;
+       uint32_t transactionid;
        ks_dht2_message_callback_t callback;
        // @todo expiration data
 };
@@ -83,7 +83,7 @@ struct ks_dht2_s {
        uint8_t recv_buffer[KS_DHT_RECV_BUFFER_SIZE];
        ks_size_t recv_buffer_length;
 
-       uint16_t transactionid_next;
+       uint32_t transactionid_next;
        ks_hash_t *transactions_hash;
 };
 
@@ -130,7 +130,7 @@ KS_DECLARE(ks_status_t) ks_dht2_message_deinit(ks_dht2_message_t *message);
 KS_DECLARE(ks_status_t) ks_dht2_message_parse(ks_dht2_message_t *message, const uint8_t *buffer, ks_size_t buffer_length);
 
 KS_DECLARE(ks_status_t) ks_dht2_message_query(ks_dht2_message_t *message,
-                                                                                         uint16_t transactionid,
+                                                                                         uint32_t transactionid,
                                                                                          const char *query,
                                                                                          struct bencode **args);
 KS_DECLARE(ks_status_t) ks_dht2_message_response(ks_dht2_message_t *message,
@@ -150,7 +150,7 @@ KS_DECLARE(ks_status_t) ks_dht2_transaction_prealloc(ks_dht2_transaction_t *tras
 KS_DECLARE(ks_status_t) ks_dht2_transaction_free(ks_dht2_transaction_t *transaction);
 
 KS_DECLARE(ks_status_t) ks_dht2_transaction_init(ks_dht2_transaction_t *transaction,
-                                                                                                uint16_t transactionid,
+                                                                                                uint32_t transactionid,
                                                                                                 ks_dht2_message_callback_t callback);
 KS_DECLARE(ks_status_t) ks_dht2_transaction_deinit(ks_dht2_transaction_t *transaction);
                                                                                                                                                                                                                                                                                                
index 921038b87b61ce15cefc5acd15c80c15035af174..a84eb60e770df0c60cd32a09010ff3880d4dc870 100644 (file)
@@ -153,19 +153,19 @@ KS_DECLARE(ks_status_t) ks_dht2_message_parse(ks_dht2_message_t *message, const
  *
  */
 KS_DECLARE(ks_status_t) ks_dht2_message_query(ks_dht2_message_t *message,
-                                                                                         uint16_t transactionid,
+                                                                                         uint32_t transactionid,
                                                                                          const char *query,
                                                                                          struct bencode **args)
 {
        struct bencode *a;
-       uint16_t tid;
-       
+       uint32_t tid;
+
        ks_assert(message);
        ks_assert(query);
 
-       tid = htons(transactionid);
+       tid = htonl(transactionid);
        
-    ben_dict_set(message->data, ben_blob("t", 1), ben_blob((uint8_t *)&tid, 2));
+    ben_dict_set(message->data, ben_blob("t", 1), ben_blob((uint8_t *)&tid, sizeof(uint32_t)));
        ben_dict_set(message->data, ben_blob("y", 1), ben_blob("q", 1));
        ben_dict_set(message->data, ben_blob("q", 1), ben_blob(query, strlen(query)));
 
index 4946e1ceecdf004c58f75665f38d8e27088c493e..9cfe88343387204196f8cfb49b84512bc11f64f0 100644 (file)
@@ -48,7 +48,7 @@ KS_DECLARE(ks_status_t) ks_dht2_transaction_free(ks_dht2_transaction_t *transact
  *
  */
 KS_DECLARE(ks_status_t) ks_dht2_transaction_init(ks_dht2_transaction_t *transaction,
-                                                                                                uint16_t transactionid,
+                                                                                                uint32_t transactionid,
                                                                                                 ks_dht2_message_callback_t callback)
 {
        ks_assert(transaction);
index d2dfbbd8a67cd1ecfa806849822f5280b8e37659..482449c6895010b9a3f7f6e9fb55587aaa3cfa29 100644 (file)
@@ -98,16 +98,22 @@ int main() {
   ok(err == KS_STATUS_SUCCESS);
 
 
-  buflen = strlen(TEST_DHT1_PROCESS_QUERY_PING_BUFFER);
-  memcpy(dht1->recv_buffer, TEST_DHT1_PROCESS_QUERY_PING_BUFFER, buflen);
-  dht1->recv_buffer_length = buflen;
+  //buflen = strlen(TEST_DHT1_PROCESS_QUERY_PING_BUFFER);
+  //memcpy(dht1->recv_buffer, TEST_DHT1_PROCESS_QUERY_PING_BUFFER, buflen);
+  //dht1->recv_buffer_length = buflen;
 
-  err = ks_dht2_process(dht1, &raddr);
+  //err = ks_dht2_process(dht1, &raddr);
+  //ok(err == KS_STATUS_SUCCESS);
+  
+  err = ks_dht2_send_query_ping(dht1, &raddr);
   ok(err == KS_STATUS_SUCCESS);
 
   err = ks_dht2_pulse(&dht2, 1000);
   ok(err == KS_STATUS_SUCCESS);
 
+  err = ks_dht2_pulse(dht1, 1000);
+  ok(err == KS_STATUS_SUCCESS);
+
   diag("Cleanup\n");
   /* Cleanup and shutdown */