InetAPI
InetAPI
is an internet access API following the Stratify Labs API framework.
It includes sub-projects which will build LWIP as well as pull and build mbedtls from the Github repository.
#
How to BuildThe InetAPI
library is designed to be a CMake sub-project. To build, please use one of these projects:
#
Usage#
SocketsYou can use a Socket
or a SecureSocket
. The latter uses mbedtls
for secure connections. The Socket layer is a C++ wrapper for POSIX style sockets (works on Stratify OS, Windows, macOS and Linux).
#include <inet.hpp>
//HTTP server with socketsAddressInfo address_info(AddressInfo::Construct() .set_family(Socket::Family::inet) .set_service(NumberString(self->m_server_port)) .set_type(Socket::Type::stream) .set_flags(AddressInfo::Flags::passive))
const SocketAddress &server_listen_address = address_info.list().at(0)Socket server_listen_socket = Socket(server_listen_address) .set_option(SocketOption(Socket::Level::socket, Socket::NameFlags::socket_reuse_address)) .bind_and_listen(server_listen_address) .move()
#
HTTP Server#include <inet.hpp>
HttpServer(server_listen_socket.accept(accept_address)) .run(this, [](HttpServer *server, void *context, const Http::Request &request) -> Http::IsStop { // handle the request
const StringView hello_world = "Hello World" DataFile incoming
const bool is_connection_close = server->get_header_field("CONNECTION") == "CLOSE"
switch (request.method()) { case Http::Method::null: server->receive(NullFile()) .send(Http::Response(server->http_version(), Http::Status::bad_request)) break
case Http::Method::get: server->receive(NullFile()) .add_header_field("content-length", NumberString(hello_world.length())) .send(Http::Response(server->http_version(), Http::Status::ok)) .send(ViewFile(View(hello_world)))
break
case Http::Method::post: server->receive(incoming) .add_header_field("content-length", NumberString(incoming.size())) .send(Http::Response(server->http_version(), Http::Status::ok)) .send(incoming.seek(0))
break
case Http::Method::put: server->receive(incoming) .add_header_field("content-length", NumberString(incoming.size())) .send(Http::Response(server->http_version(), Http::Status::ok)) .send(incoming.seek(0)) break
case Http::Method::patch: server->receive(incoming) .add_header_field("content-length", NumberString(incoming.size())) .send(Http::Response(server->http_version(), Http::Status::ok)) .send(incoming.seek(0)) break
case Http::Method::delete_: break case Http::Method::head: break case Http::Method::options: break case Http::Method::trace: break }
return is_connection_close ? Http::IsStop::yes : Http::IsStop::no })
#
Http Client
#include <fs.hpp>#include <inet.hpp>
DataFile responseHttpClient().connect("httpbin.org") .get("/get", Http::ExecuteMethod().set_response(&response))