All pastes #363 Raw Edit

Anonymous

public c v1 · immutable
#363 ·published 2004-07-30 01:07 UTC
rendered paste body
#include "pstatsd.h"char magic[] = "PSTS";int client(int c) {  time_t time, firsthit, lasthit;  char header[4], *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;    memset(&header, 0, sizeof(header));    while(memcmp(header, magic, 4) != 0) {      if(read(c, &header[i], 1) < 1) break;      if(header[i] == magic[i]) i++;      else i = 0;    }    if(memcmp(header, magic, 4) != 0) break;    /* 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(ip_len > 0 && 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(useragent_len > 0 && 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) break;    memset(session, 0, session_len+1);    if(session_len > 0 && 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) break;    memset(query, 0, query_len+1);    if(query_len > 0 && 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;}