-#include <unistd.h>
-
#include <iostream>
#include "http.h"
-#include "request.h"
int main() {
- auto resp1 = http::async::send(http::Method::GET,
- http::RequestOpts{.domain_name = "google.com", .query = "/prova"});
+ auto resp1 = http::async::send(http::Method::GET, {.domain_name = "example.com",
+ .version = {1, 1}});
auto resp = resp1.get();
if (!resp.has_value()) {
case http::Error::InvalidRead: {
std::cout << "Invalid read" << std::endl;
} break;
+ case http::Error::InvalidResponse: {
+ std::cout << "Invalid response" << std::endl;
+ } break;
+ case http::Error::InvalidResponseHTTPVersion: {
+ std::cout << "Invalid response http version" << std::endl;
+ } break;
+ case http::Error::InvalidResponseStatusCode: {
+ std::cout << "Invalid response status code" << std::endl;
+ } break;
}
} else {
std::cout << resp.value() << std::endl;
#include <iostream>
#include <ranges>
#include <string_view>
+#include <utility>
#include "http.h"
namespace http {
std::expected<Response, Error> Response::build(std::string_view raw_response) noexcept {
+ if (raw_response.empty()) {
+ return ERR(Error::InvalidResponse);
+ }
+
Response resp;
auto lines_view = raw_response | std::views::split(NEW_LINE);
resp.version = {.major = (uint8_t)std::stoi(major.data()),
.minor = (uint8_t)std::stoi(minor.data())};
} catch (...) {
- resp.version = {.major = 0, .minor = 0};
+ return ERR(Error::InvalidResponseHTTPVersion);
}
try {
std::string_view status(*++word_iter);
resp.status = status_map[std::stoi(status.data())];
} catch (...) {
- resp.status = Status::PARSE_ERROR;
+ return ERR(Error::InvalidResponseStatusCode);
}
for (std::string_view line; lines_view_iter != lines_view.end() &&
using namespace http;
switch (status) {
- case Status::PARSE_ERROR:
- return os << (uint16_t)status << " - Parse Error";
case Status::CONTINUE:
return os << (uint16_t)status << " - Continue";
case Status::SWITCHING_PROTOCOLS:
return os << (uint16_t)status << " - Not Extended";
case Status::NETWORK_AUTHENTICATION_REQUIRED:
return os << (uint16_t)status << " - Network Authentication Required";
-
default:
- return os << (uint16_t)status << " - Unknown Status";
+ std::unreachable();
}
}