uvco 0.1
Loading...
Searching...
No Matches
uvco::examples Namespace Reference

Namespaces

namespace  anonymous_namespace{http_server.cc}

Classes

struct  HttpRequest
struct  HttpResponse
class  Router

Typedefs

using HttpHandler = std::function<Promise<HttpResponse>(const HttpRequest &)>

Functions

Promise< HttpResponsenotFoundHandler (const HttpRequest &request)
 A handler returning a 404 error.
Promise< void > connectionHandler (TcpStream stream, const Router &router)
Promise< void > httpServer (TcpServer &server, Router router)

Function Documentation

◆ connectionHandler()

Promise< void > uvco::examples::connectionHandler ( TcpStream stream,
const Router & router )
159 {
160 while (true) {
161 const std::optional<std::string> headersStrOpt =
162 co_await readHeaders(stream);
163 if (!headersStrOpt) {
164 co_await handleBadRequest(stream);
165 co_return;
166 }
167
168 const std::optional<HttpRequest> requestOpt = parseRequest(*headersStrOpt);
169 if (!requestOpt) {
170 co_await handleBadRequest(stream);
171 co_return;
172 }
173
174 const HttpRequest &request = *requestOpt;
175
176 bool closeConnection = true;
177 for (const auto &header : request.headers) {
178 if (boost::iequals(header.first, "connection") &&
179 boost::iequals(header.second, "keep-alive")) {
180 closeConnection = false;
181 break;
182 }
183 }
184
185 HttpResponse response;
186 const HttpHandler handler = router.getHandler(std::string(request.path));
187 if (handler) {
188 response = co_await handler(request);
189 } else {
190 response = co_await notFoundHandler(request);
191 }
192
193 if (closeConnection) {
194 response.headers.emplace_back("Connection", "close");
195 } else {
196 response.headers.emplace_back("Connection", "keep-alive");
197 }
198
199 co_await stream.write(response.toString());
200
201 if (closeConnection) {
202 stream.close();
203 co_return;
204 }
205 }
206}
Promise< size_t > write(std::string buf)
Definition stream.cc:114
void close()
Definition stream.cc:155
HttpHandler getHandler(const std::string &path) const
Definition http_server.cc:41
std::function< Promise< HttpResponse >(const HttpRequest &)> HttpHandler
Definition http_server.h:42
Promise< HttpResponse > notFoundHandler(const HttpRequest &)
A handler returning a 404 error.
Definition http_server.cc:49
Definition http_server.h:31