]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules/extra/m_pgsql.cpp
The rest of the server protocol interface and fix a warning in m_rline
[user/henk/code/inspircd.git] / src / modules / extra / m_pgsql.cpp
index 393cbd1d78eca48c574ef99a5964e652de5774ae..fb282fb98a5e35e3ae6d66d2e7e2fa5223c4a2a8 100644 (file)
@@ -2,7 +2,7 @@
  *       | Inspire Internet Relay Chat Daemon |
  *       +------------------------------------+
  *
- *  InspIRCd: (C) 2002-2007 InspIRCd Development Team
+ *  InspIRCd: (C) 2002-2008 InspIRCd Development Team
  * See: http://www.inspircd.org/wiki/index.php/Credits
  *
  * This program is free but copyrighted software; see
@@ -29,7 +29,7 @@
 
 /* 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.
  */
@@ -81,13 +81,13 @@ std::string SQLhost::GetDSN()
        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);
@@ -111,7 +111,7 @@ class SQLresolver : public Resolver
 
        virtual void OnError(ResolverError e, const std::string &errormessage)
        {
-               ServerInstance->Log(DEBUG, "PgSQL: DNS lookup failed (%s), dying horribly", errormessage.c_str());
+               ServerInstance->Logs->Log("m_pgsql",DEBUG, "PgSQL: DNS lookup failed (%s), dying horribly", errormessage.c_str());
        }
 };
 
@@ -132,8 +132,8 @@ class PgSQLresult : public SQLresult
        SQLfieldList* fieldlist;
        SQLfieldMap* fieldmap;
 public:
-       PgSQLresult(Module* self, Module* to, unsigned long id, PGresult* result)
-       : SQLresult(self, to, id), res(result), currentrow(0), fieldlist(NULL), fieldmap(NULL)
+       PgSQLresult(Module* self, Module* to, unsigned long rid, PGresult* result)
+       : SQLresult(self, to, rid), res(result), currentrow(0), fieldlist(NULL), fieldmap(NULL)
        {
                rows = PQntuples(res);
                cols = PQnfields(res);
@@ -143,10 +143,10 @@ public:
        {
                /* If we allocated these, free them... */
                if(fieldlist)
-                       DELETE(fieldlist);
+                       delete fieldlist;
 
                if(fieldmap)
-                       DELETE(fieldmap);
+                       delete fieldmap;
 
                PQclear(res);
        }
@@ -219,9 +219,9 @@ public:
 
                if(currentrow < PQntuples(res))
                {
-                       int cols = PQnfields(res);
+                       int ncols = PQnfields(res);
 
-                       for(int i = 0; i < cols; i++)
+                       for(int i = 0; i < ncols; i++)
                        {
                                fieldlist->push_back(GetValue(currentrow, i));
                        }
@@ -248,9 +248,9 @@ public:
 
                if(currentrow < PQntuples(res))
                {
-                       int cols = PQnfields(res);
+                       int ncols = PQnfields(res);
 
-                       for(int i = 0; i < cols; i++)
+                       for(int i = 0; i < ncols; i++)
                        {
                                fieldmap->insert(std::make_pair(ColName(i), GetValue(currentrow, i)));
                        }
@@ -267,9 +267,9 @@ public:
 
                if(currentrow < PQntuples(res))
                {
-                       int cols = PQnfields(res);
+                       int ncols = PQnfields(res);
 
-                       for(int i = 0; i < cols; i++)
+                       for(int i = 0; i < ncols; i++)
                        {
                                fl->push_back(GetValue(currentrow, i));
                        }
@@ -286,9 +286,9 @@ public:
 
                if(currentrow < PQntuples(res))
                {
-                       int cols = PQnfields(res);
+                       int ncols = PQnfields(res);
 
-                       for(int i = 0; i < cols; i++)
+                       for(int i = 0; i < ncols; i++)
                        {
                                fm->insert(std::make_pair(ColName(i), GetValue(currentrow, i)));
                        }
@@ -301,12 +301,12 @@ public:
 
        virtual void Free(SQLfieldMap* fm)
        {
-               DELETE(fm);
+               delete fm;
        }
 
        virtual void Free(SQLfieldList* fl)
        {
-               DELETE(fl);
+               delete fl;
        }
 };
 
@@ -331,7 +331,7 @@ class SQLConn : public EventHandler
                idle = this->Instance->Time();
                if(!DoConnect())
                {
-                       Instance->Log(DEFAULT, "WARNING: Could not connect to database with id: " + ConvToStr(hi.id));
+                       Instance->Logs->Log("m_pgsql",DEFAULT, "WARNING: Could not connect to database with id: " + ConvToStr(hi.id));
                        DelayReconnect();
                }
        }
@@ -383,7 +383,7 @@ class SQLConn : public EventHandler
 
                if (!this->Instance->SE->AddFd(this))
                {
-                       Instance->Log(DEBUG, "BUG: Couldn't add pgsql socket to socket engine");
+                       Instance->Logs->Log("m_pgsql",DEBUG, "BUG: Couldn't add pgsql socket to socket engine");
                        return false;
                }
 
@@ -621,7 +621,7 @@ class SQLConn : public EventHandler
 #endif
                                                        if(error)
                                                        {
-                                                               Instance->Log(DEBUG, "BUG: Apparently PQescapeStringConn() failed somehow...don't know how or what to do...");
+                                                               Instance->Logs->Log("m_pgsql",DEBUG, "BUG: Apparently PQescapeStringConn() failed somehow...don't know how or what to do...");
                                                        }
 
                                                        /* Incremenet queryend to the end of the newly escaped parameter */
@@ -632,7 +632,7 @@ class SQLConn : public EventHandler
                                                }
                                                else
                                                {
-                                                       Instance->Log(DEBUG, "BUG: Found a substitution location but no parameter to substitute :|");
+                                                       Instance->Logs->Log("m_pgsql",DEBUG, "BUG: Found a substitution location but no parameter to substitute :|");
                                                        break;
                                                }
                                        }
@@ -698,7 +698,7 @@ class SQLConn : public EventHandler
                        }
                        else
                        {
-                               Instance->Log(DEBUG, "BUG: PQsocket cant be removed from socket engine!");
+                               Instance->Logs->Log("m_pgsql",DEBUG, "BUG: PQsocket cant be removed from socket engine!");
                        }
                }
 
