TYPE_OTHER
};
+#include "globals.h"
#include "dynamic.h"
#include "base.h"
#include "ctables.h"
-#include "socket.h"
+#include "inspsocket.h"
#include <string>
#include <deque>
#include <sstream>
typedef std::deque<userrec*> chanuserlist;
-// This #define allows us to call a method in all
-// loaded modules in a readable simple way, e.g.:
-// 'FOREACH_MOD OnConnect(user);'
-
+/**
+ * This #define allows us to call a method in all
+ * loaded modules in a readable simple way, e.g.:
+ * 'FOREACH_MOD(I_OnXonnwxr,OnConnect(user));'
+ */
#define FOREACH_MOD(y,x) if (Config->global_implementation[y] > 0) { \
for (int _i = 0; _i <= MODCOUNT; _i++) { \
if (Config->implement_lists[_i][y]) \
} \
catch (ModuleException& modexcept) \
{ \
- log(DEBUG,"Module exception cought: %s",modexcept.GetReason()); \
+ log(DEBUG,"Module exception caught: %s",modexcept.GetReason()); \
} \
} \
}
-// This define is similar to the one above but returns a result in MOD_RESULT.
-// The first module to return a nonzero result is the value to be accepted,
-// and any modules after are ignored.
-
-// *********************************************************************************************
-
+/**
+ * This define is similar to the one above but returns a result in MOD_RESULT.
+ * The first module to return a nonzero result is the value to be accepted,
+ * and any modules after are ignored.
+ */
#define FOREACH_RESULT(y,x) { if (Config->global_implementation[y] > 0) { \
MOD_RESULT = 0; \
for (int _i = 0; _i <= MODCOUNT; _i++) { \
} \
} \
}
-
-// *********************************************************************************************
#define FD_MAGIC_NUMBER -42
#define IS_REMOTE(x) (x->fd < 0)
#define IS_MODULE_CREATED(x) (x->fd == FD_MAGIC_NUMBER)
-/*extern void createcommand(char* cmd, handlerfunc f, char flags, int minparams, char* source);
-extern void server_mode(char **parameters, int pcnt, userrec *user);*/
-
-// class Version holds the version information of a Module, returned
-// by Module::GetVersion (thanks RD)
-
/** Holds a module's Version information
* The four members (set by the constructor only) indicate details as to the version number
* of a module. A class of type Version is returned by the GetVersion method of the Module class.
Admin(std::string name, std::string email, std::string nick);
};
-
// Forward-delacare module for ModuleMessage etc
class Module;
-// Thanks to Rob (from anope) for the idea of this message passing API
-// (its been done before, but this seemed a very neat and tidy way...
-
/** The ModuleMessage class is the base class of Request and Event
* This class is used to represent a basic data structure which is passed
* between modules for safe inter-module communications.
/** Base class for all InspIRCd modules
* This class is the base class for InspIRCd modules. All modules must inherit from this class,
* its methods will be called when irc server events occur. class inherited from module must be
- * instantiated by the ModuleFactory class (see relevent section) for the plugin to be initialised.
+ * instantiated by the ModuleFactory class (see relevent section) for the module to be initialised.
*/
class Module : public classbase
{
*/
virtual int OnRawSocketRead(int fd, char* buffer, unsigned int count, int &readresult);
+ /** Called whenever a user sets away.
+ * This method has no parameter for the away message, as it is available in the
+ * user record as userrec::awaymsg.
+ */
virtual void OnSetAway(userrec* user);
+ /** Called when a user cancels their away state.
+ */
virtual void OnCancelAway(userrec* user);
};
* back to the user from which it originated, as seen in NICK (see RFC 1459). Otherwise, it
* is only sent to the other recipients, as seen in QUIT.
*/
- virtual void SendCommon(userrec* User, std::string text, bool IncludeSender);
+ virtual void SendCommon(userrec* User, const std::string &text, bool IncludeSender);
/** Sends a WALLOPS message.
* This method writes a WALLOPS message to all users with the +w flag, originating from the
* dhost member of userrec, as any change applied via this method will be propogated to any
* linked servers.
*/
- virtual void ChangeHost(userrec* user, std::string host);
+ virtual void ChangeHost(userrec* user, const std::string &host);
/** Change GECOS (fullname) of a user.
* You should always call this method to change a user's GECOS rather than writing directly to the
* fullname member of userrec, as any change applied via this method will be propogated to any
* linked servers.
*/
- virtual void ChangeGECOS(userrec* user, std::string gecos);
+ virtual void ChangeGECOS(userrec* user, const std::string &gecos);
/** Returns true if the servername you give is ulined.
* ULined servers have extra privilages. They are allowed to change nicknames on remote servers,
* to indicate who or what sent the data, usually this is the nickname of a person, or a server
* name.
*/
- virtual void AddQLine(long duration, const std::string &source, const std::string &reason, const std::string nickname);
+ virtual void AddQLine(long duration, const std::string &source, const std::string &reason, const std::string &nickname);
/** Adds a Z-line
* The Z-line is propogated to all of the servers in the mesh and enforced as soon as it is added.
*/
virtual void DelSocket(InspSocket* sock);
+ /** Causes the local server to rehash immediately.
+ * WARNING: Do not call this method from within your rehash method, for
+ * obvious reasons!
+ */
virtual void RehashServer();
+ /** This method returns the total number of channels on the network.
+ */
virtual long GetChannelCount();
+ /** This method returns a channel whos index is greater than or equal to 0 and less than the number returned by Server::GetChannelCount().
+ * This is slower (by factors of dozens) than requesting a channel by name with Server::FindChannel(), however there are times when
+ * you wish to safely iterate the channel list, saving your position, with large amounts of time in between, which is what this function
+ * is useful for.
+ */
virtual chanrec* GetChannelIndex(long index);
- void DumpText(userrec* User, std::string LinePrefix, stringstream &TextStream);
+ /** Dumps text (in a stringstream) to a user. The stringstream should not contain linefeeds, as it will be split
+ * automatically by the function into safe amounts. The line prefix given is prepended onto each line (e.g. a servername
+ * and a numeric).
+ */
+ void DumpText(userrec* User, const std::string &LinePrefix, stringstream &TextStream);
};
* core is changed). It will contain a pointer to the configuration file data with unneeded data
* (such as comments) stripped from it.
*/
- std::stringstream *cache;
- std::stringstream *errorlog;
+ ConfigDataHash* data;
+ std::ostringstream* errorlog;;
/** Used to store errors
*/
+ bool privatehash; // If we're using our own config data hash or not.
bool readerror;
long error;
*/
class FileReader : public classbase
{
+ /** The file contents
+ */
file_cache fc;
public:
/** Default constructor.
typedef DLLFactory<ModuleFactory> ircd_module;
+typedef std::vector<Module*> ModuleList;
+typedef std::vector<ircd_module*> FactoryList;
bool ModeDefined(char c, int i);
bool ModeDefinedOper(char c, int i);