/*** Copyright (C) 2023 J Reece Wilson (a/k/a "Reece"). All rights reserved. File: ProtocolStackFromDescription.cpp Date: 2023-09-21 Author: Reece ***/ #pragma once namespace Aurora::IO::Protocol { struct ProtocolStackByBuffered { AuUInt uBufferedStreamLength { 128 * 1024 }; }; struct ProtocolStackByBufferedAdhoc : ProtocolStackByBuffered { AuSPtr pStreamReader {}; AuUInt uPreferredFragmentSize {}; }; struct ProtocolStackByPipe { AuSPtr pWork; bool bAutoTick = true; bool bKillPipeOnFirstRootLevelFalse = true; }; struct ProtocolStackExtraData { AuOptionalEx bKillPipeOnFirstRootLevelFalse {}; bool bStreamReaderFlagAdhocPump {}; bool bStreamReaderFlagAdhocReadFromAdhoc {}; bool bFeatPending {}; }; AUE_DEFINE_VA(EProtocolStackCreateType, eByPipe, eByBuffered, eByBufferedAdhocStream ); struct ProtocolStackDescription { EProtocolStackCreateType type; ProtocolStackByPipe byPipe; ProtocolStackByBuffered byBuffered; ProtocolStackByBufferedAdhoc byBufferedStream; ProtocolStackExtraData extendedFlags; }; AUKN_SYM AuSPtr NewProtocolStackFromDescription(const ProtocolStackDescription &description); AUKN_SYM AuSPtr UtilityWrapStreamReaderWithInterceptors(AuSPtr pStreamReader, AuList>> pairs, AuUInt uBaseStreamLength = 128 * 1024, AuUInt uPreferredFragmentSize = 0, AuSPtr *pOptOutStack = nullptr); }