| #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? */ |
| #}; |
| |
| |