tWrite metaserver response headers to the log - vaccinewars - be a doctor and try to vaccinate the world
 (HTM) git clone git://src.adamsgaard.dk/vaccinewars
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 74f44284b82d1b00d0e62f3357b115f1e9cb3bc3
 (DIR) parent 99ec22bffe4bc8d372bf2c233389f2da63fa8c71
 (HTM) Author: Ben Webb <ben@salilab.org>
       Date:   Fri, 30 Oct 2020 11:14:12 -0700
       
       Write metaserver response headers to the log
       
       Diffstat:
         M src/network.h                       |       1 +
         M src/serverside.c                    |      32 ++++++++++++++++++++++++++++---
       
       2 files changed, 30 insertions(+), 3 deletions(-)
       ---
 (DIR) diff --git a/src/network.h b/src/network.h
       t@@ -70,6 +70,7 @@ typedef struct _CurlConnection {
          char Terminator;              /* Character that separates messages */
          char StripChar;               /* Char that should be removed
                                         * from messages */
       +  GPtrArray *headers;
        } CurlConnection;
        
        typedef struct _ConnBuf {
 (DIR) diff --git a/src/serverside.c b/src/serverside.c
       t@@ -121,6 +121,17 @@ static size_t MetaConnWriteFunc(void *contents, size_t size, size_t nmemb, void 
         
          return realsize;
        }
       +
       +static size_t MetaConnHeaderFunc(char *contents, size_t size, size_t nmemb, void *userp)
       +{
       +  size_t realsize = size * nmemb;
       +  CurlConnection *conn = (CurlConnection *)userp;
       +
       +  gchar *str = g_strchomp(g_strndup(contents, realsize));
       +  g_ptr_array_add(conn->headers, (gpointer)str);
       +  return realsize;
       +}
       +
        #endif
        
        /* Handle to the high score file */
       t@@ -183,6 +194,7 @@ void CurlInit(CurlConnection *conn)
          conn->Terminator = '\n';
          conn->StripChar = '\r';
          conn->data_size = 0;
       +  conn->headers = NULL;
        }
        
        void CloseCurlConnection(CurlConnection *conn)
       t@@ -191,6 +203,8 @@ void CloseCurlConnection(CurlConnection *conn)
          g_free(conn->data);
          conn->data_size = 0;
          conn->running = FALSE;
       +  g_ptr_array_free(conn->headers, TRUE);
       +  conn->headers = NULL;
        }
        
        void CurlCleanup(CurlConnection *conn)
       t@@ -247,14 +261,18 @@ const char *OpenCurlConnection(CurlConnection *conn, char *URL, char *body)
            if (res != CURLE_OK) return curl_easy_strerror(res);
            res = curl_easy_setopt(conn->h, CURLOPT_WRITEDATA, conn);
            if (res != CURLE_OK) return curl_easy_strerror(res);
       +    res = curl_easy_setopt(conn->h, CURLOPT_HEADERFUNCTION, MetaConnHeaderFunc);
       +    if (res != CURLE_OK) return curl_easy_strerror(res);
       +    res = curl_easy_setopt(conn->h, CURLOPT_HEADERDATA, conn);
       +    if (res != CURLE_OK) return curl_easy_strerror(res);
        
       -    conn->data = g_malloc(1);
       -    conn->data_size = 0;
            mres = curl_multi_add_handle(conn->multi, conn->h);
            if (mres != CURLM_OK && mres != CURLM_CALL_MULTI_PERFORM) {
       -      g_free(conn->data);
              return curl_multi_strerror(mres);
            }
       +    conn->data = g_malloc(1);
       +    conn->data_size = 0;
       +    conn->headers = g_ptr_array_new_with_free_func(g_free);
            conn->running = TRUE;
            errstr = CurlConnectionPerform(conn, &still_running);
            if (errstr) {
       t@@ -279,6 +297,13 @@ char *CurlNextLine(CurlConnection *conn, char *ch)
          return sep_pt;
        }
        
       +void log_meta_headers(gpointer data, gpointer user_data)
       +{
       +  char *header = data;
       +  if (*header)
       +    dopelog(4, LF_SERVER, "MetaServer: %s", header);
       +}
       +
        static void ServerHttpAuth(HttpConnection *conn, gboolean proxyauth,
                                   gchar *realm, gpointer data)
        {
       t@@ -1409,6 +1434,7 @@ void ServerLoop(struct CMDLINE *cmdline)
                if (IsServerShutdown())
                  break;
              } else if (still_running == 0) {
       +        g_ptr_array_foreach(MetaConn.headers, log_meta_headers, NULL);
                char *ch = MetaConn.data;
                while(ch && *ch) {
                  char *nextch = CurlNextLine(&MetaConn, ch);