mirror of
https://github.com/curl/curl.git
synced 2026-06-18 11:06:08 +03:00
parent
e0c6f4d4d6
commit
c2b050e4e4
4 changed files with 67 additions and 118 deletions
|
|
@ -141,6 +141,8 @@ extern int write_pidfile(const char *filename);
|
|||
extern int write_portfile(const char *filename, int port);
|
||||
extern void set_advisor_read_lock(const char *filename);
|
||||
extern void clear_advisor_read_lock(const char *filename);
|
||||
extern void storerequest(const char *reqbuf, size_t totalsize,
|
||||
const char *filename);
|
||||
static volatile int got_exit_signal = 0;
|
||||
static volatile int exit_signal = 0;
|
||||
#ifdef _WIN32
|
||||
|
|
|
|||
|
|
@ -544,61 +544,6 @@ static int rtspd_ProcessRequest(struct rtspd_httprequest *req)
|
|||
return 1; /* done */
|
||||
}
|
||||
|
||||
/* store the entire request in a file */
|
||||
static void rtspd_storerequest(const char *reqbuf, size_t totalsize)
|
||||
{
|
||||
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, REQUEST_DUMP);
|
||||
|
||||
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("Error opening file %s error (%d) %s", dumpfile,
|
||||
error, curlx_strerror(error, errbuf, sizeof(errbuf)));
|
||||
logmsg("Failed to write request input to %s", dumpfile);
|
||||
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)));
|
||||
}
|
||||
|
||||
/* return 0 on success, non-zero on failure */
|
||||
static int rtspd_get_request(curl_socket_t sock, struct rtspd_httprequest *req)
|
||||
{
|
||||
|
|
@ -671,7 +616,7 @@ static int rtspd_get_request(curl_socket_t sock, struct rtspd_httprequest *req)
|
|||
if(fail) {
|
||||
/* dump the request received so far to the external file */
|
||||
reqbuf[req->offset] = '\0';
|
||||
rtspd_storerequest(reqbuf, req->offset);
|
||||
storerequest(reqbuf, req->offset, REQUEST_DUMP);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
|
@ -706,7 +651,8 @@ static int rtspd_get_request(curl_socket_t sock, struct rtspd_httprequest *req)
|
|||
reqbuf[req->offset] = '\0';
|
||||
|
||||
/* dump the request to an external file */
|
||||
rtspd_storerequest(reqbuf, req->pipelining ? req->checkindex : req->offset);
|
||||
storerequest(reqbuf, req->pipelining ? req->checkindex : req->offset,
|
||||
REQUEST_DUMP);
|
||||
if(got_exit_signal)
|
||||
return 1;
|
||||
|
||||
|
|
|
|||
|
|
@ -100,6 +100,9 @@ static size_t num_sockets = 0;
|
|||
#define REQUEST_PROXY_DUMP "proxy.input"
|
||||
#define RESPONSE_PROXY_DUMP "proxy.response"
|
||||
|
||||
#define REQUEST_DUMP_FILENAME \
|
||||
(is_proxy ? REQUEST_PROXY_DUMP : REQUEST_DUMP)
|
||||
|
||||
/* file in which additional instructions may be found */
|
||||
static const char *cmdfile = "log/server.cmd";
|
||||
|
||||
|
|
@ -739,62 +742,6 @@ static int sws_ProcessRequest(struct sws_httprequest *req)
|
|||
return 1; /* done */
|
||||
}
|
||||
|
||||
/* store the entire request in a file */
|
||||
static void sws_storerequest(const char *reqbuf, size_t totalsize)
|
||||
{
|
||||
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, is_proxy ? REQUEST_PROXY_DUMP : REQUEST_DUMP);
|
||||
|
||||
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("[2] Error opening file %s error (%d) %s", dumpfile,
|
||||
error, curlx_strerror(error, errbuf, sizeof(errbuf)));
|
||||
logmsg("Failed to write request input ");
|
||||
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)));
|
||||
}
|
||||
|
||||
/* returns -1 on failure */
|
||||
static int sws_send_doc(curl_socket_t sock, struct sws_httprequest *req)
|
||||
{
|
||||
|
|
@ -1114,7 +1061,7 @@ static int sws_get_request(curl_socket_t sock, struct sws_httprequest *req)
|
|||
|
||||
/* dump the request received so far to the external file */
|
||||
reqbuf[req->offset] = '\0';
|
||||
sws_storerequest(reqbuf, req->offset);
|
||||
storerequest(reqbuf, req->offset, REQUEST_DUMP_FILENAME);
|
||||
req->offset = 0;
|
||||
|
||||
/* read websocket traffic */
|
||||
|
|
@ -1157,7 +1104,7 @@ static int sws_get_request(curl_socket_t sock, struct sws_httprequest *req)
|
|||
logmsg("log the websocket traffic");
|
||||
/* dump the incoming websocket traffic to the external file */
|
||||
reqbuf[req->offset] = '\0';
|
||||
sws_storerequest(reqbuf, req->offset);
|
||||
storerequest(reqbuf, req->offset, REQUEST_DUMP_FILENAME);
|
||||
req->offset = 0;
|
||||
}
|
||||
init_httprequest(req);
|
||||
|
|
@ -1199,7 +1146,7 @@ static int sws_get_request(curl_socket_t sock, struct sws_httprequest *req)
|
|||
if(fail) {
|
||||
/* dump the request received so far to the external file */
|
||||
reqbuf[req->offset] = '\0';
|
||||
sws_storerequest(reqbuf, req->offset);
|
||||
storerequest(reqbuf, req->offset, REQUEST_DUMP_FILENAME);
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
|
@ -1230,7 +1177,7 @@ static int sws_get_request(curl_socket_t sock, struct sws_httprequest *req)
|
|||
|
||||
/* at the end of a request dump it to an external file */
|
||||
if(fail || req->done_processing)
|
||||
sws_storerequest(reqbuf, req->offset);
|
||||
storerequest(reqbuf, req->offset, REQUEST_DUMP_FILENAME);
|
||||
if(got_exit_signal)
|
||||
return -1;
|
||||
|
||||
|
|
@ -2379,7 +2326,7 @@ static int test_sws(int argc, const char *argv[])
|
|||
|
||||
if(req->connmon) {
|
||||
const char *keepopen = "[DISCONNECT]\n";
|
||||
sws_storerequest(keepopen, strlen(keepopen));
|
||||
storerequest(keepopen, strlen(keepopen), REQUEST_DUMP_FILENAME);
|
||||
req->connmon = FALSE;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue