From b37fff0d5b08926169633ce8822de7ac616ae169 Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Wed, 15 Jan 2020 14:57:58 +0100 Subject: ftbfs --- src/util/test_payto.c | 7 +++++++ src/util/util.c | 54 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+) (limited to 'src/util') diff --git a/src/util/test_payto.c b/src/util/test_payto.c index f0247f19b..28caac1ad 100644 --- a/src/util/test_payto.c +++ b/src/util/test_payto.c @@ -48,6 +48,9 @@ main (int argc, r); r = TALER_payto_xtalerbank_make ("https://localhost", "account"); + CHECK ("payto://x-taler-bank/localhost/account", + r); + r = TALER_payto_xtalerbank_make2 ("https://localhost/account"); CHECK ("payto://x-taler-bank/localhost/account", r); r = TALER_payto_xtalerbank_make ("http://localhost:80/", @@ -60,6 +63,10 @@ main (int argc, r); r = TALER_payto_xtalerbank_make ("http://localhost/", "account"); + r = TALER_payto_xtalerbank_make2 ("http://localhost:80/account"); + CHECK ("payto://x-taler-bank/localhost:80/account", + r); + r = TALER_payto_xtalerbank_make2 ("http://localhost/account"); CHECK ("payto://x-taler-bank/localhost:80/account", r); r = TALER_xtalerbank_base_url_from_payto ( diff --git a/src/util/util.c b/src/util/util.c index 7f5e60e4d..761aa98dd 100644 --- a/src/util/util.c +++ b/src/util/util.c @@ -623,6 +623,60 @@ TALER_payto_xtalerbank_make (const char *bank_url, } +/** + * Create an x-taler-bank payto:// URL from an @a account_url. + * + * @param account_url the bank URL + * @param account_name the account name + * @return payto:// URL + */ +char * +TALER_payto_xtalerbank_make2 (const char *account_url) +{ + char *payto; + int plaintext; + const char *port; + size_t slen; + const char *account; + + if (0 == strncasecmp ("https://", + account_url, + strlen ("https://"))) + { + account_url += strlen ("https://"); + plaintext = GNUNET_NO; + } + else if (0 == strncasecmp ("http://", + account_url, + strlen ("http://"))) + { + account_url += strlen ("http://"); + plaintext = GNUNET_YES; + } + else + return NULL; + account = strchr (account_url, + '/'); + if (NULL == account) + return NULL; + slen = account - account_url; + port = memchr (account_url, + ':', + slen); + if ( (0 < slen) && + ('/' == account_url[slen - 1]) ) + slen--; + GNUNET_asprintf (&payto, + ( (NULL == port) && (GNUNET_YES == plaintext) ) + ? "payto://x-taler-bank/%.*s:80/%s" + : "payto://x-taler-bank/%.*s/%s", + (int) slen, + account_url, + account + 1); + return payto; +} + + /** * Given an x-taler-bank payto:// URL, compute * the HTTP(S) base URL of the account. -- cgit v1.2.3