static ModuleHttpServer* HttpModule;
static bool claimed;
+static std::set<HttpServerSocket*> sockets;
/** HTTP socket states
*/
GetIOHook()->OnStreamSocketAccept(this, client, server);
}
+ ~HttpServerSocket()
+ {
+ sockets.erase(this);
+ }
+
virtual void OnError(BufferedSocketError)
{
ServerInstance->GlobalCulls.AddItem(this);
date[strlen(date) - 1] = '\0';
rheaders.CreateHeader("Date", date);
- rheaders.CreateHeader("Server", "InspIRCd/m_httpd.so/1.2");
+ rheaders.CreateHeader("Server", BRANCH);
rheaders.SetHeader("Content-Length", ConvToStr(size));
if (size)
return;
}
- if (headers.IsSet("Content-Length") && (postsize = ConvToInt(headers.GetHeader("Content-Length"))) != 0)
+ if (headers.IsSet("Content-Length") && (postsize = ConvToInt(headers.GetHeader("Content-Length"))) > 0)
{
InternalState = HTTP_SERVE_RECV_POSTDATA;
class ModuleHttpServer : public Module
{
- std::vector<HttpServerSocket *> httpsocks;
public:
- ModuleHttpServer() {
+ void init()
+ {
HttpModule = this;
ServerInstance->Modules->Attach(I_OnAcceptConnection, this);
}
int port;
std::string incomingip;
irc::sockets::satoap(*client, incomingip, port);
- new HttpServerSocket(nfd, incomingip, from, client, server);
+ sockets.insert(new HttpServerSocket(nfd, incomingip, from, client, server));
return MOD_RES_ALLOW;
}
-
- virtual ~ModuleHttpServer()
+ CullResult cull()
{
- for (size_t i = 0; i < httpsocks.size(); i++)
+ std::set<HttpServerSocket*> local;
+ local.swap(sockets);
+ for (std::set<HttpServerSocket*>::const_iterator i = local.begin(); i != local.end(); ++i)
{
- httpsocks[i]->cull();
- delete httpsocks[i];
+ HttpServerSocket* sock = *i;
+ sock->cull();
+ delete sock;
}
+ return Module::cull();
}
virtual Version GetVersion()