* ---------------------------------------------------
*/
+#include "inspircd.h"
#include <cstdlib>
#include <sstream>
-#include <string>
-#include <deque>
-#include <map>
#include <libpq-fe.h>
-
#include "users.h"
#include "channels.h"
#include "modules.h"
-#include "inspircd.h"
#include "configreader.h"
-
#include "m_sqlv2.h"
/* $ModDesc: PostgreSQL Service Provider module for all other m_sql* modules, uses v2 of the SQL API */
/* SQLConn rewritten by peavey to
* use EventHandler instead of
- * InspSocket. This is much neater
+ * BufferedSocket. This is much neater
* and gives total control of destroy
* and delete of resources.
*/
return conninfo.str();
}
-class ReconnectTimer : public InspTimer
+class ReconnectTimer : public Timer
{
private:
Module* mod;
public:
ReconnectTimer(InspIRCd* SI, Module* m)
- : InspTimer(5, SI->Time(), false), mod(m)
+ : Timer(5, SI->Time(), false), mod(m)
{
}
virtual void Tick(time_t TIME);
{
}
- virtual void OnLookupComplete(const std::string &result, unsigned int ttl, bool cached);
+ virtual void OnLookupComplete(const std::string &result, unsigned int ttl, bool cached, int resultnum = 0);
virtual void OnError(ResolverError e, const std::string &errormessage)
{
ModulePgSQL(InspIRCd* Me)
: Module::Module(Me), currid(0)
{
- ServerInstance->UseInterface("SQLutils");
+ ServerInstance->Modules->UseInterface("SQLutils");
sqlsuccess = new char[strlen(SQLSUCCESS)+1];
strlcpy(sqlsuccess, SQLSUCCESS, strlen(SQLSUCCESS));
- if (!ServerInstance->PublishFeature("SQL", this))
+ if (!ServerInstance->Modules->PublishFeature("SQL", this))
{
throw ModuleException("BUG: PgSQL Unable to publish feature 'SQL'");
}
ReadConf();
- ServerInstance->PublishInterface("SQL", this);
+ ServerInstance->Modules->PublishInterface("SQL", this);
}
virtual ~ModulePgSQL()
ServerInstance->Timers->DelTimer(retimer);
ClearAllConnections();
delete[] sqlsuccess;
- ServerInstance->UnpublishInterface("SQL", this);
- ServerInstance->UnpublishFeature("SQL");
- ServerInstance->DoneWithInterface("SQLutils");
+ ServerInstance->Modules->UnpublishInterface("SQL", this);
+ ServerInstance->Modules->UnpublishFeature("SQL");
+ ServerInstance->Modules->DoneWithInterface("SQLutils");
}
void Implements(char* List)
List[I_OnUnloadModule] = List[I_OnRequest] = List[I_OnRehash] = List[I_OnUserRegister] = List[I_OnCheckReady] = List[I_OnUserDisconnect] = 1;
}
- virtual void OnRehash(userrec* user, const std::string ¶meter)
+ virtual void OnRehash(User* user, const std::string ¶meter)
{
ReadConf();
}
ipvalid = inet_pton(AF_INET6, host.host.c_str(), &blargle);
}
else
+#endif
{
in_addr blargle;
ipvalid = inet_aton(host.host.c_str(), &blargle);
}
-#else
- in_addr blargle;
- ipvalid = inet_aton(host.host.c_str(), &blargle);
-#endif
if(ipvalid > 0)
{
/* move this here to use AddConn, rather that than having the whole
* module above SQLConn, since this is buggin me right now :/
*/
-void SQLresolver::OnLookupComplete(const std::string &result, unsigned int ttl, bool cached)
+void SQLresolver::OnLookupComplete(const std::string &result, unsigned int ttl, bool cached, int resultnum)
{
- host.ip = result;
- ((ModulePgSQL*)mod)->AddConn(host);
- ((ModulePgSQL*)mod)->ClearOldConnections();
+ if (!resultnum)
+ {
+ host.ip = result;
+ ((ModulePgSQL*)mod)->AddConn(host);
+ ((ModulePgSQL*)mod)->ClearOldConnections();
+ }
}
void ReconnectTimer::Tick(time_t time)
((ModulePgSQL*)us)->ReconnectConn(this);
}
-
-class ModulePgSQLFactory : public ModuleFactory
-{
- public:
- ModulePgSQLFactory()
- {
- }
-
- ~ModulePgSQLFactory()
- {
- }
-
- virtual Module * CreateModule(InspIRCd* Me)
- {
- return new ModulePgSQL(Me);
- }
-};
-
-
-extern "C" void * init_module( void )
-{
- return new ModulePgSQLFactory;
-}
+MODULE_INIT(ModulePgSQL)