Introduce a ring buffer implementation for server's network input. As a

result, clients are not disconnected due to sending large messages.
This commit is contained in:
mmdolze
2010-01-19 22:49:51 +00:00
parent 775041e81d
commit 287b933e79
7 changed files with 357 additions and 81 deletions
+4 -19
View File
@@ -129,33 +129,18 @@ int
client_add_message(Client *c, char *message)
{
int err = 0;
char *dup;
char *str, *cp;
char delimiters[] = "\n\r\0";
debug(RPT_DEBUG, "%s(c=[%d], message=\"%s\")", __FUNCTION__, c->sock, message);
if (!c)
return -1;
if (!message)
return -1;
/* Copy the string to avoid overwriting the original...*/
dup = strdup(message);
if (!dup) {
report(RPT_ERR, "%s: Error allocating", __FUNCTION__);
return -1;
}
/* Now split the string into lines and enqueue each one...*/
for (str = strtok(dup, delimiters); str; str = strtok(NULL, delimiters)) {
cp = strdup(str);
debug(RPT_DEBUG, "%s: Queued message: \"%s\"", __FUNCTION__, cp);
err += LL_Enqueue(c->messages, (void *) cp);
if (strlen(message) > 0) {
debug(RPT_DEBUG, "%s(c=[%d], message=\"%s\")", __FUNCTION__,
c->sock, message);
err = LL_Enqueue(c->messages, (void *) message);
}
free(dup);
/* Err is the number of errors encountered...*/
return err;
}