payto parser: extract 'subject' parameter.
This commit is contained in:
parent
e1fcb2b26c
commit
7c2de4c5e6
@ -297,6 +297,15 @@ TALER_payto_get_method (const char *payto_uri);
|
||||
char *
|
||||
TALER_xtalerbank_account_from_payto (const char *payto);
|
||||
|
||||
/**
|
||||
* Extract the subject value from the URI parameters.
|
||||
*
|
||||
* @param payto_uri the URL to parse
|
||||
* @return NULL if the subject parameter is not found.
|
||||
* The caller should free the returned value.
|
||||
*/
|
||||
char *
|
||||
TALER_payto_get_subject (const char *payto_uri);
|
||||
|
||||
/**
|
||||
* Possible values for a binary filter.
|
||||
|
@ -28,6 +28,45 @@
|
||||
#define PAYTO "payto://"
|
||||
|
||||
|
||||
/**
|
||||
* Extract the subject value from the URI parameters.
|
||||
*
|
||||
* @param payto_uri the URL to parse
|
||||
* @return NULL if the subject parameter is not found.
|
||||
* The caller should free the returned value.
|
||||
*/
|
||||
char *
|
||||
TALER_payto_get_subject (const char *payto_uri)
|
||||
{
|
||||
const char *key;
|
||||
const char *value_start;
|
||||
const char *value_end;
|
||||
|
||||
key = strchr (payto_uri,
|
||||
(unsigned char) '?');
|
||||
if (NULL == key)
|
||||
return NULL;
|
||||
|
||||
do {
|
||||
if (0 == strncasecmp (++key,
|
||||
"subject",
|
||||
strlen ("subject")))
|
||||
{
|
||||
value_start = strchr (key,
|
||||
(unsigned char) '=');
|
||||
if (NULL == value_start)
|
||||
return NULL;
|
||||
value_end = strchrnul (value_start,
|
||||
(unsigned char) '&');
|
||||
|
||||
return GNUNET_strndup (value_start + 1,
|
||||
value_end - value_start - 1);
|
||||
}
|
||||
} while ( (key = strchr (key,
|
||||
(unsigned char) '&')) );
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* Obtain the payment method from a @a payto_uri. The
|
||||
* format of a payto URI is 'payto://$METHOD/$SOMETHING'.
|
||||
|
@ -22,6 +22,8 @@
|
||||
#include "taler_util.h"
|
||||
|
||||
#define CHECK(a,b) do { \
|
||||
GNUNET_assert (a != NULL); \
|
||||
GNUNET_assert (b != NULL); \
|
||||
if (0 != strcmp (a,b)) { \
|
||||
GNUNET_break (0); \
|
||||
fprintf (stderr, "Got %s, wanted %s\n", b, a); \
|
||||
@ -52,6 +54,15 @@ main (int argc,
|
||||
"payto://x-taler-bank/localhost:1080/alice?subject=hello&amount=EUR:1");
|
||||
CHECK ("alice",
|
||||
r);
|
||||
|
||||
r = TALER_payto_get_subject (
|
||||
"payto://x-taler-bank/localhost:1080/alice?subject=hello&amount=EUR:1");
|
||||
CHECK ("hello",
|
||||
r);
|
||||
|
||||
r = TALER_payto_get_subject (
|
||||
"payto://x-taler-bank/localhost:1080/alice");
|
||||
GNUNET_assert (r == NULL);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user