/*** Copyright (C) 2022 J Reece Wilson (a/k/a "Reece"). All rights reserved. File: TLSProtocolRecv.hpp Date: 2022-8-24 Author: Reece ***/ #pragma once namespace Aurora::IO::TLS { struct TLSContext; struct TLSProtocolRecv : Protocol::IProtocolInterceptorEx { TLSProtocolRecv(TLSContext *pParent); virtual bool OnDataAvailable(const AuSPtr &pReadInByteBuffer, const AuSPtr &pWriteOutByteBuffer) override; bool TryHandshake(); bool DoHandshake(bool &bComplete); bool DoOneTick(const AuSPtr &pWriteOutByteBuffer); bool bHasRead {}; AuUInt32 uBytesRead {}; AuUInt32 uBytesReadAvail {}; AuWPtr pReadInByteBuffer; bool &HasCompletedHandshake(); private: TLSContext *pParent_; bool bHasCompletedHandshake_ {}; bool bHasFailedOnce {}; }; }