summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/configreader.h6
-rw-r--r--src/configreader.cpp42
-rw-r--r--src/inspircd.cpp27
-rw-r--r--src/modules/m_remoteinclude.cpp116
4 files changed, 9 insertions, 182 deletions
diff --git a/include/configreader.h b/include/configreader.h
index b561a40fd..babb3511c 100644
--- a/include/configreader.h
+++ b/include/configreader.h
@@ -263,11 +263,7 @@ class CoreExport ServerConfig : public Extensible
InspIRCd* GetInstance();
- bool Downloading();
-
- void StartDownloads();
-
- void Complete(const std::string &filename, bool error);
+ void DoDownloads();
/** This holds all the information in the config file,
* it's indexed by tag name to a vector of key/values.
diff --git a/src/configreader.cpp b/src/configreader.cpp
index 47c8ec234..5b2cdd9d4 100644
--- a/src/configreader.cpp
+++ b/src/configreader.cpp
@@ -1256,42 +1256,10 @@ void ServerConfig::Read(bool bail, User* user, int pass)
ServerInstance->WriteOpers("*** Successfully rehashed server.");
}
-bool ServerConfig::Downloading()
+/* XXX: This can and will block! */
+void ServerConfig::DoDownloads()
{
- if (isatty(0) && isatty(1) && isatty(2))
- {
- printf(".");
- fflush(stdout);
- }
-
- ServerInstance->Log(DEBUG, "ServerConfig::Downloading %d %d", TotalDownloaded, IncludedFiles.size());
-
- /* Returns true if there are still files in the process of downloading */
- return (TotalDownloaded < IncludedFiles.size());
-}
-
-void ServerConfig::Complete(const std::string &filename, bool error)
-{
- ServerInstance->Log(DEBUG,"Flag complete: %s %d", filename.c_str(), error);
- std::map<std::string, std::istream*>::iterator x = IncludedFiles.find(filename);
-
- if (x != IncludedFiles.end())
- {
- if (error)
- {
- delete x->second;
- x->second = NULL;
- FileErrors++;
- }
- TotalDownloaded++;
- }
-
- return;
-}
-
-void ServerConfig::StartDownloads()
-{
- ServerInstance->Log(DEBUG,"((((((((((((((((((((((((( StartDownloads() size=%d )))))))))))))))))))))))))))))))))))))", IncludedFiles.size());
+ ServerInstance->Log(DEBUG,"In DoDownloads()");
/* Reads all local files into the IncludedFiles map, then initiates sockets for the remote ones */
for (std::map<std::string, std::istream*>::iterator x = IncludedFiles.begin(); x != IncludedFiles.end(); ++x)
@@ -1340,6 +1308,10 @@ void ServerConfig::StartDownloads()
delete x->second;
x->second = NULL;
}
+ else
+ {
+ /* Search new file here for more includes to parse */
+ }
}
CompletedFiles[x->first] = true;
}
diff --git a/src/inspircd.cpp b/src/inspircd.cpp
index 98c7cc3ea..fbb7c7e71 100644
--- a/src/inspircd.cpp
+++ b/src/inspircd.cpp
@@ -471,32 +471,7 @@ InspIRCd::InspIRCd(int argc, char** argv)
* these files.
*/
Config->Read(true, NULL, 0);
- Config->StartDownloads();
-
- /* Now the downloads are started, we monitor them for completion.
- * On completion, we call Read again with pass = 1.
- * NOTE: We really should add a timeout here
- */
-
- while (Config->Downloading())
- {
- SE->DispatchEvents();
- this->BufferedSocketCull();
- }
-
- printf("\n");
-
- if (Config->FileErrors)
- {
- for (std::map<std::string, std::istream*>::iterator x = Config->IncludedFiles.begin(); x != Config->IncludedFiles.end(); ++x)
- {
- if (!x->second)
- printf("ERROR: Failed to access the file: %s.\n", x->first.c_str());
- }
- printf("Initialisation of configuration failed.\n");
- Exit(EXIT_STATUS_CONFIG);
- }
-
+ Config->DoDownloads();
/* We have all the files we can get, initiate pass 1 */
Config->Read(true, NULL, 1);
diff --git a/src/modules/m_remoteinclude.cpp b/src/modules/m_remoteinclude.cpp
deleted file mode 100644
index aa5370c5c..000000000
--- a/src/modules/m_remoteinclude.cpp
+++ /dev/null
@@ -1,116 +0,0 @@
-/* +------------------------------------+
- * | Inspire Internet Relay Chat Daemon |
- * +------------------------------------+
- *
- * InspIRCd: (C) 2002-2007 InspIRCd Development Team
- * See: http://www.inspircd.org/wiki/index.php/Credits
- *
- * This program is free but copyrighted software; see
- * the file COPYING for details.
- *
- * ---------------------------------------------------
- */
-
-#include "inspircd.h"
-#include "httpclient.h"
-
-/* $ModDesc: The base module for remote includes */
-
-class ModuleRemoteInclude : public Module
-{
- std::map<std::string, std::stringstream*> assoc;
-
- public:
- ModuleRemoteInclude(InspIRCd* Me)
- : Module(Me)
- {
- ServerInstance->Modules->Attach(I_OnDownloadFile, this);
- ServerInstance->Modules->Attach(I_OnRequest, this);
- }
-
- virtual ~ModuleRemoteInclude()
- {
- }
-
- virtual Version GetVersion()
- {
- // this method instantiates a class of type Version, and returns
- // the modules version information using it.
-
- return Version(1,1,0,1,VF_VENDOR,API_VERSION);
- }
-
- char* OnRequest(Request* req)
- {
- if (!strcmp(req->GetId(), HTTP_CLIENT_RESPONSE))
- {
- HTTPClientResponse* resp = (HTTPClientResponse*)req;
- ServerInstance->Log(DEBUG, "Got http file for %s", resp->GetURL().c_str());
-
- std::map<std::string, std::stringstream*>::iterator n = assoc.find(resp->GetURL());
-
- if (n == assoc.end())
- ServerInstance->Config->Complete(resp->GetURL(), true);
-
- std::string responsestr;
- if (resp->GetResponse(responsestr) == 200)
- {
- *(n->second) << resp->GetData();
-
- ServerInstance->Log(DEBUG, "Got data: %s", resp->GetData().c_str());
-
- ServerInstance->Log(DEBUG, "Flag file complete without error");
- ServerInstance->Config->Complete(resp->GetURL(), false);
- }
- else
- ServerInstance->Config->Complete(resp->GetURL(), true);
-
- /* Erase from our association map, but dont delete the pointer.
- * the core will want to access this pointer for the file data.
- */
- assoc.erase(n);
- }
- else if (!strcmp(req->GetId(), HTTP_CLIENT_ERROR))
- {
- HTTPClientError* resp = (HTTPClientError*)req;
-
- ServerInstance->Log(DEBUG, "Got http error when accessing %s", resp->GetURL().c_str());
- ServerInstance->Config->Complete(resp->GetURL(), true);
-
- std::map<std::string, std::stringstream*>::iterator n = assoc.find(resp->GetURL());
-
- if (n != assoc.end())
- assoc.erase(n);
- }
- return NULL;
- }
-
- int OnDownloadFile(const std::string &name, std::istream* &filedata)
- {
- if (name.substr(0, 7) == "http://")
- {
- Module* target = ServerInstance->Modules->Find("m_http_client.so");
- if (target)
- {
- ServerInstance->Log(DEBUG,"Claiming schema http://, making fetch request for %s", name.c_str());
-
- HTTPClientRequest* req = new HTTPClientRequest(ServerInstance, this, target, name);
- req->Send();
-
- /* XXX: We should delete req when the request is complete */
-
- assoc[name] = new std::stringstream();
- delete filedata;
- filedata = assoc[name];
-
- return true;
- }
- }
-
- return false;
- }
-};
-
-
-MODULE_INIT(ModuleRemoteInclude)
-