diff options
author | peavey <peavey@e03df62e-2008-0410-955e-edbf42e46eb7> | 2009-03-27 20:42:04 +0000 |
---|---|---|
committer | peavey <peavey@e03df62e-2008-0410-955e-edbf42e46eb7> | 2009-03-27 20:42:04 +0000 |
commit | e19797a3fafa5192a836cd2ebbc31d73bd5fb4aa (patch) | |
tree | c46169710cdb5c29adb33e2cf0fc24493246ca6b /src | |
parent | 40747ee2ad5621d5cc0d8afe59d1f36c2b191711 (diff) |
Give pgsql some needed love. Dont use DNS, remove some unused hooks and its not possible to work over unix socket, simply dont define host, or start with a slash to define the socket yourself.
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@11268 e03df62e-2008-0410-955e-edbf42e46eb7
Diffstat (limited to 'src')
-rw-r--r-- | src/modules/extra/m_pgsql.cpp | 89 |
1 files changed, 7 insertions, 82 deletions
diff --git a/src/modules/extra/m_pgsql.cpp b/src/modules/extra/m_pgsql.cpp index 3bda30fb3..f353f7575 100644 --- a/src/modules/extra/m_pgsql.cpp +++ b/src/modules/extra/m_pgsql.cpp @@ -59,10 +59,10 @@ unsigned long count(const char * const str, char a) */ std::string SQLhost::GetDSN() { - std::ostringstream conninfo("connect_timeout = '2'"); + std::ostringstream conninfo("connect_timeout = '5'"); - if (ip.length()) - conninfo << " hostaddr = '" << ip << "'"; + if (host.length()) + conninfo << " host = '" << host << "'"; if (port) conninfo << " port = '" << port << "'"; @@ -101,27 +101,6 @@ class ReconnectTimer : public Timer }; -/** Used to resolve sql server hostnames - */ -class SQLresolver : public Resolver -{ - private: - SQLhost host; - Module* mod; - public: - SQLresolver(Module* m, InspIRCd* Instance, const SQLhost& hi, bool &cached) - : Resolver(Instance, hi.host, DNS_QUERY_FORWARD, cached, (Module*)m), host(hi), mod(m) - { - } - - virtual void OnLookupComplete(const std::string &result, unsigned int ttl, bool cached, int resultnum = 0); - - virtual void OnError(ResolverError e, const std::string &errormessage) - { - ServerInstance->Logs->Log("m_pgsql",DEBUG, "PgSQL: DNS lookup failed (%s), dying horribly", errormessage.c_str()); - } -}; - /** PgSQLresult is a subclass of the mostly-pure-virtual class SQLresult. * All SQL providers must create their own subclass and define it's methods using that * database library's data retriveal functions. The aim is to avoid a slow and inefficient process @@ -801,8 +780,8 @@ class ModulePgSQL : public Module ReadConf(); 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); + Implementation eventlist[] = { I_OnUnloadModule, I_OnRequest, I_OnRehash }; + ServerInstance->Modules->Attach(eventlist, this, 3); } virtual ~ModulePgSQL() @@ -859,7 +838,6 @@ class ModulePgSQL : public Module for(int i = 0; i < conf.Enumerate("database"); i++) { SQLhost host; - int ipvalid; host.id = conf.ReadValue("database", "id", i); host.host = conf.ReadValue("database", "hostname", i); @@ -872,46 +850,7 @@ class ModulePgSQL : public Module if (HasHost(host)) continue; -#ifdef IPV6 - if (strchr(host.host.c_str(),':')) - { - in6_addr blargle; - ipvalid = inet_pton(AF_INET6, host.host.c_str(), &blargle); - } - else -#endif - { - in_addr blargle; - ipvalid = inet_aton(host.host.c_str(), &blargle); - } - - if(ipvalid > 0) - { - /* The conversion succeeded, we were given an IP and we can give it straight to SQLConn */ - host.ip = host.host; - this->AddConn(host); - } - else if(ipvalid == 0) - { - /* Conversion failed, assume it's a host */ - SQLresolver* resolver; - - try - { - bool cached; - resolver = new SQLresolver(this, ServerInstance, host, cached); - ServerInstance->AddResolver(resolver, cached); - } - catch(...) - { - /* THE WORLD IS COMING TO AN END! */ - } - } - else - { - /* Invalid address family, die horribly. */ - ServerInstance->Logs->Log("m_pgsql",DEBUG, "BUG: insp_aton failed returning -1, oh noes."); - } + this->AddConn(host); } } @@ -944,13 +883,12 @@ class ModulePgSQL : public Module { if (HasHost(hi)) { - 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()); + ServerInstance->Logs->Log("m_pgsql",DEFAULT, "WARNING: A pgsql connection with id: %s already exists. Aborting connection attempt.", hi.id.c_str()); return; } SQLConn* newconn; - /* The conversion succeeded, we were given an IP and we can give it straight to SQLConn */ newconn = new SQLConn(ServerInstance, this, hi); connections.insert(std::make_pair(hi.id, newconn)); @@ -1022,19 +960,6 @@ class ModulePgSQL : public Module } }; -/* 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, int resultnum) -{ - if (!resultnum) - { - host.ip = result; - ((ModulePgSQL*)mod)->AddConn(host); - ((ModulePgSQL*)mod)->ClearOldConnections(); - } -} - void ReconnectTimer::Tick(time_t time) { ((ModulePgSQL*)mod)->ReadConf(); |