diff -r bd96cbb0e205 -r 9b9420041d8e libidav/session.c --- 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; }