Commit c6fc42b2 authored by octal's avatar octal

Added custom header registration example

parent cff0edd5
...@@ -7,6 +7,9 @@ target_link_libraries(hello_server net) ...@@ -7,6 +7,9 @@ target_link_libraries(hello_server net)
add_executable(http_client http_client.cc) add_executable(http_client http_client.cc)
target_link_libraries(http_client net) target_link_libraries(http_client net)
add_executable(custom_header custom_header.cc)
target_link_libraries(custom_header net)
add_executable(rest_server rest_server.cc) add_executable(rest_server rest_server.cc)
target_link_libraries(rest_server net) target_link_libraries(rest_server net)
/*
Mathieu Stefani, 15 février 2016
Example of custom headers registering
*/
#include "net.h"
#include "http_headers.h"
#include "client.h"
using namespace Net;
using namespace Net::Http;
class XProtocolVersion : public Header::Header {
public:
NAME("X-Protocol-Version");
XProtocolVersion()
: min(0)
, maj(0)
{ }
XProtocolVersion(uint32_t major, uint32_t minor)
: maj(major)
, min(minor)
{ }
void parse(const std::string& str) {
auto p = str.find('.');
std::string major, minor;
if (p != std::string::npos) {
major = str.substr(0, p);
minor = str.substr(p + 1);
}
else {
major = str;
}
maj = std::stoi(major);
if (!minor.empty())
min = std::stoi(minor);
}
void write(std::ostream& os) const {
os << maj;
os << "." << min;
}
uint32_t major() const {
return maj;
}
uint32_t minor() const {
return min;
}
private:
uint32_t min;
uint32_t maj;
};
int main() {
Header::Registry::registerHeader<XProtocolVersion>();
Experimental::Client client("http://supnetwork.org:9080");
auto ops = Experimental::Client::options()
.threads(1)
.maxConnections(64);
client.init(ops);
auto resp = client.get("/ping").header<XProtocolVersion>(1, 0).send();
resp.then([](Response response) {
std::cout << "Response code = " << response.code() << std::endl;
auto body = response.body();
if (!body.empty())
std::cout << "Response body = " << body << std::endl;
}, Async::NoExcept);
std::this_thread::sleep_for(std::chrono::seconds(1));
client.shutdown();
}
...@@ -7,7 +7,6 @@ ...@@ -7,7 +7,6 @@
#include "net.h" #include "net.h"
#include "http.h" #include "http.h"
#include "client.h" #include "client.h"
#include <atomic>
using namespace Net; using namespace Net;
using namespace Net::Http; using namespace Net::Http;
......
...@@ -45,7 +45,7 @@ constexpr uint64_t hash(const char* str) ...@@ -45,7 +45,7 @@ constexpr uint64_t hash(const char* str)
#ifdef SAFE_HEADER_CAST #ifdef SAFE_HEADER_CAST
#define NAME(header_name) \ #define NAME(header_name) \
static constexpr uint64_t Hash = detail::hash(header_name); \ static constexpr uint64_t Hash = Net::Http::Header::detail::hash(header_name); \
uint64_t hash() const { return Hash; } \ uint64_t hash() const { return Hash; } \
static constexpr const char *Name = header_name; \ static constexpr const char *Name = header_name; \
const char *name() const { return Name; } const char *name() const { return Name; }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment