gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r30089 - gnunet/src/scalarproduct


From: gnunet
Subject: [GNUnet-SVN] r30089 - gnunet/src/scalarproduct
Date: Thu, 10 Oct 2013 15:07:44 +0200

Author: cfuchs
Date: 2013-10-10 15:07:44 +0200 (Thu, 10 Oct 2013)
New Revision: 30089

Modified:
   gnunet/src/scalarproduct/gnunet-service-scalarproduct.c
Log:
simplified SP cleanup a bit
added a logics fix



Modified: gnunet/src/scalarproduct/gnunet-service-scalarproduct.c
===================================================================
--- gnunet/src/scalarproduct/gnunet-service-scalarproduct.c     2013-10-10 
12:46:15 UTC (rev 30088)
+++ gnunet/src/scalarproduct/gnunet-service-scalarproduct.c     2013-10-10 
13:07:44 UTC (rev 30089)
@@ -693,25 +693,25 @@
 }
 
 static void
-free_session (struct ServiceSession * session)
+free_session_variables (struct ServiceSession * session)
 {
   unsigned int i;
 
   if (session->a){
     for (i = 0; i < session->used; i++)
       if (session->a[i]) gcry_mpi_release (session->a[i]);
-    GNUNET_free_non_null (session->a);
+    GNUNET_free (session->a);
   }
   GNUNET_free_non_null (session->mask);
   if (session->r){
     for (i = 0; i < session->used; i++)
       if (session->r[i]) gcry_mpi_release (session->r[i]);
-    GNUNET_free_non_null(session->r);
+    GNUNET_free(session->r);
   }
   if (session->r_prime){
     for (i = 0; i < session->used; i++)
       if (session->r_prime[i]) gcry_mpi_release (session->r_prime[i]);
-    GNUNET_free_non_null(session->r_prime);
+    GNUNET_free(session->r_prime);
   }
   if (session->s)
     gcry_mpi_release (session->s);
@@ -724,7 +724,6 @@
     gcry_sexp_release (session->remote_pubkey);
 
   GNUNET_free_non_null (session->vector);
-  GNUNET_free (session);
 }
 ///////////////////////////////////////////////////////////////////////////////
 //                      Event and Message Handlers
@@ -774,7 +773,8 @@
     GNUNET_SERVER_notify_transmit_ready_cancel 
(session->client_transmit_handle);
     session->client_transmit_handle = NULL;
   }
