libidav/session.c

changeset 788
9b9420041d8e
parent 777
15006651a5d1
child 790
7110b37f2a6b
--- a/libidav/session.c	Tue Sep 12 18:09:19 2023 +0200
+++ b/libidav/session.c	Tue Sep 12 21:07:54 2023 +0200
@@ -174,18 +174,42 @@
     CURLcode ret = curl_easy_perform(sn->handle);
     long http_status;
     curl_easy_getinfo(sn->handle, CURLINFO_RESPONSE_CODE, &http_status);
-    if(ret == CURLE_OK && http_status == 401 && sn->auth_prompt) {
-        if(!sn->auth_prompt(sn, sn->authprompt_userdata)) {
+    if(ret == CURLE_OK) {
+        if(sn->logfunc) {
+            char *log_method;
+            char *log_url;
+            curl_easy_getinfo(sn->handle, CURLINFO_EFFECTIVE_URL, &log_url);
+            curl_easy_getinfo(sn->handle, CURLINFO_EFFECTIVE_METHOD , &log_method);
+            char *log_reqbody = NULL;
+            size_t log_reqbodylen = 0;
+            char *log_rpbody = NULL;
+            size_t log_rpbodylen = 0;
             if(request) {
-                cxBufferSeek(request, 0, SEEK_SET);
+                log_reqbody = request->space;
+                log_reqbodylen = request->size;
             }
             if(response) {
-                cxBufferSeek(response, 0, SEEK_SET);
+                log_rpbody = response->space;
+                log_rpbodylen = response->size;
             }
-            ret = curl_easy_perform(sn->handle);
-            curl_easy_getinfo(sn->handle, CURLINFO_RESPONSE_CODE, &http_status);
+            sn->logfunc(sn, log_method, log_url, log_reqbody, log_reqbodylen, http_status, log_rpbody, log_rpbodylen);
         }
+        
+        if(http_status == 401 && sn->auth_prompt) {
+            if(!sn->auth_prompt(sn, sn->authprompt_userdata)) {
+                if(request) {
+                    cxBufferSeek(request, 0, SEEK_SET);
+                }
+                if(response) {
+                    cxBufferSeek(response, 0, SEEK_SET);
+                }
+                ret = curl_easy_perform(sn->handle);
+                curl_easy_getinfo(sn->handle, CURLINFO_RESPONSE_CODE, &http_status);
+            }
+        }
+        
     }
+    
     if(status) {
         *status = http_status;
     }

mercurial