diff --git a/Include/Aurora/IO/Protocol/IProtocolStack.hpp b/Include/Aurora/IO/Protocol/IProtocolStack.hpp index 0abbad21..a3e86d92 100644 --- a/Include/Aurora/IO/Protocol/IProtocolStack.hpp +++ b/Include/Aurora/IO/Protocol/IProtocolStack.hpp @@ -9,6 +9,8 @@ namespace Aurora::IO::Protocol { + AUE_DEFINE_VA(EProtocolWhere, eAppend, ePrepend); + struct IProtocolStack : IProtocolBaseReader, IProtocolBaseWriter @@ -20,16 +22,9 @@ namespace Aurora::IO::Protocol * @param uOutputBufferSize When 0, a hopefully not stupid default is used. * @return */ - virtual AuSPtr AppendInterceptor(const AuSPtr &pInterceptor, AuUInt uOutputBufferSize) = 0; - - /** - * @brief Inserts the interceptor at the bottom of the protocol stack. - * Warning: AppendInterceptorEx is preferred - * @param pInterceptor - * @param uOutputBufferSize When 0, a hopefully not stupid default is used. - * @return - */ - virtual AuSPtr PrependInterceptor(const AuSPtr &pInterceptor, AuUInt uOutputBufferSize) = 0; + virtual AuSPtr AddInterceptor(EProtocolWhere eWhere, + const AuSPtr &pInterceptor, + AuUInt uOutputBufferSize) = 0; /** * @brief @@ -37,7 +32,9 @@ namespace Aurora::IO::Protocol * @param uOutputBufferSize When 0, a hopefully not stupid default is used. * @return */ - virtual AuSPtr AppendInterceptorEx(const AuSPtr &pInterceptorEx, AuUInt uOutputBufferSize) = 0; + virtual AuSPtr AddInterceptorEx(EProtocolWhere eWhere, + const AuSPtr &pInterceptorEx, + AuUInt uOutputBufferSize) = 0; /** * @brief defer to AppendInterceptorEx @@ -45,15 +42,10 @@ namespace Aurora::IO::Protocol * @param uOutputBufferSize * @return */ - virtual AuSPtr AppendInterceptorDynamicBuffer(const AuSPtr &pInterceptorEx, AuUInt uOutputBufferDefaultSize, AuUInt uOutputBufferMaximumSize) = 0; - - /** - * @brief Inserts the interceptor at the bottom of the protocol stack - * @param pInterceptorEx - * @param uOutputBufferSize When 0, a hopefully not stupid default is used. - * @return - */ - virtual AuSPtr PrependInterceptorEx(const AuSPtr &pInterceptorEx, AuUInt uOutputBufferSize) = 0; + virtual AuSPtr AddInterceptorDynamicBuffer(EProtocolWhere eWhere, + const AuSPtr &pInterceptorEx, + AuUInt uOutputBufferDefaultSize, + AuUInt uOutputBufferMaximumSize) = 0; /** * @brief Same as AppendInterceptor, except that DoTick will repeat until the input is fully consumed. @@ -73,14 +65,8 @@ namespace Aurora::IO::Protocol * @param pInterceptorEx * @return */ - virtual AuSPtr AppendSingleFrameProcessor(const AuSPtr &pInterceptorEx) = 0; - - /** - * @brief - * @param pInterceptorEx - * @return - */ - virtual AuSPtr PrependSingleFrameProcessor(const AuSPtr &pInterceptorEx) = 0; + virtual AuSPtr AddSingleFrameProcessor(EProtocolWhere eWhere, + const AuSPtr &pInterceptorEx) = 0; /** * @brief Defer to AppendSingleFrameProcessor @@ -89,39 +75,19 @@ namespace Aurora::IO::Protocol * @param uOutputBufferSizeMax * @return */ - virtual AuSPtr PrependSingleFrameProcessorDynamicBuffer(const AuSPtr &pInterceptorEx, AuUInt uOutputBufferDefaultSize, AuUInt uOutputBufferMaximumSize) = 0; + virtual AuSPtr AddSingleFrameProcessorDynamicBuffer(EProtocolWhere eWhere, + const AuSPtr &pInterceptorEx, + AuUInt uOutputBufferDefaultSize, + AuUInt uOutputBufferMaximumSize) = 0; /** * @brief See: AppendSingleFrameProcessor * @param pInterceptorEx * @return */ - virtual AuSPtr AppendSingleFrameProcessorEx(const AuSPtr &pInterceptorEx, AuUInt uOutputBufferSize) = 0; - - /** - * @brief - * @param pInterceptorEx - * @param uOutputBufferSize - * @param uOutputBufferSizeMax - * @return - */ - virtual AuSPtr AppendSingleFrameProcessorDynamicBuffer(const AuSPtr &pInterceptorEx, AuUInt uOutputBufferDefaultSize, AuUInt uOutputBufferMaximumSize) = 0; - - /** - * @brief - * @param pInterceptorEx - * @param uOutputBufferSize - * @return - */ - virtual AuSPtr PrependSingleFrameProcessorEx(const AuSPtr &pInterceptorEx, AuUInt uOutputBufferSize) = 0; - - /** - * @brief defer to PrependSingleFrameProcessorEx - * @param pInterceptorEx - * @param uOutputBufferSize - * @return - */ - virtual AuSPtr PrependInterceptorDynamicBuffer(const AuSPtr &pInterceptorEx, AuUInt uOutputBufferDefaultSize, AuUInt uOutputBufferMaximumSize) = 0; + virtual AuSPtr AddSingleFrameProcessorEx(EProtocolWhere eWhere, + const AuSPtr &pInterceptorEx, + AuUInt uOutputBufferSize) = 0; /** * @brief diff --git a/Source/IO/Protocol/AuProtocolStack.cpp b/Source/IO/Protocol/AuProtocolStack.cpp index 07a50339..e5c1be11 100644 --- a/Source/IO/Protocol/AuProtocolStack.cpp +++ b/Source/IO/Protocol/AuProtocolStack.cpp @@ -24,76 +24,84 @@ namespace Aurora::IO::Protocol { } - AuSPtr ProtocolStack::AppendInterceptor(const AuSPtr &pInterceptor, - AuUInt uOutputBufferSize) + AuSPtr ProtocolStack::AddInterceptor(EProtocolWhere eWhere, + const AuSPtr &pInterceptor, + AuUInt uOutputBufferSize) { - return this->AddInterceptorWhere(false, pInterceptor, uOutputBufferSize); + return this->AddInterceptorWhere(eWhere, + pInterceptor, + uOutputBufferSize); } - AuSPtr ProtocolStack::AppendInterceptorEx(const AuSPtr &pInterceptorEx, - AuUInt uOutputBufferSize) + AuSPtr ProtocolStack::AddInterceptorEx(EProtocolWhere eWhere, + const AuSPtr &pInterceptorEx, + AuUInt uOutputBufferSize) { - return this->AddInterceptorWhereEx(false, pInterceptorEx, uOutputBufferSize, false); + return this->AddInterceptorWhereEx(eWhere, + pInterceptorEx, + uOutputBufferSize, + false); } - AuSPtr ProtocolStack::AppendSingleFrameProcessor(const AuSPtr &pInterceptorEx) + AuSPtr ProtocolStack::AddSingleFrameProcessor(EProtocolWhere eWhere, + const AuSPtr &pInterceptorEx) { - return this->AddInterceptorWhereEx(false, pInterceptorEx, 0, true); + return this->AddInterceptorWhereEx(eWhere, + pInterceptorEx, + 0, + true); } - AuSPtr ProtocolStack::AppendSingleFrameProcessorEx(const AuSPtr &pInterceptorEx, - AuUInt uOutputBufferSize) + AuSPtr ProtocolStack::AddSingleFrameProcessorEx(EProtocolWhere eWhere, + const AuSPtr &pInterceptorEx, + AuUInt uOutputBufferSize) { - return this->AddInterceptorWhereEx(false, pInterceptorEx, uOutputBufferSize, true); + return this->AddInterceptorWhereEx(eWhere, + pInterceptorEx, + uOutputBufferSize, + true); } - AuSPtr ProtocolStack::PrependSingleFrameProcessor(const AuSPtr &pInterceptorEx) + AuSPtr ProtocolStack::AddInterceptorDynamicBuffer(EProtocolWhere eWhere, + const AuSPtr &pInterceptorEx, + AuUInt uOutputBufferSize, + AuUInt uOutputBufferSizeMax) { - return this->AddInterceptorWhereEx(true, pInterceptorEx, 0, true); + return this->AddInterceptorWhereEx(eWhere, + pInterceptorEx, + uOutputBufferSize, + false, + uOutputBufferSizeMax); } - AuSPtr ProtocolStack::PrependSingleFrameProcessorEx(const AuSPtr &pInterceptorEx, - AuUInt uOutputBufferSize) + AuSPtr ProtocolStack::AddSingleFrameProcessorDynamicBuffer(EProtocolWhere eWhere, + const AuSPtr &pInterceptorEx, + AuUInt uOutputBufferSize, + AuUInt uOutputBufferSizeMax) { - return this->AddInterceptorWhereEx(true, pInterceptorEx, uOutputBufferSize, true); + return this->AddInterceptorWhereEx(eWhere, + pInterceptorEx, + uOutputBufferSize, + true, + uOutputBufferSizeMax); } - AuSPtr ProtocolStack::AppendInterceptorDynamicBuffer(const AuSPtr &pInterceptorEx, AuUInt uOutputBufferSize, AuUInt uOutputBufferSizeMax) - { - return this->AddInterceptorWhereEx(false, pInterceptorEx, uOutputBufferSize, false, uOutputBufferSizeMax); - } - - AuSPtr ProtocolStack::PrependInterceptorDynamicBuffer(const AuSPtr &pInterceptorEx, AuUInt uOutputBufferSize, AuUInt uOutputBufferSizeMax) - { - return this->AddInterceptorWhereEx(true, pInterceptorEx, uOutputBufferSize, false, uOutputBufferSizeMax); - } - - AuSPtr ProtocolStack::PrependSingleFrameProcessorDynamicBuffer(const AuSPtr &pInterceptorEx, AuUInt uOutputBufferSize, AuUInt uOutputBufferSizeMax) - { - return this->AddInterceptorWhereEx(true, pInterceptorEx, uOutputBufferSize, true, uOutputBufferSizeMax); - } - - AuSPtr ProtocolStack::AppendSingleFrameProcessorDynamicBuffer(const AuSPtr &pInterceptorEx, AuUInt uOutputBufferSize, AuUInt uOutputBufferSizeMax) - { - return this->AddInterceptorWhereEx(false, pInterceptorEx, uOutputBufferSize, true, uOutputBufferSizeMax); - } - - AuSPtr ProtocolStack::PrependInterceptor(const AuSPtr &pInterceptor, - AuUInt uOutputBufferSize) - { - return this->AddInterceptorWhere(true, pInterceptor, uOutputBufferSize); - } - - AuSPtr ProtocolStack::PrependInterceptorEx(const AuSPtr &pInterceptorEx, - AuUInt uOutputBufferSize) - { - return this->AddInterceptorWhereEx(true, pInterceptorEx, uOutputBufferSize, false); - } - - AuSPtr ProtocolStack::AddInterceptorWhere(bool bPrepend, + AuSPtr ProtocolStack::AddInterceptorWhere(EProtocolWhere eWhere, const AuSPtr &pInterceptor, AuUInt uOutputBufferSize) { + if (!EProtocolWhereIsValid(eWhere)) + { + SysPushErrorArg(); + return {}; + } + + if (!pInterceptor) + { + SysPushErrorArg(); + return {}; + } + AU_LOCK_GUARD(this->mutex); if (this->bWrittenEnd) @@ -193,7 +201,7 @@ namespace Aurora::IO::Protocol pNew->pParent = this; pNew->pInterceptor = pInterceptor; - if (bPrepend) + if (eWhere == EProtocolWhere::ePrepend) { if (this->pBottomPiece) { @@ -222,12 +230,24 @@ namespace Aurora::IO::Protocol return pNew; } - AuSPtr ProtocolStack::AddInterceptorWhereEx(bool bPrepend, + AuSPtr ProtocolStack::AddInterceptorWhereEx(EProtocolWhere eWhere, const AuSPtr &pInterceptor, AuUInt uOutputBufferSize, bool bMultipleTick, AuOptional uMax) { + if (!EProtocolWhereIsValid(eWhere)) + { + SysPushErrorArg(); + return {}; + } + + if (!pInterceptor) + { + SysPushErrorArg(); + return {}; + } + AU_LOCK_GUARD(this->mutex); if (this->bWrittenEnd) @@ -343,7 +363,7 @@ namespace Aurora::IO::Protocol pNew->pParent = this; pNew->bMultipleTick = bMultipleTick; - if (bPrepend) + if (eWhere == EProtocolWhere::ePrepend) { if (this->pBottomPiece) { @@ -1052,7 +1072,7 @@ namespace Aurora::IO::Protocol if (bSingle) { - if (!pStack->AppendSingleFrameProcessorEx(pPointer, uNextBufferSize)) + if (!pStack->AddSingleFrameProcessorEx(EProtocolWhere::eAppend, pPointer, uNextBufferSize)) { SysPushErrorNested(); return {}; @@ -1070,7 +1090,7 @@ namespace Aurora::IO::Protocol } else { - if (!pStack->AppendInterceptorEx(pPointer, uNextBufferSize)) + if (!pStack->AddInterceptorEx(EProtocolWhere::eAppend, pPointer, uNextBufferSize)) { SysPushErrorNested(); return {}; diff --git a/Source/IO/Protocol/AuProtocolStack.hpp b/Source/IO/Protocol/AuProtocolStack.hpp index 8545a3af..fa924394 100644 --- a/Source/IO/Protocol/AuProtocolStack.hpp +++ b/Source/IO/Protocol/AuProtocolStack.hpp @@ -29,29 +29,19 @@ namespace Aurora::IO::Protocol bool TryReadMore(bool bForce = false); - AuSPtr AppendInterceptor(const AuSPtr &pInterceptor, AuUInt uOutputBufferSize) override; - AuSPtr AppendInterceptorEx(const AuSPtr &pInterceptor, AuUInt uOutputBufferSize) override; - AuSPtr AppendSingleFrameProcessor(const AuSPtr &pInterceptorEx) override; - AuSPtr AppendSingleFrameProcessorEx(const AuSPtr &pInterceptorEx, AuUInt uOutputBufferSize) override; - - AuSPtr PrependInterceptor(const AuSPtr &pInterceptor, AuUInt uOutputBufferSize) override; - AuSPtr PrependInterceptorEx(const AuSPtr &pInterceptor, AuUInt uOutputBufferSize) override; - AuSPtr PrependSingleFrameProcessor(const AuSPtr &pInterceptorEx) override; - AuSPtr PrependSingleFrameProcessorEx(const AuSPtr &pInterceptorEx, AuUInt uOutputBufferSize) override; - - - AuSPtr AppendInterceptorDynamicBuffer(const AuSPtr &pInterceptorEx, AuUInt uOutputBufferSize, AuUInt uOutputBufferSizeMax) override; - AuSPtr PrependInterceptorDynamicBuffer(const AuSPtr &pInterceptorEx, AuUInt uOutputBufferSize, AuUInt uOutputBufferSizeMax) override; - - AuSPtr PrependSingleFrameProcessorDynamicBuffer(const AuSPtr &pInterceptorEx, AuUInt uOutputBufferSize, AuUInt uOutputBufferSizeMax) override; - AuSPtr AppendSingleFrameProcessorDynamicBuffer(const AuSPtr &pInterceptorEx, AuUInt uOutputBufferSize, AuUInt uOutputBufferSizeMax) override; + AuSPtr AddInterceptor(EProtocolWhere eWhere, const AuSPtr &pInterceptor, AuUInt uOutputBufferSize) override; + AuSPtr AddInterceptorEx(EProtocolWhere eWhere, const AuSPtr &pInterceptor, AuUInt uOutputBufferSize) override; + AuSPtr AddSingleFrameProcessor(EProtocolWhere eWhere, const AuSPtr &pInterceptorEx) override; + AuSPtr AddSingleFrameProcessorEx(EProtocolWhere eWhere, const AuSPtr &pInterceptorEx, AuUInt uOutputBufferSize) override; + AuSPtr AddInterceptorDynamicBuffer(EProtocolWhere eWhere, const AuSPtr &pInterceptorEx, AuUInt uOutputBufferSize, AuUInt uOutputBufferSizeMax) override; + AuSPtr AddSingleFrameProcessorDynamicBuffer(EProtocolWhere eWhere, const AuSPtr &pInterceptorEx, AuUInt uOutputBufferSize, AuUInt uOutputBufferSizeMax) override; AuSPtr AddEndInterceptor(const AuSPtr &pInterceptor) override; void Destroy() override; - AuSPtr AddInterceptorWhere(bool bPrepend, const AuSPtr &pInterceptor, AuUInt uOutputBufferSize); - AuSPtr AddInterceptorWhereEx(bool bPrepend, const AuSPtr &pInterceptor, AuUInt uOutputBufferSize, bool bMultipleTick, AuOptional uMax = {}); + AuSPtr AddInterceptorWhere(EProtocolWhere eWhere, const AuSPtr &pInterceptor, AuUInt uOutputBufferSize); + AuSPtr AddInterceptorWhereEx(EProtocolWhere eWhere, const AuSPtr &pInterceptor, AuUInt uOutputBufferSize, bool bMultipleTick, AuOptional uMax = {}); AuSPtr AsStreamWriter() override; AuSPtr AsWritableByteBuffer() override; diff --git a/Source/IO/TLS/TLSContext.cpp b/Source/IO/TLS/TLSContext.cpp index 95f07140..426eb4fb 100644 --- a/Source/IO/TLS/TLSContext.cpp +++ b/Source/IO/TLS/TLSContext.cpp @@ -170,7 +170,7 @@ namespace Aurora::IO::TLS return false; } - auto pPiece = this->pSendStack_->AppendInterceptorEx(this->GetSendInterceptor(), this->meta_.uOutPageSize); + auto pPiece = this->pSendStack_->AddInterceptorEx(AuIO::Protocol::EProtocolWhere::eAppend, this->GetSendInterceptor(), this->meta_.uOutPageSize); if (!pPiece) { SysPushErrorNet("Couldn't add TLS interceptor"); @@ -179,7 +179,7 @@ namespace Aurora::IO::TLS this->pPiece_ = pPiece; - if (!this->pRecvStack_->AppendInterceptorEx(this->GetRecvInterceptor(), this->meta_.uOutPageSize)) + if (!this->pRecvStack_->AddInterceptorEx(AuIO::Protocol::EProtocolWhere::eAppend, this->GetRecvInterceptor(), this->meta_.uOutPageSize)) { SysPushErrorNet("Couldn't add TLS interceptor"); return false;