From 871be14a47660ba3f6f73cc8c5c2b8f788bf2a5d Mon Sep 17 00:00:00 2001 From: Jan Kneschke Date: Mon, 28 Feb 2005 09:04:44 +0000 Subject: [PATCH] moved SA_LEN macro to http-header-glue.c git-svn-id: svn+ssh://svn.lighttpd.net/lighttpd/trunk@50 152afb58-edef-0310-8abb-c4023f1b3aa9 --- src/http-header-glue.c | 62 +++++++++++++++++++++++++++++++++++++++++ src/response.c | 63 +----------------------------------------- 2 files changed, 63 insertions(+), 62 deletions(-) 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: */