diff options
Diffstat (limited to 'src/exchange')
| -rw-r--r-- | src/exchange/taler-exchange-httpd.c | 51 | 
1 files changed, 48 insertions, 3 deletions
| diff --git a/src/exchange/taler-exchange-httpd.c b/src/exchange/taler-exchange-httpd.c index a8e29d30..00932c0f 100644 --- a/src/exchange/taler-exchange-httpd.c +++ b/src/exchange/taler-exchange-httpd.c @@ -421,6 +421,45 @@ proceed_with_handler (const struct TEH_RequestHandler *rh,  /** + * Handle a "/seed" request. + * + * @param rh context of the handler + * @param connection the MHD connection to handle + * @param args array of additional options (must be empty for this function) + * @return MHD result code + */ +static MHD_RESULT +handler_seed (const struct TEH_RequestHandler *rh, +              struct MHD_Connection *connection, +              const char *const args[]) +{ +#define SEED_SIZE 32 +  char *body; +  MHD_RESULT ret; +  struct MHD_Response *resp; + +  (void) rh; +  body = malloc (SEED_SIZE); /* must use malloc(), because MHD will use free() */ +  if (NULL == body) +    return MHD_NO; +  GNUNET_CRYPTO_random_block (GNUNET_CRYPTO_QUALITY_NONCE, +                              body, +                              SEED_SIZE); +  resp = MHD_create_response_from_buffer (SEED_SIZE, +                                          body, +                                          MHD_RESPMEM_MUST_FREE); +  TALER_MHD_add_global_headers (resp); +  ret = MHD_queue_response (connection, +                            MHD_HTTP_OK, +                            resp); +  GNUNET_break (MHD_YES == ret); +  MHD_destroy_response (resp); +  return ret; +#undef SEED_SIZE +} + + +/**   * Handle incoming HTTP request.   *   * @param cls closure for MHD daemon (unused) @@ -472,6 +511,11 @@ handle_mhd_request (void *cls,        .method = MHD_HTTP_METHOD_GET,        .handler.get = &TEH_handler_agpl_redirect      }, +    { +      .url = "seed", +      .method = MHD_HTTP_METHOD_GET, +      .handler.get = &handler_seed +    },      /* Terms of service */      {        .url = "terms", @@ -654,9 +698,10 @@ handle_mhd_request (void *cls,      {        struct TEH_RequestHandler *rh = &handlers[i]; -      if (0 != strncmp (tok, -                        rh->url, -                        tok_size)) +      if ( (0 != strncmp (tok, +                          rh->url, +                          tok_size)) || +           (tok_size != strlen (rh->url) ) )          continue;        found = GNUNET_YES;        /* The URL is a match!  What we now do depends on the method. */ | 
