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);