Partially finished HTTP stuff

This commit is contained in:
2022-03-29 16:50:26 -04:00
parent 72581f21e9
commit a2cf41ef9c
2 changed files with 67 additions and 0 deletions

View File

@@ -0,0 +1,26 @@
#include "wrap-sstream.hpp"
#include "wrap-string.hpp"
static eng::string url_encode(const eng::string &value) {
eng::ostringstream escaped;
escaped.fill('0');
escaped << hex;
for (int i = 0; i < int(value.size()); i++) {
char c = value[i];
// Keep alphanumeric and other accepted characters intact
// Any other characters are percent-encoded
if (std::isalnum(c) || c == '-' || c == '_' || c == '.' || c == '~') {
escaped << c;
} else {
escaped << std::uppercase;
escaped << '%' << std::setw(2) << int((unsigned char) c);
escaped << std::nouppercase;
}
}
return escaped.str();
}

View File

@@ -0,0 +1,41 @@
/////////////////////////////////////////////////////////
//
// HTTP Implementation.
//
// This is a fairly limited implementation of HTTP.
//
// It only supports HTTP 1.1
//
// It only supports GET, POST, and HEAD.
//
/////////////////////////////////////////////////////////
#ifndef HTTP_HPP
#define HTTP_HPP
#include "eng-malloc.hpp"
#include "wrap-string.hpp"
#include "wrap-vector.hpp"
#include "luastack.hpp"
class HttpRequest : public eng::nevernew {
public:
enum Method { INVALID, GET, POST, HEAD };
public:
eng::string host_;
int port_;
Method method_;
eng::string encoded_url_;
eng::string content_type_;
};
class HttpReply : public eng::nevernew {
public:
int error_code_;
eng::string error_message_;
eng::string mime_type_;
eng::string content_;
};
#endif // HTTP_HPP