#include "mod_pstats.h" int log_hit(request_rec *r, time_t now, time_t firsthit, time_t lasthit, char *ip, char *useragent, char *session, char *query) { struct sockaddr_in sai; int s, i, len, size; char *packet; /* Make a connection to the daemon */ s = make_connection(); if(s == -1) return log_file_hit(r, now, firsthit, lasthit, ip, useragent, session, query); /* Allocate a packet big enough to hold everything */ size = (sizeof(time_t) * 3) + (sizeof(int) * 4) + pr_strlen(ip) + pr_strlen(useragent) + pr_strlen(session) + pr_strlen(query); packet = apr_palloc(r->pool, size); /* Fill the packet */ i = 0; memcpy(packet+i, &now, sizeof(now)); i += sizeof(now); memcpy(packet+i, &firsthit, sizeof(firsthit)); i += sizeof(firsthit); memcpy(packet+i, &lasthit, sizeof(lasthit)); i += sizeof(lasthit); len = pr_strlen(ip); memcpy(packet+i, &len, sizeof(len)); i += sizeof(len); memcpy(packet+i, ip, len); i += len; len = pr_strlen(useragent); memcpy(packet+i, &len, sizeof(len)); i += sizeof(len); memcpy(packet+i, useragent, len); i += len; len = pr_strlen(session); memcpy(packet+i, &len, sizeof(len)); i += sizeof(len); memcpy(packet+i, session, len); i += len; len = pr_strlen(query); memcpy(packet+i, &len, sizeof(len)); i += sizeof(len); memcpy(packet+i, query, len); /* Send the packet to the daemon */ send(s, packet, size, 0); /* Close the socket and return */ close(s); return 0; }