aboutsummaryrefslogtreecommitdiff
path: root/src/transport/plugin_transport_http.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/transport/plugin_transport_http.h')
-rw-r--r--src/transport/plugin_transport_http.h245
1 files changed, 245 insertions, 0 deletions
diff --git a/src/transport/plugin_transport_http.h b/src/transport/plugin_transport_http.h
new file mode 100644
index 000000000..84af33a59
--- /dev/null
+++ b/src/transport/plugin_transport_http.h
@@ -0,0 +1,245 @@
1/*
2 This file is part of GNUnet
3 (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 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/**
22 * @file transport/plugin_transport_http.h
23 * @brief http transport service plugin
24 * @author Matthias Wachs
25 */
26
27#include "platform.h"
28#include "gnunet_common.h"
29#include "gnunet_constants.h"
30#include "gnunet_protocols.h"
31#include "gnunet_connection_lib.h"
32#include "gnunet_service_lib.h"
33#include "gnunet_statistics_service.h"
34#include "gnunet_transport_service.h"
35#include "gnunet_resolver_service.h"
36#include "gnunet_server_lib.h"
37#include "gnunet_container_lib.h"
38#include "gnunet_transport_plugin.h"
39#include "gnunet_os_lib.h"
40#include "gnunet_nat_lib.h"
41#include "microhttpd.h"
42#include <curl/curl.h>
43
44
45#define DEBUG_HTTP GNUNET_YES
46#define VERBOSE_SERVER GNUNET_YES
47#define VERBOSE_CLIENT GNUNET_YES
48
49#if BUILD_HTTPS
50#define LIBGNUNET_PLUGIN_TRANSPORT_INIT libgnunet_plugin_transport_https_init
51#define LIBGNUNET_PLUGIN_TRANSPORT_DONE libgnunet_plugin_transport_https_done
52#else
53#define LIBGNUNET_PLUGIN_TRANSPORT_INIT libgnunet_plugin_transport_http_init
54#define LIBGNUNET_PLUGIN_TRANSPORT_DONE libgnunet_plugin_transport_http_done
55#endif
56
57
58#define HTTP_NOT_VALIDATED_TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 3)
59
60/**
61 * Encapsulation of all of the state of the plugin.
62 */
63struct Plugin
64{
65 /**
66 * Our environment.
67 */
68 struct GNUNET_TRANSPORT_PluginEnvironment *env;
69
70 /**
71 * List of open sessions.
72 */
73 struct Session *head;
74
75 struct Session *tail;
76
77 /**
78 * NAT handle & address management
79 */
80 struct GNUNET_NAT_Handle *nat;
81
82 /**
83 * ipv4 DLL head
84 */
85 struct IPv4HttpAddressWrapper *ipv4_addr_head;
86
87 /**
88 * ipv4 DLL tail
89 */
90 struct IPv4HttpAddressWrapper *ipv4_addr_tail;
91
92 /**
93 * ipv6 DLL head
94 */
95 struct IPv6HttpAddressWrapper *ipv6_addr_head;
96
97 /**
98 * ipv6 DLL tail
99 */
100 struct IPv6HttpAddressWrapper *ipv6_addr_tail;
101
102
103 /* Plugin configuration */
104
105 char *name;
106
107 char *protocol;
108
109 int ipv4;
110
111 int ipv6;
112
113 uint16_t port;
114
115 int max_connections;
116
117 /*
118 * Server handles
119 */
120
121 struct MHD_Daemon *server_v4;
122
123 struct MHD_Daemon *server_v6;
124
125 char *crypto_init;
126 char *key;
127 char *cert;
128
129 /*
130 * Client handles
131 */
132
133 /**
134 * cURL Multihandle
135 */
136 CURLM *client_mh;
137
138};
139
140/**
141 * Session handle for connections.
142 */
143struct Session
144{
145
146 /**
147 * Stored in a linked list.
148 */
149 struct Session *next;
150
151 /**
152 * Stored in a linked list.
153 */
154 struct Session *prev;
155
156 /**
157 * Pointer to the global plugin struct.
158 */
159 struct Plugin *plugin;
160
161 /**
162 * The client (used to identify this connection)
163 */
164 /* void *client; */
165
166 /**
167 * Continuation function to call once the transmission buffer
168 * has again space available. NULL if there is no
169 * continuation to call.
170 */
171 GNUNET_TRANSPORT_TransmitContinuation transmit_cont;
172
173
174 void *addr;
175
176 size_t addrlen;
177
178 /**
179 * Closure for transmit_cont.
180 */
181 void *transmit_cont_cls;
182
183 /**
184 * To whom are we talking to (set to our identity
185 * if we are still waiting for the welcome message)
186 */
187 struct GNUNET_PeerIdentity target;
188
189 /**
190 * At what time did we reset last_received last?
191 */
192 //struct GNUNET_TIME_Absolute last_quota_update;
193
194 /**
195 * How many bytes have we received since the "last_quota_update"
196 * timestamp?
197 */
198 //uint64_t last_received;
199
200 /**
201 * Number of bytes per ms that this peer is allowed
202 * to send to us.
203 */
204 //uint32_t quota;
205
206
207 int inbound;
208
209 void *client_put;
210 void *client_get;
211
212
213};
214
215const char *
216http_plugin_address_to_string (void *cls, const void *addr, size_t addrlen);
217
218int
219client_disconnect (struct Session *s);
220
221int
222client_connect (struct Session *s);
223
224int
225client_send (struct Session *s, const char *msgbuf, size_t msgbuf_size);
226
227int
228client_start (struct Plugin *plugin);
229
230void
231client_stop (struct Plugin *plugin);
232
233int
234server_disconnect (struct Session *s);
235
236int
237server_send (struct Session *s, const char *msgbuf, size_t msgbuf_size);
238
239int
240server_start (struct Plugin *plugin);
241
242void
243server_stop (struct Plugin *plugin);
244
245/* end of plugin_transport_http.h */