From d301cc47b1713629358e226e7daa4f197447e38b Mon Sep 17 00:00:00 2001 From: Terence Simpson Date: Wed, 13 Jun 2012 10:44:24 +0900 Subject: [PATCH 09/12] 51_freenode_ircd-seven from debian Origin: http://adipose.attenuate.org/~stephen/ircd-seven/xchat-ircd-seven-identify-msg.patch.txt Description: Add support for ircd-seven CAP command. --- src/common/proto-irc.c | 33 +++++++++++++++++++++++++++++++++ 1 files changed, 33 insertions(+), 0 deletions(-) diff --git a/src/common/proto-irc.c b/src/common/proto-irc.c index 338a3b1..aa247f1 100644 --- a/src/common/proto-irc.c +++ b/src/common/proto-irc.c @@ -45,6 +45,7 @@ irc_login (server *serv, char *user, char *realname) { if (serv->password[0]) tcp_sendf (serv, "PASS %s\r\n", serv->password); + tcp_sendf (serv, "CAP LS\r\n"); tcp_sendf (serv, "NICK %s\r\n" @@ -1110,6 +1111,38 @@ process_named_msg (session *sess, char *type, char *word[], char *word_eol[]) } } + else if (len == 3) + { + guint32 t; + + t = WORDL((guint8)type[0], (guint8)type[1], (guint8)type[2], (guint8)type[3]); + switch (t) + { + case WORDL('C','A','P','\0'): + if (strncasecmp(word[4], "ACK", 3) == 0) + { + if (strncasecmp(word[5][0]==':' ? word[5]+1 : word[5], + "identify-msg", 12) == 0) + { + serv->have_idmsg = TRUE; + tcp_send_len(serv, "CAP END\r\n", 9); + } + } + else if (strncasecmp(word[4], "LS", 2) == 0) + { + if (strstr(word_eol[5], "identify-msg") != 0) + tcp_send_len(serv, "CAP REQ :identify-msg\r\n", 23); + else + tcp_send_len(serv, "CAP END\r\n", 9); + } + else if (strncasecmp(word[4], "NAK",3) == 0) + { + tcp_send_len(serv, "CAP END\r\n", 9); + } + return; + } + } + garbage: /* unknown message */ PrintTextf (sess, "GARBAGE: %s\n", word_eol[1]); -- 1.7.7.5 (Apple Git-26)