* | 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
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");
sockfd = socket(AF_INET, SOCK_STREAM, 0);
- if (sockfd < 0)
+ if (sockfd < 0)
+ {
+ ServerInstance->Log(DEBUG,"Failed to socket()");
return 0;
+ }
if (server == NULL)
+ {
+ ServerInstance->Log(DEBUG,"No such host");
return 0;
+ }
memset(&serv_addr, sizeof(serv_addr), 0);
serv_addr.sin_family = AF_INET;
- memcpy(server->h_addr, &serv_addr.sin_addr.s_addr, server->h_length);
+ memcpy(&serv_addr.sin_addr.s_addr, server->h_addr, server->h_length);
serv_addr.sin_port = htons(portno);
if (connect(sockfd, (const sockaddr*)&serv_addr, sizeof(serv_addr)) < 0)
+ {
+ ServerInstance->Log(DEBUG,"Failed to connect()");
return 0;
+ }
+
+ ServerInstance->Log(DEBUG,"Connected to brainbox");
- n = send(sockfd, "GET / HTTP/1.0\r\n", 16, 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()");
return 0;
+ }
- n = read(sockfd,buffer,255);
+ ServerInstance->Log(DEBUG,"Sent GET request");
- if (n < 1)
- return 0;
+ while (((n = read(sockfd,buffer,65535)) > 0))
+ {
+ std::string output(buffer, 0, n);
+ (*(gotfile)) << output;
+ }
+
+ 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()