/* This file is part of Pazpar2.
- Copyright (C) 2006-2011 Index Data
+ Copyright (C) 2006-2012 Index Data
Pazpar2 is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free
#include <config.h>
#endif
+#include <time.h>
#include <stdlib.h>
+#include <sys/select.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
static int run(FILE *inf, struct addrinfo *res)
{
- long long tv_sec0;
- long long tv_usec0;
+ long long tv_sec0 = 0;
+ long long tv_usec0 = 0;
struct con *cons = 0;
+
while (1)
{
long long tv_sec1;
long long id;
int sz, r, c;
char req[100];
+ char request_type[100];
size_t i;
struct con **conp;
c = fgetc(inf);
c = fgetc(inf);
}
req[i] = 0;
- r = sscanf(req, "%lld %lld %lld %d", &tv_sec1, &tv_usec1, &id, &sz);
- if (r != 4)
+ r = sscanf(req, "%s %lld %lld %lld %d", request_type,
+ &tv_sec1, &tv_usec1, &id, &sz);
+ if (r != 5)
{
fprintf(stderr, "bad line %s\n", req);
return -1;
}
+ if (tv_sec0)
+ {
+ struct timeval spec;
+
+ spec.tv_sec = tv_sec1 - tv_sec0;
+ if (tv_usec0 > tv_usec1)
+ {
+ spec.tv_usec = 1000000 + tv_usec1 - tv_usec0;
+ spec.tv_sec--;
+ }
+ else
+ spec.tv_usec = tv_usec1 - tv_usec0;
+
+ select(0, 0, 0, 0, &spec);
+ }
+ tv_sec0 = tv_sec1;
+ tv_usec0 = tv_usec1;
for (conp = &cons; *conp; conp = &(*conp)->next)
if ((*conp)->id == id)
break;
(long long) toread, (long long) r);
return -1;
}
- w = write((*conp)->fd, buf, toread);
- if (w != toread)
- {
- fprintf(stderr, "write truncated\n");
- return -1;
+ if (*request_type == 'r')
+ { /* Only deal with things tha Pazpar2 received */
+ w = write((*conp)->fd, buf, toread);
+ if (w != toread)
+ {
+ fprintf(stderr, "write truncated\n");
+ return -1;
+ }
}
cnt += toread;
}
hints.ai_addr = NULL;
hints.ai_canonname = NULL;
hints.ai_next = NULL;
-
+
cp = strchr(host, ':');
if (*cp)
{