diff options
-rw-r--r-- | src/modules/httpd.h | 42 | ||||
-rw-r--r-- | src/modules/m_httpd.cpp | 37 |
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; } }; |