#include "pstatsd.h" int client(int c) { time_t time, firsthit, lasthit; char *query = NULL, *session = NULL, *ip = NULL, *useragent = NULL; int session_len, query_len, ip_len, useragent_len; while(1) { /* Allocate memory and recieve data */ if(read(c, (char *)&time, sizeof(time)) == -1) break; if(read(c, (char *)&firsthit, sizeof(firsthit)) == -1) break; if(read(c, (char *)&lasthit, sizeof(lasthit)) == -1) break; if(read(c, (char *)&ip_len, sizeof(ip_len)) == -1) break; ip = (char *)realloc(ip, ip_len+1); if(!ip) break; memset(ip, 0, ip_len+1); if(read(c, (char *)ip, ip_len) == -1) break; if(read(c, (char *)&useragent_len, sizeof(useragent_len)) == -1) break; useragent = (char *)realloc(useragent, useragent_len+1); if(!useragent) break; memset(useragent, 0, useragent_len+1); if(read(c, (char *)useragent, useragent_len) == -1) break; if(read(c, (char *)&session_len, sizeof(session_len)) == -1) break; session = (char *)realloc(session, session_len+1); if(!session) return 1; memset(session, 0, session_len+1); if(read(c, (char *)session, session_len) == -1) break; if(read(c, (char *)&query_len, sizeof(query_len)) == -1) break; query = (char *)realloc(query, query_len+1); if(!query) free(session); memset(query, 0, query_len+1); if(read(c, (char *)query, query_len) == -1) break; /* Parse the hit */ parse(time, firsthit, lasthit, ip, ip_len, useragent, useragent_len, session, session_len, query, query_len); } /* Clean up */ close(c); free(ip); free(useragent); free(session); free(query); /* exit */ pthread_detach(pthread_self()); pthread_exit(NULL); return 0; }