mirror of
https://github.com/ZoiteChat/zoitechat.git
synced 2026-03-14 01:30:19 +00:00
Support account-notify and extended-join capabilities
This commit is contained in:
@@ -313,7 +313,10 @@ irc_join_info (server *serv, char *channel)
|
||||
static void
|
||||
irc_user_list (server *serv, char *channel)
|
||||
{
|
||||
tcp_sendf (serv, "WHO %s\r\n", channel);
|
||||
if (serv->have_whox)
|
||||
tcp_sendf (serv, "WHO %s %%chtsunfra,152\r\n", channel);
|
||||
else
|
||||
tcp_sendf (serv, "WHO %s\r\n", channel);
|
||||
}
|
||||
|
||||
/* userhost */
|
||||
@@ -328,7 +331,7 @@ static void
|
||||
irc_away_status (server *serv, char *channel)
|
||||
{
|
||||
if (serv->have_whox)
|
||||
tcp_sendf (serv, "WHO %s %%ctnf,152\r\n", channel);
|
||||
tcp_sendf (serv, "WHO %s %%chtsunfra,152\r\n", channel);
|
||||
else
|
||||
tcp_sendf (serv, "WHO %s\r\n", channel);
|
||||
}
|
||||
@@ -560,7 +563,7 @@ process_numeric (session * sess, int n,
|
||||
if (!serv->skip_next_whois)
|
||||
EMIT_SIGNAL (XP_TE_WHOIS3, whois_sess, word[4], word_eol[5], NULL, NULL, 0);
|
||||
else
|
||||
inbound_user_info (sess, NULL, NULL, NULL, word[5], word[4], NULL, 0xff);
|
||||
inbound_user_info (sess, NULL, NULL, NULL, word[5], word[4], NULL, NULL, 0xff);
|
||||
break;
|
||||
|
||||
case 311: /* WHOIS 1st line */
|
||||
@@ -571,7 +574,7 @@ process_numeric (session * sess, int n,
|
||||
word[6], word_eol[8] + 1, 0);
|
||||
else
|
||||
inbound_user_info (sess, NULL, word[5], word[6], NULL, word[4],
|
||||
word_eol[8][0] == ':' ? word_eol[8] + 1 : word_eol[8], 0xff);
|
||||
word_eol[8][0] == ':' ? word_eol[8] + 1 : word_eol[8], NULL, 0xff);
|
||||
break;
|
||||
|
||||
case 314: /* WHOWAS */
|
||||
@@ -716,7 +719,7 @@ process_numeric (session * sess, int n,
|
||||
away = 1;
|
||||
|
||||
inbound_user_info (sess, word[4], word[5], word[6], word[7],
|
||||
word[8], word_eol[11], away);
|
||||
word[8], word_eol[11], word[10], away);
|
||||
|
||||
/* try to show only user initiated whos */
|
||||
if (!who_sess || !who_sess->doing_who)
|
||||
@@ -730,16 +733,17 @@ process_numeric (session * sess, int n,
|
||||
unsigned int away = 0;
|
||||
session *who_sess;
|
||||
|
||||
/* irc_away_status sends out a "152" */
|
||||
/* irc_away_status and irc_user_list sends out a "152" */
|
||||
if (!strcmp (word[4], "152"))
|
||||
{
|
||||
who_sess = find_channel (serv, word[5]);
|
||||
|
||||
if (*word[7] == 'G')
|
||||
if (*word[10] == 'G')
|
||||
away = 1;
|
||||
|
||||
/* :SanJose.CA.us.undernet.org 354 z1 152 #zed1 z1 H@ */
|
||||
inbound_user_info (sess, word[5], 0, 0, 0, word[6], 0, away);
|
||||
/* :server 354 yournick 152 #channel ~ident host servname nick H account :realname */
|
||||
inbound_user_info (sess, word[5], word[6], word[7], word[8],
|
||||
word[9], word_eol[12], word[11], away);
|
||||
|
||||
/* try to show only user initiated whos */
|
||||
if (!who_sess || !who_sess->doing_who)
|
||||
@@ -965,13 +969,15 @@ process_named_msg (session *sess, char *type, char *word[], char *word_eol[])
|
||||
case WORDL('J','O','I','N'):
|
||||
{
|
||||
char *chan = word[3];
|
||||
char *account = word[4];
|
||||
char *realname = word_eol[5] + 1;
|
||||
|
||||
if (*chan == ':')
|
||||
chan++;
|
||||
if (!serv->p_cmp (nick, serv->nick))
|
||||
inbound_ujoin (serv, chan, nick, ip);
|
||||
else
|
||||
inbound_join (serv, chan, nick, ip);
|
||||
inbound_join (serv, chan, nick, ip, account, realname);
|
||||
}
|
||||
return;
|
||||
|
||||
@@ -1047,6 +1053,11 @@ process_named_msg (session *sess, char *type, char *word[], char *word_eol[])
|
||||
/* this should compile to a bunch of: CMP.L, JE ... nice & fast */
|
||||
switch (t)
|
||||
{
|
||||
|
||||
case WORDL('A','C','C','O'):
|
||||
inbound_account (serv, nick, word[3]);
|
||||
return;
|
||||
|
||||
case WORDL('I','N','V','I'):
|
||||
if (ignore_check (word[1], IG_INVI))
|
||||
return;
|
||||
@@ -1176,6 +1187,16 @@ process_named_msg (session *sess, char *type, char *word[], char *word_eol[])
|
||||
serv->have_awaynotify = TRUE;
|
||||
}
|
||||
|
||||
if (strstr (word_eol[5], "account-notify") != 0)
|
||||
{
|
||||
serv->have_accnotify = TRUE;
|
||||
}
|
||||
|
||||
if (strstr (word_eol[5], "extended-join") != 0)
|
||||
{
|
||||
serv->have_extjoin = TRUE;
|
||||
}
|
||||
|
||||
if (strstr (word_eol[5], "sasl") != 0)
|
||||
{
|
||||
serv->have_sasl = TRUE;
|
||||
@@ -1208,6 +1229,17 @@ process_named_msg (session *sess, char *type, char *word[], char *word_eol[])
|
||||
want_cap ? strcat (buffer, " away-notify") : strcpy (buffer, "CAP REQ :away-notify");
|
||||
want_cap = 1;
|
||||
}
|
||||
if (strstr (word_eol[5], "account-notify") != 0)
|
||||
{
|
||||
want_cap ? strcat (buffer, " account-notify") : strcpy (buffer, "CAP REQ :account-notify");
|
||||
want_cap = 1;
|
||||
}
|
||||
|
||||
if (strstr (word_eol[5], "extended-join") != 0)
|
||||
{
|
||||
want_cap ? strcat (buffer, " extended-join") : strcpy (buffer, "CAP REQ :extended-join");
|
||||
want_cap = 1;
|
||||
}
|
||||
/* if the SASL password is set, request SASL auth */
|
||||
if (strstr (word_eol[5], "sasl") != 0 && strlen (sess->server->saslpassword) != 0)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user