summaryrefslogtreecommitdiff
path: root/src/include/taler_microhttpd_lib.h
blob: da601401f669d53ad9a37a9c18907a3c42c8f3b2 (plain)
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


#ifndef TALER_MICROHTTPD_LIB_H_
#define TALER_MICROHTTPD_LIB_H_


#include <microhttpd.h>
#include <jansson.h>


/**
 * Constants for JSON navigation description.
 */
enum
{
  /**
   * Access a field.
   * Param: const char *
   */
  JNAV_FIELD,
  /**
   * Access an array index.
   * Param: int
   */
  JNAV_INDEX,
  /**
   * Return base32crockford encoded data of
   * constant size.
   * Params: (void *, size_t)
   */
  JNAV_RET_DATA,
  /**
   * Return base32crockford encoded data of
   * variable size.
   * Params: (void **, size_t *)
   */
  JNAV_RET_DATA_VAR,
  /**
   * Return a json object, which must be
   * of the given type (JSON_* type constants,
   * or -1 for any type).
   * Params: (int, json_t **)
   */
  JNAV_RET_TYPED_JSON
};



/**
 * Send JSON object as response.  Decreases
 * the reference count of the JSON object.
 *
 * @param connection the MHD connection
 * @param json the json object
 * @param status_code the http status code
 * @return MHD result code (MHD_YES on success)
 */
int
send_response_json (struct MHD_Connection *connection,
                    json_t *json,
                    unsigned int status_code);


/**
 * Send a JSON object via an MHD connection,
 * specified with the JANSSON pack syntax (see json_pack).
 *
 * @param connection connection to send the JSON over
 * @param http_code HTTP status for the response
 * @param fmt format string for pack
 * @param ... varargs
 * @return MHD_YES on success or MHD_NO on error
 */
int
request_send_json_pack (struct MHD_Connection *connection,
                        unsigned int http_code,
                        const char *fmt, ...);


/**
 * Process a POST request containing a JSON object.
 *
 * @param connection the MHD connection
 * @param con_cs the closure (contains a 'struct Buffer *')
 * @param upload_data the POST data
 * @param upload_data_size the POST data size
 * @param json the JSON object for a completed request
 *
 * @returns
 *    GNUNET_YES if json object was parsed
 *    GNUNET_NO is request incomplete or invalid
 *    GNUNET_SYSERR on internal error
 */
int
process_post_json (struct MHD_Connection *connection,
                   void **con_cls,
                   const char *upload_data,
                   size_t *upload_data_size,
                   json_t **json);


/**
 * Navigate through a JSON tree.
 *
 * Sends an error response if navigation is impossible (i.e.
 * the JSON object is invalid)
 *
 * @param connection the connection to send an error response to
 * @param root the JSON node to start the navigation at.
 * @param ... navigation specification (see JNAV_*)
 * @return GNUNET_YES if navigation was successful
 *         GNUNET_NO if json is malformed, error response was generated
 *         GNUNET_SYSERR on internal error
 */
int
request_json_require_nav (struct MHD_Connection *connection,
                          const json_t *root, ...);

#endif /* TALER_MICROHTTPD_LIB_H_ */