abc0aea4cf087f005b26d5d88c85b0d1e584d375
[oweals/gnunet.git] / src / include / gnunet_rest_plugin.h
1 /*
2    This file is part of GNUnet.
3    Copyright (C) 2012-2015 Christian Grothoff (and other contributing authors)
4
5    GNUnet is free software; you can redistribute it and/or modify
6    it under the terms of the GNU General Public License as published
7    by the Free Software Foundation; either version 3, or (at your
8    option) any later version.
9
10    GNUnet is distributed in the hope that it will be useful, but
11    WITHOUT ANY WARRANTY; without even the implied warranty of
12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13    General Public License for more details.
14
15    You should have received a copy of the GNU General Public License
16    along with GNUnet; see the file COPYING.  If not, write to the
17    Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18    Boston, MA 02111-1307, USA.
19    */
20 /**
21  * @author Martin Schanzenbach
22  * @file include/gnunet_rest_plugin.h
23  * @brief GNUnet service REST plugin header
24  *
25  */
26 #ifndef GNUNET_REST_PLUGIN_H
27 #define GNUNET_REST_PLUGIN_H
28
29 #include "gnunet_util_lib.h"
30 #include "gnunet_rest_lib.h"
31 #include "microhttpd.h"
32
33 #ifdef __cplusplus
34 extern "C"
35 {
36 #if 0                           /* keep Emacsens' auto-indent happy */
37 }
38 #endif
39 #endif
40
41
42 /**
43  * @brief struct returned by the initialization function of the plugin
44  */
45 struct GNUNET_REST_Plugin
46 {
47
48   /**
49    *
50    * The closure of the plugin
51    *
52    */
53   void *cls;
54
55   /**
56    * Plugin name. Used as the namespace for the API.
57    * e.g. http://hostname:port/<name>
58    */
59   char *name;
60
61   /**
62    * Supported HTTP Methods
63    */
64   char *allow_methods;
65
66   /**
67    * Function to process a REST call
68    * 
69    * @param method the HTTP method called
70    * @param url the relative url accessed
71    * @param data the REST data (can be NULL)
72    * @param data_size the length of the data
73    * @param proc the callback for result
74    * @param proc_cls closure for callback
75    */
76   void (*process_request) (struct RestConnectionDataHandle *handle,
77                            GNUNET_REST_ResultProcessor proc,
78                            void *proc_cls);
79
80 };
81
82
83 #if 0                           /* keep Emacsens' auto-indent happy */
84 {
85 #endif
86 #ifdef __cplusplus
87 }
88 #endif
89
90 /* end of gnunet_rest_plugin.h */
91 #endif
92