aboutsummaryrefslogtreecommitdiff
path: root/src/scalarproduct
diff options
context:
space:
mode:
authorChristian Fuchs <christian.fuchs@cfuchs.net>2013-10-09 14:08:13 +0000
committerChristian Fuchs <christian.fuchs@cfuchs.net>2013-10-09 14:08:13 +0000
commitb3f4f964227220a10639f4484b86f396ca2dceed (patch)
tree7f4c25d185ade91b9f0b2041732dd187779aee7e /src/scalarproduct
parentaddab14231d4babb8e9eabb5ca43328625b2b87b (diff)
downloadgnunet-b3f4f964227220a10639f4484b86f396ca2dceed.tar.gz
gnunet-b3f4f964227220a10639f4484b86f396ca2dceed.zip
extended cleanup function to take care of new variables in session structure
better cleanup for multipart handling
Diffstat (limited to 'src/scalarproduct')
-rw-r--r--src/scalarproduct/gnunet-service-scalarproduct.c87
1 files changed, 52 insertions, 35 deletions
diff --git a/src/scalarproduct/gnunet-service-scalarproduct.c b/src/scalarproduct/gnunet-service-scalarproduct.c
index fbdb58a23..5bf5f1a2b 100644
--- a/src/scalarproduct/gnunet-service-scalarproduct.c
+++ b/src/scalarproduct/gnunet-service-scalarproduct.c
@@ -697,12 +697,26 @@ free_session (struct ServiceSession * session)
697{ 697{
698 unsigned int i; 698 unsigned int i;
699 699
700 if (session->a) { 700 if (session->a){
701 for (i = 0; i < session->used; i++) 701 for (i = 0; i < session->used; i++)
702 gcry_mpi_release (session->a[i]); 702 if (session->a[i]) gcry_mpi_release (session->a[i]);
703 703 GNUNET_free_non_null (session->a);
704 GNUNET_free (session->a); 704 }
705 GNUNET_free_non_null (session->mask);
706 if (session->r){
707 for (i = 0; i < session->used; i++)
708 if (session->r[i]) gcry_mpi_release (session->r[i]);
709 GNUNET_free_non_null(session->r);
710 }
711 if (session->r_prime){
712 for (i = 0; i < session->used; i++)
713 if (session->r_prime[i]) gcry_mpi_release (session->r_prime[i]);
714 GNUNET_free_non_null(session->r_prime);
705 } 715 }
716 if (session->s)
717 gcry_mpi_release (session->s);
718 if (session->s_prime)
719 gcry_mpi_release (session->s_prime);
706 if (session->product) 720 if (session->product)
707 gcry_mpi_release (session->product); 721 gcry_mpi_release (session->product);
708 722
@@ -1978,20 +1992,14 @@ handle_service_request_multipart (void *cls,
1978 1992
1979 return GNUNET_OK; 1993 return GNUNET_OK;
1980except: 1994except:
1981 for (i = 0; i < session->used; i++)
1982 if (session->a[i])
1983 gcry_mpi_release (session->a[i]);
1984 gcry_sexp_release (session->remote_pubkey);
1985 session->remote_pubkey = NULL;
1986 GNUNET_free (session->a);
1987 session->a = NULL;
1988 free_session (session);
1989 // and notify our client-session that we could not complete the session 1995 // and notify our client-session that we could not complete the session
1996 GNUNET_CONTAINER_DLL_remove (from_service_head, from_service_tail, session);
1990 if (session->response) 1997 if (session->response)
1991 // we just found the responder session in this queue 1998 // we just found the responder session in this queue
1992 session->response->client_notification_task = 1999 session->response->client_notification_task =
1993 GNUNET_SCHEDULER_add_now (&prepare_client_end_notification, 2000 GNUNET_SCHEDULER_add_now (&prepare_client_end_notification,
1994 session->response); 2001 session->response);
2002 free_session (session);
1995 return GNUNET_SYSERR; 2003 return GNUNET_SYSERR;
1996} 2004}
1997 2005
@@ -2027,8 +2035,7 @@ handle_service_request (void *cls,
2027 2035
2028 session = (struct ServiceSession *) * tunnel_ctx; 2036 session = (struct ServiceSession *) * tunnel_ctx;
2029 if (WAITING_FOR_SERVICE_REQUEST != session->state) { 2037 if (WAITING_FOR_SERVICE_REQUEST != session->state) {
2030 GNUNET_break_op (0); 2038 goto invalid_msg;
2031 goto except;
2032 } 2039 }
2033 // Check if message was sent by me, which would be bad! 2040 // Check if message was sent by me, which would be bad!
2034 if (!memcmp (&session->peer, &me, sizeof (struct GNUNET_PeerIdentity))) { 2041 if (!memcmp (&session->peer, &me, sizeof (struct GNUNET_PeerIdentity))) {
@@ -2116,7 +2123,7 @@ handle_service_request (void *cls,
2116 if (ret) { 2123 if (ret) {
2117 GNUNET_log (GNUNET_ERROR_TYPE_WARNING, _ ("Could not translate E[a%d] to MPI!\n%s/%s\n"), 2124 GNUNET_log (GNUNET_ERROR_TYPE_WARNING, _ ("Could not translate E[a%d] to MPI!\n%s/%s\n"),
2118 i, gcry_strsource (ret), gcry_strerror (ret)); 2125 i, gcry_strsource (ret), gcry_strerror (ret));
2119 goto except; 2126 goto invalid_msg;
2120 } 2127 }
2121 } 2128 }
2122 GNUNET_CONTAINER_DLL_insert (from_service_head, from_service_tail, session); 2129 GNUNET_CONTAINER_DLL_insert (from_service_head, from_service_tail, session);
@@ -2129,7 +2136,7 @@ handle_service_request (void *cls,
2129 if (GNUNET_OK != compute_service_response (session, session->response)) { 2136 if (GNUNET_OK != compute_service_response (session, session->response)) {
2130 //something went wrong, remove it again... 2137 //something went wrong, remove it again...
2131 GNUNET_CONTAINER_DLL_remove (from_service_head, from_service_tail, session); 2138 GNUNET_CONTAINER_DLL_remove (from_service_head, from_service_tail, session);
2132 goto except; 2139 goto invalid_msg;
2133 } 2140 }
2134 } 2141 }
2135 else 2142 else
@@ -2140,21 +2147,15 @@ handle_service_request (void *cls,
2140 } 2147 }
2141 } 2148 }
2142 return GNUNET_OK; 2149 return GNUNET_OK;
2143except: 2150invalid_msg:
2144 for (i = 0; i < session->used; i++) 2151 GNUNET_break_op (0);
2145 if (session->a[i])
2146 gcry_mpi_release (session->a[i]);
2147 gcry_sexp_release (session->remote_pubkey);
2148 session->remote_pubkey = NULL;
2149 GNUNET_free (session->a);
2150 session->a = NULL;
2151 free_session (session);
2152 // and notify our client-session that we could not complete the session 2152 // and notify our client-session that we could not complete the session
2153 if (session->response) 2153 if (session->response)
2154 // we just found the responder session in this queue 2154 // we just found the responder session in this queue
2155 session->response->client_notification_task = 2155 session->response->client_notification_task =
2156 GNUNET_SCHEDULER_add_now (&prepare_client_end_notification, 2156 GNUNET_SCHEDULER_add_now (&prepare_client_end_notification,
2157 session->response); 2157 session->response);
2158 free_session (session);
2158 return GNUNET_SYSERR; 2159 return GNUNET_SYSERR;
2159} 2160}
2160 2161
@@ -2230,14 +2231,23 @@ handle_service_response_multipart (void *cls,
2230 2231
2231invalid_msg: 2232invalid_msg:
2232 GNUNET_break_op (0); 2233 GNUNET_break_op (0);
2233 gcry_mpi_release (session->s); 2234 if (session->s)
2234 gcry_mpi_release (session->s_prime); 2235 gcry_mpi_release (session->s);
2235 for (i = 0; session->r && i < session->used; i++){ 2236 if (session->s_prime)
2236 if (session->r[i]) gcry_mpi_release (session->r[i]); 2237 gcry_mpi_release (session->s_prime);
2237 if (session->r_prime[i]) gcry_mpi_release (session->r_prime[i]); 2238 if (session->r)
2238 } 2239 for (i = 0; session->r && i < session->used; i++)
2240 if (session->r[i]) gcry_mpi_release (session->r[i]);
2241 if (session->r_prime)
2242 for (i = 0; session->r_prime && i < session->used; i++)
2243 if (session->r_prime[i]) gcry_mpi_release (session->r_prime[i]);
2244 if (session->a)
2245 for (i = 0; session->a && i < session->used; i++)
2246 if (session->a[i]) gcry_mpi_release (session->a[i]);
2239 GNUNET_free_non_null (session->r); 2247 GNUNET_free_non_null (session->r);
2240 GNUNET_free_non_null (session->r_prime); 2248 GNUNET_free_non_null (session->r_prime);
2249 GNUNET_free_non_null (session->a);
2250 session->a = NULL;
2241 session->s = NULL; 2251 session->s = NULL;
2242 session->s_prime = NULL; 2252 session->s_prime = NULL;
2243 session->r = NULL; 2253 session->r = NULL;
@@ -2345,12 +2355,19 @@ invalid_msg:
2345 gcry_mpi_release (session->s); 2355 gcry_mpi_release (session->s);
2346 if (session->s_prime) 2356 if (session->s_prime)
2347 gcry_mpi_release (session->s_prime); 2357 gcry_mpi_release (session->s_prime);
2348 for (i = 0; session->r && i < session->used; i++){ 2358 if (session->r)
2349 if (session->r[i]) gcry_mpi_release (session->r[i]); 2359 for (i = 0; session->r && i < session->used; i++)
2350 if (session->r_prime[i]) gcry_mpi_release (session->r_prime[i]); 2360 if (session->r[i]) gcry_mpi_release (session->r[i]);
2351 } 2361 if (session->r_prime)
2362 for (i = 0; session->r_prime && i < session->used; i++)
2363 if (session->r_prime[i]) gcry_mpi_release (session->r_prime[i]);
2364 if (session->a)
2365 for (i = 0; session->a && i < session->used; i++)
2366 if (session->a[i]) gcry_mpi_release (session->a[i]);
2352 GNUNET_free_non_null (session->r); 2367 GNUNET_free_non_null (session->r);
2353 GNUNET_free_non_null (session->r_prime); 2368 GNUNET_free_non_null (session->r_prime);
2369 GNUNET_free_non_null (session->a);
2370 session->a = NULL;
2354 session->s = NULL; 2371 session->s = NULL;
2355 session->s_prime = NULL; 2372 session->s_prime = NULL;
2356 session->r = NULL; 2373 session->r = NULL;