diff --git a/src/http-header-glue.c b/src/http-header-glue.c index d9bef500..ab0c88cb 100644 --- a/src/http-header-glue.c +++ b/src/http-header-glue.c @@ -6,6 +6,68 @@ #include "buffer.h" #include "log.h" +/* + * This was 'borrowed' from tcpdump. + * + * + * This is fun. + * + * In older BSD systems, socket addresses were fixed-length, and + * "sizeof (struct sockaddr)" gave the size of the structure. + * All addresses fit within a "struct sockaddr". + * + * In newer BSD systems, the socket address is variable-length, and + * there's an "sa_len" field giving the length of the structure; + * this allows socket addresses to be longer than 2 bytes of family + * and 14 bytes of data. + * + * Some commercial UNIXes use the old BSD scheme, some use the RFC 2553 + * variant of the old BSD scheme (with "struct sockaddr_storage" rather + * than "struct sockaddr"), and some use the new BSD scheme. + * + * Some versions of GNU libc use neither scheme, but has an "SA_LEN()" + * macro that determines the size based on the address family. Other + * versions don't have "SA_LEN()" (as it was in drafts of RFC 2553 + * but not in the final version). On the latter systems, we explicitly + * check the AF_ type to determine the length; we assume that on + * all those systems we have "struct sockaddr_storage". + */ + +#ifdef HAVE_IPV6 +# ifndef SA_LEN +# ifdef HAVE_SOCKADDR_SA_LEN +# define SA_LEN(addr) ((addr)->sa_len) +# else /* HAVE_SOCKADDR_SA_LEN */ +# ifdef HAVE_STRUCT_SOCKADDR_STORAGE +static size_t get_sa_len(const struct sockaddr *addr) { + switch (addr->sa_family) { + +# ifdef AF_INET + case AF_INET: + return (sizeof (struct sockaddr_in)); +# endif + +# ifdef AF_INET6 + case AF_INET6: + return (sizeof (struct sockaddr_in6)); +# endif + + default: + return (sizeof (struct sockaddr)); + + } +} +# define SA_LEN(addr) (get_sa_len(addr)) +# else /* HAVE_SOCKADDR_STORAGE */ +# define SA_LEN(addr) (sizeof (struct sockaddr)) +# endif /* HAVE_SOCKADDR_STORAGE */ +# endif /* HAVE_SOCKADDR_SA_LEN */ +# endif /* SA_LEN */ +#endif + + + + int response_header_insert(server *srv, connection *con, const char *key, size_t keylen, const char *value, size_t vallen) { data_string *ds; diff --git a/src/response.c b/src/response.c index 36146737..349b6064 100644 --- a/src/response.c +++ b/src/response.c @@ -30,67 +30,6 @@ #include #endif -/* - * This was 'borrowed' from tcpdump. - * - * - * This is fun. - * - * In older BSD systems, socket addresses were fixed-length, and - * "sizeof (struct sockaddr)" gave the size of the structure. - * All addresses fit within a "struct sockaddr". - * - * In newer BSD systems, the socket address is variable-length, and - * there's an "sa_len" field giving the length of the structure; - * this allows socket addresses to be longer than 2 bytes of family - * and 14 bytes of data. - * - * Some commercial UNIXes use the old BSD scheme, some use the RFC 2553 - * variant of the old BSD scheme (with "struct sockaddr_storage" rather - * than "struct sockaddr"), and some use the new BSD scheme. - * - * Some versions of GNU libc use neither scheme, but has an "SA_LEN()" - * macro that determines the size based on the address family. Other - * versions don't have "SA_LEN()" (as it was in drafts of RFC 2553 - * but not in the final version). On the latter systems, we explicitly - * check the AF_ type to determine the length; we assume that on - * all those systems we have "struct sockaddr_storage". - */ - -#ifdef HAVE_IPV6 -# ifndef SA_LEN -# ifdef HAVE_SOCKADDR_SA_LEN -# define SA_LEN(addr) ((addr)->sa_len) -# else /* HAVE_SOCKADDR_SA_LEN */ -# ifdef HAVE_STRUCT_SOCKADDR_STORAGE -static size_t get_sa_len(const struct sockaddr *addr) { - switch (addr->sa_family) { - -# ifdef AF_INET - case AF_INET: - return (sizeof (struct sockaddr_in)); -# endif - -# ifdef AF_INET6 - case AF_INET6: - return (sizeof (struct sockaddr_in6)); -# endif - - default: - return (sizeof (struct sockaddr)); - - } -} -# define SA_LEN(addr) (get_sa_len(addr)) -# else /* HAVE_SOCKADDR_STORAGE */ -# define SA_LEN(addr) (sizeof (struct sockaddr)) -# endif /* HAVE_SOCKADDR_STORAGE */ -# endif /* HAVE_SOCKADDR_SA_LEN */ -# endif /* SA_LEN */ -#endif - - - int http_response_write_basic_header(server *srv, connection *con) { size_t i; buffer *b; @@ -766,7 +705,7 @@ handler_t http_response_prepare(server *srv, connection *con) { * */ - buffer_copy_string(con->uri.scheme, con->conf.is_ssl ? "http" : "https"); + buffer_copy_string(con->uri.scheme, con->conf.is_ssl ? "https" : "http"); buffer_copy_string_buffer(con->uri.authority, con->request.http_host); config_patch_connection(srv, con, CONST_STR_LEN("HTTPhost")); /* Host: */