
This was caused by a double notifier on the TLS socket, which caused the TLS code to freak out about not being able to read properly. In addition, the existing loop inside of drain_read() has been replaced by code that actually works, and which includes new warnings when the drain method is called before initialization is done or after the websocket gets closed.
44 lines
1 KiB
C++
44 lines
1 KiB
C++
/*
|
|
* Copyright (c) 2021, Dex♪ <dexes.ttp@gmail.com>
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <AK/ByteBuffer.h>
|
|
#include <AK/Span.h>
|
|
#include <AK/String.h>
|
|
#include <LibCore/Object.h>
|
|
#include <LibTLS/TLSv12.h>
|
|
#include <LibWebSocket/ConnectionInfo.h>
|
|
#include <LibWebSocket/Impl/AbstractWebSocketImpl.h>
|
|
|
|
namespace WebSocket {
|
|
|
|
class TLSv12WebSocketConnectionImpl final : public AbstractWebSocketImpl {
|
|
C_OBJECT(TLSv12WebSocketConnectionImpl);
|
|
|
|
public:
|
|
virtual ~TLSv12WebSocketConnectionImpl() override;
|
|
explicit TLSv12WebSocketConnectionImpl(Core::Object* parent = nullptr);
|
|
|
|
void connect(ConnectionInfo const& connection) override;
|
|
|
|
virtual bool can_read_line() override;
|
|
virtual String read_line(size_t size) override;
|
|
|
|
virtual bool can_read() override;
|
|
virtual ByteBuffer read(int max_size) override;
|
|
|
|
virtual bool send(ReadonlyBytes data) override;
|
|
|
|
virtual bool eof() override;
|
|
|
|
virtual void discard_connection() override;
|
|
|
|
private:
|
|
RefPtr<TLS::TLSv12> m_socket;
|
|
};
|
|
|
|
}
|