summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/modules/httpclient.h33
-rw-r--r--src/modules/m_http_client.cpp26
2 files changed, 21 insertions, 38 deletions
diff --git a/src/modules/httpclient.h b/src/modules/httpclient.h
index 8e1a314dd..181c58b6b 100644
--- a/src/modules/httpclient.h
+++ b/src/modules/httpclient.h
@@ -8,9 +8,12 @@
typedef std::map<std::string,std::string> HeaderMap;
+const char* HTTP_CLIENT_RESPONSE = "HTTPCLIENT_RESPONSE";
+const char* HTTP_CLIENT_REQUEST = "HTTPCLIENT_REQUEST";
+
/** This class represents an outgoing HTTP request
*/
-class HTTPClientRequest : public classbase
+class HTTPClientRequest : public Request
{
protected:
std::string url;
@@ -18,8 +21,8 @@ class HTTPClientRequest : public classbase
Module *src;
HeaderMap Headers;
public:
- HTTPClientRequest(InspIRCd *Instance, Module *src, const std::string &url)
- : url(url), Instance(Instance), src(src)
+ HTTPClientRequest(InspIRCd *Instance, Module *src, Module* target, const std::string &url)
+ : Request(src, target, HTTP_CLIENT_REQUEST), url(url), Instance(Instance), src(src)
{
Headers["User-Agent"] = "InspIRCd (m_http_client.so)";
Headers["Connection"] = "Close";
@@ -30,11 +33,6 @@ class HTTPClientRequest : public classbase
{
return url;
}
-
- Module *GetSrc()
- {
- return src;
- }
void AddHeader(std::string &header, std::string &data)
{
@@ -50,22 +48,9 @@ class HTTPClientRequest : public classbase
{
return Headers;
}
-
- void SendRequest()
- {
- Module *HTTPModule = Instance->FindModule("m_http_client.so");
- if (!HTTPModule)
- {
- Instance->Log(DEFAULT, "HTTP module not loaded!");
- return;
- }
-
- Request req((char *)this, src, HTTPModule);
- req.Send();
- }
};
-class HTTPClientResponse : public classbase
+class HTTPClientResponse : public Request
{
protected:
friend class HTTPSocket;
@@ -76,8 +61,8 @@ class HTTPClientResponse : public classbase
std::string responsestr;
HeaderMap Headers;
public:
- HTTPClientResponse(std::string &url, int response, std::string responsestr)
- : url(url), response(response), responsestr(responsestr)
+ HTTPClientResponse(Module* src, Module* target, std::string &url, int response, std::string responsestr)
+ : Request(src, target, HTTP_CLIENT_RESPONSE), url(url), response(response), responsestr(responsestr)
{
}
diff --git a/src/modules/m_http_client.cpp b/src/modules/m_http_client.cpp
index 962ecfc17..9004b202b 100644
--- a/src/modules/m_http_client.cpp
+++ b/src/modules/m_http_client.cpp
@@ -98,21 +98,18 @@ class ModuleHTTPClient : public Module
{
List[I_OnRequest] = 1;
}
-
- char *OnRequest(Request *req)
+
+ char* OnRequest(Request *req)
{
- HTTPClientRequest *httpreq = (HTTPClientRequest *) req->GetData();
- HTTPSocket *sock = new HTTPSocket(ServerInstance, this);
- sock->DoRequest(httpreq);
- // No return value
+ HTTPClientRequest *httpreq = (HTTPClientRequest *)req;
+ if (!strcmp(httpreq->GetId(), HTTP_CLIENT_REQUEST))
+ {
+ HTTPSocket *sock = new HTTPSocket(ServerInstance, this);
+ sock->DoRequest(httpreq);
+ // No return value
+ }
return NULL;
}
-
- void SendReply(Module *to, HTTPClientResponse *data)
- {
- Request req((char *) data, this, to);
- req.Send();
- }
};
HTTPSocket::HTTPSocket(InspIRCd *Instance, ModuleHTTPClient *Mod)
@@ -283,7 +280,7 @@ bool HTTPSocket::OnDataReady()
{
// HTTP reply (HTTP/1.1 200 msg)
data += 9;
- response = new HTTPClientResponse(url.url, atoi(data), data + 4);
+ response = new HTTPClientResponse((Module*)Mod, req->GetSource() , url.url, atoi(data), data + 4);
this->status = HTTP_HEADERS;
continue;
}
@@ -314,7 +311,8 @@ void HTTPSocket::OnClose()
}
Server->Log(DEBUG, "Got file from HTTP successfully");
response->data = data;
- Mod->SendReply(req->GetSrc(), response);
+ response->Send();
+ delete response;
}
class ModuleHTTPClientFactory : public ModuleFactory