#define CORE_PRIVATE #include "mod_perl.h" MODULE = Apache::Connection PACKAGE = Apache::Connection PROTOTYPES: DISABLE BOOT: items = items; /*avoid warning*/ #/* Things which are per connection # */ #struct conn_rec { # pool *pool; # server_rec *server; # /* Information about the connection itself */ # BUFF *client; /* Connetion to the guy */ # int aborted; /* Are we still talking? */ # /* Who is the client? */ # struct sockaddr_in local_addr; /* local address */ # struct sockaddr_in remote_addr;/* remote address */ # char *remote_ip; /* Client's IP address */ # char *remote_host; /* Client's DNS name, if known. # * NULL if DNS hasn't been checked, # * "" if it has and no address was found. # * N.B. Only access this though # * get_remote_host() */ int fileno(conn, ...) Apache::Connection conn PREINIT: int sts = 1; /* default is output fd */ CODE: if(items > 1) { sts = (int)SvIV(ST(1)); } RETVAL = ap_bfileno(conn->client, sts ? B_WR : B_RD); OUTPUT: RETVAL int aborted(conn) Apache::Connection conn CODE: RETVAL = conn->aborted; OUTPUT: RETVAL SV * local_addr(conn) Apache::Connection conn CODE: RETVAL = newSVpv((char *)&conn->local_addr, sizeof conn->local_addr); OUTPUT: RETVAL SV * remote_addr(conn, sv_addr=Nullsv) Apache::Connection conn SV *sv_addr CODE: RETVAL = newSVpv((char *)&conn->remote_addr, sizeof conn->remote_addr); if(sv_addr) { struct sockaddr_in addr; STRLEN sockaddrlen; char * new_addr = SvPV(sv_addr,sockaddrlen); if (sockaddrlen != sizeof(addr)) { croak("Bad arg length for remote_addr, length is %d, should be %d", sockaddrlen, sizeof(addr)); } Copy(new_addr, &addr, sizeof addr, char); conn->remote_addr = addr; } OUTPUT: RETVAL char * remote_ip(conn, ...) Apache::Connection conn CODE: RETVAL = conn->remote_ip; if(items > 1) { #ifdef SGI_BOOST ap_cpystrn(conn->remote_ip, (char *)SvPV(ST(1),na), sizeof(conn->remote_ip)); conn->remote_ip_len = strlen(conn->remote_ip); #else conn->remote_ip = pstrdup(conn->pool, (char *)SvPV(ST(1),na)); #endif conn->remote_addr.sin_addr.s_addr = inet_addr(conn->remote_ip); } OUTPUT: RETVAL char * remote_host(conn, ...) Apache::Connection conn CODE: RETVAL = conn->remote_host; if(items > 1) conn->remote_host = pstrdup(conn->pool, (char *)SvPV(ST(1),na)); OUTPUT: RETVAL # char *remote_logname; /* Only ever set if doing_rfc931 # * N.B. Only access this through # * get_remote_logname() */ # char *user; /* If an authentication check was made, # * this gets set to the user name. We assume # * that there's only one user per connection(!) # */ # char *auth_type; /* Ditto. */ char * remote_logname(conn) Apache::Connection conn CODE: RETVAL = conn->remote_logname; OUTPUT: RETVAL char * user(conn, ...) Apache::Connection conn CODE: RETVAL = conn->user; if(items > 1) conn->user = pstrdup(conn->pool, (char *)SvPV(ST(1),na)); OUTPUT: RETVAL char * auth_type(conn, ...) Apache::Connection conn CODE: RETVAL = conn->auth_type; if(items > 1) conn->auth_type = pstrdup(conn->pool, (char *)SvPV(ST(1),na)); OUTPUT: RETVAL # int keepalive; /* Are we using HTTP Keep-Alive? */ # int keptalive; /* Did we use HTTP Keep-Alive? */ # int keepalives; /* How many times have we used it? */ #};