diff options
Diffstat (limited to 'src/backend/taler-merchant-httpd_track-transaction.c')
-rw-r--r-- | src/backend/taler-merchant-httpd_track-transaction.c | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/src/backend/taler-merchant-httpd_track-transaction.c b/src/backend/taler-merchant-httpd_track-transaction.c index d2e95e51..b5b883cb 100644 --- a/src/backend/taler-merchant-httpd_track-transaction.c +++ b/src/backend/taler-merchant-httpd_track-transaction.c @@ -43,6 +43,10 @@ */ struct TrackTransactionContext; +/** + * Merchant instance being tracked + */ +struct MerchantInstance; /** * Information we keep for each coin in a /track/transaction operation. @@ -205,6 +209,11 @@ struct TrackTransactionContext */ unsigned int response_code; + /** + * Which merchant instance is being tracked + */ + struct MerchantInstance *mi; + }; @@ -591,7 +600,7 @@ trace_coins (struct TrackTransactionContext *tctx) return; } tcc->dwh = TALER_EXCHANGE_track_transaction (tctx->eh, - &privkey, + &tctx->mi->privkey, &tctx->h_wire, &tctx->h_contract, &tcc->coin_pub, @@ -752,6 +761,7 @@ coin_cb (void *cls, tcc)); } +extern struct MerchantInstance **instances; /** * Handle a "/track/transaction" request. @@ -773,6 +783,8 @@ MH_handler_track_transaction (struct TMH_RequestHandler *rh, struct TrackTransactionContext *tctx; unsigned long long transaction_id; const char *str; + const char *receiver; + unsigned int i; int ret; if (NULL == *connection_cls) @@ -824,6 +836,20 @@ MH_handler_track_transaction (struct TMH_RequestHandler *rh, if (NULL == str) return TMH_RESPONSE_reply_bad_request (connection, "id argument missing"); + receiver = MHD_lookup_connection_value (connection, + MHD_GET_ARGUMENT_KIND, + "receiver"); + if (NULL == receiver) + receiver = "default"; + + tctx->mi = NULL; + for (i=0; NULL != instances[i]; i++) + if (0 == strcmp (receiver, instances[i]->id)) + tctx->mi = instances[i]; + + if (NULL == tctx->mi) + return TMH_RESPONSE_reply_bad_request (connection, + "unknown receiver"); if (1 != sscanf (str, "%llu", |