summaryrefslogtreecommitdiffstats
path: root/src/log.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/log.c')
-rw-r--r--src/log.c61
1 files changed, 61 insertions, 0 deletions
diff --git a/src/log.c b/src/log.c
new file mode 100644
index 0000000..d4d4e2a
--- /dev/null
+++ b/src/log.c
@@ -0,0 +1,61 @@
+#include <arpa/inet.h>
+#include <assert.h>
+#include <stdarg.h>
+#include <stdio.h>
+#include <sys/socket.h>
+#include "log.h"
+
+static void
+server_logf(FILE *f, const char *fmt, va_list ap)
+{
+ fprintf(f, "<server>\t");
+ vfprintf(f, fmt, ap);
+}
+
+static void
+client_logf(FILE *f, struct sockaddr *addr, const char *fmt, va_list ap)
+{
+ char abuf[INET6_ADDRSTRLEN];
+ const char *addrs = inet_ntop(addr->sa_family,
+ addr->sa_data, abuf, sizeof(abuf));
+ assert(addrs);
+
+ fprintf(f, "%s\t", addrs);
+ vfprintf(f, fmt, ap);
+}
+
+void
+server_log(const char *fmt, ...)
+{
+ va_list ap;
+ va_start(ap, fmt);
+ server_logf(stdout, fmt, ap);
+ va_end(ap);
+}
+
+void
+client_log(struct sockaddr *addr, const char *fmt, ...)
+{
+ va_list ap;
+ va_start(ap, fmt);
+ client_logf(stdout, addr, fmt, ap);
+ va_end(ap);
+}
+
+void
+server_error(const char *fmt, ...)
+{
+ va_list ap;
+ va_start(ap, fmt);
+ server_logf(stderr, fmt, ap);
+ va_end(ap);
+}
+
+void
+client_error(struct sockaddr *addr, const char *fmt, ...)
+{
+ va_list ap;
+ va_start(ap, fmt);
+ client_logf(stderr, addr, fmt, ap);
+ va_end(ap);
+}