From 3a628a8b12195e3d15dce032d2e11110a6bb71a0 Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Sat, 22 Nov 2014 20:07:46 +0000 Subject: adding TCP STEALTH support to HTTP client (without integrity protection) --- src/transport/plugin_transport_http.h | 140 ++++++++++++++++------------------ 1 file changed, 66 insertions(+), 74 deletions(-) (limited to 'src/transport/plugin_transport_http.h') diff --git a/src/transport/plugin_transport_http.h b/src/transport/plugin_transport_http.h index ae0c784ee..d43eb9bab 100644 --- a/src/transport/plugin_transport_http.h +++ b/src/transport/plugin_transport_http.h @@ -68,22 +68,19 @@ */ struct Plugin { - /** - * General handles - * --------------- - */ - /** * Our environment. */ struct GNUNET_TRANSPORT_PluginEnvironment *env; /** - * Linked list of open sessions. + * Head of linked list of open sessions. */ - struct Session *head; + /** + * Tail of linked list of open sessions. + */ struct Session *tail; /** @@ -92,25 +89,15 @@ struct Plugin struct GNUNET_NAT_Handle *nat; /** - * List of own addresses - */ - - /** - * IPv4 addresses DLL head + * Our own IPv4 addresses DLL head */ struct HttpAddressWrapper *addr_head; /** - * IPv4 addresses DLL tail + * Our own IPv4 addresses DLL tail */ struct HttpAddressWrapper *addr_tail; - - /** - * Plugin configuration - * -------------------- - */ - /** * External hostname the plugin can be connected to, can be different to * the host's FQDN, used e.g. for reverse proxying @@ -133,9 +120,8 @@ struct Plugin */ GNUNET_SCHEDULER_TaskIdentifier notify_ext_task; - /** - * Plugin name + * Plugin name. * Equals configuration section: transport-http, transport-https */ char *name; @@ -147,21 +133,18 @@ struct Plugin char *protocol; /** - * Use IPv4? - * GNUNET_YES or GNUNET_NO + * Use IPv4? #GNUNET_YES or #GNUNET_NO */ 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 client_only; /** @@ -185,11 +168,6 @@ struct Plugin */ unsigned int inbound_sessions; - /** - * Plugin HTTPS SSL/TLS options - * ---------------------------- - */ - /** * libCurl TLS crypto init string, can be set to enhance performance * @@ -197,7 +175,6 @@ struct Plugin * * Use RC4-128 instead of AES: * NONE:+VERS-TLS1.0:+ARCFOUR-128:+SHA1:+RSA:+COMP-NULL - * */ char *crypto_init; @@ -211,11 +188,6 @@ struct Plugin */ char *cert; - /** - * Plugin values - * ------------- - */ - /** * Current number of establishes connections */ @@ -226,11 +198,6 @@ struct Plugin */ uint32_t last_tag; - /** - * Server handles - * -------------- - */ - /** * MHD IPv4 daemon */ @@ -259,7 +226,6 @@ struct Plugin /** * The IPv6 server is scheduled to run asap */ - int server_v6_immediately; /** @@ -273,17 +239,18 @@ struct Plugin struct sockaddr_in6 *server_addr_v6; /** - * Server semi connections + * Head 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_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 @@ -351,21 +318,28 @@ GNUNET_NETWORK_STRUCT_END struct ServerRequest { - /* _RECV or _SEND */ + /** + * _RECV or _SEND + */ int direction; - /* Should this connection get disconnected? GNUNET_YES/NO */ + /** + * Should this connection get disconnected? #GNUNET_YES / #GNUNET_NO + */ int disconnect; - /* The session this server connection belongs to */ + /** + * The session this server connection belongs to + */ struct Session *session; - /* The MHD connection */ + /** + * The MHD connection + */ struct MHD_Connection *mhd_conn; }; - /** * Session handle for connections. */ @@ -416,7 +390,6 @@ struct Session */ struct HTTP_Message *msg_tail; - /** * Message stream tokenizer for incoming data */ @@ -430,8 +403,8 @@ struct Session /** * 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; @@ -440,10 +413,6 @@ struct Session */ uint32_t tag; - /** - * Client handles - */ - /** * Client send handle */ @@ -466,14 +435,10 @@ struct Session /** * Is client send handle paused since there are no data to send? - * GNUNET_YES/NO + * #GNUNET_YES or #GNUNET_NO */ int client_put_paused; - /** - * Server handles - */ - /** * Client send handle */ @@ -485,6 +450,7 @@ struct Session struct ServerRequest *server_send; }; + /** * Message to send using http */ @@ -523,64 +489,90 @@ struct HTTP_Message GNUNET_TRANSPORT_TransmitContinuation transmit_cont; /** - * Closure for transmit_cont. + * Closure for @e transmit_cont. */ void *transmit_cont_cls; }; + struct Session * -create_session (struct Plugin *plugin, const struct GNUNET_PeerIdentity *target, - const void *addr, size_t addrlen); +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); +exist_session (struct Plugin *plugin, + struct Session *s); + void delete_session (struct Session *s); + int -exist_session (struct Plugin *plugin, struct Session *s); +exist_session (struct Plugin *plugin, + struct Session *s); + 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, - struct Session *session, const char *sender_address, + struct Session *session, + const char *sender_address, uint16_t sender_address_len); + 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_connect (struct Session *s); + int client_send (struct Session *s, struct HTTP_Message *msg); + int client_start (struct Plugin *plugin); + void client_stop (struct Plugin *plugin); + int server_disconnect (struct Session *s); + int server_send (struct Session *s, struct HTTP_Message *msg); + int server_start (struct Plugin *plugin); + void server_stop (struct Plugin *plugin); + void -notify_session_end (void *cls, const struct GNUNET_PeerIdentity *peer, +notify_session_end (void *cls, + const struct GNUNET_PeerIdentity *peer, struct Session *s); + /*#ifndef PLUGIN_TRANSPORT_HTTP_H*/ #endif /* end of plugin_transport_http.h */ -- cgit v1.2.3