diff options
Diffstat (limited to 'src/scalarproduct/scalarproduct_api.c')
-rw-r--r-- | src/scalarproduct/scalarproduct_api.c | 32 |
1 files changed, 26 insertions, 6 deletions
diff --git a/src/scalarproduct/scalarproduct_api.c b/src/scalarproduct/scalarproduct_api.c index 633034b31..b3390f349 100644 --- a/src/scalarproduct/scalarproduct_api.c +++ b/src/scalarproduct/scalarproduct_api.c | |||
@@ -171,6 +171,7 @@ process_result_message (void *cls, | |||
171 | const struct GNUNET_SCALARPRODUCT_client_response *message = | 171 | const struct GNUNET_SCALARPRODUCT_client_response *message = |
172 | (const struct GNUNET_SCALARPRODUCT_client_response *) msg; | 172 | (const struct GNUNET_SCALARPRODUCT_client_response *) msg; |
173 | gcry_mpi_t result = NULL; | 173 | gcry_mpi_t result = NULL; |
174 | gcry_error_t rc; | ||
174 | 175 | ||
175 | if (GNUNET_SCALARPRODUCT_Status_Success == status | 176 | if (GNUNET_SCALARPRODUCT_Status_Success == status |
176 | && qe->cont_datum != NULL) | 177 | && qe->cont_datum != NULL) |
@@ -183,9 +184,9 @@ process_result_message (void *cls, | |||
183 | gcry_mpi_t num; | 184 | gcry_mpi_t num; |
184 | size_t read = 0; | 185 | size_t read = 0; |
185 | 186 | ||
186 | if (0 != gcry_mpi_scan (&num, GCRYMPI_FMT_USG, &msg[1], product_len, &read)) | 187 | if (0 != (rc = gcry_mpi_scan (&num, GCRYMPI_FMT_USG, &msg[1], product_len, &read))) |
187 | { | 188 | { |
188 | LOG (GNUNET_ERROR_TYPE_ERROR, "Could not convert to mpi to value!\n"); | 189 | LOG_GCRY(GNUNET_ERROR_TYPE_ERROR, "gcry_mpi_scan", rc); |
189 | gcry_mpi_release (result); | 190 | gcry_mpi_release (result); |
190 | result = NULL; | 191 | result = NULL; |
191 | status = GNUNET_SCALARPRODUCT_Status_InvalidResponse; | 192 | status = GNUNET_SCALARPRODUCT_Status_InvalidResponse; |
@@ -497,17 +498,36 @@ GNUNET_SCALARPRODUCT_cancel (struct GNUNET_SCALARPRODUCT_ComputationHandle * h) | |||
497 | if (qe == h) | 498 | if (qe == h) |
498 | { | 499 | { |
499 | GNUNET_CONTAINER_DLL_remove (head, tail, qe); | 500 | GNUNET_CONTAINER_DLL_remove (head, tail, qe); |
500 | LOG (GNUNET_ERROR_TYPE_INFO, | ||
501 | "Disconnecting from VectorProduct\n"); | ||
502 | if (NULL == qe->th) | 501 | if (NULL == qe->th) |
503 | GNUNET_CLIENT_notify_transmit_ready_cancel (qe->th); | 502 | GNUNET_CLIENT_notify_transmit_ready_cancel (qe->th); |
504 | GNUNET_CLIENT_disconnect (h->client); | 503 | GNUNET_CLIENT_disconnect (qe->client); |
505 | GNUNET_STATISTICS_destroy (h->stats, GNUNET_YES); | 504 | GNUNET_STATISTICS_destroy (qe->stats, GNUNET_YES); |
506 | GNUNET_free (qe->msg); | 505 | GNUNET_free (qe->msg); |
507 | GNUNET_free (qe); | 506 | GNUNET_free (qe); |
508 | break; | 507 | break; |
509 | } | 508 | } |
510 | } | 509 | } |
511 | } | 510 | } |
511 | /** | ||
512 | * Cancel ALL our ongoing scalar product computations and collaboration offers. | ||
513 | * Closes ALL connections to the service | ||
514 | */ | ||
515 | void | ||
516 | GNUNET_SCALARPRODUCT_disconnect () | ||
517 | { | ||
518 | struct GNUNET_SCALARPRODUCT_ComputationHandle * qe; | ||
519 | |||
520 | LOG (GNUNET_ERROR_TYPE_INFO, "Disconnecting from VectorProduct\n"); | ||
521 | for (qe = head; head != NULL; qe = head) | ||
522 | { | ||
523 | GNUNET_CONTAINER_DLL_remove (head, tail, qe); | ||
524 | if (NULL == qe->th) | ||
525 | GNUNET_CLIENT_notify_transmit_ready_cancel (qe->th); | ||
526 | GNUNET_CLIENT_disconnect (qe->client); | ||
527 | GNUNET_STATISTICS_destroy (qe->stats, GNUNET_YES); | ||
528 | GNUNET_free (qe->msg); | ||
529 | GNUNET_free (qe); | ||
530 | } | ||
531 | } | ||
512 | 532 | ||
513 | /* end of ext_api.c */ | 533 | /* end of ext_api.c */ |