summaryrefslogtreecommitdiff
path: root/src/util
diff options
context:
space:
mode:
Diffstat (limited to 'src/util')
-rw-r--r--src/util/test_payto.c8
-rw-r--r--src/util/util.c31
2 files changed, 39 insertions, 0 deletions
diff --git a/src/util/test_payto.c b/src/util/test_payto.c
index 0a570ee5a..f0247f19b 100644
--- a/src/util/test_payto.c
+++ b/src/util/test_payto.c
@@ -78,6 +78,14 @@ main (int argc,
"payto://x-taler-bank/localhost:1080/alice");
CHECK ("http://localhost:1080/alice",
r);
+ r = TALER_xtalerbank_account_from_payto (
+ "payto://x-taler-bank/localhost:1080/alice");
+ CHECK ("alice",
+ r);
+ r = TALER_xtalerbank_account_from_payto (
+ "payto://x-taler-bank/localhost:1080/alice?subject=hello&amount=EUR:1");
+ CHECK ("alice",
+ r);
return 0;
}
diff --git a/src/util/util.c b/src/util/util.c
index 531bd27f5..7f5e60e4d 100644
--- a/src/util/util.c
+++ b/src/util/util.c
@@ -710,4 +710,35 @@ TALER_xtalerbank_account_url_from_payto (const char *payto)
}
+/**
+ * Obtain the account name from a payto URL.
+ *
+ * @param payto an x-taler-bank payto URL
+ * @return only the account name from the @a payto URL, NULL if not an x-taler-bank
+ * payto URL
+ */
+char *
+TALER_xtalerbank_account_from_payto (const char *payto)
+{
+ const char *beg;
+ const char *end;
+
+ if (0 != strncasecmp (payto,
+ "payto://x-taler-bank/",
+ strlen ("payto://x-taler-bank/")))
+ return NULL;
+ beg = strchr (&payto[strlen ("payto://x-taler-bank/")],
+ '/');
+ if (NULL == beg)
+ return NULL;
+ beg++;
+ end = strchr (beg,
+ '?');
+ if (NULL == end)
+ return GNUNET_strdup (beg);
+ return GNUNET_strndup (beg,
+ end - beg);
+}
+
+
/* end of util.c */