bebcb6453c54164564b24899c6f407310b551a93
max
  Thu Jan 5 06:37:34 2023 -0800
first go at s3:// support, refs #30445

adding cache file to UDC protocol support, refs #30445

handling expired presigned URLs in udc protocol, refs #30445

diff --git src/lib/verbose.c src/lib/verbose.c
index 9ba41c9..5db9b0f 100644
--- src/lib/verbose.c
+++ src/lib/verbose.c
@@ -1,40 +1,51 @@
 /* verbose.c - write out status messages according to the
  * current verbosity level.  These messages go to stderr. */
 
 /* Copyright (C) 2011 The Regents of the University of California 
  * See kent/LICENSE or http://genome.ucsc.edu/license/ for licensing information. */
 
 #include "common.h"
 #include "portable.h"
 #include "verbose.h"
+#include "obscure.h"
 
 
 static int logVerbosity = 1;	/* The level of log verbosity.  0 is silent. */
 static FILE *logFile;	/* File to log to. */
 
 static boolean checkedDotsEnabled = FALSE;  /* have we check for dot output
                                              * being enabled? */
 static boolean dotsEnabled = FALSE;         /* is dot output enabled? */
 
+static boolean doHtml = FALSE;
+
 void verboseVa(int verbosity, char *format, va_list args)
 /* Log with at given verbosity vprintf formatted args. */
 {
 if (verbosity <= logVerbosity)
     {
     if (logFile == NULL)
         logFile = stderr;
+    if (doHtml)
+        {
+        char buf[4096];
+        int threadId = get_thread_id();
+        safef(buf, sizeof(buf), "%d %s<br>", threadId, format); // cannot do two printfs, as they are not thread safe, so the <br> will not stay with the line
+        vfprintf(logFile, buf, args);
+        }
+    else
         vfprintf(logFile, format, args);
     fflush(logFile);
     }
 }
 
 void verbose(int verbosity, char *format, ...)
 /* Write printf formatted message to log (which by
  * default is stderr) if global verbose variable
  * is set to verbosity or higher. */
 {
 va_list args;
 va_start(args, format);
 verboseVa(verbosity, format, args);
 va_end(args);
 }
@@ -117,15 +128,28 @@
 if (sameString(name, "stdout"))
     logFile = stdout;
 else if (sameString(name, "stderr"))
     logFile = stderr;
 else
     logFile = mustOpen(name, "w");
 }
 
 FILE *verboseLogFile()
 /* Get the verbose log file. */
 {
 if (logFile == NULL)
     logFile = stderr;
 return logFile;
 }
+
+void verboseCgi(char *level) 
+/* Set verbosity level for a CGI: if level is not NULL, set output file to stdout, set verbosity and print a content-type header */
+{
+    if (level==NULL)
+        return;
+    int levelNum = atoi(level);
+    verboseSetLevel(levelNum);
+    verboseSetLogFile("stdout");
+    puts("Content-type: text/html\n");
+    doHtml = TRUE;
+    verbose(0, "Debugging output activated, level %d", levelNum);
+}