#include "modules.h"
#include "inspsocket.h"
#include "helperfuncs.h"
+#include "inspircd.h"
#include "httpd.h"
/* $ModDesc: Provides HTTP serving facilities to modules */
class ModuleHttp;
+extern InspIRCd* ServerInstance;
+
static Server *Srv;
static ModuleHttp* HttpModule;
extern time_t TIME;
public:
- HttpSocket(std::string host, int port, bool listening, unsigned long maxtime, FileReader* index_page) : InspSocket(host, port, listening, maxtime), index(index_page)
+ HttpSocket(InspIRCd* SI, std::string host, int port, bool listening, unsigned long maxtime, FileReader* index_page) : InspSocket(SI, host, port, listening, maxtime), index(index_page)
{
log(DEBUG,"HttpSocket constructor");
InternalState = HTTP_LISTEN;
}
- HttpSocket(int newfd, char* ip, FileReader* ind) : InspSocket(newfd, ip), index(ind)
+ HttpSocket(InspIRCd* SI, int newfd, char* ip, FileReader* ind) : InspSocket(SI, newfd, ip), index(ind)
{
InternalState = HTTP_SERVE_WAIT_REQUEST;
}
{
if (InternalState == HTTP_LISTEN)
{
- HttpSocket* s = new HttpSocket(newsock, ip, index);
+ HttpSocket* s = new HttpSocket(this->Instance, newsock, ip, index);
Srv->AddSocket(s);
}
return true;
struct tm *timeinfo = localtime(&TIME);
this->Write("HTTP/1.1 "+ConvToStr(response)+" "+Response(response)+"\r\nDate: ");
this->Write(asctime(timeinfo));
- this->Write(extraheaders);
+ if (extraheaders.empty())
+ {
+ this->Write("Content-Type: text/html\r\n");
+ }
+ else
+ {
+ 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");
+ "\r\nConnection: close\r\n\r\n");
}
virtual bool OnDataReady()
void CreateListener()
{
- http = new HttpSocket(this->bindip, this->port, true, 0, &index);
+ http = new HttpSocket(ServerInstance, this->bindip, this->port, true, 0, &index);
if ((http) && (http->GetState() == I_LISTENING))
{
Srv->AddSocket(http);
virtual Version GetVersion()
{
- return Version(1,0,0,0,VF_STATIC|VF_VENDOR);
+ return Version(1,0,0,0,VF_STATIC|VF_VENDOR|VF_SERVICEPROVIDER);
}
};