[+] IProtocolPiece.GetNextPiece
[+] IProtocolPiece.ReallocateDrainBuffer [*] Harden protocol piece use after destroy
This commit is contained in:
parent
c787d85485
commit
6683d3cfdc
@ -11,6 +11,19 @@ namespace Aurora::IO::Protocol
|
|||||||
{
|
{
|
||||||
struct IProtocolPiece
|
struct IProtocolPiece
|
||||||
{
|
{
|
||||||
|
/**
|
||||||
|
* @brief
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
virtual AuSPtr<IProtocolPiece> GetNextPiece() = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief
|
||||||
|
* @param uOutputLength
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
virtual bool ReallocateDrainBuffer(AuUInt32 uOutputLength) = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Removes this piece from the stack
|
* @brief Removes this piece from the stack
|
||||||
*/
|
*/
|
||||||
|
@ -14,6 +14,11 @@ namespace Aurora::IO::Protocol
|
|||||||
{
|
{
|
||||||
AuSPtr<IStreamWriter> ProtocolPiece::ToNextWriter()
|
AuSPtr<IStreamWriter> ProtocolPiece::ToNextWriter()
|
||||||
{
|
{
|
||||||
|
if (!this->pParent)
|
||||||
|
{
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
|
||||||
if (this->pParent->pTopPiece.get() == this)
|
if (this->pParent->pTopPiece.get() == this)
|
||||||
{
|
{
|
||||||
if (this->pParent->pDrainBuffer)
|
if (this->pParent->pDrainBuffer)
|
||||||
@ -32,8 +37,36 @@ namespace Aurora::IO::Protocol
|
|||||||
return this->pWriteInteface ? this->pWriteInteface->GetStreamWriter() : AuSPtr<IStreamWriter> {};
|
return this->pWriteInteface ? this->pWriteInteface->GetStreamWriter() : AuSPtr<IStreamWriter> {};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
AuSPtr<IProtocolPiece> ProtocolPiece::GetNextPiece()
|
||||||
|
{
|
||||||
|
return this->pNext;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ProtocolPiece::ReallocateDrainBuffer(AuUInt32 uOutputLength)
|
||||||
|
{
|
||||||
|
if (!this->pParent)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!this->pNext)
|
||||||
|
{
|
||||||
|
if (this->pParent->pDrainBuffer)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return this->outputBuffer.Resize(uOutputLength);
|
||||||
|
}
|
||||||
|
|
||||||
void ProtocolPiece::Remove()
|
void ProtocolPiece::Remove()
|
||||||
{
|
{
|
||||||
|
if (!this->pParent)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
auto &pBottomPiece = this->pParent->pBottomPiece;
|
auto &pBottomPiece = this->pParent->pBottomPiece;
|
||||||
|
|
||||||
// fix chain
|
// fix chain
|
||||||
@ -66,6 +99,8 @@ namespace Aurora::IO::Protocol
|
|||||||
{
|
{
|
||||||
this->pParent->pBottomPiece = this->pNext;
|
this->pParent->pBottomPiece = this->pNext;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this->pParent = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
AuSPtr<Memory::ByteBuffer> ProtocolPiece::GetNextPieceBuffer()
|
AuSPtr<Memory::ByteBuffer> ProtocolPiece::GetNextPieceBuffer()
|
||||||
|
@ -23,6 +23,9 @@ namespace Aurora::IO::Protocol
|
|||||||
AuSPtr<IStreamWriter> pOuputWriter;
|
AuSPtr<IStreamWriter> pOuputWriter;
|
||||||
bool bMultipleTick {};
|
bool bMultipleTick {};
|
||||||
|
|
||||||
|
|
||||||
|
AuSPtr<IProtocolPiece> GetNextPiece() override;
|
||||||
|
bool ReallocateDrainBuffer(AuUInt32 uOutputLength) override;
|
||||||
void Remove() override;
|
void Remove() override;
|
||||||
AuSPtr<IStreamWriter> ToNextWriter() override;
|
AuSPtr<IStreamWriter> ToNextWriter() override;
|
||||||
AuSPtr<IStreamWriter> ToInputWriter() override;
|
AuSPtr<IStreamWriter> ToInputWriter() override;
|
||||||
|
Loading…
Reference in New Issue
Block a user