servers: deduplicate storerequest() across two servers

Closes #22041
This commit is contained in:
Viktor Szakats 2026-06-16 11:44:18 +02:00
parent e0c6f4d4d6
commit c2b050e4e4
No known key found for this signature in database
4 changed files with 67 additions and 118 deletions

View file

@ -268,6 +268,60 @@ void clear_advisor_read_lock(const char *filename)
}
}
/* store the entire request in a file */
void storerequest(const char *reqbuf, size_t totalsize, const char *filename)
{
int error = 0;
char errbuf[STRERROR_LEN];
size_t written;
size_t writeleft;
FILE *dump;
char dumpfile[256];
snprintf(dumpfile, sizeof(dumpfile), "%s/%s", logdir, filename);
if(!reqbuf)
return;
if(totalsize == 0)
return;
do {
dump = curlx_fopen(dumpfile, "ab");
/* !checksrc! disable ERRNOVAR 1 */
} while(!dump && ((error = errno) == EINTR));
if(!dump) {
logmsg("storerequest: Error opening file %s error (%d) %s", dumpfile,
error, curlx_strerror(error, errbuf, sizeof(errbuf)));
return;
}
writeleft = totalsize;
do {
written = fwrite(&reqbuf[totalsize - writeleft], 1, writeleft, dump);
if(got_exit_signal)
goto storerequest_cleanup;
if(written > 0)
writeleft -= written;
error = errno;
/* !checksrc! disable ERRNOVAR 1 */
} while((writeleft > 0) && (error == EINTR));
if(writeleft == 0)
logmsg("Wrote request (%zu bytes) input to %s", totalsize, dumpfile);
else if(writeleft > 0) {
logmsg("Error writing file %s error (%d) %s", dumpfile,
error, curlx_strerror(error, errbuf, sizeof(errbuf)));
logmsg("Wrote only (%zu bytes) of (%zu bytes) request input to %s",
totalsize - writeleft, totalsize, dumpfile);
}
storerequest_cleanup:
if(curlx_fclose(dump))
logmsg("Error closing file %s error (%d) %s", dumpfile,
errno, curlx_strerror(errno, errbuf, sizeof(errbuf)));
}
/* vars used to keep around previous signal handlers */
typedef void (*SIGHANDLER_T)(int);