Update irc-mode.c to use irc-macros.h

This includes code cleanups and more comments, too.
This commit is contained in:
Alexander Barton 2013-08-02 01:48:13 +02:00
parent ae0af66d50
commit 888c524683
1 changed files with 50 additions and 51 deletions

View File

@ -1,6 +1,6 @@
/*
* ngIRCd -- The Next Generation IRC Daemon
* Copyright (c)2001-2012 Alexander Barton (alex@barton.de) and Contributors.
* Copyright (c)2001-2013 Alexander Barton (alex@barton.de) and Contributors.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -25,6 +25,7 @@
#include "defines.h"
#include "conn.h"
#include "channel.h"
#include "irc-macros.h"
#include "irc-write.h"
#include "lists.h"
#include "log.h"
@ -35,7 +36,6 @@
#include "exp.h"
#include "irc-mode.h"
static bool Client_Mode PARAMS((CLIENT *Client, REQUEST *Req, CLIENT *Origin,
CLIENT *Target));
static bool Channel_Mode PARAMS((CLIENT *Client, REQUEST *Req, CLIENT *Origin,
@ -50,16 +50,15 @@ static bool Send_ListChange PARAMS((const bool IsAdd, const char ModeChar,
CLIENT *Prefix, CLIENT *Client,
CHANNEL *Channel, const char *Mask));
/**
* Handler for the IRC "MODE" command.
*
* See RFC 2812 section 3.1.5 ("user mode message") and section 3.2.3
* ("channel mode message"), and RFC 2811 section 4 ("channel modes").
* This function detects whether user or channel modes should be modified
* and calls the apropriate sub-functions.
*
* @param Client The client from which this command has been received.
* @param Req Request structure with prefix and all parameters.
* @returns CONNECTED or DISCONNECTED.
* @param Client The client from which this command has been received.
* @param Req Request structure with prefix and all parameters.
* @return CONNECTED or DISCONNECTED.
*/
GLOBAL bool
IRC_MODE( CLIENT *Client, REQUEST *Req )
@ -70,20 +69,8 @@ IRC_MODE( CLIENT *Client, REQUEST *Req )
assert(Client != NULL);
assert(Req != NULL);
/* No parameters? */
if (Req->argc < 1)
return IRC_WriteStrClient(Client, ERR_NEEDMOREPARAMS_MSG,
Client_ID(Client), Req->command);
/* Origin for answers */
if (Client_Type(Client) == CLIENT_SERVER) {
origin = Client_Search(Req->prefix);
if (!origin)
return IRC_WriteStrClient(Client, ERR_NOSUCHNICK_MSG,
Client_ID(Client),
Req->prefix);
} else
origin = Client;
_IRC_ARGC_GE_OR_RETURN_(Client, Req, 1)
_IRC_GET_SENDER_OR_RETURN_(origin, Req, Client)
/* Channel or user mode? */
cl = NULL; chan = NULL;
@ -102,7 +89,6 @@ IRC_MODE( CLIENT *Client, REQUEST *Req )
Client_ID(Client), Req->argv[0]);
} /* IRC_MODE */
/**
* Check if the "mode limit" for a client has been reached.
*
@ -123,15 +109,14 @@ Mode_Limit_Reached(CLIENT *Client, int Count)
return true;
}
/**
* Handle client mode requests
*
* @param Client The client from which this command has been received.
* @param Req Request structure with prefix and all parameters.
* @param Origin The originator of the MODE command (prefix).
* @param Target The target (client) of this MODE command.
* @returns CONNECTED or DISCONNECTED.
* @param Client The client from which this command has been received.
* @param Req Request structure with prefix and all parameters.
* @param Origin The originator of the MODE command (prefix).
* @param Target The target (client) of this MODE command.
* @return CONNECTED or DISCONNECTED.
*/
static bool
Client_Mode( CLIENT *Client, REQUEST *Req, CLIENT *Origin, CLIENT *Target )
@ -386,7 +371,13 @@ Client_Mode( CLIENT *Client, REQUEST *Req, CLIENT *Origin, CLIENT *Target )
return ok;
} /* Client_Mode */
/*
* Reply to a channel mode request.
*
* @param Origin The originator of the MODE command (prefix).
* @param Channel The channel of which the modes should be sent.
* @return CONNECTED or DISCONNECTED.
*/
static bool
Channel_Mode_Answer_Request(CLIENT *Origin, CHANNEL *Channel)
{
@ -432,9 +423,14 @@ Channel_Mode_Answer_Request(CLIENT *Origin, CHANNEL *Channel)
return CONNECTED;
}
/**
* Handle channel mode and channel-user mode changes
*
* @param Client The client from which this command has been received.
* @param Req Request structure with prefix and all parameters.
* @param Origin The originator of the MODE command (prefix).
* @param Channel The target channel of this MODE command.
* @return CONNECTED or DISCONNECTED.
*/
static bool
Channel_Mode(CLIENT *Client, REQUEST *Req, CLIENT *Origin, CHANNEL *Channel)
@ -941,31 +937,37 @@ Channel_Mode(CLIENT *Client, REQUEST *Req, CLIENT *Origin, CHANNEL *Channel)
return connected;
} /* Channel_Mode */
/**
* Handler for the IRC "AWAY" command.
*
* @param Client The client from which this command has been received.
* @param Req Request structure with prefix and all parameters.
* @return CONNECTED or DISCONNECTED.
*/
GLOBAL bool
IRC_AWAY( CLIENT *Client, REQUEST *Req )
{
assert( Client != NULL );
assert( Req != NULL );
assert (Client != NULL);
assert (Req != NULL);
if( Req->argc > 1 ) return IRC_WriteStrClient( Client, ERR_NEEDMOREPARAMS_MSG, Client_ID( Client ), Req->command );
_IRC_ARGC_LE_OR_RETURN_(Client, Req, 1)
if(( Req->argc == 1 ) && (Req->argv[0][0] ))
{
Client_SetAway( Client, Req->argv[0] );
Client_ModeAdd( Client, 'a' );
IRC_WriteStrServersPrefix( Client, Client, "MODE %s :+a", Client_ID( Client ));
return IRC_WriteStrClient( Client, RPL_NOWAWAY_MSG, Client_ID( Client ));
}
else
{
Client_ModeDel( Client, 'a' );
IRC_WriteStrServersPrefix( Client, Client, "MODE %s :-a", Client_ID( Client ));
return IRC_WriteStrClient( Client, RPL_UNAWAY_MSG, Client_ID( Client ));
if (Req->argc == 1 && Req->argv[0][0]) {
Client_SetAway(Client, Req->argv[0]);
Client_ModeAdd(Client, 'a');
IRC_WriteStrServersPrefix(Client, Client, "MODE %s :+a",
Client_ID( Client));
return IRC_WriteStrClient(Client, RPL_NOWAWAY_MSG,
Client_ID( Client));
} else {
Client_ModeDel(Client, 'a');
IRC_WriteStrServersPrefix(Client, Client, "MODE %s :-a",
Client_ID( Client));
return IRC_WriteStrClient(Client, RPL_UNAWAY_MSG,
Client_ID( Client));
}
} /* IRC_AWAY */
/**
* Add entries to channel invite, ban and exception lists.
*
@ -1032,7 +1034,6 @@ Add_To_List(char what, CLIENT *Prefix, CLIENT *Client, CHANNEL *Channel,
return Send_ListChange(true, what, Prefix, Client, Channel, mask);
}
/**
* Delete entries from channel invite, ban and exeption lists.
*
@ -1076,7 +1077,6 @@ Del_From_List(char what, CLIENT *Prefix, CLIENT *Client, CHANNEL *Channel,
return Send_ListChange(false, what, Prefix, Client, Channel, mask);
}
/**
* Send information about changed channel invite/ban/exception lists to clients.
*
@ -1114,5 +1114,4 @@ Send_ListChange(const bool IsAdd, const char ModeChar, CLIENT *Prefix,
return ok;
} /* Send_ListChange */
/* -eof- */