1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
|
/*
This file is part of TALER
Copyright (C) 2014-2020 Taler Systems SA
TALER is free software; you can redistribute it and/or modify it under the
terms of the GNU Affero General Public License as published by the Free Software
Foundation; either version 3, or (at your option) any later version.
TALER is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License along with
TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
*/
/**
* @file taler-merchant-httpd_mhd.c
* @brief helpers for MHD interaction; these are TALER_EXCHANGE_handler_ functions
* that generate simple MHD replies that do not require any real operations
* to be performed (error handling, static pages, etc.)
* @author Florian Dold
* @author Benedikt Mueller
* @author Christian Grothoff
*/
#include "platform.h"
#include <jansson.h>
#include "taler-merchant-httpd_mhd.h"
/**
* Function to call to handle the request by sending
* back static data from the @a rh.
*
* @param rh context of the handler
* @param connection the MHD connection to handle
* @param[in,out] hc handler context (can be updated)
* @return MHD result code
*/
MHD_RESULT
TMH_MHD_handler_static_response (const struct TMH_RequestHandler *rh,
struct MHD_Connection *connection,
struct TMH_HandlerContext *hc)
{
(void) hc;
return TALER_MHD_reply_static (connection,
rh->response_code,
rh->mime_type,
rh->data,
rh->data_size);
}
/**
* Function to call to handle the request by sending
* back a redirect to the AGPL source code.
*
* @param rh context of the handler
* @param connection the MHD connection to handle
* @param[in,out] hc handler context (can be updated)
* @return MHD result code
*/
MHD_RESULT
TMH_MHD_handler_agpl_redirect (const struct TMH_RequestHandler *rh,
struct MHD_Connection *connection,
struct TMH_HandlerContext *hc)
{
(void) rh;
(void) hc;
return TALER_MHD_reply_agpl (connection,
"http://www.git.taler.net/?p=merchant.git");
}
/**
* Test if the client requested HTML output.
*
* @param connection client to test
* @return true if HTML was requested
*/
bool
TMH_MHD_test_html_desired (struct MHD_Connection *connection)
{
bool ret;
const char *accept;
accept = MHD_lookup_connection_value (connection,
MHD_HEADER_KIND,
MHD_HTTP_HEADER_ACCEPT);
if (NULL != accept)
{
char *a = GNUNET_strdup (accept);
char *saveptr;
for (char *t = strtok_r (a, ",", &saveptr);
NULL != t;
t = strtok_r (NULL, ",", &saveptr))
{
char *end;
/* skip leading whitespace */
while (isspace ((unsigned char) t[0]))
t++;
/* trim of ';q=' parameter and everything after space */
end = strchr (t, ';');
if (NULL != end)
*end = '\0';
end = strchr (t, ' ');
if (NULL != end)
*end = '\0';
if (0 == strcasecmp ("text/html",
t))
{
ret = true;
break;
}
}
GNUNET_free (a);
}
return ret;
}
/* end of taler-exchange-httpd_mhd.c */
|