Clean up handling CAP LS
This commit is contained in:
parent
5c534ac344
commit
4e061a43b3
|
@ -1699,20 +1699,37 @@ inbound_cap_ack (server *serv, char *nick, char *extensions,
|
|||
}
|
||||
}
|
||||
|
||||
static const char * const supported_caps[] = {
|
||||
"identify-msg",
|
||||
|
||||
/* IRCv3.1 */
|
||||
"multi-prefix",
|
||||
"away-notify",
|
||||
"account-notify",
|
||||
"extended-join",
|
||||
/* "sasl", Handled manually */
|
||||
|
||||
/* IRCv3.2 */
|
||||
"server-time"
|
||||
"userhost-in-names",
|
||||
|
||||
/* ZNC */
|
||||
"znc.in/server-time-iso",
|
||||
"znc.in/server-time",
|
||||
};
|
||||
|
||||
void
|
||||
inbound_cap_ls (server *serv, char *nick, char *extensions_str,
|
||||
const message_tags_data *tags_data)
|
||||
{
|
||||
char buffer[256]; /* buffer for requesting capabilities and emitting the signal */
|
||||
guint32 want_cap; /* format the CAP REQ string based on previous capabilities being requested or not */
|
||||
guint32 want_sasl; /* CAP END shouldn't be sent when SASL is requested, it needs further responses */
|
||||
gboolean want_cap = FALSE; /* format the CAP REQ string based on previous capabilities being requested or not */
|
||||
gboolean want_sasl = FALSE; /* CAP END shouldn't be sent when SASL is requested, it needs further responses */
|
||||
char **extensions;
|
||||
int i;
|
||||
|
||||
EMIT_SIGNAL_TIMESTAMP (XP_TE_CAPLIST, serv->server_session, nick,
|
||||
extensions_str, NULL, NULL, 0, tags_data->timestamp);
|
||||
want_cap = 0;
|
||||
want_sasl = 0;
|
||||
|
||||
extensions = g_strsplit (extensions_str, " ", 0);
|
||||
|
||||
|
@ -1721,66 +1738,27 @@ inbound_cap_ls (server *serv, char *nick, char *extensions_str,
|
|||
for (i=0; extensions[i]; i++)
|
||||
{
|
||||
const char *extension = extensions[i];
|
||||
gsize x;
|
||||
|
||||
if (!strcmp (extension, "identify-msg"))
|
||||
{
|
||||
strcat (buffer, "identify-msg ");
|
||||
want_cap = 1;
|
||||
}
|
||||
if (!strcmp (extension, "multi-prefix"))
|
||||
{
|
||||
strcat (buffer, "multi-prefix ");
|
||||
want_cap = 1;
|
||||
}
|
||||
if (!strcmp (extension, "away-notify"))
|
||||
{
|
||||
strcat (buffer, "away-notify ");
|
||||
want_cap = 1;
|
||||
}
|
||||
if (!strcmp (extension, "account-notify"))
|
||||
{
|
||||
strcat (buffer, "account-notify ");
|
||||
want_cap = 1;
|
||||
}
|
||||
if (!strcmp (extension, "extended-join"))
|
||||
{
|
||||
strcat (buffer, "extended-join ");
|
||||
want_cap = 1;
|
||||
}
|
||||
if (!strcmp (extension, "userhost-in-names"))
|
||||
{
|
||||
strcat (buffer, "userhost-in-names ");
|
||||
want_cap = 1;
|
||||
}
|
||||
|
||||
/* bouncers can prefix a name space to the extension so we should use.
|
||||
* znc <= 1.0 uses "znc.in/server-time" and newer use "znc.in/server-time-iso".
|
||||
*/
|
||||
if (!strcmp (extension, "znc.in/server-time-iso"))
|
||||
{
|
||||
strcat (buffer, "znc.in/server-time-iso ");
|
||||
want_cap = 1;
|
||||
}
|
||||
if (!strcmp (extension, "znc.in/server-time"))
|
||||
{
|
||||
strcat (buffer, "znc.in/server-time ");
|
||||
want_cap = 1;
|
||||
}
|
||||
if (prefs.hex_irc_cap_server_time
|
||||
&& !strcmp (extension, "server-time"))
|
||||
{
|
||||
strcat (buffer, "server-time ");
|
||||
want_cap = 1;
|
||||
}
|
||||
|
||||
/* if the SASL password is set AND auth mode is set to SASL, request SASL auth */
|
||||
if (!strcmp (extension, "sasl")
|
||||
&& ((serv->loginmethod == LOGIN_SASL && strlen (serv->password) != 0)
|
||||
|| (serv->loginmethod == LOGIN_SASLEXTERNAL && serv->have_cert)))
|
||||
if (!g_strcmp0 (extension, "sasl") &&
|
||||
((serv->loginmethod == LOGIN_SASL && strlen (serv->password) != 0)
|
||||
|| (serv->loginmethod == LOGIN_SASLEXTERNAL && serv->have_cert)))
|
||||
{
|
||||
strcat (buffer, "sasl ");
|
||||
want_cap = 1;
|
||||
want_sasl = 1;
|
||||
want_cap = TRUE;
|
||||
want_sasl = TRUE;
|
||||
g_strlcat (buffer, "sasl ", sizeof(buffer));
|
||||
continue;
|
||||
}
|
||||
|
||||
for (x = 0; x < G_N_ELEMENTS(supported_caps); ++x)
|
||||
{
|
||||
if (!g_strcmp0 (extension, supported_caps[x]))
|
||||
{
|
||||
g_strlcat (buffer, extension, sizeof(buffer));
|
||||
g_strlcat (buffer, " ", sizeof(buffer));
|
||||
want_cap = TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue