* | Inspire Internet Relay Chat Daemon |
* +------------------------------------+
*
- * InspIRCd is copyright (C) 2002-2006 ChatSpike-Dev.
- * E-mail:
- * <brain@chatspike.net>
- * <Craig@chatspike.net>
- *
- * Written by Craig Edwards, Craig McLure, and others.
+ * 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.
*
* ---------------------------------------------------
*/
-/* Written by Special (john@yarbbles.com) */
-
#include "inspircd.h"
#include "httpclient.h"
public:
HTTPResolver(HTTPSocket *socket, InspIRCd *Instance, const string &hostname, bool &cached, Module* me) : Resolver(Instance, hostname, DNS_QUERY_FORWARD, cached, me), socket(socket)
{
- ServerInstance->Log(DEBUG,"Resolving "+hostname);
}
- void OnLookupComplete(const string &result, unsigned int ttl, bool cached)
+ void OnLookupComplete(const string &result, unsigned int ttl, bool cached, int resultnum = 0)
{
- ServerInstance->Log(DEBUG,"Resolver done");
- socket->Connect(result);
+ if (!resultnum)
+ socket->Connect(result);
}
void OnError(ResolverError e, const string &errmsg)
{
- ServerInstance->Log(DEBUG,"Resolver error");
delete socket;
}
};
HTTPList sockets;
ModuleHTTPClient(InspIRCd *Me)
- : Module::Module(Me)
+ : Module(Me)
{
}
*/
this->req = *req;
- Instance->Log(DEBUG,"Request in progress");
-
if (!ParseURL(this->req.GetURL()))
- {
- Instance->Log(DEBUG,"Parse failed");
return false;
- }
this->port = url.port;
strlcpy(this->host, url.domain.c_str(), MAXBUF);
in_addr addy1;
#ifdef IPV6
in6_addr addy2;
- char buf[MAXBUF];
if ((inet_aton(this->host, &addy1) > 0) || (inet_pton(AF_INET6, this->host, &addy2) > 0))
#else
if (inet_aton(this->host, &addy1) > 0)
{
this->status = HTTP_DATA;
this->data += this->buffer;
- this->buffer = "";
+ this->buffer.clear();
break;
}
-// while ((line = buffer.sstrstr(data, "\r\n")) != NULL)
-// {
-// if (strncmp(data, "\r\n", 2) == 0)
-
+
if (this->status == HTTP_REQSENT)
{
// HTTP reply (HTTP/1.1 200 msg)
if ((pos = line.find(':')) != std::string::npos)
{
-
-// char *hdata = strchr(data, ':');
-
-// if (!hdata)
-// continue;
-
-// *hdata = '\0';
-
-// response->AddHeader(data, hdata + 2);
response->AddHeader(line.substr(0, pos), line.substr(pos + 1));
-
-// data = lend + 2;
- } else
+ }
+ else
+ {
continue;
+ }
}
- } else {
+ }
+ else
+ {
this->data += data;
}
return true;
delete response;
}
-class ModuleHTTPClientFactory : public ModuleFactory
-{
- public:
- ModuleHTTPClientFactory()
- {
- }
-
- ~ModuleHTTPClientFactory()
- {
- }
-
- Module *CreateModule(InspIRCd* Me)
- {
- return new ModuleHTTPClient(Me);
- }
-};
-
-extern "C" void *init_module(void)
-{
- return new ModuleHTTPClientFactory;
-}
+MODULE_INIT(ModuleHTTPClient)