From 6322067c9073a83ee7e9b12bc0c868a5507f1d87 Mon Sep 17 00:00:00 2001 From: brain Date: Tue, 11 Jul 2006 14:38:07 +0000 Subject: Stuff for adding extra headers to a response (for Authorization: and Location: etc) git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@4333 e03df62e-2008-0410-955e-edbf42e46eb7 --- src/modules/httpd.h | 8 +++++++- src/modules/m_httpd.cpp | 13 +++++++------ src/modules/m_httpd_stats.cpp | 2 +- 3 files changed, 15 insertions(+), 8 deletions(-) (limited to 'src/modules') diff --git a/src/modules/httpd.h b/src/modules/httpd.h index 5ac4d0c85..ba059dca8 100644 --- a/src/modules/httpd.h +++ b/src/modules/httpd.h @@ -50,12 +50,13 @@ class HTTPDocument : public classbase protected: std::stringstream* document; int responsecode; + std::string extraheaders; public: void* sock; - HTTPDocument(void* opaque, std::stringstream* doc, int response) : document(doc), responsecode(response), sock(opaque) + HTTPDocument(void* opaque, std::stringstream* doc, int response, const std::string &extra) : document(doc), responsecode(response), extraheaders(extra), sock(opaque) { } @@ -73,6 +74,11 @@ class HTTPDocument : public classbase { return this->responsecode; } + + std::string& GetExtraHeaders() + { + return this->extraheaders; + } }; #endif diff --git a/src/modules/m_httpd.cpp b/src/modules/m_httpd.cpp index dc6a7f418..3d47ed042 100644 --- a/src/modules/m_httpd.cpp +++ b/src/modules/m_httpd.cpp @@ -164,11 +164,12 @@ class HttpSocket : public InspSocket } } - void SendHeaders(unsigned long size, int response) + void SendHeaders(unsigned long size, int response, std::string &extraheaders) { struct tm *timeinfo = localtime(&TIME); this->Write("HTTP/1.1 "+ConvToStr(response)+" "+Response(response)+"\r\nDate: "); this->Write(asctime(timeinfo)); + this->Write(extraheaders); 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"); } @@ -202,7 +203,7 @@ class HttpSocket : public InspSocket { if ((request_type == "GET") && (uri == "/")) { - SendHeaders(index->ContentSize(),200); + SendHeaders(index->ContentSize(), 200, ""); this->Write(index->Contents()); } else @@ -214,7 +215,7 @@ class HttpSocket : public InspSocket if (!claimed) { - SendHeaders(0, 404); + SendHeaders(0, 404, ""); log(DEBUG,"Page not claimed, 404"); } } @@ -233,10 +234,10 @@ class HttpSocket : public InspSocket } } - void Page(std::stringstream* n, int response) + void Page(std::stringstream* n, int response, std::string& extraheaders) { log(DEBUG,"Sending page"); - SendHeaders(n->str().length(),response); + SendHeaders(n->str().length(), response, extraheaders); this->Write(n->str()); } }; @@ -291,7 +292,7 @@ class ModuleHttp : public Module claimed = true; HTTPDocument* doc = (HTTPDocument*)request->GetData(); HttpSocket* sock = (HttpSocket*)doc->sock; - sock->Page(doc->GetDocument(), doc->GetResponseCode()); + sock->Page(doc->GetDocument(), doc->GetResponseCode(), doc->GetExtraHeaders()); return NULL; } diff --git a/src/modules/m_httpd_stats.cpp b/src/modules/m_httpd_stats.cpp index 3d02c68b5..894aeed5b 100644 --- a/src/modules/m_httpd_stats.cpp +++ b/src/modules/m_httpd_stats.cpp @@ -52,7 +52,7 @@ class ModuleHttpStats : public Module data << "

Chickens

"; HTTPRequest* http = (HTTPRequest*)event->GetData(); - HTTPDocument response(http->sock, &data, 200); + HTTPDocument response(http->sock, &data, 200, "X-Powered-By: m_http_stats.so\r\n"); Request req((char*)&response, (Module*)this, event->GetSource()); req.Send(); -- cgit v1.2.3