diff options
| author | Adam <Adam@anope.org> | 2011-05-21 04:57:27 -0400 |
|---|---|---|
| committer | Adam <Adam@anope.org> | 2011-05-21 04:57:27 -0400 |
| commit | 115f94bfc23c481eab50298895f76bd494179cd8 (patch) | |
| tree | eeda28c466e9f2f532b2dee75cb817eba9066357 /modules/extra/m_xmlrpc.cpp | |
| parent | 7e5727288d9b2da5b53476b91f8cb9fe96e14d53 (diff) | |
Made Anope able to process normally when disconnected from the uplink and not sleep(), enable usage of non-blocking connect() and default all sockets to non blocking mode. Some cleanup to m_ssl and some cleanup to main.cpp.
Diffstat (limited to 'modules/extra/m_xmlrpc.cpp')
| -rw-r--r-- | modules/extra/m_xmlrpc.cpp | 37 |
1 files changed, 23 insertions, 14 deletions
diff --git a/modules/extra/m_xmlrpc.cpp b/modules/extra/m_xmlrpc.cpp index 8c0723c42..bba72c2f5 100644 --- a/modules/extra/m_xmlrpc.cpp +++ b/modules/extra/m_xmlrpc.cpp @@ -2,6 +2,8 @@ #include "ssl.h" #include "xmlrpc.h" +std::vector<XMLRPCListenSocket *> listen_sockets; + class MyXMLRPCClientSocket : public XMLRPCClientSocket { /* Used to skip the (optional) HTTP header, which we really don't care about */ @@ -85,7 +87,17 @@ class MyXMLRPCClientSocket : public XMLRPCClientSocket class MyXMLRPCListenSocket : public XMLRPCListenSocket { public: - MyXMLRPCListenSocket(const Anope::string &bindip, int port, bool ipv6, const Anope::string &u, const Anope::string &p, const std::vector<Anope::string> &a) : XMLRPCListenSocket(bindip, port, ipv6, u, p, a) { } + MyXMLRPCListenSocket(const Anope::string &bindip, int port, bool ipv6, const Anope::string &u, const Anope::string &p, const std::vector<Anope::string> &a) : XMLRPCListenSocket(bindip, port, ipv6, u, p, a) + { + listen_sockets.push_back(this); + } + + ~MyXMLRPCListenSocket() + { + std::vector<XMLRPCListenSocket *>::iterator it = std::find(listen_sockets.begin(), listen_sockets.end(), this); + if (it != listen_sockets.end()) + listen_sockets.erase(it); + } ClientSocket *OnAccept(int fd, const sockaddrs &addr) { @@ -208,7 +220,6 @@ class ModuleXMLRPC; static ModuleXMLRPC *me; class ModuleXMLRPC : public Module { - std::vector<MyXMLRPCListenSocket *> listen_sockets; service_reference<SSLService> sslref; public: @@ -229,15 +240,16 @@ class ModuleXMLRPC : public Module ~ModuleXMLRPC() { /* Clean up our sockets and our listening sockets */ - for (std::map<int, Socket *>::const_iterator it = SocketEngine::Sockets.begin(), it_end = SocketEngine::Sockets.end(); it != it_end; ++it) + for (std::map<int, Socket *>::const_iterator it = SocketEngine::Sockets.begin(), it_end = SocketEngine::Sockets.end(); it != it_end;) { Socket *s = it->second; + ++it; if (s->Type == SOCKTYPE_CLIENT) { ClientSocket *cs = debug_cast<ClientSocket *>(s); - for (unsigned i = 0; i < this->listen_sockets.size(); ++i) - if (cs->LS == this->listen_sockets[i]) + for (unsigned i = 0; i < listen_sockets.size(); ++i) + if (cs->LS == listen_sockets[i]) { delete cs; break; @@ -245,18 +257,18 @@ class ModuleXMLRPC : public Module } } - for (unsigned i = 0; i < this->listen_sockets.size(); ++i) - delete this->listen_sockets[i]; - this->listen_sockets.clear(); + for (unsigned i = 0; i < listen_sockets.size(); ++i) + delete listen_sockets[i]; + listen_sockets.clear(); } void OnReload() { ConfigReader config; - for (unsigned i = 0; i < this->listen_sockets.size(); ++i) - delete this->listen_sockets[i]; - this->listen_sockets.clear(); + for (unsigned i = 0; i < listen_sockets.size(); ++i) + delete listen_sockets[i]; + listen_sockets.clear(); for (int i = 0; i < config.Enumerate("m_xmlrpc"); ++i) { @@ -282,10 +294,7 @@ class ModuleXMLRPC : public Module { MyXMLRPCListenSocket *xmls = new MyXMLRPCListenSocket(bindip, port, ipv6, username, password, allowed_vector); if (ssl) - { sslref->Init(xmls); - } - this->listen_sockets.push_back(xmls); } catch (const SocketException &ex) { |
