LCOV - code coverage report
Current view: top level - auditor - taler-auditor-httpd_mhd.c (source / functions) Coverage Total Hit
Test: coverage.info Lines: 21.4 % 28 6
Test Date: 2026-09-09 15:11:34 Functions: 25.0 % 4 1

            Line data    Source code
       1              : /*
       2              :   This file is part of TALER
       3              :   Copyright (C) 2014-2020 Taler Systems SA
       4              : 
       5              :   TALER is free software; you can redistribute it and/or modify it under the
       6              :   terms of the GNU Affero General Public License as published by the Free Software
       7              :   Foundation; either version 3, or (at your option) any later version.
       8              : 
       9              :   TALER is distributed in the hope that it will be useful, but WITHOUT ANY
      10              :   WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
      11              :   A PARTICULAR PURPOSE.  See the GNU Affero General Public License for more details.
      12              : 
      13              :   You should have received a copy of the GNU Affero General Public License along with
      14              :   TALER; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
      15              : */
      16              : 
      17              : /**
      18              :  * @file taler-auditor-httpd_mhd.c
      19              :  * @brief helpers for MHD interaction; these are TALER_MHD_handler_ functions
      20              :  *        that generate simple MHD replies that do not require any real operations
      21              :  *        to be performed (error handling, static pages, etc.)
      22              :  * @author Florian Dold
      23              :  * @author Benedikt Mueller
      24              :  * @author Christian Grothoff
      25              :  */
      26              : #include <gnunet/gnunet_util_lib.h>
      27              : #include <jansson.h>
      28              : #include <microhttpd.h>
      29              : #include <pthread.h>
      30              : #include "taler/taler_mhd_lib.h"
      31              : #include "taler-auditor-httpd.h"
      32              : #include "taler-auditor-httpd_mhd.h"
      33              : 
      34              : 
      35              : /**
      36              :  * Check recursively that integers in @a value are valid SafeUint64 values.
      37              :  *
      38              :  * @param value JSON value to inspect
      39              :  * @return true if all integers are safe
      40              :  */
      41              : static bool
      42            0 : json_integers_are_safe (const json_t *value)
      43              : {
      44            0 :   if (json_is_integer (value))
      45              :   {
      46            0 :     json_int_t number = json_integer_value (value);
      47              : 
      48            0 :     return (number >= 0) &&
      49            0 :            ((uint64_t) number <= TAH_SAFE_UINT64_MAX);
      50              :   }
      51            0 :   if (json_is_array (value))
      52              :   {
      53              :     size_t index;
      54              :     json_t *child;
      55              : 
      56            0 :     json_array_foreach ((json_t *) value, index, child)
      57            0 :       if (! json_integers_are_safe (child))
      58            0 :         return false;
      59              :   }
      60            0 :   if (json_is_object (value))
      61              :   {
      62              :     const char *key;
      63              :     json_t *child;
      64              : 
      65            0 :     json_object_foreach ((json_t *) value, key, child)
      66            0 :       if (! json_integers_are_safe (child))
      67            0 :         return false;
      68              :   }
      69            0 :   return true;
      70              : }
      71              : 
      72              : 
      73              : enum MHD_Result
      74            0 : TAH_reply_json_records (struct MHD_Connection *connection,
      75              :                         json_t *records)
      76              : {
      77            0 :   if (! json_integers_are_safe (records))
      78              :   {
      79            0 :     GNUNET_break (0);
      80            0 :     json_decref (records);
      81            0 :     return TALER_MHD_reply_with_error (
      82              :       connection,
      83              :       MHD_HTTP_INTERNAL_SERVER_ERROR,
      84              :       TALER_EC_GENERIC_INTERNAL_INVARIANT_FAILURE,
      85              :       "monitoring response contains an integer outside SafeUint64");
      86              :   }
      87            0 :   return TALER_MHD_REPLY_JSON_PACK (
      88              :     connection,
      89              :     MHD_HTTP_OK,
      90              :     GNUNET_JSON_pack_array_steal ("records",
      91              :                                   records));
      92              : }
      93              : 
      94              : 
      95              : enum MHD_Result
      96            1 : TAH_MHD_handler_static_response (struct TAH_RequestHandler *rh,
      97              :                                  struct MHD_Connection *connection,
      98              :                                  void **connection_cls,
      99              :                                  const char *upload_data,
     100              :                                  size_t *upload_data_size,
     101              :                                  const char *const args[])
     102              : {
     103              :   size_t dlen;
     104              : 
     105              :   (void) connection_cls;
     106              :   (void) upload_data;
     107              :   (void) upload_data_size;
     108            2 :   dlen = (0 == rh->data_size)
     109            1 :          ? strlen ((const char *) rh->data)
     110            1 :          : rh->data_size;
     111            2 :   return TALER_MHD_reply_static (connection,
     112              :                                  rh->response_code,
     113              :                                  rh->mime_type,
     114            1 :                                  rh->data,
     115              :                                  dlen);
     116              : }
     117              : 
     118              : 
     119              : enum MHD_Result
     120            0 : TAH_MHD_handler_agpl_redirect (struct TAH_RequestHandler *rh,
     121              :                                struct MHD_Connection *connection,
     122              :                                void **connection_cls,
     123              :                                const char *upload_data,
     124              :                                size_t *upload_data_size,
     125              :                                const char *const args[])
     126              : {
     127              :   (void) rh;
     128              :   (void) connection_cls;
     129              :   (void) upload_data;
     130              :   (void) upload_data_size;
     131            0 :   return TALER_MHD_reply_agpl (connection,
     132              :                                "http://www.git.taler.net/?p=exchange.git");
     133              : }
     134              : 
     135              : 
     136              : /* end of taler-auditor-httpd_mhd.c */
        

Generated by: LCOV version 2.0-1