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
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)
{
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;
}
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;
#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";
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)
{
/* 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 */
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);
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;
}
/* 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;
if(req->connmon) {
const char *keepopen = "[DISCONNECT]\n";
- sws_storerequest(keepopen, strlen(keepopen));
+ storerequest(keepopen, strlen(keepopen), REQUEST_DUMP_FILENAME);
req->connmon = FALSE;
}
}
}
+/* 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);