summary refs log tree commit diff
diff options
context:
space:
mode:
authorJune McEnroe <june@causal.agency>2019-10-25 18:24:47 -0400
committerJune McEnroe <june@causal.agency>2019-10-25 18:24:47 -0400
commit1b41af31351ed0dd4bcdceda5efbbae3e38c3fca (patch)
tree50765e0e28cf0675757ba38ac91b658137b043a6
parentClean up event loop (diff)
downloadpounce-1b41af31351ed0dd4bcdceda5efbbae3e38c3fca.tar.gz
pounce-1b41af31351ed0dd4bcdceda5efbbae3e38c3fca.zip
Send PRIVMSG and NOTICE to other clients
-rw-r--r--bounce.h1
-rw-r--r--client.c21
-rw-r--r--state.c6
3 files changed, 27 insertions, 1 deletions
diff --git a/bounce.h b/bounce.h
index 3307bac..e6efe10 100644
--- a/bounce.h
+++ b/bounce.h
@@ -87,3 +87,4 @@ void clientConsume(struct Client *client);
 bool stateReady(void);
 void stateParse(char *line);
 void stateSync(struct Client *client);
+const char *stateSelf(void);
diff --git a/client.c b/client.c
index 7079d7a..2bfe7db 100644
--- a/client.c
+++ b/client.c
@@ -169,13 +169,31 @@ static void handleQuit(struct Client *client, struct Message *msg) {
 	client->error = true;
 }
 
+static void handlePrivmsg(struct Client *client, struct Message *msg) {
+	if (!msg->params[0] || !msg->params[1]) return;
+	// FIXME: Check against ISUPPORT CHANTYPES?
+	if (msg->params[0][0] == '#') {
+		char line[1024];
+		snprintf(
+			line, sizeof(line), ":%s %s %s :%s",
+			stateSelf(), msg->cmd, msg->params[0], msg->params[1]
+		);
+		size_t diff = ringDiff(client->consumer);
+		ringProduce(line);
+		if (!diff) ringConsume(NULL, client->consumer);
+	}
+	serverFormat("%s %s :%s\r\n", msg->cmd, msg->params[0], msg->params[1]);
+}
+
 static const struct {
 	const char *cmd;
 	Handler *fn;
 } Handlers[] = {
 	{ "CAP", handleCap },
 	{ "NICK", handleNick },
+	{ "NOTICE", handlePrivmsg },
 	{ "PASS", handlePass },
+	{ "PRIVMSG", handlePrivmsg },
 	{ "QUIT", handleQuit },
 	{ "USER", handleUser },
 };
@@ -193,7 +211,8 @@ static void clientParse(struct Client *client, char *line) {
 static bool intercept(const char *line, size_t len) {
 	if (len >= 4 && !memcmp(line, "CAP ", 4)) return true;
 	if (len >= 5 && !memcmp(line, "QUIT ", 5)) return true;
-	// TODO: Intercept PRIVMSG and NOTICE to send to other clients.
+	if (len >= 7 && !memcmp(line, "NOTICE ", 7)) return true;
+	if (len >= 8 && !memcmp(line, "PRIVMSG ", 8)) return true;
 	return false;
 }
 
diff --git a/state.c b/state.c
index a65b1c2..c46aa8c 100644
--- a/state.c
+++ b/state.c
@@ -94,6 +94,12 @@ bool stateReady(void) {
 		&& support.len;
 }
 
+const char *stateSelf(void) {
+	if (self.origin) return self.origin;
+	if (self.nick) return self.nick;
+	return "*";
+}
+
 typedef void Handler(struct Message *msg);
 
 static void handleCap(struct Message *msg) {
041852f7bba428&follow=1'>Rearrange bounce.c, move non-main mains below mainJune McEnroe 2020-08-30Sandbox pounce with unveil(2)June McEnroe 2020-08-28Refactor certificate loading and load all certs from config pathsJune McEnroe 2020-08-27Sandbox pounce with pledge(2)June McEnroe unveil(2) is a bit complicated to apply to this, I'll have to think about it more. 2020-08-27Sandbox calico with pledge(2) and unveil(2)June McEnroe 2020-08-27Add support for OpenBSDJune McEnroe 2020-08-27Remove rc scriptsJune McEnroe 2020-08-27contrib/palaver: Fix documented database pathJune McEnroe 2020-08-27contrib/palaver: Remove rc scriptJune McEnroe 2020-08-27contrib/palaver: Fix database search and creationJune McEnroe 2020-08-27contrib/palaver: Use pounce's XDG directoryJune McEnroe 2020-08-27contrib/palaver: Only allow HTTPSJune McEnroe 2020-08-25Support the pounce_env rc variableJune McEnroe 2020-08-25Remove deprecated option namesJune McEnroe The next release will be 2.0 so these can be removed now. 2020-08-25Document configuration and data file searchJune McEnroe 2020-08-24Use dataOpen for save fileJune McEnroe 2020-08-24Use configOpen to load localCAJune McEnroe 2020-08-24Use configPath to load client cert/privJune McEnroe 2020-08-24Use configOpen in getopt_configJune McEnroe 2020-08-24Import xdg.c from catgirlJune McEnroe 2020-08-23Replace “RAND_bytes” by “getentropy”Issam E. Maghni This removes the dependency on libcrypto. Signed-off-by: Issam E. Maghni <issam.e.maghni@mailbox.org> 2020-08-16contrib/palaver: Add no message preview flagsJune McEnroe 2020-08-13contrib/palaver: Don't set channel for PMsJune McEnroe 2020-08-13Fix unintended interception of NICK after registrationJune McEnroe Another bug caused by trying to support broken clients. I'm annoyed. 2020-08-12Add Additional Components section to READMEJune McEnroe 2020-08-12Document -L / palaver optionJune McEnroe 2020-08-11contrib/palaver: Document service configurationJune McEnroe 2020-08-11contrib/palaver: Add install target and rc scriptJune McEnroe 2020-08-11contrib/palaver: Implement command and notificationsJune McEnroe