#include "socket.h"
#include "connection.h"
#include "dns.h"
-
#include "mode.h"
/** Channel status for a user
/** RFC1459 channel modes
*/
enum UserModes {
- /** +s: Server notices */
- UM_SERVERNOTICE = 's' - 65,
+ /** +s: Server notice mask */
+ UM_SNOMASK = 's' - 65,
/** +w: WALLOPS */
UM_WALLOPS = 'w' - 65,
/** +i: Invisible */
UM_INVISIBLE = 'i' - 65,
/** +o: Operator */
- UM_OPERATOR = 'o' - 65,
- /** +n: Server notice mask */
- UM_SNOMASK = 'n' - 65
+ UM_OPERATOR = 'o' - 65
};
/** Registration state of a user, e.g.
*/
unsigned long limit;
- int GetMaxChans()
+ size_t GetMaxChans()
{
return maxchans;
}
*/
void DecrementModes();
- /** Max channels for this user
- */
- unsigned int MaxChans;
-
std::map<std::string, bool>* AllowedOperCommands;
/** Allowed user modes from oper classes. */
*/
ConnectClass *MyClass;
- /** Resolvers for looking up this users IP address
- * This will occur if and when res_reverse completes.
- * When this class completes its lookup, User::dns_done
- * will be set from false to true.
- */
- UserResolver* res_forward;
-
- /** Resolvers for looking up this users hostname
- * This is instantiated by User::StartDNSLookup(),
- * and on success, instantiates User::res_reverse.
- */
- UserResolver* res_reverse;
-
/** User visibility state, see definition of VisData.
*/
VisData* Visibility;
*/
void StartDNSLookup();
- unsigned int GetMaxChans();
-
/** The users nickname.
* An invalid nickname indicates an unregistered connection prior to the NICK command.
* Use InspIRCd::IsNick() to validate nicknames.
std::string fullname;
/** The user's mode list.
- * This is NOT a null terminated string! In the 1.1 version of InspIRCd
- * this is an array of values in a similar way to channel modes.
- * A value of 1 in field (modeletter-65) indicates that the mode is
+ * NOT a null terminated string.
+ * Also NOT an array.
+ * Much love to the STL for giving us an easy to use bitset, saving us RAM.
+ * if (modes[modeletter-65]) is set, then the mode is
* set, for example, to work out if mode +s is set, we check the field
* User::modes['s'-65] != 0.
* The following RFC characters o, w, s, i have constants defined via an
* enum, such as UM_SERVERNOTICE and UM_OPETATOR.
*/
- unsigned char modes[64];
+ std::bitset<64> modes;
/** What snomasks are set on this user.
* This functions the same as the above modes.
*/
- unsigned char snomasks[64];
+ std::bitset<64> snomasks;
/** Channels this user is on, and the permissions they have there
*/
/** Create a displayable mode string for this users umodes
* @param The mode string
*/
- const char* FormatModes();
+ const char* FormatModes(bool showparameters = false);
/** Returns true if a specific mode is set
* @param m The user mode