"CAP REQ" starts capability negotiation and delays user registration

New helper function Set_CAP_Negotiation().
This commit is contained in:
Alexander Barton 2012-04-27 22:47:22 +02:00
parent da4c1ebe81
commit 2327b17656
1 changed files with 21 additions and 3 deletions

View File

@ -40,6 +40,9 @@ bool Handle_CAP_ACK PARAMS((CLIENT *Client, char *Arg));
bool Handle_CAP_CLEAR PARAMS((CLIENT *Client));
bool Handle_CAP_END PARAMS((CLIENT *Client));
void Set_CAP_Negotiation PARAMS((CLIENT *Client));
/**
* Handler for the IRCv3 "CAP" command.
*
@ -96,10 +99,8 @@ Handle_CAP_LS(CLIENT *Client, UNUSED char *Arg)
{
assert(Client != NULL);
if (Client_Type(Client) != CLIENT_USER)
Client_CapAdd(Client, CLIENT_CAP_PENDING);
Set_CAP_Negotiation(Client);
Client_CapAdd(Client, CLIENT_CAP_SUPPORTED);
return IRC_WriteStrClient(Client, "CAP %s LS :", Client_ID(Client));
}
@ -131,6 +132,8 @@ Handle_CAP_REQ(CLIENT *Client, char *Arg)
assert(Client != NULL);
assert(Arg != NULL);
Set_CAP_Negotiation(Client);
return IRC_WriteStrClient(Client, "CAP %s NAK :%s",
Client_ID(Client), Arg);
}
@ -189,4 +192,19 @@ Handle_CAP_END(CLIENT *Client)
return CONNECTED;
}
/**
* Set CAP negotiation status and mark client as "supports capabilities".
*
* @param Client The client to handle.
*/
void
Set_CAP_Negotiation(CLIENT *Client)
{
assert(Client != NULL);
if (Client_Type(Client) != CLIENT_USER)
Client_CapAdd(Client, CLIENT_CAP_PENDING);
Client_CapAdd(Client, CLIENT_CAP_SUPPORTED);
}
/* -eof- */