I have this code in my server app: ``` // Handles an HTTP server connection void do_session(tcp::socket &socket, ssl::context &ctx, const std::string &doc_root, std::string_view googlekey, std::string_view currencykey) { bool close{}; boost::system::error_code ec;
// Construct the stream around the socket ssl::stream<tcp::socket&> stream{ socket, ctx }; unsigned char* out[]; unsigned char* outlen; const unsigned char* in[]; unsigned int inlen; void* arg; void* arg2; for (std::size_t i{}; i < inlen; ++i) { if (in[i] == "h2") { out[0] = "h2"; outlen = 1; } } // Set ALPN and select protocol from client's list SSL_CTX_set_alpn_select_cb(ctx, [](ctx, out, outlen, in, inlen, arg) { unsigned char** out2; unsigned char* outlen; const unsigned char* server{ &out }; const unsigned char* client{ &in }; unsigned int server_len{ outlen }; unsigned int client_len{ inlen }; return SSL_select_next_proto(out2, outlen, server, server_len, client, client_len); }, arg2); // Perform the SSL handshake stream.handshake(ssl::stream_base::server, ec); if (ec) { std::cerr << "Lines 663 and 664:\n"; fail(ec, "handshake"); } // This buffer is required to persist across reads boost::beast::flat_buffer buffer; // This lambda is used to send messages send_lambda<ssl::stream<tcp::socket&>> lambda{ stream, close, ec }; for (;;) { // Read a request http::request<http::string_body> req; http::read(stream, buffer, req, ec); if (ec == http::error::end_of_stream) { break; } if (ec) { std::cerr << "Lines 684 and 685:\n"; return fail(ec, "read"); } // Send the response handle_request(doc_root, std::move(req), lambda, googlekey, currencykey); if (ec) { std::cerr << "Lines 691 and 692:\n"; return fail(ec, "write"); } if (close) { // This means we should close the connection, usually because // the response indicated the "Connection: close" semantic. break; } } // Perform the SSL shutdown stream.shutdown(ec); if (ec) { std::cerr << "Lines 707 and 708:\n"; return fail(ec, "shutdown"); } // At this point the connection is closed gracefully } ``` Did I call the `SSL_CTX_set_alpn_select_cb` function correctly? And am I setting and passing the arguments/parameters correctly? If I did anything wrong, please tell me. Thanks.