summaryrefslogtreecommitdiff
path: root/src/libtipidee/tipidee_log_request.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/libtipidee/tipidee_log_request.c')
-rw-r--r--src/libtipidee/tipidee_log_request.c60
1 files changed, 60 insertions, 0 deletions
diff --git a/src/libtipidee/tipidee_log_request.c b/src/libtipidee/tipidee_log_request.c
new file mode 100644
index 0000000..666297d
--- /dev/null
+++ b/src/libtipidee/tipidee_log_request.c
@@ -0,0 +1,60 @@
+/* ISC license. */
+
+#include <stddef.h>
+
+#include <skalibs/strerr.h>
+#include <skalibs/stralloc.h>
+#include <skalibs/skamisc.h>
+
+#include <tipidee/method.h>
+#include <tipidee/log.h>
+
+void tipidee_log_request (uint32_t v, tipidee_rql const *rql, char const *referrer, char const *ua, stralloc *sa)
+{
+ char const *a[14] = { "info: request " } ;
+ size_t m = 1 ;
+ size_t start = sa->len ;
+ size_t refpos = start, uapos = start ;
+ if (!(v & TIPIDEE_LOG_REQUEST)) return ;
+ if (!string_quotes(sa, rql->uri.path)) goto eerr ;
+ if (v & TIPIDEE_LOG_REFERRER)
+ {
+ refpos = sa->len ;
+ if (!string_quotes(sa, referrer) || !stralloc_0(sa)) goto err ;
+ }
+ if (v & TIPIDEE_LOG_UA)
+ {
+ uapos = sa->len ;
+ if (!string_quotes(sa, ua) || !stralloc_0(sa)) goto err ;
+ }
+ a[m++] = tipidee_method_tostr(rql->m) ;
+ a[m++] = " host " ;
+ a[m++] = rql->uri.host ;
+ a[m++] = " path " ;
+ a[m++] = sa->s + start ;
+ if (rql->uri.query)
+ {
+ a[m++] = " query " ;
+ a[m++] = rql->uri.query ;
+ }
+ a[m++] = " http 1." ;
+ a[m++] = rql->http_minor ? "1" : "0" ;
+ if (v & TIPIDEE_LOG_REFERRER)
+ {
+ a[m++] = " referrer " ;
+ a[m++] = sa->s + refpos ;
+ }
+ if (v & TIPIDEE_LOG_UA)
+ {
+ a[m++] = " user-agent " ;
+ a[m++] = sa->s + uapos ;
+ }
+ strerr_warnv(a, m) ;
+ sa->len = start ;
+ return ;
+
+ err:
+ sa->len = start ;
+ eerr:
+ strerr_warnwu1sys("log request") ;
+}