-  free_session (session);
+  free_session_variables (session);
+  GNUNET_free (session);
 }
 
 /**
@@ -1493,7 +1493,8 @@
   else if (NULL != session) {
     // old session is already completed, clean it up
     GNUNET_CONTAINER_DLL_remove (from_client_head, from_client_tail, session);
-    free_session (session);
+    free_session_variables (session);
+    GNUNET_free (session);
   }
 
   //we need at least a peer and one message id to compare
@@ -1715,7 +1716,8 @@
                                             &session->key,
                                             session->total,
                                             NULL, NULL);
-    free_session (session);
+    free_session_variables (session);
+    GNUNET_free (session);
 
     // the client has to check if it was waiting for a result
     // or if it was a responder, no point in adding more statefulness
@@ -1931,6 +1933,7 @@
   uint32_t contained_elements=0;
   uint32_t msg_length;
   unsigned char * current;
+  gcry_error_t rc;
   int32_t i = -1;
  
   // are we in the correct state?
@@ -1953,19 +1956,15 @@
   }
   current = (unsigned char *) &msg[1];
   if (contained_elements != 0) {
-    gcry_error_t ret = 0;
     // Convert each vector element to MPI_value
     for (i = session->transferred; i < 
session->transferred+contained_elements; i++) {
       size_t read = 0;
-
-      ret = gcry_mpi_scan (&session->a[i],
+      if (0 != (rc = gcry_mpi_scan (&session->a[i],
                            GCRYMPI_FMT_USG,
                            &current[i * PAILLIER_ELEMENT_LENGTH],
                            PAILLIER_ELEMENT_LENGTH,
-                           &read);
-      if (ret) {
-        GNUNET_log (GNUNET_ERROR_TYPE_WARNING, _ ("Could not translate E[a%d] 
to MPI!\n%s/%s\n"),
-                    i, gcry_strsource (ret), gcry_strerror (ret));
+                           &read))) {
+        LOG_GCRY (GNUNET_ERROR_TYPE_DEBUG, "gcry_mpi_scan", rc);
         goto except;
       }
     }
@@ -1978,7 +1977,6 @@
         GNUNET_log (GNUNET_ERROR_TYPE_INFO, _ ("Got session with key %s and a 
matching element set, processing.\n"), GNUNET_h2s (&session->key));
         if (GNUNET_OK != compute_service_response (session, 
session->response)) {
           //something went wrong, remove it again...
-          GNUNET_CONTAINER_DLL_remove (from_service_head, from_service_tail, 
session);
           goto except;
         }
       }
@@ -1999,7 +1997,8 @@
     session->response->client_notification_task =
           GNUNET_SCHEDULER_add_now (&prepare_client_end_notification,
                                     session->response);
-  free_session (session);
+  free_session_variables (session);
+  GNUNET_free (session);
   return GNUNET_SYSERR;
 }
 
@@ -2030,6 +2029,7 @@
   uint32_t element_count;
   uint32_t msg_length;
   unsigned char * current;
+  gcry_error_t rc;
   int32_t i = -1;
   enum SessionState needed_state;
 
@@ -2091,15 +2091,13 @@
   current += mask_length;
 
   //convert the publickey to sexp
-  if (gcry_sexp_new (&session->remote_pubkey, current, pk_length, 1)) {
-    GNUNET_log (GNUNET_ERROR_TYPE_WARNING, _ ("Could not translate remote 
public key to sexpression!\n"));
+  if (0 != (rc = gcry_sexp_new (&session->remote_pubkey, current, pk_length, 
1))) {
+    LOG_GCRY (GNUNET_ERROR_TYPE_DEBUG, "gcry_sexp_new", rc);
     GNUNET_free (session->mask);
     GNUNET_free (session);
     return GNUNET_SYSERR;
   }
-
   current += pk_length;
-
   //check if service queue contains a matching request
   needed_state = CLIENT_RESPONSE_RECEIVED;
   session->response = find_matching_session (from_client_tail,
@@ -2109,25 +2107,20 @@
 
   session->a = GNUNET_malloc (sizeof (gcry_mpi_t) * used_elements);
   session->state = WAITING_FOR_MULTIPART_TRANSMISSION; 
+  GNUNET_CONTAINER_DLL_insert (from_service_head, from_service_tail, session);
   if (contained_elements != 0) {
-    gcry_error_t ret = 0;
     // Convert each vector element to MPI_value
     for (i = 0; i < contained_elements; i++) {
       size_t read = 0;
-
-      ret = gcry_mpi_scan (&session->a[i],
+      if (0 != (rc = gcry_mpi_scan (&session->a[i],
                            GCRYMPI_FMT_USG,
                            &current[i * PAILLIER_ELEMENT_LENGTH],
                            PAILLIER_ELEMENT_LENGTH,
-                           &read);
-      if (ret) {
-        GNUNET_log (GNUNET_ERROR_TYPE_WARNING, _ ("Could not translate E[a%d] 
to MPI!\n%s/%s\n"),
-                    i, gcry_strsource (ret), gcry_strerror (ret));
+                           &read))) {
+        LOG_GCRY (GNUNET_ERROR_TYPE_DEBUG, "gcry_mpi_scan", rc);
         goto invalid_msg;
       }
     }
-    GNUNET_CONTAINER_DLL_insert (from_service_head, from_service_tail, 
session);
-    
     if (contained_elements == used_elements) {
       // single part finished
       session->state = SERVICE_REQUEST_RECEIVED;
@@ -2135,7 +2128,6 @@
         GNUNET_log (GNUNET_ERROR_TYPE_INFO, _ ("Got session with key %s and a 
matching element set, processing.\n"), GNUNET_h2s (&session->key));
         if (GNUNET_OK != compute_service_response (session, 
session->response)) {
           //something went wrong, remove it again...
-          GNUNET_CONTAINER_DLL_remove (from_service_head, from_service_tail, 
session);
           goto invalid_msg;
         }
       }
@@ -2149,13 +2141,15 @@
   return GNUNET_OK;
 invalid_msg:
   GNUNET_break_op (0);
+  if ((NULL != session->next) || (NULL != session->prev) || (from_service_head 
== session))
+    GNUNET_CONTAINER_DLL_remove (from_service_head, from_service_tail, 
session);
   // and notify our client-session that we could not complete the session
   if (session->response)
     // we just found the responder session in this queue
     session->response->client_notification_task =
           GNUNET_SCHEDULER_add_now (&prepare_client_end_notification,
                                     session->response);
-  free_session (session);
+  free_session_variables (session);
   return GNUNET_SYSERR;
 }
 
@@ -2190,8 +2184,7 @@
   // are we in the correct state?
   session = (struct ServiceSession *) * tunnel_ctx;
   if ((ALICE != session->role) || (WAITING_FOR_MULTIPART_TRANSMISSION != 
session->state)) {
-    GNUNET_break_op (0);
-    return GNUNET_OK;
+    goto invalid_msg;
   }
   // shorter than minimum?
   if (ntohs (msg->header.size) <= sizeof (struct 
GNUNET_SCALARPRODUCT_multipart_message)) {
@@ -2210,14 +2203,12 @@
     if (0 != (rc = gcry_mpi_scan (&session->r[i], GCRYMPI_FMT_USG, current,
                                   PAILLIER_ELEMENT_LENGTH, &read))) {
       LOG_GCRY (GNUNET_ERROR_TYPE_DEBUG, "gcry_mpi_scan", rc);
-      GNUNET_break_op (0);
       goto invalid_msg;
     }
     current += PAILLIER_ELEMENT_LENGTH;
     if (0 != (rc = gcry_mpi_scan (&session->r_prime[i], GCRYMPI_FMT_USG, 
current,
                                   PAILLIER_ELEMENT_LENGTH, &read))) {
       LOG_GCRY (GNUNET_ERROR_TYPE_DEBUG, "gcry_mpi_scan", rc);
-      GNUNET_break_op (0);
       goto invalid_msg;
     }
     current += PAILLIER_ELEMENT_LENGTH;
@@ -2231,32 +2222,14 @@
   
 invalid_msg:
   GNUNET_break_op (0);
-  if (session->s)
-    gcry_mpi_release (session->s);
-  if (session->s_prime)
-    gcry_mpi_release (session->s_prime);
-  if (session->r)
-    for (i = 0; session->r && i < session->used; i++)
-      if (session->r[i]) gcry_mpi_release (session->r[i]);
-  if (session->r_prime)
-    for (i = 0; session->r_prime && i < session->used; i++)
-      if (session->r_prime[i]) gcry_mpi_release (session->r_prime[i]);
-  if (session->a)
-    for (i = 0; session->a && i < session->used; i++)
-      if (session->a[i]) gcry_mpi_release (session->a[i]);
-  GNUNET_free_non_null (session->r);
-  GNUNET_free_non_null (session->r_prime);
-  GNUNET_free_non_null (session->a);
-  session->a = NULL;
-  session->s = NULL;
-  session->s_prime = NULL;
-  session->r = NULL;
-  session->r_prime = NULL;
+  free_session_variables (session);
+  session->state = FINALIZED;
   session->tunnel = NULL;
   // send message with product to client
-  session->client_notification_task =
-          GNUNET_SCHEDULER_add_now (&prepare_client_response,
-                                    session);
+  if (ALICE == session->role)
+        session->client_notification_task =
+                GNUNET_SCHEDULER_add_now (&prepare_client_response,
+                                          session);
   // the tunnel has done its job, terminate our connection and the tunnel
   // the peer will be notified that the tunnel was destroyed via 
tunnel_destruction_handler
   // just close the connection, as recommended by Christian
@@ -2351,30 +2324,12 @@
 
 invalid_msg:
   GNUNET_break_op (0);
-  if (session->s)
-    gcry_mpi_release (session->s);
-  if (session->s_prime)
-    gcry_mpi_release (session->s_prime);
-  if (session->r)
-    for (i = 0; session->r && i < session->used; i++)
-      if (session->r[i]) gcry_mpi_release (session->r[i]);
-  if (session->r_prime)
-    for (i = 0; session->r_prime && i < session->used; i++)
-      if (session->r_prime[i]) gcry_mpi_release (session->r_prime[i]);
-  if (session->a)
-    for (i = 0; session->a && i < session->used; i++)
-      if (session->a[i]) gcry_mpi_release (session->a[i]);
-  GNUNET_free_non_null (session->r);
-  GNUNET_free_non_null (session->r_prime);
-  GNUNET_free_non_null (session->a);
-  session->a = NULL;
-  session->s = NULL;
-  session->s_prime = NULL;
-  session->r = NULL;
-  session->r_prime = NULL;
+  free_session_variables (session);
+  session->state = FINALIZED;
   session->tunnel = NULL;
   // send message with product to client
-  session->client_notification_task =
+  if (ALICE == session->role)
+    session->client_notification_task =
           GNUNET_SCHEDULER_add_now (&prepare_client_response,
                                     session);
   // the tunnel has done its job, terminate our connection and the tunnel




reply via email to

[Prev in Thread] Current Thread [Next in Thread]