Go to file
2017-07-20 08:12:07 -07:00
doc Parser concept, fixes: 2017-07-20 08:12:06 -07:00
examples Fixes, fail testing: 2017-07-20 08:12:06 -07:00
extras Add dstream 2017-07-20 08:12:07 -07:00
include/beast Add dstream 2017-07-20 08:12:07 -07:00
scripts Fixes, fail testing: 2017-07-20 08:12:06 -07:00
test Tidying and fix warnings 2017-07-20 08:12:07 -07:00
.gitattributes Truncate history, version 1.0.0-b2 2017-07-20 08:01:46 -07:00
.gitignore Truncate history, version 1.0.0-b2 2017-07-20 08:01:46 -07:00
.travis.yml Travis-CI additions: 2017-07-20 08:12:05 -07:00
CMakeLists.txt Tidying and fix warnings 2017-07-20 08:12:07 -07:00
Jamroot Refactor extras: 2017-07-20 08:12:06 -07:00
LICENSE_1_0.txt Truncate history, version 1.0.0-b2 2017-07-20 08:01:46 -07:00
README.md New constructors for message: 2017-07-20 08:12:06 -07:00
TODO.txt Parser concept, fixes: 2017-07-20 08:12:06 -07:00

Beast

Build Status ![codecov] (https://codecov.io/gh/vinniefalco/Beast/branch/master/graph/badge.svg) ![Documentation] (https://img.shields.io/badge/documentation-master-brightgreen.svg)

Beast provides implementations of the HTTP and WebSocket protocols built on top of Boost.Asio and other parts of boost.

Requirements:

  • Boost
  • C++11 or greater
  • OpenSSL (optional)

Example WebSocket program:

#include <beast/to_string.hpp>
#include <beast/websocket.hpp>
#include <boost/asio.hpp>
#include <iostream>
#include <string>

int main()
{
    // Normal boost::asio setup
    std::string const host = "echo.websocket.org";
    boost::asio::io_service ios;
    boost::asio::ip::tcp::resolver r(ios);
    boost::asio::ip::tcp::socket sock(ios);
    boost::asio::connect(sock,
        r.resolve(boost::asio::ip::tcp::resolver::query{host, "80"}));

    // WebSocket connect and send message using beast
    beast::websocket::stream<boost::asio::ip::tcp::socket&> ws(sock);
    ws.handshake(host, "/");
    ws.write(boost::asio::buffer("Hello, world!"));

    // Receive WebSocket message, print and close using beast
    beast::streambuf sb;
    beast::websocket::opcode op;
    ws.read(op, sb);
    ws.close(beast::websocket::close_code::normal);
    std::cout << to_string(sb.data()) << "\n";
}

Example HTTP program:

#include <beast/http.hpp>
#include <boost/asio.hpp>
#include <iostream>
#include <string>

int main()
{
    // Normal boost::asio setup
    std::string const host = "boost.org";
    boost::asio::io_service ios;
    boost::asio::ip::tcp::resolver r(ios);
    boost::asio::ip::tcp::socket sock(ios);
    boost::asio::connect(sock,
        r.resolve(boost::asio::ip::tcp::resolver::query{host, "http"}));

    // Send HTTP request using beast
    beast::http::request_v1<beast::http::empty_body> req;
    req.method = "GET";
    req.url = "/";
    req.version = 11;
    req.headers.replace("Host", host + ":" + std::to_string(sock.remote_endpoint().port()));
    req.headers.replace("User-Agent", "Beast");
    beast::http::prepare(req);
    beast::http::write(sock, req);

    // Receive and print HTTP response using beast
    beast::streambuf sb;
    beast::http::response_v1<beast::http::streambuf_body> resp;
    beast::http::read(sock, sb, resp);
    std::cout << resp;
}

Links:

Please report issues or questions here: https://github.com/vinniefalco/Beast/issues