aboutsummaryrefslogtreecommitdiff
path: root/src/mint/mint_db.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mint/mint_db.c')
-rw-r--r--src/mint/mint_db.c53
1 files changed, 37 insertions, 16 deletions
diff --git a/src/mint/mint_db.c b/src/mint/mint_db.c
index 22d04c865..1a8acaa5f 100644
--- a/src/mint/mint_db.c
+++ b/src/mint/mint_db.c
@@ -529,6 +529,7 @@ TALER_MINT_DB_prepare (PGconn *db_conn)
529 "INSERT INTO deposits (" 529 "INSERT INTO deposits ("
530 "coin_pub," 530 "coin_pub,"
531 "denom_pub," 531 "denom_pub,"
532 "denom_sig,"
532 "transaction_id," 533 "transaction_id,"
533 "amount_value," 534 "amount_value,"
534 "amount_fraction," 535 "amount_fraction,"
@@ -539,9 +540,9 @@ TALER_MINT_DB_prepare (PGconn *db_conn)
539 "coin_sig," 540 "coin_sig,"
540 "wire" 541 "wire"
541 ") VALUES (" 542 ") VALUES ("
542 "$1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11" 543 "$1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12"
543 ")", 544 ")",
544 11, NULL); 545 12, NULL);
545 PREPARE ("get_deposit", 546 PREPARE ("get_deposit",
546 "SELECT " 547 "SELECT "
547 "coin_pub," 548 "coin_pub,"
@@ -1324,35 +1325,55 @@ int
1324TALER_MINT_DB_insert_deposit (PGconn *db_conn, 1325TALER_MINT_DB_insert_deposit (PGconn *db_conn,
1325 const struct Deposit *deposit) 1326 const struct Deposit *deposit)
1326{ 1327{
1327 // FIXME: check logic! 1328 char *denom_pub_enc;
1329 char *denom_sig_enc;
1330 char *json_wire_enc;
1331 PGresult *result;
1332 struct TALER_AmountNBO amount_nbo;
1333 size_t denom_pub_enc_size;
1334 size_t denom_sig_enc_size;
1335 int ret;
1336
1337 ret = GNUNET_SYSERR;
1338 denom_pub_enc_size =
1339 GNUNET_CRYPTO_rsa_public_key_encode (deposit->coin.denom_pub,
1340 &denom_pub_enc);
1341 denom_sig_enc_size =
1342 GNUNET_CRYPTO_rsa_signature_encode (deposit->coin.denom_sig,
1343 &denom_sig_enc);
1344 json_wire_enc = json_dumps (deposit->wire, JSON_COMPACT);
1345 amount_nbo = TALER_amount_hton (deposit->amount);
1328 struct TALER_DB_QueryParam params[]= { 1346 struct TALER_DB_QueryParam params[]= {
1329 TALER_DB_QUERY_PARAM_PTR (&deposit->coin.coin_pub), 1347 TALER_DB_QUERY_PARAM_PTR (&deposit->coin.coin_pub),
1330 TALER_DB_QUERY_PARAM_PTR (&deposit->coin.denom_pub), // FIXME! 1348 TALER_DB_QUERY_PARAM_PTR_SIZED (denom_pub_enc, denom_pub_enc_size),
1331 TALER_DB_QUERY_PARAM_PTR (&deposit->coin.denom_sig), // FIXME! 1349 TALER_DB_QUERY_PARAM_PTR_SIZED (denom_sig_enc, denom_sig_enc_size),
1332 TALER_DB_QUERY_PARAM_PTR (&deposit->transaction_id), 1350 TALER_DB_QUERY_PARAM_PTR (&deposit->transaction_id),
1333 TALER_DB_QUERY_PARAM_PTR (&deposit->amount.value), 1351 TALER_DB_QUERY_PARAM_PTR (&amount_nbo.value),
1334 TALER_DB_QUERY_PARAM_PTR (&deposit->amount.fraction), 1352 TALER_DB_QUERY_PARAM_PTR (&amount_nbo.fraction),
1335 TALER_DB_QUERY_PARAM_PTR_SIZED (deposit->amount.currency, 1353 TALER_DB_QUERY_PARAM_PTR_SIZED (amount_nbo.currency,
1336 strlen (deposit->amount.currency)), 1354 TALER_CURRENCY_LEN - 1),
1337 TALER_DB_QUERY_PARAM_PTR (&deposit->merchant_pub), 1355 TALER_DB_QUERY_PARAM_PTR (&deposit->merchant_pub),
1338 TALER_DB_QUERY_PARAM_PTR (&deposit->h_contract), 1356 TALER_DB_QUERY_PARAM_PTR (&deposit->h_contract),
1339 TALER_DB_QUERY_PARAM_PTR (&deposit->h_wire), 1357 TALER_DB_QUERY_PARAM_PTR (&deposit->h_wire),
1340 TALER_DB_QUERY_PARAM_PTR (&deposit->csig), 1358 TALER_DB_QUERY_PARAM_PTR (&deposit->csig),
1341 TALER_DB_QUERY_PARAM_PTR_SIZED (deposit->wire, 1359 TALER_DB_QUERY_PARAM_PTR_SIZED (json_wire_enc,
1342 strlen ("FIXME")), // FIXME! json! 1360 strlen (json_wire_enc)),
1343 TALER_DB_QUERY_PARAM_END 1361 TALER_DB_QUERY_PARAM_END
1344 }; 1362 };
1345 PGresult *result;
1346
1347 result = TALER_DB_exec_prepared (db_conn, "insert_deposit", params); 1363 result = TALER_DB_exec_prepared (db_conn, "insert_deposit", params);
1348 if (PGRES_COMMAND_OK != PQresultStatus (result)) 1364 if (PGRES_COMMAND_OK != PQresultStatus (result))
1349 { 1365 {
1350 BREAK_DB_ERR (result); 1366 BREAK_DB_ERR (result);
1351 PQclear (result); 1367 goto cleanup;
1352 return GNUNET_SYSERR;
1353 } 1368 }
1369 ret = GNUNET_OK;
1370
1371 cleanup:
1354 PQclear (result); 1372 PQclear (result);
1355 return GNUNET_OK; 1373 GNUNET_free_non_null (denom_pub_enc);
1374 GNUNET_free_non_null (denom_sig_enc);
1375 GNUNET_free_non_null (json_wire_enc);
1376 return ret;
1356} 1377}
1357 1378
1358 1379