#include "hashcomp.h"
#include "cull_list.h"
-
-#define STATUS_OP 4
-#define STATUS_HOP 2
-#define STATUS_VOICE 1
-#define STATUS_NORMAL 0
-#define CC_ALLOW 0
-#define CC_DENY 1
+enum ChanStatus {
+ STATUS_OP = 4,
+ STATUS_HOP = 2,
+ STATUS_VOICE = 1,
+ STATUS_NORMAL = 0
+};
-template<typename T> string ConvToStr(const T &in);
+enum ClassTypes {
+ CC_ALLOW = 0,
+ CC_DENY = 1
+};
/** Holds a channel name to which a user has been invited.
*/
* an optional + character.
*/
char modes[54];
+
+ /** This contains a bitmask of the RFC modes +swi,
+ * which can be used for fast lookup when iterating all the users.
+ * It is maintained by the mode parser and matches the character
+ * modes stored in 'modes'.
+ */
+ char modebits;
- std::vector<ucrec> chans;
+ std::vector<ucrec*> chans;
/** The server the user is connected to.
*/
* This is done by looking up their oper type from userrec::oper, then referencing
* this to their oper classes and checking the commands they can execute.
*/
- bool HasPermission(std::string &command);
+ bool HasPermission(const std::string &command);
/** Calls read() to read some data for this user using their fd.
*/
* RFC-specified limit per line) then the method will return false and the
* text will not be inserted.
*/
- bool AddBuffer(std::string a);
+ bool AddBuffer(const std::string &a);
/** This method returns true if the buffer contains at least one carriage return
* character (e.g. one complete line may be read)
* The WriteErrors of clients are checked at a more ideal time (in the mainloop) and
* errored clients purged.
*/
- void SetWriteError(std::string error);
+ void SetWriteError(const std::string &error);
/** Returns the write error which last occured on this connection or an empty string
* if none occured.
*/
- std::string GetWriteError();
+ const char* GetWriteError();
/** Adds to the user's write buffer.
* You may add any amount of text up to this users sendq value, if you exceed the
* sendq value, SetWriteError() will be called to set the users error string to
* "SendQ exceeded", and further buffer adds will be dropped.
*/
- void AddWriteBuf(std::string data);
+ void AddWriteBuf(const std::string &data);
/** Flushes as much of the user's buffer to the file descriptor as possible.
* This function may not always flush the entire buffer, rather instead as much of it
typedef std::deque<WhoWasGroup*> whowas_set;
typedef std::map<irc::string,whowas_set*> whowas_users;
-/** A lightweight userrec used by WHOWAS
- */
-
void AddOper(userrec* user);
void DeleteOper(userrec* user);
void kill_link(userrec *user,const char* r);
void FullConnectUser(userrec* user, CullList* Goners);
userrec* ReHashNick(char* Old, char* New);
void force_nickchange(userrec* user,const char* newnick);
-void ReadClassesAndTypes();
+
+/* Configuration callbacks */
+bool InitTypes(const char* tag);
+bool InitClasses(const char* tag);
+bool DoType(const char* tag, char** entries, void** values, int* types);
+bool DoClass(const char* tag, char** entries, void** values, int* types);
+bool DoneClassesAndTypes(const char* tag);
#endif