#include "apr_time.h"
#include "apr_network_io.h"
-#ifdef HAVE_NETINET_IN_H
-#include <netinet/in.h>
-#endif
-
#ifdef CORE_PRIVATE
/* ----------------------------- config dir ------------------------------ */
/* Who is the client? */
/** local address */
- struct sockaddr_in local_addr;
+ apr_sockaddr_t *local_addr;
/** remote address */
- struct sockaddr_in remote_addr;
+ apr_sockaddr_t *remote_addr;
/** Client's IP address */
char *remote_ip;
/** Client's DNS name, if known. NULL if DNS hasn't been checked,
return 1;
case T_IP:
+ /* XXX handle IPv6 with separate T_IP6 type or add common
+ * address masking operations to APR */
if (ap[i].x.ip.net != APR_INADDR_NONE
- && (r->connection->remote_addr.sin_addr.s_addr
+ && (r->connection->remote_addr->sa.sin.sin_addr.s_addr
& ap[i].x.ip.mask) == ap[i].x.ip.net) {
return 1;
}
{
dav_lookup_result result = { 0 };
const char *scheme;
- unsigned short port = ntohs(r->connection->local_addr.sin_port);
+ apr_port_t port;
uri_components comp;
char *new_file;
const char *domain;
the port, must match our port.
the URI must not have a query (args) or a fragment
*/
+ apr_get_port(&port, r->connection->local_addr);
if (strcasecmp(comp.scheme, scheme) != 0 ||
comp.port != port) {
result.err.status = HTTP_BAD_GATEWAY;
for (haddr = hptr->h_addr_list; *haddr; haddr++) {
if (((struct in_addr *)(*haddr))->s_addr
- == conn->remote_addr.sin_addr.s_addr) {
+ == conn->remote_addr->sa.sin.sin_addr.s_addr) {
conn->double_reverse = 1;
return;
}
apr_socket_t *inout, long id)
{
conn_rec *conn = (conn_rec *) apr_pcalloc(p, sizeof(conn_rec));
- apr_sockaddr_t *sa;
/* Got a connection structure, so initialize what fields we can
* (the rest are zeroed out by pcalloc).
conn->notes = apr_make_table(p, 5);
conn->pool = p;
- apr_get_sockaddr(&sa, APR_LOCAL, inout);
- conn->local_addr = sa->sa.sin;
- apr_get_ipaddr(&conn->local_ip, sa);
+ apr_get_sockaddr(&conn->local_addr, APR_LOCAL, inout);
+ apr_get_ipaddr(&conn->local_ip, conn->local_addr);
+ apr_get_sockaddr(&conn->remote_addr, APR_REMOTE, inout);
+ apr_get_ipaddr(&conn->remote_ip, conn->remote_addr);
conn->base_server = server;
conn->client_socket = inout;
- apr_get_sockaddr(&sa, APR_REMOTE, inout);
- conn->remote_addr = sa->sa.sin;
- apr_get_ipaddr(&conn->remote_ip, sa);
conn->id = id;
return conn;
{
ipaddr_chain *trav;
apr_port_t port;
- apr_sockaddr_t *localsa;
- apr_get_sockaddr(&localsa, APR_LOCAL, conn->client_socket);
- apr_get_port(&port, localsa);
+ apr_get_port(&port, conn->local_addr);
/* scan the hash apr_table_t for an exact match first */
- trav = find_ipaddr(&conn->local_addr.sin_addr, port);
+ /* XXX IPv6 issues handled in an uncommitted patch */
+ trav = find_ipaddr(&conn->local_addr->sa.sin.sin_addr, port);
if (trav) {
/* save the name_chain for later in case this is a name-vhost */
conn->vhost_lookup_data = trav->names;