about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--bounce.c3
-rw-r--r--bounce.h2
-rw-r--r--linger.110
-rw-r--r--server.c12
4 files changed, 21 insertions, 6 deletions
diff --git a/bounce.c b/bounce.c
index e91ed7f..ff99b91 100644
--- a/bounce.c
+++ b/bounce.c
@@ -78,7 +78,7 @@ int main(int argc, char *argv[]) {
 	const char *join = NULL;
 
 	int opt;
-	while (0 < (opt = getopt(argc, argv, "C:H:K:P:W:a:h:j:n:p:r:u:w:"))) {
+	while (0 < (opt = getopt(argc, argv, "C:H:K:P:W:a:h:j:n:p:r:u:vw:"))) {
 		switch (opt) {
 			break; case 'C': strlcpy(certPath, optarg, sizeof(certPath));
 			break; case 'H': localHost = optarg;
@@ -92,6 +92,7 @@ int main(int argc, char *argv[]) {
 			break; case 'p': port = optarg;
 			break; case 'r': real = optarg;
 			break; case 'u': user = optarg;
+			break; case 'v': verbose = true;
 			break; case 'w': pass = censor(optarg);
 			break; default:  return EX_USAGE;
 		}
diff --git a/bounce.h b/bounce.h
index 2c3daa3..e81ed8f 100644
--- a/bounce.h
+++ b/bounce.h
@@ -30,6 +30,8 @@ struct Client {
 	struct tls *tls;
 };
 
+bool verbose;
+
 void listenConfig(const char *cert, const char *priv);
 size_t listenBind(int fds[], size_t cap, const char *host, const char *port);
 int listenAccept(struct tls **client, int fd);
diff --git a/linger.1 b/linger.1
index 7c0001f..bf4b8c0 100644
--- a/linger.1
+++ b/linger.1
@@ -1,4 +1,4 @@
-.Dd October 22, 2019
+.Dd October 23, 2019
 .Dt LINGER 1
 .Os
 .
@@ -8,6 +8,7 @@
 .
 .Sh SYNOPSIS
 .Nm
+.Op Fl v
 .Op Fl C Ar cert
 .Op Fl H Ar host
 .Op Fl K Ar priv
@@ -106,6 +107,13 @@ Set the username to
 .Ar user .
 The default username is the same as the nickname.
 .
+.It Fl v
+Write IRC messages to standard error
+in red to the server,
+green from the server,
+yellow from clients
+and blue to clients.
+.
 .It Fl w Ar pass
 Log in with the password
 .Ar pass .
diff --git a/server.c b/server.c
index 72d668a..5cb7776 100644
--- a/server.c
+++ b/server.c
@@ -14,6 +14,7 @@
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
+#include <assert.h>
 #include <err.h>
 #include <netdb.h>
 #include <netinet/in.h>
@@ -80,6 +81,7 @@ int serverConnect(const char *host, const char *port) {
 }
 
 void serverSend(const char *ptr, size_t len) {
+	if (verbose) fprintf(stderr, "\x1B[31m%.*s\x1B[m", (int)len, ptr);
 	while (len) {
 		ssize_t ret = tls_write(client, ptr, len);
 		if (ret == TLS_WANT_POLLIN || ret == TLS_WANT_POLLOUT) continue;
@@ -90,14 +92,13 @@ void serverSend(const char *ptr, size_t len) {
 }
 
 static void format(const char *format, ...) {
-	char *buf;
+	char buf[513];
 	va_list ap;
 	va_start(ap, format);
-	int len = vasprintf(&buf, format, ap);
+	int len = vsnprintf(buf, sizeof(buf), format, ap);
 	va_end(ap);
-	if (!buf) err(EX_OSERR, "vasprintf");
+	assert(len > 0 && (size_t)len < sizeof(buf));
 	serverSend(buf, len);
-	free(buf);
 }
 
 static const char Base64[64] = {
@@ -177,8 +178,11 @@ void serverRecv(void) {
 		crlf = memmem(line, &buf[len] - line, "\r\n", 2);
 		if (!crlf) break;
 		crlf[0] = '\0';
+
+		if (verbose) fprintf(stderr, "\x1B[32m%s\x1B[m\n", line);
 		// TODO: Add line to ring if stateReady().
 		stateParse(line);
+
 		line = crlf + 2;
 	}
 	len -= line - buf;