0
0
Fork 0
mirror of https://github.com/matrix-construct/construct synced 2024-12-28 16:34:13 +01:00

Merge pull request #170 from staticfox/cap_clear

m_cap: Remove CLEAR subcommand as per v3 specs
This commit is contained in:
William Pitcock 2016-03-21 09:57:16 -05:00
commit 83f717db49

View file

@ -146,12 +146,11 @@ clicap_find(const char *data, int *negate, int *finished)
* Generates a list of capabilities. * Generates a list of capabilities.
* *
* Inputs: client to send to, subcmd to send, * Inputs: client to send to, subcmd to send,
* flags to match against: 0 to do none, -1 if client has no flags, * flags to match against: 0 to do none, -1 if client has no flags
* int to whether we are doing CAP CLEAR
* Outputs: None * Outputs: None
*/ */
static void static void
clicap_generate(struct Client *source_p, const char *subcmd, int flags, int clear) clicap_generate(struct Client *source_p, const char *subcmd, int flags)
{ {
char buf[BUFSIZE] = { 0 }; char buf[BUFSIZE] = { 0 };
char capbuf[BUFSIZE] = { 0 }; char capbuf[BUFSIZE] = { 0 };
@ -178,14 +177,8 @@ clicap_generate(struct Client *source_p, const char *subcmd, int flags, int clea
struct ClientCapability *clicap = entry->ownerdata; struct ClientCapability *clicap = entry->ownerdata;
const char *data = NULL; const char *data = NULL;
if(flags) if(flags && !IsCapableEntry(source_p, entry))
{ continue;
if(!IsCapableEntry(source_p, entry))
continue;
/* they are capable of this, check sticky */
else if(clear && HasCapabilityFlag(entry, CLICAP_FLAGS_STICKY))
continue;
}
if (!clicap_visible(source_p, entry)) if (!clicap_visible(source_p, entry))
continue; continue;
@ -211,8 +204,8 @@ clicap_generate(struct Client *source_p, const char *subcmd, int flags, int clea
memset(capbuf, 0, sizeof capbuf); memset(capbuf, 0, sizeof capbuf);
} }
buflen = rb_snprintf_append(capbuf, sizeof capbuf, "%s%s%s%s ", buflen = rb_snprintf_append(capbuf, sizeof capbuf, "%s%s%s ",
clear ? "-" : "", entry->cap, data != NULL ? "=" : "", data != NULL ? data : ""); entry->cap, data != NULL ? "=" : "", data != NULL ? data : "");
} }
/* remove trailing space */ /* remove trailing space */
@ -254,15 +247,6 @@ cap_ack(struct Client *source_p, const char *arg)
source_p->localClient->caps &= ~capdel; source_p->localClient->caps &= ~capdel;
} }
static void
cap_clear(struct Client *source_p, const char *arg)
{
clicap_generate(source_p, "ACK",
source_p->localClient->caps ? source_p->localClient->caps : -1, 1);
source_p->localClient->caps = 0;
}
static void static void
cap_end(struct Client *source_p, const char *arg) cap_end(struct Client *source_p, const char *arg)
{ {
@ -282,7 +266,7 @@ cap_list(struct Client *source_p, const char *arg)
{ {
/* list of what theyre currently using */ /* list of what theyre currently using */
clicap_generate(source_p, "LIST", clicap_generate(source_p, "LIST",
source_p->localClient->caps ? source_p->localClient->caps : -1, 0); source_p->localClient->caps ? source_p->localClient->caps : -1);
} }
static void static void
@ -298,7 +282,7 @@ cap_ls(struct Client *source_p, const char *arg)
} }
/* list of what we support */ /* list of what we support */
clicap_generate(source_p, "LS", 0, 0); clicap_generate(source_p, "LS", 0);
} }
static void static void
@ -404,7 +388,6 @@ static struct clicap_cmd
} clicap_cmdlist[] = { } clicap_cmdlist[] = {
/* This list *MUST* be in alphabetical order */ /* This list *MUST* be in alphabetical order */
{ "ACK", cap_ack }, { "ACK", cap_ack },
{ "CLEAR", cap_clear },
{ "END", cap_end }, { "END", cap_end },
{ "LIST", cap_list }, { "LIST", cap_list },
{ "LS", cap_ls }, { "LS", cap_ls },