@@ -723,20 +723,22 @@ class ModulePgSQL : public Module
        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);
+               Implementation eventlist[] = { I_OnUnloadModule, I_OnRequest, I_OnRehash, I_OnUserRegister, I_OnCheckReady, I_OnUserDisconnect };
+               ServerInstance->Modules->Attach(eventlist, this, 6);
        }
 
        virtual ~ModulePgSQL()
@@ -745,17 +747,13 @@ class ModulePgSQL : public Module
                        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 &parameter)
+       virtual void OnRehash(User* user, const std::string &parameter)
        {
                ReadConf();
        }
@@ -848,7 +846,7 @@ class ModulePgSQL : public Module
                        else
                        {
                                /* Invalid address family, die horribly. */
-                               ServerInstance->Log(DEBUG, "BUG: insp_aton failed returning -1, oh noes.");
+                               ServerInstance->Logs->Log("m_pgsql",DEBUG, "BUG: insp_aton failed returning -1, oh noes.");
                        }
                }
        }
@@ -860,7 +858,7 @@ class ModulePgSQL : public Module
                {
                        if (!HostInConf(iter->second->GetConfHost()))
                        {
-                               DELETE(iter->second);
+                               delete iter->second;
                                safei = iter;
                                --iter;
                                connections.erase(safei);
@@ -874,7 +872,7 @@ class ModulePgSQL : public Module
                while ((i = connections.begin()) != connections.end())
                {
                        connections.erase(i);
-                       DELETE(i->second);
+                       delete i->second;
                }
        }
 
@@ -882,7 +880,7 @@ class ModulePgSQL : public Module
        {
                if (HasHost(hi))
                {
-                       ServerInstance->Log(DEFAULT, "WARNING: A pgsql connection with id: %s already exists, possibly due to DNS delay. Aborting connection attempt.", hi.id.c_str());
+                       ServerInstance->Logs->Log("m_pgsql",DEFAULT, "WARNING: A pgsql connection with id: %s already exists, possibly due to DNS delay. Aborting connection attempt.", hi.id.c_str());
                        return;
                }
 
@@ -900,7 +898,7 @@ class ModulePgSQL : public Module
                {
                        if (conn == iter->second)
                        {
-                               DELETE(iter->second);
+                               delete iter->second;
                                connections.erase(iter);
                                break;
                        }
@@ -909,7 +907,7 @@ class ModulePgSQL : public Module
                ServerInstance->Timers->AddTimer(retimer);
        }
 
-       virtual char* OnRequest(Request* request)
+       virtual const char* OnRequest(Request* request)
        {
                if(strcmp(SQLREQID, request->GetId()) == 0)
                {
@@ -956,7 +954,7 @@ class ModulePgSQL : public Module
 
        virtual Version GetVersion()
        {
-               return Version(1, 1, 0, 0, VF_VENDOR|VF_SERVICEPROVIDER, API_VERSION);
+               return Version(1, 2, 0, 0, VF_VENDOR|VF_SERVICEPROVIDER, API_VERSION);
        }
 };
 
@@ -983,5 +981,4 @@ void SQLConn::DelayReconnect()
        ((ModulePgSQL*)us)->ReconnectConn(this);
 }
 
-MODULE_INIT(ModulePgSQL);
-
+MODULE_INIT(ModulePgSQL)