Skip to main content

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 Build#

The InetAPI library is designed to be a CMake sub-project. To build, please use one of these projects:

Usage#

Sockets#

You 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))