diff options
Diffstat (limited to 'src/util')
| -rw-r--r-- | src/util/test_payto.c | 8 | ||||
| -rw-r--r-- | src/util/util.c | 31 | 
2 files changed, 39 insertions, 0 deletions
diff --git a/src/util/test_payto.c b/src/util/test_payto.c index 0a570ee5..f0247f19 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 531bd27f..7f5e60e4 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 */  | 
