All pastes #365 Raw Edit

client.c

public c v1 · immutable
#365 ·published 2004-07-30 02:26 UTC
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;}