rendered paste body#include "pstatsd.h"char magic[4] = {'P', 'S', 'T', 'S'};int client(int c) { time_t time, firsthit, lasthit; char header, *query = NULL, *session = NULL, *ip = NULL, *useragent = NULL; int session_len, query_len, ip_len, useragent_len; int i = 0; while(1) { /* Check for magic header */ i = 0; while(i < 4) { if(read(c, &header, 1) < 1) break; if(header == magic[i]) i++; else i = 0; } if(i < 4) break; /* Allocate memory and recieve data */ if(read(c, (char *)&time, sizeof(time)) != sizeof(time)) break; if(read(c, (char *)&firsthit, sizeof(firsthit)) != sizeof(firsthit)) break; if(read(c, (char *)&lasthit, sizeof(lasthit)) != sizeof(lasthit)) break; if(read(c, (char *)&ip_len, sizeof(ip_len)) != sizeof(ip_len)) break; ip = (char *)realloc(ip, ip_len+1); if(!ip) break; memset(ip, 0, ip_len+1); if(ip_len > 0 && read(c, (char *)ip, ip_len) != ip_len) break; if(read(c, (char *)&useragent_len, sizeof(useragent_len)) != sizeof(useragent_len)) break; useragent = (char *)realloc(useragent, useragent_len+1); if(!useragent) break; memset(useragent, 0, useragent_len+1); if(useragent_len > 0 && read(c, (char *)useragent, useragent_len) != useragent_len) break; if(read(c, (char *)&session_len, sizeof(session_len)) != sizeof(session_len)) break; session = (char *)realloc(session, session_len+1); if(!session) break; memset(session, 0, session_len+1); if(session_len > 0 && read(c, (char *)session, session_len) != session_len) break; if(read(c, (char *)&query_len, sizeof(query_len)) != sizeof(query_len)) break; query = (char *)realloc(query, query_len+1); if(!query) break; memset(query, 0, query_len+1); if(query_len > 0 && read(c, (char *)query, query_len) != query_len) 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;}