Exemple #1
0
void
Client::start (System::Socket* socket)
{
    HTTP* request = new HTTP;
    while (!request->done()) {
        std::string string = socket->readLine().toString();
        request->request(string);
    }

    HTTP* response = new HTTP;
    if (request->isOk()) {
        try {
            response->setData(System::readFile(
                Config::get("directories->document[path]")+System::normalizePath(request->getUri())
            ));

            response->setStatus(200);
            response->setVersion(request->getVersion());

            response->setHeader("Connection", "close");
            response->setHeader("Content-Type", Mime::getType(request->getUri()));
            response->setHeader("Content-Length", response->getData().length());
            response->setHeader("Server", "lulzHTTPd/0.1");

            socket->send(response->get());
        }
        catch (Exception e) {
            std::stringstream resp;
            resp << "WUT, ARE YOU BLIND? :O" << std::endl;

            response->setStatus(404);
            response->setVersion(request->getVersion());

            response->setHeader("Connection", "close");
            response->setHeader("Content-Type", "text/plain");
            response->setHeader("Content-Length", resp.str().length());
            response->setHeader("Server", "lulzHTTPd/0.1");

            response->setData(resp.str());

            socket->send(response->get());
        }
    }
    else {
        std::stringstream resp;
        resp << "F****T IT'S A BAD REQUEST" << std::endl;

        response->setStatus(request->getStatus());
        response->setVersion(request->getVersion() ? request->getVersion() : 1.0);

        response->setHeader("Connection", "close");
        response->setHeader("Content-Type", "text/plain");
        response->setHeader("Content-Length", resp.str().length());
        response->setHeader("Server", "lulzHTTPd/0.1");

        response->setData(resp.str());

        socket->send(response->get());
    }

    delete request;
    delete response;
    delete socket;
}