File: websocket_server.cpp

package info (click to toggle)
boost1.90 1.90.0-1
  • links: PTS, VCS
  • area: main
  • in suites:
  • size: 593,120 kB
  • sloc: cpp: 4,190,908; xml: 196,648; python: 34,618; ansic: 23,145; asm: 5,468; sh: 3,774; makefile: 1,161; perl: 1,020; sql: 728; ruby: 676; yacc: 478; java: 77; lisp: 24; csh: 6
file content (46 lines) | stat: -rw-r--r-- 1,182 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
//
// Copyright (c) 2024 Mikhail Khachayants
//
// Distributed under the Boost Software License, Version 1.0. (See accompanying
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//

#include <boost/beast/websocket.hpp>
#include <boost/beast/_experimental/test/stream.hpp>

extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size)
{
    using namespace boost::beast;

    error_code ec;
    flat_buffer buffer;
    net::io_context ioc;
    test::stream remote{ioc};

    websocket::stream<test::stream> ws{
        ioc, string_view{reinterpret_cast<const char*>(data), size}};

    ws.set_option(websocket::stream_base::decorator(
        [](websocket::response_type& res)
        {
            res.set(http::field::server, "websocket-server-sync");
        }));

    websocket::permessage_deflate pd;
    pd.server_enable = (size % 2) != 0;
    pd.compLevel = static_cast<int>(size % 9);
    ws.set_option(pd);

    ws.next_layer().connect(remote);
    ws.next_layer().close_remote();
    ws.accept(ec);

    if(!ec)
    {
        ws.read(buffer, ec);
        ws.text(ws.got_text());
        ws.write(buffer.data(), ec);
    }

    return 0;
}