feat: dissociate timeouts and empty pastes

feuille was handling those two errors the same way, by sending
`Timeout'd.' even if the client just sent an EOF.
This commit is contained in:
Tom MTT. 2022-11-23 06:59:23 +01:00
parent 6a20fa7e61
commit 24da772e56
2 changed files with 10 additions and 2 deletions

View file

@ -354,9 +354,12 @@ int main(int argc, char *argv[])
} }
} else { } else {
if (errno == EFBIG) if (errno == EFBIG)
send_response(connection, "File too big.\n"); send_response(connection, "Paste too big.\n");
if (errno == ENOENT) if (errno == ENOENT)
send_response(connection, "Empty paste.\n");
if (errno == EAGAIN)
send_response(connection, "Timeout'd.\n"); send_response(connection, "Timeout'd.\n");
error("error %d while reading paste from incoming connection.", errno); error("error %d while reading paste from incoming connection.", errno);

View file

@ -188,6 +188,7 @@ char *read_paste(int connection)
/* read all data until EOF is received, or max file size is reached, or the socket timeouts... */ /* read all data until EOF is received, or max file size is reached, or the socket timeouts... */
/* each time, the data is appended to the buffer, once it's been reallocated a larger size */ /* each time, the data is appended to the buffer, once it's been reallocated a larger size */
errno = 0;
long size; long size;
while ((size = recv(connection, buffer + total_size, buffer_size - total_size, 0)) > 0) { while ((size = recv(connection, buffer + total_size, buffer_size - total_size, 0)) > 0) {
total_size += size; total_size += size;
@ -216,11 +217,15 @@ char *read_paste(int connection)
} }
} }
printf("%d\n", errno);
/* is the buffer empty? */ /* is the buffer empty? */
if (total_size == 0) { if (total_size == 0) {
/* yup, free the buffer and return an error */ /* yup, free the buffer and return an error */
if (errno != EAGAIN)
errno = ENOENT;
free(buffer); free(buffer);
errno = ENOENT;
return NULL; return NULL;
} }