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 *
|
char *
|
||||||
TALER_xtalerbank_account_from_payto (const char *payto);
|
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.
|
* Possible values for a binary filter.
|
||||||
|
@ -28,6 +28,45 @@
|
|||||||
#define PAYTO "payto://"
|
#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
|
* Obtain the payment method from a @a payto_uri. The
|
||||||
* format of a payto URI is 'payto://$METHOD/$SOMETHING'.
|
* format of a payto URI is 'payto://$METHOD/$SOMETHING'.
|
||||||
|
@ -22,6 +22,8 @@
|
|||||||
#include "taler_util.h"
|
#include "taler_util.h"
|
||||||
|
|
||||||
#define CHECK(a,b) do { \
|
#define CHECK(a,b) do { \
|
||||||
|
GNUNET_assert (a != NULL); \
|
||||||
|
GNUNET_assert (b != NULL); \
|
||||||
if (0 != strcmp (a,b)) { \
|
if (0 != strcmp (a,b)) { \
|
||||||
GNUNET_break (0); \
|
GNUNET_break (0); \
|
||||||
fprintf (stderr, "Got %s, wanted %s\n", b, a); \
|
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");
|
"payto://x-taler-bank/localhost:1080/alice?subject=hello&amount=EUR:1");
|
||||||
CHECK ("alice",
|
CHECK ("alice",
|
||||||
r);
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user