From d26b19c91736433a783ce22b2d95ed490b6d9ca6 Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Tue, 24 Dec 2013 18:44:11 +0000 Subject: -doxygen, indentation fixes --- src/transport/plugin_transport_http_common.c | 396 ++++++++++++++------------- 1 file changed, 211 insertions(+), 185 deletions(-) (limited to 'src/transport/plugin_transport_http_common.c') diff --git a/src/transport/plugin_transport_http_common.c b/src/transport/plugin_transport_http_common.c index c020118ac..131624f16 100644 --- a/src/transport/plugin_transport_http_common.c +++ b/src/transport/plugin_transport_http_common.c @@ -1,6 +1,6 @@ /* This file is part of GNUnet - (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Christian Grothoff (and other contributing authors) + (C) 2002-2013 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 @@ -28,12 +28,13 @@ #include "gnunet_transport_plugin.h" #include "plugin_transport_http_common.h" + struct SplittedHTTPAddress { - char *protocol; - char *host; - char *path; - int port; + char *protocol; + char *host; + char *path; + int port; }; @@ -49,137 +50,138 @@ http_clean_splitted (struct SplittedHTTPAddress *spa) } } + struct SplittedHTTPAddress * http_split_address (const char * addr) { - struct SplittedHTTPAddress *sp; - char *src = GNUNET_strdup (addr); - char *protocol_start = NULL; - char *host_start = NULL; - char *v6_end = NULL; - char *port_start = NULL; - char *path_start = NULL; - protocol_start = src; - sp = GNUNET_new (struct SplittedHTTPAddress); - - /* Address string consists of protocol://host[:port]path*/ - - host_start = strstr (src, "://"); - if (NULL == host_start) - { - GNUNET_free (src); - GNUNET_free (sp); - return NULL; - } - - host_start[0] = '\0'; - sp->protocol = GNUNET_strdup (protocol_start); - - host_start += strlen ("://"); - if (strlen (host_start) == 0) - { - GNUNET_free (src); - GNUNET_free (sp->protocol); - GNUNET_free (sp); - return NULL; - } - - /* Find path start */ - path_start = strchr (host_start, '/'); - if (NULL != path_start) - { - sp->path = GNUNET_strdup (path_start); - path_start[0] = '\0'; - } - else - sp->path = GNUNET_strdup (""); - - if (strlen(host_start) < 1) - { - GNUNET_free (src); - GNUNET_free (sp->protocol); - GNUNET_free (sp->path); - GNUNET_free (sp); - return NULL; - } - - if (NULL != (port_start = strrchr (host_start, ':'))) - { - /* *We COULD have a port, but also an IPv6 address! */ - if (NULL != (v6_end = strchr(host_start, ']'))) - { - if (v6_end < port_start) - { - /* IPv6 address + port */ - port_start[0] = '\0'; - port_start ++; - sp->port = atoi (port_start); - if ((0 == sp->port) || (65535 < sp->port)) - { - GNUNET_free (src); - GNUNET_free (sp->protocol); - GNUNET_free (sp->path); - GNUNET_free (sp); - return NULL; - } - } - else - { - /* IPv6 address + no port */ - if (0 == strcmp(sp->protocol, "https")) - sp->port = HTTPS_DEFAULT_PORT; - else if (0 == strcmp(sp->protocol, "http")) - sp->port = HTTP_DEFAULT_PORT; - } - } - else - { - /* No IPv6 address */ - port_start[0] = '\0'; - port_start ++; - sp->port = atoi (port_start); - if ((0 == sp->port) || (65535 < sp->port)) - { - GNUNET_free (src); - GNUNET_free (sp->protocol); - GNUNET_free (sp->path); - GNUNET_free (sp); - return NULL; - } - } - } - else - { - /* No ':' as port separator, default port for protocol */ - if (0 == strcmp(sp->protocol, "https")) - sp->port = HTTPS_DEFAULT_PORT; - else if (0 == strcmp(sp->protocol, "http")) - sp->port = HTTP_DEFAULT_PORT; - else - { - GNUNET_break (0); - GNUNET_free (src); - GNUNET_free (sp->protocol); - GNUNET_free (sp->path); - GNUNET_free (sp); - return NULL; - } - } - if (strlen (host_start) > 0) - sp->host = GNUNET_strdup (host_start); - else - { - GNUNET_break (0); - GNUNET_free (src); - GNUNET_free (sp->protocol); - GNUNET_free (sp->path); - GNUNET_free (sp); - return NULL; - } - GNUNET_free (src); - return sp; + struct SplittedHTTPAddress *sp; + char *src = GNUNET_strdup (addr); + char *protocol_start = NULL; + char *host_start = NULL; + char *v6_end = NULL; + char *port_start = NULL; + char *path_start = NULL; + protocol_start = src; + + sp = GNUNET_new (struct SplittedHTTPAddress); + /* Address string consists of protocol://host[:port]path*/ + + host_start = strstr (src, "://"); + if (NULL == host_start) + { + GNUNET_free (src); + GNUNET_free (sp); + return NULL; + } + host_start[0] = '\0'; + sp->protocol = GNUNET_strdup (protocol_start); + + host_start += strlen ("://"); + if (strlen (host_start) == 0) + { + GNUNET_free (src); + GNUNET_free (sp->protocol); + GNUNET_free (sp); + return NULL; + } + + /* Find path start */ + path_start = strchr (host_start, '/'); + if (NULL != path_start) + { + sp->path = GNUNET_strdup (path_start); + path_start[0] = '\0'; + } + else + sp->path = GNUNET_strdup (""); + + if (strlen(host_start) < 1) + { + GNUNET_free (src); + GNUNET_free (sp->protocol); + GNUNET_free (sp->path); + GNUNET_free (sp); + return NULL; + } + + if (NULL != (port_start = strrchr (host_start, ':'))) + { + /* *We COULD have a port, but also an IPv6 address! */ + if (NULL != (v6_end = strchr(host_start, ']'))) + { + if (v6_end < port_start) + { + /* IPv6 address + port */ + port_start[0] = '\0'; + port_start ++; + sp->port = atoi (port_start); + if ((0 == sp->port) || (65535 < sp->port)) + { + GNUNET_free (src); + GNUNET_free (sp->protocol); + GNUNET_free (sp->path); + GNUNET_free (sp); + return NULL; + } + } + else + { + /* IPv6 address + no port */ + if (0 == strcmp(sp->protocol, "https")) + sp->port = HTTPS_DEFAULT_PORT; + else if (0 == strcmp(sp->protocol, "http")) + sp->port = HTTP_DEFAULT_PORT; + } + } + else + { + /* No IPv6 address */ + port_start[0] = '\0'; + port_start ++; + sp->port = atoi (port_start); + if ((0 == sp->port) || (65535 < sp->port)) + { + GNUNET_free (src); + GNUNET_free (sp->protocol); + GNUNET_free (sp->path); + GNUNET_free (sp); + return NULL; + } + } + } + else + { + /* No ':' as port separator, default port for protocol */ + if (0 == strcmp(sp->protocol, "https")) + sp->port = HTTPS_DEFAULT_PORT; + else if (0 == strcmp(sp->protocol, "http")) + sp->port = HTTP_DEFAULT_PORT; + else + { + GNUNET_break (0); + GNUNET_free (src); + GNUNET_free (sp->protocol); + GNUNET_free (sp->path); + GNUNET_free (sp); + return NULL; + } + } + if (strlen (host_start) > 0) + sp->host = GNUNET_strdup (host_start); + else + { + GNUNET_break (0); + GNUNET_free (src); + GNUNET_free (sp->protocol); + GNUNET_free (sp->path); + GNUNET_free (sp); + return NULL; + } + GNUNET_free (src); + return sp; } + /** * Convert the transports address to a nice, human-readable * format. @@ -188,53 +190,60 @@ http_split_address (const char * addr) * @param type name of the transport that generated the address * @param addr one of the addresses of the host, NULL for the last address * the specific address format depends on the transport - * @param addrlen length of the address + * @param addrlen length of the @a addr * @param numeric should (IP) addresses be displayed in numeric form? * @param timeout after how long should we give up? * @param asc function to call on each string - * @param asc_cls closure for asc + * @param asc_cls closure for @a asc */ void -http_common_plugin_address_pretty_printer (void *cls, const char *type, - const void *addr, size_t addrlen, - int numeric, - struct GNUNET_TIME_Relative timeout, - GNUNET_TRANSPORT_AddressStringCallback - asc, void *asc_cls) +http_common_plugin_address_pretty_printer (void *cls, + const char *type, + const void *addr, + size_t addrlen, + int numeric, + struct GNUNET_TIME_Relative timeout, + GNUNET_TRANSPORT_AddressStringCallback asc, + void *asc_cls) { - const struct HttpAddress *address = addr; + const struct HttpAddress *address = addr; - if (NULL == http_common_plugin_address_to_string (NULL, (char *) type, address, addrlen)) + if (NULL == + http_common_plugin_address_to_string (NULL, type, + address, addrlen)) { - asc (asc_cls, NULL); - return; + asc (asc_cls, NULL); + return; } - asc (asc_cls, http_common_plugin_address_to_string (NULL, (char *) type, address, addrlen)); + asc (asc_cls, http_common_plugin_address_to_string (NULL, + type, + address, addrlen)); asc (asc_cls, NULL); } + const char * -http_common_plugin_address_to_url (void *cls, const void *addr, size_t addrlen) +http_common_plugin_address_to_url (void *cls, + const void *addr, + size_t addrlen) { static char rbuf[1024]; - const struct HttpAddress *address = addr; + const struct HttpAddress *address = addr; const char * addr_str; - - if (NULL == addr) { - GNUNET_break (0); + GNUNET_break (0); return NULL; } if (0 >= addrlen) { - GNUNET_break (0); + GNUNET_break (0); return NULL; } if (addrlen != http_common_address_get_size (address)) { - GNUNET_break (0); + GNUNET_break (0); return NULL; } addr_str = (char *) &address[1]; @@ -246,6 +255,7 @@ http_common_plugin_address_to_url (void *cls, const void *addr, size_t addrlen) return rbuf; } + /** * Function called for a quick conversion of the binary address to * a numeric address. Note that the caller must not free the @@ -259,10 +269,13 @@ http_common_plugin_address_to_url (void *cls, const void *addr, size_t addrlen) * @return string representing the same address */ const char * -http_common_plugin_address_to_string (void *cls, char *plugin, const void *addr, size_t addrlen) +http_common_plugin_address_to_string (void *cls, + const char *plugin, + const void *addr, + size_t addrlen) { static char rbuf[1024]; - const struct HttpAddress *address = addr; + const struct HttpAddress *address = addr; const char * addr_str; char *res; @@ -281,35 +294,36 @@ http_common_plugin_address_to_string (void *cls, char *plugin, const void *addr, GNUNET_asprintf (&res, "%s.%u.%s", plugin, ntohl(address->options), &address[1]); if (strlen(res) + 1 < 500) { - memcpy (rbuf, res, strlen(res) + 1); - GNUNET_free (res); - return rbuf; + memcpy (rbuf, res, strlen(res) + 1); + GNUNET_free (res); + return rbuf; } GNUNET_break (0); - GNUNET_free (res); - return NULL; + GNUNET_free (res); + return NULL; } + /** * Function called to convert a string address to * a binary address. * * @param cls closure ('struct Plugin*') * @param addr string address - * @param addrlen length of the address + * @param addrlen length of the @a addr * @param buf location to store the buffer - * If the function returns GNUNET_SYSERR, its contents are undefined. + * If the function returns #GNUNET_SYSERR, its contents are undefined. * @param added length of created address - * @return GNUNET_OK on success, GNUNET_SYSERR on failure + * @return #GNUNET_OK on success, #GNUNET_SYSERR on failure */ int http_common_plugin_string_to_address (void *cls, - const char *addr, - uint16_t addrlen, - void **buf, - size_t *added) + const char *addr, + uint16_t addrlen, + void **buf, + size_t *added) { - struct HttpAddress *a; + struct HttpAddress *a; char *address; char *plugin; char *optionstr; @@ -368,6 +382,7 @@ http_common_plugin_string_to_address (void *cls, return GNUNET_OK; } + /** * Create a HTTP address from a socketaddr * @@ -377,45 +392,51 @@ http_common_plugin_string_to_address (void *cls, * @return the HttpAddress */ struct HttpAddress * -http_common_address_from_socket (const char *protocol, const struct sockaddr *addr, socklen_t addrlen) +http_common_address_from_socket (const char *protocol, + const struct sockaddr *addr, + socklen_t addrlen) { struct HttpAddress *address = NULL; char *res; size_t len; - GNUNET_asprintf(&res, "%s://%s", protocol, GNUNET_a2s (addr, addrlen)); + GNUNET_asprintf(&res, + "%s://%s", + protocol, + GNUNET_a2s (addr, addrlen)); len = strlen (res)+1; - address = GNUNET_malloc (sizeof (struct HttpAddress) + len); address->options = htonl (HTTP_OPTIONS_NONE); address->urlen = htonl (len); memcpy (&address[1], res, len); GNUNET_free (res); - return address; } + /** * Create a socketaddr from a HTTP address * - * @param addr sockaddr * address - * @param addrlen length of the address + * @param addr a `sockaddr *` address + * @param addrlen length of the @a addr * @param res the result: - * GNUNET_SYSERR, invalid input, - * GNUNET_YES: could convert to ip, - * GNUNET_NO: valid input but could not convert to ip (hostname?) + * #GNUNET_SYSERR, invalid input, + * #GNUNET_YES: could convert to ip, + * #GNUNET_NO: valid input but could not convert to ip (hostname?) * @return the string */ struct sockaddr * -http_common_socket_from_address (const void *addr, size_t addrlen, int *res) +http_common_socket_from_address (const void *addr, + size_t addrlen, + int *res) { - const struct HttpAddress *ha; - struct SplittedHTTPAddress * spa; + const struct HttpAddress *ha; + struct SplittedHTTPAddress * spa; struct sockaddr_storage *s; - (*res) = GNUNET_SYSERR; char * to_conv; size_t urlen; + (*res) = GNUNET_SYSERR; ha = (const struct HttpAddress *) addr; if (NULL == addr) { @@ -480,6 +501,7 @@ http_common_socket_from_address (const void *addr, size_t addrlen, int *res) return (struct sockaddr *) s; } + /** * Get the length of an address * @@ -492,6 +514,7 @@ http_common_address_get_size (const struct HttpAddress * addr) return sizeof (struct HttpAddress) + ntohl(addr->urlen); } + /** * Compare addr1 to addr2 * @@ -499,15 +522,18 @@ http_common_address_get_size (const struct HttpAddress * addr) * @param addrlen1 address 1 length * @param addr2 address2 * @param addrlen2 address 2 length - * @return GNUNET_YES if equal, GNUNET_NO if not, GNUNET_SYSERR on error + * @return #GNUNET_YES if equal, #GNUNET_NO if not, #GNUNET_SYSERR on error */ size_t -http_common_cmp_addresses (const void *addr1, size_t addrlen1, const void *addr2, size_t addrlen2) +http_common_cmp_addresses (const void *addr1, + size_t addrlen1, + const void *addr2, + size_t addrlen2) { - const struct HttpAddress *ha1; - const struct HttpAddress *ha2; - const char *a1 = (const char *) addr1; - const char *a2 = (const char *) addr2; + const char *a1 = addr1; + const char *a2 = addr2; + const struct HttpAddress *ha1; + const struct HttpAddress *ha2; ha1 = (const struct HttpAddress *) a1; ha2 = (const struct HttpAddress *) a2; -- cgit v1.2.3