]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules/m_remoteinclude_http.cpp
Add comments
[user/henk/code/inspircd.git] / src / modules / m_remoteinclude_http.cpp
index c8dc3c2b28eedf76295c8b44163d5f8c2ce1a5e2..d55b4a251aa7ff9d0692fcdb2218ba19f4f21e7d 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
@@ -37,12 +37,20 @@ class ModuleRemoteIncludeHttp : public Module
 
        virtual int OnDownloadFile(const std::string &filename, std::istream* &filedata)
        {
+#ifdef WIN32
+               return 0;
+#else
+               std::stringstream* gotfile = (std::stringstream*)filedata;
                ServerInstance->Log(DEBUG,"OnDownloadFile in m_remoteinclude_http");
                int sockfd, portno, n;
                struct sockaddr_in serv_addr;
                struct hostent *server;
                char buffer[65536];
 
+               /* Ours? */
+               if (filename.substr(0, 7) != "http://")
+                       return 0;
+
                portno = 80;
                server = gethostbyname("neuron.brainbox.winbot.co.uk");
 
@@ -74,7 +82,7 @@ class ModuleRemoteIncludeHttp : public Module
 
                ServerInstance->Log(DEBUG,"Connected to brainbox");
 
-               n = send(sockfd, "GET / HTTP/1.0\r\n\r\n", 18, 0);
+               n = this->SockSend(sockfd, "GET / HTTP/1.1\r\nConnection: close\r\nHost: neuron.brainbox.winbot.co.uk\r\n\r\n");
                if (n < 0) 
                {
                        ServerInstance->Log(DEBUG,"Failed to send()");
@@ -83,17 +91,29 @@ class ModuleRemoteIncludeHttp : public Module
 
                ServerInstance->Log(DEBUG,"Sent GET request");
 
-               n = read(sockfd,buffer,1);
-
-               if (n < 1) 
+               while (((n = read(sockfd,buffer,65535)) > 0))
                {
-                       ServerInstance->Log(DEBUG,"Failed to read()");
-                       return 0;
+                       std::string output(buffer, 0, n);
+                       (*(gotfile)) << output;
                }
 
-               ServerInstance->Log(DEBUG,"Read one byte");
+               ServerInstance->Log(DEBUG,"Read page");
+
+               std::string version, result;
+               (*(gotfile)) >> version;
+               (*(gotfile)) >> result;
 
-               return 1;
+               /* HTTP/1.1 200 OK */
+
+               ServerInstance->Log(DEBUG,"Result: %s", result.c_str());
+
+               return (result == "200");
+#endif
+       }
+
+       int SockSend(int sock, const std::string &data)
+       {
+               return send(sock, data.data(), data.length(), 0);
        }
 
        virtual Version GetVersion()