projects
/
oweals
/
gnunet.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
- fix
[oweals/gnunet.git]
/
src
/
transport
/
plugin_transport_http.h
diff --git
a/src/transport/plugin_transport_http.h
b/src/transport/plugin_transport_http.h
index 6835beab4bedd60c86b926096c42462df8aefe49..94952173c6879ca9c8486a71b1b22450dbb63167 100644
(file)
--- a/
src/transport/plugin_transport_http.h
+++ b/
src/transport/plugin_transport_http.h
@@
-1,6
+1,6
@@
/*
This file is part of GNUnet
/*
This file is part of GNUnet
- (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Christian Grothoff (and other contributing authors)
+
Copyright
(C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Christian Grothoff (and other contributing authors)
GNUnet is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published
GNUnet is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published
@@
-14,8
+14,8
@@
You should have received a copy of the GNU General Public License
along with GNUnet; see the file COPYING. If not, write to the
You should have received a copy of the GNU General Public License
along with GNUnet; see the file COPYING. If not, write to the
- Free Software Foundation, Inc., 5
9 Temple Place - Suite 330
,
- Boston, MA 0211
1-1307
, USA.
+ Free Software Foundation, Inc., 5
1 Franklin Street, Fifth Floor
,
+ Boston, MA 0211
0-1301
, USA.
*/
/**
*/
/**
@@
-23,6
+23,8
@@
* @brief http transport service plugin
* @author Matthias Wachs
*/
* @brief http transport service plugin
* @author Matthias Wachs
*/
+#ifndef PLUGIN_TRANSPORT_HTTP_H
+#define PLUGIN_TRANSPORT_HTTP_H
#include "platform.h"
#include "gnunet_common.h"
#include "platform.h"
#include "gnunet_common.h"
@@
-39,10
+41,14
@@
#include "gnunet_os_lib.h"
#include "gnunet_nat_lib.h"
#include "microhttpd.h"
#include "gnunet_os_lib.h"
#include "gnunet_nat_lib.h"
#include "microhttpd.h"
+#if HAVE_CURL_CURL_H
#include <curl/curl.h>
#include <curl/curl.h>
+#elif HAVE_GNURL_CURL_H
+#include <gnurl/curl.h>
+#endif
-#define DEBUG_HTTP GNUNET_
YES
+#define DEBUG_HTTP GNUNET_
EXTRA_LOGGING
#define VERBOSE_SERVER GNUNET_EXTRA_LOGGING
#define VERBOSE_CLIENT GNUNET_EXTRA_LOGGING
#define VERBOSE_CURL GNUNET_NO
#define VERBOSE_SERVER GNUNET_EXTRA_LOGGING
#define VERBOSE_CLIENT GNUNET_EXTRA_LOGGING
#define VERBOSE_CURL GNUNET_NO
@@
-66,22
+72,19
@@
*/
struct Plugin
{
*/
struct Plugin
{
- /**
- * General handles
- * ---------------
- */
-
/**
* Our environment.
*/
struct GNUNET_TRANSPORT_PluginEnvironment *env;
/**
/**
* Our environment.
*/
struct GNUNET_TRANSPORT_PluginEnvironment *env;
/**
- *
L
inked list of open sessions.
+ *
Head of l
inked list of open sessions.
*/
*/
-
struct Session *head;
struct Session *head;
+ /**
+ * Tail of linked list of open sessions.
+ */
struct Session *tail;
/**
struct Session *tail;
/**
@@
-90,36
+93,39
@@
struct Plugin
struct GNUNET_NAT_Handle *nat;
/**
struct GNUNET_NAT_Handle *nat;
/**
- *
List of own addresses
+ *
Our own IPv4 addresses DLL head
*/
*/
+ struct HttpAddressWrapper *addr_head;
/**
/**
- *
IPv4 addresses DLL head
+ *
Our own IPv4 addresses DLL tail
*/
*/
- struct
IPv4HttpAddressWrapper *ipv4_addr_head
;
+ struct
HttpAddressWrapper *addr_tail
;
/**
/**
- * IPv4 addresses DLL tail
+ * External hostname the plugin can be connected to, can be different to
+ * the host's FQDN, used e.g. for reverse proxying
*/
*/
-
struct IPv4HttpAddressWrapper *ipv4_addr_tail
;
+
char *external_hostname
;
/**
/**
- * IPv6 addresses DLL head
+ * External hostname the plugin can be connected to, can be different to
+ * the host's FQDN, used e.g. for reverse proxying
*/
*/
- struct
IPv6HttpAddressWrapper *ipv6_addr_head
;
+ struct
HttpAddress *ext_addr
;
/**
/**
- *
IPv6 addresses DLL tail
+ *
External address length
*/
*/
- s
truct IPv6HttpAddressWrapper *ipv6_addr_tail
;
+ s
ize_t ext_addr_len
;
/**
/**
- * Plugin configuration
- * --------------------
+ * Task calling transport service about external address
*/
*/
+ struct GNUNET_SCHEDULER_Task * notify_ext_task;
/**
/**
- * Plugin name
+ * Plugin name
.
* Equals configuration section: transport-http, transport-https
*/
char *name;
* Equals configuration section: transport-http, transport-https
*/
char *name;
@@
-131,21
+137,18
@@
struct Plugin
char *protocol;
/**
char *protocol;
/**
- * Use IPv4?
- * GNUNET_YES or GNUNET_NO
+ * Use IPv4? #GNUNET_YES or #GNUNET_NO
*/
int ipv4;
/**
*/
int ipv4;
/**
- * Use IPv6?
- * GNUNET_YES or GNUNET_NO
+ * Use IPv6? #GNUNET_YES or #GNUNET_NO
*/
int ipv6;
/**
* Does plugin just use outbound connections and not accept inbound?
*/
*/
int ipv6;
/**
* Does plugin just use outbound connections and not accept inbound?
*/
-
int client_only;
/**
int client_only;
/**
@@
-160,9
+163,14
@@
struct Plugin
int max_connections;
/**
int max_connections;
/**
- * Plugin HTTPS SSL/TLS options
- * ----------------------------
+ * Number of outbound sessions
+ */
+ unsigned int outbound_sessions;
+
+ /**
+ * Number of inbound sessions
*/
*/
+ unsigned int inbound_sessions;
/**
* libCurl TLS crypto init string, can be set to enhance performance
/**
* libCurl TLS crypto init string, can be set to enhance performance
@@
-171,7
+179,6
@@
struct Plugin
*
* Use RC4-128 instead of AES:
* NONE:+VERS-TLS1.0:+ARCFOUR-128:+SHA1:+RSA:+COMP-NULL
*
* Use RC4-128 instead of AES:
* NONE:+VERS-TLS1.0:+ARCFOUR-128:+SHA1:+RSA:+COMP-NULL
- *
*/
char *crypto_init;
*/
char *crypto_init;
@@
-185,11
+192,6
@@
struct Plugin
*/
char *cert;
*/
char *cert;
- /**
- * Plugin values
- * -------------
- */
-
/**
* Current number of establishes connections
*/
/**
* Current number of establishes connections
*/
@@
-200,11
+202,6
@@
struct Plugin
*/
uint32_t last_tag;
*/
uint32_t last_tag;
- /**
- * Server handles
- * --------------
- */
-
/**
* MHD IPv4 daemon
*/
/**
* MHD IPv4 daemon
*/
@@
-213,7
+210,12
@@
struct Plugin
/**
* MHD IPv4 task
*/
/**
* MHD IPv4 task
*/
- GNUNET_SCHEDULER_TaskIdentifier server_v4_task;
+ struct GNUNET_SCHEDULER_Task * server_v4_task;
+
+ /**
+ * The IPv4 server is scheduled to run asap
+ */
+ int server_v4_immediately;
/**
* MHD IPv6 daemon
/**
* MHD IPv6 daemon
@@
-223,7
+225,12
@@
struct Plugin
/**
* MHD IPv4 task
*/
/**
* MHD IPv4 task
*/
- GNUNET_SCHEDULER_TaskIdentifier server_v6_task;
+ struct GNUNET_SCHEDULER_Task * server_v6_task;
+
+ /**
+ * The IPv6 server is scheduled to run asap
+ */
+ int server_v6_immediately;
/**
* IPv4 server socket to bind to
/**
* IPv4 server socket to bind to
@@
-236,17
+243,18
@@
struct Plugin
struct sockaddr_in6 *server_addr_v6;
/**
struct sockaddr_in6 *server_addr_v6;
/**
- *
S
erver semi connections
+ *
Head of s
erver semi connections
* A full session consists of 2 semi-connections: send and receive
* If not both directions are established the server keeps this sessions here
*/
struct Session *server_semi_head;
* A full session consists of 2 semi-connections: send and receive
* If not both directions are established the server keeps this sessions here
*/
struct Session *server_semi_head;
- struct Session *server_semi_tail;
-
- /*
- *
Client handles
+ /**
+ * Tail of server semi connections
+ * A full session consists of 2 semi-connections: send and receive
+ *
If not both directions are established the server keeps this sessions here
*/
*/
+ struct Session *server_semi_tail;
/**
* cURL Multihandle
/**
* cURL Multihandle
@@
-256,8
+264,26
@@
struct Plugin
/**
* curl perform task
*/
/**
* curl perform task
*/
- GNUNET_SCHEDULER_TaskIdentifier client_perform_task;
+ struct GNUNET_SCHEDULER_Task * client_perform_task;
+
+};
+
+GNUNET_NETWORK_STRUCT_BEGIN
+
+/**
+ * HTTP addresses including a full URI
+ */
+struct HttpAddress
+{
+ /**
+ * Length of the address following in NBO
+ */
+ uint32_t addr_len GNUNET_PACKED;
+ /**
+ * Address following
+ */
+ void *addr GNUNET_PACKED;
};
/**
};
/**
@@
-291,6
+317,31
@@
struct IPv6HttpAddress
*/
uint16_t u6_port GNUNET_PACKED;
};
*/
uint16_t u6_port GNUNET_PACKED;
};
+GNUNET_NETWORK_STRUCT_END
+
+
+struct ServerRequest
+{
+ /**
+ * _RECV or _SEND
+ */
+ int direction;
+
+ /**
+ * Should this connection get disconnected? #GNUNET_YES / #GNUNET_NO
+ */
+ int disconnect;
+
+ /**
+ * The session this server connection belongs to
+ */
+ struct Session *session;
+
+ /**
+ * The MHD connection
+ */
+ struct MHD_Connection *mhd_conn;
+};
/**
/**
@@
-298,6
+349,10
@@
struct IPv6HttpAddress
*/
struct Session
{
*/
struct Session
{
+ /**
+ * To whom are we talking to
+ */
+ struct GNUNET_PeerIdentity target;
/**
* Stored in a linked list.
/**
* Stored in a linked list.
@@
-325,9
+380,9
@@
struct Session
size_t addrlen;
/**
size_t addrlen;
/**
- *
To whom are we talking to
+ *
ATS network type in NBO
*/
*/
-
struct GNUNET_PeerIdentity target
;
+
uint32_t ats_address_network_type
;
/**
* next pointer for double linked list
/**
* next pointer for double linked list
@@
-339,7
+394,6
@@
struct Session
*/
struct HTTP_Message *msg_tail;
*/
struct HTTP_Message *msg_tail;
-
/**
* Message stream tokenizer for incoming data
*/
/**
* Message stream tokenizer for incoming data
*/
@@
-353,8
+407,8
@@
struct Session
/**
* Inbound or outbound connection
/**
* Inbound or outbound connection
- * Outbound: GNUNET_NO (client is used to send and receive)
- * Inbound : GNUNET_YES (server is used to send and receive)
+ * Outbound:
#
GNUNET_NO (client is used to send and receive)
+ * Inbound :
#
GNUNET_YES (server is used to send and receive)
*/
int inbound;
*/
int inbound;
@@
-363,10
+417,6
@@
struct Session
*/
uint32_t tag;
*/
uint32_t tag;
- /**
- * Client handles
- */
-
/**
* Client send handle
*/
/**
* Client send handle
*/
@@
-380,29
+430,31
@@
struct Session
/**
* Task to wake up client receive handle when receiving is allowed again
*/
/**
* Task to wake up client receive handle when receiving is allowed again
*/
-
GNUNET_SCHEDULER_TaskIdentifier
recv_wakeup_task;
+
struct GNUNET_SCHEDULER_Task *
recv_wakeup_task;
/**
/**
- * Is client send handle paused since there are no data to send?
- * GNUNET_YES/NO
+ * Session timeout task
*/
*/
-
int client_put_paused
;
+
struct GNUNET_SCHEDULER_Task * timeout_task
;
/**
/**
- * Server handles
+ * Is client send handle paused since there are no data to send?
+ * #GNUNET_YES or #GNUNET_NO
*/
*/
+ int client_put_paused;
/**
* Client send handle
*/
/**
* Client send handle
*/
-
void
*server_recv;
+
struct ServerRequest
*server_recv;
/**
* Client send handle
*/
/**
* Client send handle
*/
-
void
*server_send;
+
struct ServerRequest
*server_send;
};
};
+
/**
* Message to send using http
*/
/**
* Message to send using http
*/
@@
-441,57
+493,90
@@
struct HTTP_Message
GNUNET_TRANSPORT_TransmitContinuation transmit_cont;
/**
GNUNET_TRANSPORT_TransmitContinuation transmit_cont;
/**
- * Closure for transmit_cont.
+ * Closure for
@e
transmit_cont.
*/
void *transmit_cont_cls;
};
*/
void *transmit_cont_cls;
};
+
+struct Session *
+create_session (struct Plugin *plugin,
+ const struct GNUNET_PeerIdentity *target,
+ const void *addr,
+ size_t addrlen);
+
+
+int
+exist_session (struct Plugin *plugin,
+ struct Session *s);
+
+
void
delete_session (struct Session *s);
void
delete_session (struct Session *s);
-struct Session *
-create_session (struct Plugin *plugin, const struct GNUNET_PeerIdentity *target,
- const void *addr, size_t addrlen,
- GNUNET_TRANSPORT_TransmitContinuation cont, void *cont_cls);
+
+int
+exist_session (struct Plugin *plugin,
+ struct Session *s);
+
struct GNUNET_TIME_Relative
struct GNUNET_TIME_Relative
-http_plugin_receive (void *cls, const struct GNUNET_PeerIdentity *peer,
+http_plugin_receive (void *cls,
+ const struct GNUNET_PeerIdentity *peer,
const struct GNUNET_MessageHeader *message,
const struct GNUNET_MessageHeader *message,
- struct Session *session, const char *sender_address,
+ struct Session *session,
+ const char *sender_address,
uint16_t sender_address_len);
uint16_t sender_address_len);
+
const char *
const char *
-http_plugin_address_to_string (void *cls, const void *addr, size_t addrlen);
+http_plugin_address_to_string (void *cls,
+ const void *addr,
+ size_t addrlen);
+
int
client_disconnect (struct Session *s);
int
client_disconnect (struct Session *s);
+
int
client_connect (struct Session *s);
int
client_connect (struct Session *s);
+
int
client_send (struct Session *s, struct HTTP_Message *msg);
int
client_send (struct Session *s, struct HTTP_Message *msg);
+
int
client_start (struct Plugin *plugin);
int
client_start (struct Plugin *plugin);
+
void
client_stop (struct Plugin *plugin);
void
client_stop (struct Plugin *plugin);
+
int
server_disconnect (struct Session *s);
int
server_disconnect (struct Session *s);
+
int
server_send (struct Session *s, struct HTTP_Message *msg);
int
server_send (struct Session *s, struct HTTP_Message *msg);
+
int
server_start (struct Plugin *plugin);
int
server_start (struct Plugin *plugin);
+
void
server_stop (struct Plugin *plugin);
void
server_stop (struct Plugin *plugin);
+
void
void
-notify_session_end (void *cls, const struct GNUNET_PeerIdentity *peer,
+notify_session_end (void *cls,
+ const struct GNUNET_PeerIdentity *peer,
struct Session *s);
struct Session *s);
+
+/*#ifndef PLUGIN_TRANSPORT_HTTP_H*/
+#endif
/* end of plugin_transport_http.h */
/* end of plugin_transport_http.h */