- added check against statistics
[oweals/gnunet.git] / src / gns / gns_api.c
index bd77f378e2dcfe83d484ef7179924b3f1d310915..4b7d6b9f8a7e6cd742f541da1070e6ece3f5aafe 100644 (file)
@@ -342,9 +342,8 @@ transmit_pending (void *cls, size_t size, void *buf)
  * Process a given reply that might match the given
  * request.
  *
- * @param cls the 'struct GNUNET_GNS_ClientResultMessage'
- * @param key query of the request
- * @param value the 'struct GNUNET_GNS_LookupHandle' of a request matching the same key
+ * @param qe a queue entry
+ * @param msg the shorten msg received
  */
 static void
 process_shorten_reply (struct GNUNET_GNS_QueueEntry *qe,
@@ -362,6 +361,7 @@ process_shorten_reply (struct GNUNET_GNS_QueueEntry *qe,
   {
     GNUNET_break (0);
     force_reconnect (h);
+    GNUNET_free(qe);
     return;
   }
   
@@ -372,6 +372,7 @@ process_shorten_reply (struct GNUNET_GNS_QueueEntry *qe,
   GNUNET_CLIENT_receive (h->client, &process_message, h,
                          GNUNET_TIME_UNIT_FOREVER_REL);
   qe->shorten_proc(qe->proc_cls, short_name);
+  GNUNET_free(qe);
 
 }
 
@@ -397,6 +398,7 @@ process_get_auth_reply (struct GNUNET_GNS_QueueEntry *qe,
   if (ntohs (((struct GNUNET_MessageHeader*)msg)->size) <
       sizeof (struct GNUNET_GNS_ClientGetAuthResultMessage))
   {
+    GNUNET_free(qe);
     GNUNET_break (0);
     force_reconnect (h);
     return;
@@ -409,16 +411,14 @@ process_get_auth_reply (struct GNUNET_GNS_QueueEntry *qe,
   GNUNET_CLIENT_receive (h->client, &process_message, h,
                          GNUNET_TIME_UNIT_FOREVER_REL);
   qe->auth_proc(qe->proc_cls, auth_name);
+  GNUNET_free(qe);
 
 }
 /**
  * Process a given reply to the lookup request
  *
- * @param cls the 'struct GNUNET_GNS_ClientResultMessage'
- * @param key query of the request
- * @param value the 'struct GNUNET_GNS_LookupHandle' of a request matching the same key
- * @return GNUNET_YES to continue to iterate over all results,
- *         GNUNET_NO if the reply is malformed
+ * @param qe a queue entry
+ * @param msg the lookup message received
  */
 static void
 process_lookup_reply (struct GNUNET_GNS_QueueEntry *qe,
@@ -433,6 +433,7 @@ process_lookup_reply (struct GNUNET_GNS_QueueEntry *qe,
 
   if (len < sizeof (struct GNUNET_GNS_ClientLookupResultMessage))
   {
+    GNUNET_free(qe);
     GNUNET_break (0);
     force_reconnect (h);
     return;
@@ -440,17 +441,26 @@ process_lookup_reply (struct GNUNET_GNS_QueueEntry *qe,
 
   len -= sizeof(struct GNUNET_GNS_ClientLookupResultMessage);
 
-  GNUNET_NAMESTORE_records_deserialize (len, (char*)&msg[1],
-                                        rd_count,
-                                        rd);
-  
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "Received lookup reply from GNS service (count=%d)\n",
-              ntohl(msg->rd_count));
-  
   GNUNET_CLIENT_receive (h->client, &process_message, h,
                          GNUNET_TIME_UNIT_FOREVER_REL);
-  qe->lookup_proc(qe->proc_cls, rd_count, rd);
+  if (GNUNET_SYSERR == GNUNET_NAMESTORE_records_deserialize (len,
+                                                             (char*)&msg[1],
+                                                             rd_count,
+                                                             rd))
+  {
+    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+                "Failed to serialize lookup reply from GNS service!\n");
+    qe->lookup_proc(qe->proc_cls, 0, NULL);
+  }
+  else
+  {
+  
+    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+                "Received lookup reply from GNS service (count=%d)\n",
+                ntohl(msg->rd_count));
+    qe->lookup_proc(qe->proc_cls, rd_count, rd);
+  }
+  GNUNET_free(qe);
 }
 
 /**
@@ -505,7 +515,8 @@ process_message (void *cls, const struct GNUNET_MessageHeader *msg)
     }
     if (qe)
       process_lookup_reply(qe, lookup_msg);
-
+    
+    return;
 
   }
   else if (type == GNUNET_MESSAGE_TYPE_GNS_SHORTEN_RESULT)
@@ -532,6 +543,7 @@ process_message (void *cls, const struct GNUNET_MessageHeader *msg)
     }
     if (qe)
       process_shorten_reply(qe, shorten_msg);
+    return;
   }
   else if (type == GNUNET_MESSAGE_TYPE_GNS_GET_AUTH_RESULT)
   {
@@ -557,6 +569,7 @@ process_message (void *cls, const struct GNUNET_MessageHeader *msg)
     }
     if (qe)
       process_get_auth_reply(qe, get_auth_msg);
+    return;
   }
 
 
@@ -570,7 +583,6 @@ process_message (void *cls, const struct GNUNET_MessageHeader *msg)
  * Initialize the connection with the GNS service.
  *
  * @param cfg configuration to use
- * @param ht_len size of the internal hash table to use for parallel requests
  * @return handle to the GNS service, or NULL on error
  */
 struct GNUNET_GNS_Handle *
@@ -596,15 +608,15 @@ GNUNET_GNS_connect (const struct GNUNET_CONFIGURATION_Handle *cfg)
  * @param handle handle of the GNS connection to stop
  */
 void
-GNUNET_GNS_disconnect (struct GNUNET_GNS_Handle *h)
+GNUNET_GNS_disconnect (struct GNUNET_GNS_Handle *handle)
 {
-  GNUNET_CLIENT_disconnect (h->client, GNUNET_NO);
-  if (GNUNET_SCHEDULER_NO_TASK != h->reconnect_task)
+  GNUNET_CLIENT_disconnect (handle->client, GNUNET_NO);
+  if (GNUNET_SCHEDULER_NO_TASK != handle->reconnect_task)
   {
-    GNUNET_SCHEDULER_cancel (h->reconnect_task);
-    h->reconnect_task = GNUNET_SCHEDULER_NO_TASK;
+    GNUNET_SCHEDULER_cancel (handle->reconnect_task);
+    handle->reconnect_task = GNUNET_SCHEDULER_NO_TASK;
   }
-  //GNUNET_free(h);
+  GNUNET_free(handle);
   /* disco from GNS */
 }
 
@@ -627,9 +639,10 @@ get_request_id (struct GNUNET_GNS_Handle *h)
  *
  * @param handle handle to the GNS service
  * @param name the name to look up
- * @param iter function to call on each result
- * @param iter_cls closure for iter
- * @return handle to stop the async get
+ * @param type the record type to look up
+ * @param proc processor to call on result
+ * @param proc_cls closure for processor
+ * @return handle to the get
  */
 struct GNUNET_GNS_QueueEntry *
 GNUNET_GNS_lookup (struct GNUNET_GNS_Handle *handle,
@@ -673,7 +686,7 @@ GNUNET_GNS_lookup (struct GNUNET_GNS_Handle *handle,
 
   memcpy(&lookup_msg[1], name, strlen(name));
 
-  GNUNET_CONTAINER_DLL_insert (handle->pending_head, handle->pending_tail,
+  GNUNET_CONTAINER_DLL_insert_tail (handle->pending_head, handle->pending_tail,
                                pending);
   
   process_pending_messages (handle);
@@ -730,7 +743,7 @@ GNUNET_GNS_shorten (struct GNUNET_GNS_Handle *handle,
 
   memcpy(&shorten_msg[1], name, strlen(name));
 
-  GNUNET_CONTAINER_DLL_insert (handle->pending_head, handle->pending_tail,
+  GNUNET_CONTAINER_DLL_insert_tail (handle->pending_head, handle->pending_tail,
                                pending);
   
   process_pending_messages (handle);
@@ -787,7 +800,7 @@ GNUNET_GNS_get_authority (struct GNUNET_GNS_Handle *handle,
 
   memcpy(&get_auth_msg[1], name, strlen(name));
 
-  GNUNET_CONTAINER_DLL_insert (handle->pending_head, handle->pending_tail,
+  GNUNET_CONTAINER_DLL_insert_tail (handle->pending_head, handle->pending_tail,
                                pending);
   
   process_pending_messages (handle);