merchant

Merchant backend to process payments, run by merchants
Log | Files | Refs | Submodules | README | LICENSE

commit d6aeaba40b59d30cd2963766b0d6a337d9249fc0
parent 9129297e56763ae2941ee8e52cd3f96a5b880b02
Author: Christian Grothoff <christian@grothoff.org>
Date:   Mon,  9 Sep 2024 23:20:40 +0200

fix misc. long polling issues

Diffstat:
Msrc/backend/taler-merchant-httpd_private-get-instances-ID-kyc.c | 27++++++++++++++++++++-------
Msrc/backend/taler-merchant-kyccheck.c | 20++++++++++++++++----
Msrc/testing/test_kyc_api.c | 4++--
Msrc/testing/test_kyc_api.conf | 3+++
4 files changed, 41 insertions(+), 13 deletions(-)

diff --git a/src/backend/taler-merchant-httpd_private-get-instances-ID-kyc.c b/src/backend/taler-merchant-httpd_private-get-instances-ID-kyc.c @@ -384,10 +384,12 @@ resume_kyc_with_response (struct KycContext *kc) GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Resuming /kyc handling as exchange interaction is done (%u)\n", MHD_HTTP_OK); - GNUNET_assert (GNUNET_YES == kc->suspended); - kc->suspended = GNUNET_NO; - MHD_resume_connection (kc->connection); - TALER_MHD_daemon_trigger (); /* we resumed, kick MHD */ + if (GNUNET_YES == kc->suspended) + { + kc->suspended = GNUNET_NO; + MHD_resume_connection (kc->connection); + TALER_MHD_daemon_trigger (); /* we resumed, kick MHD */ + } } @@ -579,9 +581,20 @@ ekr_finished (struct ExchangeKycRequest *ekr) if ( (! kc->return_immediately) && (! GNUNET_TIME_absolute_is_past (kc->timeout)) ) { - GNUNET_log (GNUNET_ERROR_TYPE_INFO, - "Remaining suspended: long poll target %d not reached\n", - kc->lpt); + if (GNUNET_NO == kc->suspended) + { + GNUNET_log (GNUNET_ERROR_TYPE_INFO, + "Suspending: long poll target %d not reached\n", + kc->lpt); + MHD_suspend_connection (kc->connection); + kc->suspended = GNUNET_YES; + } + else + { + GNUNET_log (GNUNET_ERROR_TYPE_INFO, + "Remaining suspended: long poll target %d not reached\n", + kc->lpt); + } return; } /* All exchange requests done, create final diff --git a/src/backend/taler-merchant-kyccheck.c b/src/backend/taler-merchant-kyccheck.c @@ -460,6 +460,7 @@ exchange_check_cb ( const struct TALER_EXCHANGE_KycStatus *ks) { struct Inquiry *i = cls; + bool progress = false; i->kyc = NULL; i->last_http_status = ks->hr.http_status; @@ -472,6 +473,8 @@ exchange_check_cb ( switch (ks->hr.http_status) { case MHD_HTTP_OK: + if (! i->kyc_ok) + progress = true; i->last_kyc_check = GNUNET_TIME_timestamp_get (); /* exchange says KYC is OK, gives status information */ store_kyc_status (i, @@ -479,7 +482,8 @@ exchange_check_cb ( i->backoff = GNUNET_TIME_UNIT_ZERO; if (i->aml_review) { - i->due = GNUNET_TIME_relative_to_absolute (AML_FREQ); + if (! progress) + i->due = GNUNET_TIME_relative_to_absolute (AML_FREQ); } else { @@ -488,14 +492,17 @@ exchange_check_cb ( } break; case MHD_HTTP_ACCEPTED: + progress = ! i->auth_ok; i->last_kyc_check = GNUNET_TIME_timestamp_get (); + /* exchange says KYC is required */ store_kyc_status (i, &ks->details.accepted); i->backoff = GNUNET_TIME_UNIT_ZERO; /* Start immediately with long-polling */ - i->due = GNUNET_TIME_absolute_max (i->last_kyc_check.abs_time, - i->timeout); + if (! progress) + i->due = GNUNET_TIME_absolute_max (i->last_kyc_check.abs_time, + i->timeout); break; case MHD_HTTP_NO_CONTENT: i->last_kyc_check = GNUNET_TIME_timestamp_get (); @@ -580,6 +587,11 @@ exchange_check_cb ( return; } } + GNUNET_log (GNUNET_ERROR_TYPE_INFO, + "Will repeat inquiry in %s\n", + GNUNET_TIME_relative2s ( + GNUNET_TIME_absolute_get_remaining (i->due), + true)); if (! GNUNET_TIME_absolute_is_never (i->due)) i->task = GNUNET_SCHEDULER_add_at (i->due, &inquiry_work, @@ -622,7 +634,7 @@ inquiry_work (void *cls) = GNUNET_TIME_relative_to_absolute (EXCHANGE_TIMEOUT); lpt = TALER_EXCHANGE_KLPT_NONE; if (! i->auth_ok) - lpt = TALER_EXCHANGE_KLPT_NONE; + lpt = TALER_EXCHANGE_KLPT_KYC_AUTH_TRANSFER; else if (! i->kyc_ok) lpt = TALER_EXCHANGE_KLPT_KYC_OK; else if (i->aml_review) diff --git a/src/testing/test_kyc_api.c b/src/testing/test_kyc_api.c @@ -241,7 +241,7 @@ run (void *cls, NULL, EXCHANGE_URL, TALER_EXCHANGE_KLPT_NONE, - MHD_HTTP_OK, + MHD_HTTP_NO_CONTENT, true), /* now we get the legi UUID by running taler-merchant-depositcheck */ TALER_TESTING_cmd_depositcheck ( @@ -457,7 +457,7 @@ run (void *cls, EXCHANGE_URL, TALER_EXCHANGE_KLPT_KYC_OK, MHD_HTTP_OK, - false), + true), CMD_EXEC_AGGREGATOR ("run-aggregator-aml-normal"), TALER_TESTING_cmd_check_bank_transfer ( "check_bank_transfer-498c-post-unfreeze", diff --git a/src/testing/test_kyc_api.conf b/src/testing/test_kyc_api.conf @@ -7,6 +7,9 @@ TALER_TEST_HOME = test_merchant_api_home/ CURRENCY = EUR CURRENCY_ROUND_UNIT = EUR:0.01 +[merchant-exchange-kudos] +DISABLED = YES + [taler-helper-crypto-rsa] LOOKAHEAD_SIGN = 24 days