2 This file is part of GNUnet
3 (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Christian Grothoff (and other contributing authors)
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.
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.
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.
22 * @file transport/plugin_transport_http.h
23 * @brief http transport service plugin
24 * @author Matthias Wachs
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>
45 #define DEBUG_HTTP GNUNET_YES
46 #define VERBOSE_SERVER GNUNET_YES
47 #define VERBOSE_CLIENT GNUNET_YES
50 #define LIBGNUNET_PLUGIN_TRANSPORT_INIT libgnunet_plugin_transport_https_init
51 #define LIBGNUNET_PLUGIN_TRANSPORT_DONE libgnunet_plugin_transport_https_done
53 #define LIBGNUNET_PLUGIN_TRANSPORT_INIT libgnunet_plugin_transport_http_init
54 #define LIBGNUNET_PLUGIN_TRANSPORT_DONE libgnunet_plugin_transport_http_done
57 #define INBOUND GNUNET_YES
58 #define OUTBOUND GNUNET_NO
61 #define HTTP_NOT_VALIDATED_TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 3)
64 * Encapsulation of all of the state of the plugin.
71 struct GNUNET_TRANSPORT_PluginEnvironment *env;
74 * List of open sessions.
81 * NAT handle & address management
83 struct GNUNET_NAT_Handle *nat;
88 struct IPv4HttpAddressWrapper *ipv4_addr_head;
93 struct IPv4HttpAddressWrapper *ipv4_addr_tail;
98 struct IPv6HttpAddressWrapper *ipv6_addr_head;
103 struct IPv6HttpAddressWrapper *ipv6_addr_tail;
106 /* Plugin configuration */
132 struct MHD_Daemon *server_v4;
133 GNUNET_SCHEDULER_TaskIdentifier server_v4_task;
135 struct MHD_Daemon *server_v6;
136 GNUNET_SCHEDULER_TaskIdentifier server_v6_task;
142 struct Session *server_semi_head;
144 struct Session *server_semi_tail;
157 GNUNET_SCHEDULER_TaskIdentifier client_perform_task;
162 * Session handle for connections.
168 * Stored in a linked list.
170 struct Session *next;
173 * Stored in a linked list.
175 struct Session *prev;
178 * Pointer to the global plugin struct.
180 struct Plugin *plugin;
183 * The client (used to identify this connection)
188 * Continuation function to call once the transmission buffer
189 * has again space available. NULL if there is no
190 * continuation to call.
192 GNUNET_TRANSPORT_TransmitContinuation transmit_cont;
200 * Closure for transmit_cont.
202 void *transmit_cont_cls;
205 * To whom are we talking to (set to our identity
206 * if we are still waiting for the welcome message)
208 struct GNUNET_PeerIdentity target;
211 * At what time did we reset last_received last?
213 //struct GNUNET_TIME_Absolute last_quota_update;
216 * How many bytes have we received since the "last_quota_update"
219 //uint64_t last_received;
222 * Number of bytes per ms that this peer is allowed
241 delete_session (struct Session *s);
244 create_session (struct Plugin *plugin, const struct GNUNET_PeerIdentity *target,
245 const void *addr, size_t addrlen,
246 GNUNET_TRANSPORT_TransmitContinuation cont, void *cont_cls);
249 http_plugin_address_to_string (void *cls, const void *addr, size_t addrlen);
252 client_disconnect (struct Session *s);
255 client_connect (struct Session *s);
258 client_send (struct Session *s, const char *msgbuf, size_t msgbuf_size);
261 client_start (struct Plugin *plugin);
264 client_stop (struct Plugin *plugin);
267 server_disconnect (struct Session *s);
270 server_send (struct Session *s, const char *msgbuf, size_t msgbuf_size);
273 server_start (struct Plugin *plugin);
276 server_stop (struct Plugin *plugin);
279 notify_session_end (void *cls,
280 const struct GNUNET_PeerIdentity *
281 peer, struct Session * s);
283 /* end of plugin_transport_http.h */