summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/modules/httpd.h42
-rw-r--r--src/modules/m_httpd.cpp37
2 files changed, 74 insertions, 5 deletions
diff --git a/src/modules/httpd.h b/src/modules/httpd.h
new file mode 100644
index 000000000..9be23f9f0
--- /dev/null
+++ b/src/modules/httpd.h
@@ -0,0 +1,42 @@
+#include "base.h"
+
+#ifndef __HTTPD_H__
+#define __HTTPD_H__
+
+HTTPRequest : public classbase
+{
+ protected:
+
+ std::string type;
+ std::string document;
+ std::string ipaddr;
+
+ public:
+
+ void* opaque;
+
+ HTTPRequest(const std::string &request_type, const std::string &uri, void* opaque, const std::string &ip)
+ : type(request_type), document(uri), ipaddr(ip)
+ {
+ }
+
+ std::string& GetType()
+ {
+ return type;
+ }
+
+ std::string& GetURI()
+ {
+ return document;
+ }
+
+ std::string& GetIP()
+ {
+ return ipaddr;
+ }
+}
+
+#endif
+
+//httpr(request_type,uri,headers,this,this->GetIP());
+
diff --git a/src/modules/m_httpd.cpp b/src/modules/m_httpd.cpp
index 8150a6b5f..b618e01f9 100644
--- a/src/modules/m_httpd.cpp
+++ b/src/modules/m_httpd.cpp
@@ -22,10 +22,14 @@ using namespace std;
#include "modules.h"
#include "inspsocket.h"
#include "helperfuncs.h"
+#include "httpd.h"
/* $ModDesc: Provides HTTP serving facilities to modules */
+class ModuleHttp;
+
static Server *Srv;
+static ModuleHttp* HttpModule;
extern time_t TIME;
enum HttpState
@@ -68,18 +72,20 @@ class HttpSocket : public InspSocket
{
}
- void SendHeaders()
+ void SendHeaders(unsigned long size)
{
struct tm *timeinfo = localtime(&TIME);
this->Write("HTTP/1.1 200 OK\r\nDate: ");
this->Write(asctime(timeinfo));
- this->Write("Server: InspIRCd/m_httpd.so/1.1\r\nContent-Length: "+ConvToStr(index->ContentSize())+
+ this->Write("Server: InspIRCd/m_httpd.so/1.1\r\nContent-Length: "+ConvToStr(size)+
"\r\nConnection: close\r\nContent-Type: text/html\r\n\r\n");
}
virtual bool OnDataReady()
{
char* data = this->Read();
+ std::string request_type;
+
/* Check that the data read is a valid pointer and it has some content */
if (data && *data)
{
@@ -89,9 +95,20 @@ class HttpSocket : public InspSocket
{
/* Headers are complete */
InternalState = HTTP_SERVE_SEND_DATA;
- SendHeaders();
- this->Write(index->Contents());
+ headers >> request_type;
+ headers >> uri;
+
+ if ((request_type == "GET") && (uri = "/"))
+ {
+ SendHeaders(index->ContentSize());
+ this->Write(index->Contents());
+ }
+ else
+ {
+ HttpRequest httpr(request_type,uri,headers,this,this->GetIP());
+ Event e(uri, HttpModule, "httpd_url");
+ }
return false;
}
@@ -147,6 +164,15 @@ class ModuleHttp : public Module
CreateListener();
}
+ void OnEvent(Event* event)
+ {
+ }
+
+ char* OnRequest(Request* request)
+ {
+ return NULL;
+ }
+
void Implements(char* List)
{
List[I_OnEvent] = List[I_OnRequest] = 1;
@@ -177,7 +203,8 @@ class ModuleHttpFactory : public ModuleFactory
virtual Module * CreateModule(Server* Me)
{
- return new ModuleHttp(Me);
+ ModuleHttp = new ModuleHttp(Me);
+ return new HttpModule;
}
};