All pastes #366 Raw Edit

client.c

public c v1 · immutable
#366 ·published 2004-07-30 03:45 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 *)alloca(ip_len+1);    if(!ip) break;    ip[ip_len] = '\0';    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 *)alloca(useragent_len+1);    if(!useragent) break;    useragent[useragent_len] = '\0';    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 *)alloca(session_len+1);    if(!session) break;    session[session_len] = '\0';    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 *)alloca(query_len+1);    if(!query) break;    query[query_len] = '\0';    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);  /* exit */  pthread_detach(pthread_self());  pthread_exit(NULL);  return 0;}