Added cBufferedSslContext implementation.
This commit is contained in:
parent
ab2dfb44fa
commit
e6786074d5
@ -30,25 +30,25 @@ public:
|
|||||||
cByteBuffer(size_t a_BufferSize);
|
cByteBuffer(size_t a_BufferSize);
|
||||||
~cByteBuffer();
|
~cByteBuffer();
|
||||||
|
|
||||||
/// Writes the bytes specified to the ringbuffer. Returns true if successful, false if not
|
/** Writes the bytes specified to the ringbuffer. Returns true if successful, false if not */
|
||||||
bool Write(const void * a_Bytes, size_t a_Count);
|
bool Write(const void * a_Bytes, size_t a_Count);
|
||||||
|
|
||||||
/// Returns the number of bytes that can be successfully written to the ringbuffer
|
/** Returns the number of bytes that can be successfully written to the ringbuffer */
|
||||||
size_t GetFreeSpace(void) const;
|
size_t GetFreeSpace(void) const;
|
||||||
|
|
||||||
/// Returns the number of bytes that are currently in the ringbuffer. Note GetReadableBytes()
|
/** Returns the number of bytes that are currently in the ringbuffer. Note GetReadableBytes() */
|
||||||
size_t GetUsedSpace(void) const;
|
size_t GetUsedSpace(void) const;
|
||||||
|
|
||||||
/// Returns the number of bytes that are currently available for reading (may be less than UsedSpace due to some data having been read already)
|
/** Returns the number of bytes that are currently available for reading (may be less than UsedSpace due to some data having been read already) */
|
||||||
size_t GetReadableSpace(void) const;
|
size_t GetReadableSpace(void) const;
|
||||||
|
|
||||||
/// Returns the current data start index. For debugging purposes.
|
/** Returns the current data start index. For debugging purposes. */
|
||||||
size_t GetDataStart(void) const { return m_DataStart; }
|
size_t GetDataStart(void) const { return m_DataStart; }
|
||||||
|
|
||||||
/// Returns true if the specified amount of bytes are available for reading
|
/** Returns true if the specified amount of bytes are available for reading */
|
||||||
bool CanReadBytes(size_t a_Count) const;
|
bool CanReadBytes(size_t a_Count) const;
|
||||||
|
|
||||||
/// Returns true if the specified amount of bytes are available for writing
|
/** Returns true if the specified amount of bytes are available for writing */
|
||||||
bool CanWriteBytes(size_t a_Count) const;
|
bool CanWriteBytes(size_t a_Count) const;
|
||||||
|
|
||||||
// Read the specified datatype and advance the read pointer; return true if successfully read:
|
// Read the specified datatype and advance the read pointer; return true if successfully read:
|
||||||
@ -65,7 +65,7 @@ public:
|
|||||||
bool ReadVarUTF8String (AString & a_Value); // string length as VarInt, then string as UTF-8
|
bool ReadVarUTF8String (AString & a_Value); // string length as VarInt, then string as UTF-8
|
||||||
bool ReadLEInt (int & a_Value);
|
bool ReadLEInt (int & a_Value);
|
||||||
|
|
||||||
/// Reads VarInt, assigns it to anything that can be assigned from an UInt32 (unsigned short, char, Byte, double, ...)
|
/** Reads VarInt, assigns it to anything that can be assigned from an UInt32 (unsigned short, char, Byte, double, ...) */
|
||||||
template <typename T> bool ReadVarInt(T & a_Value)
|
template <typename T> bool ReadVarInt(T & a_Value)
|
||||||
{
|
{
|
||||||
UInt32 v;
|
UInt32 v;
|
||||||
@ -91,37 +91,37 @@ public:
|
|||||||
bool WriteVarUTF8String (const AString & a_Value); // string length as VarInt, then string as UTF-8
|
bool WriteVarUTF8String (const AString & a_Value); // string length as VarInt, then string as UTF-8
|
||||||
bool WriteLEInt (int a_Value);
|
bool WriteLEInt (int a_Value);
|
||||||
|
|
||||||
/// Reads a_Count bytes into a_Buffer; returns true if successful
|
/** Reads a_Count bytes into a_Buffer; returns true if successful */
|
||||||
bool ReadBuf(void * a_Buffer, size_t a_Count);
|
bool ReadBuf(void * a_Buffer, size_t a_Count);
|
||||||
|
|
||||||
/// Writes a_Count bytes into a_Buffer; returns true if successful
|
/** Writes a_Count bytes into a_Buffer; returns true if successful */
|
||||||
bool WriteBuf(const void * a_Buffer, size_t a_Count);
|
bool WriteBuf(const void * a_Buffer, size_t a_Count);
|
||||||
|
|
||||||
/// Reads a_Count bytes into a_String; returns true if successful
|
/** Reads a_Count bytes into a_String; returns true if successful */
|
||||||
bool ReadString(AString & a_String, size_t a_Count);
|
bool ReadString(AString & a_String, size_t a_Count);
|
||||||
|
|
||||||
/// Reads 2 * a_NumChars bytes and interprets it as a UTF16-BE string, converting it into UTF8 string a_String
|
/** Reads 2 * a_NumChars bytes and interprets it as a UTF16-BE string, converting it into UTF8 string a_String */
|
||||||
bool ReadUTF16String(AString & a_String, int a_NumChars);
|
bool ReadUTF16String(AString & a_String, int a_NumChars);
|
||||||
|
|
||||||
/// Skips reading by a_Count bytes; returns false if not enough bytes in the ringbuffer
|
/** Skips reading by a_Count bytes; returns false if not enough bytes in the ringbuffer */
|
||||||
bool SkipRead(size_t a_Count);
|
bool SkipRead(size_t a_Count);
|
||||||
|
|
||||||
/// Reads all available data into a_Data
|
/** Reads all available data into a_Data */
|
||||||
void ReadAll(AString & a_Data);
|
void ReadAll(AString & a_Data);
|
||||||
|
|
||||||
/// Reads the specified number of bytes and writes it into the destinatio bytebuffer. Returns true on success.
|
/** Reads the specified number of bytes and writes it into the destinatio bytebuffer. Returns true on success. */
|
||||||
bool ReadToByteBuffer(cByteBuffer & a_Dst, size_t a_NumBytes);
|
bool ReadToByteBuffer(cByteBuffer & a_Dst, size_t a_NumBytes);
|
||||||
|
|
||||||
/// Removes the bytes that have been read from the ringbuffer
|
/** Removes the bytes that have been read from the ringbuffer */
|
||||||
void CommitRead(void);
|
void CommitRead(void);
|
||||||
|
|
||||||
/// Restarts next reading operation at the start of the ringbuffer
|
/** Restarts next reading operation at the start of the ringbuffer */
|
||||||
void ResetRead(void);
|
void ResetRead(void);
|
||||||
|
|
||||||
/// Re-reads the data that has been read since the last commit to the current readpos. Used by ProtoProxy to duplicate communication
|
/** Re-reads the data that has been read since the last commit to the current readpos. Used by ProtoProxy to duplicate communication */
|
||||||
void ReadAgain(AString & a_Out);
|
void ReadAgain(AString & a_Out);
|
||||||
|
|
||||||
/// Checks if the internal state is valid (read and write positions in the correct bounds) using ASSERTs
|
/** Checks if the internal state is valid (read and write positions in the correct bounds) using ASSERTs */
|
||||||
void CheckValid(void) const;
|
void CheckValid(void) const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
@ -136,7 +136,7 @@ protected:
|
|||||||
size_t m_WritePos; // Where the data ends in the ringbuffer
|
size_t m_WritePos; // Where the data ends in the ringbuffer
|
||||||
size_t m_ReadPos; // Where the next read will start in the ringbuffer
|
size_t m_ReadPos; // Where the next read will start in the ringbuffer
|
||||||
|
|
||||||
/// Advances the m_ReadPos by a_Count bytes
|
/** Advances the m_ReadPos by a_Count bytes */
|
||||||
void AdvanceReadPos(size_t a_Count);
|
void AdvanceReadPos(size_t a_Count);
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
@ -20,6 +20,37 @@ cBufferedSslContext::cBufferedSslContext(size_t a_BufferSize):
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
size_t cBufferedSslContext::WriteIncoming(const void * a_Data, size_t a_NumBytes)
|
||||||
|
{
|
||||||
|
size_t NumBytes = std::min(m_IncomingData.GetFreeSpace(), a_NumBytes);
|
||||||
|
if (NumBytes > 0)
|
||||||
|
{
|
||||||
|
m_IncomingData.Write(a_Data, NumBytes);
|
||||||
|
return a_NumBytes - NumBytes;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
size_t cBufferedSslContext::ReadOutgoing(void * a_Data, size_t a_DataMaxSize)
|
||||||
|
{
|
||||||
|
size_t NumBytes = std::min(m_OutgoingData.GetReadableSpace(), a_DataMaxSize);
|
||||||
|
if (NumBytes > 0)
|
||||||
|
{
|
||||||
|
m_OutgoingData.ReadBuf(a_Data, NumBytes);
|
||||||
|
m_OutgoingData.CommitRead();
|
||||||
|
return a_DataMaxSize - NumBytes;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
int cBufferedSslContext::ReceiveEncrypted(unsigned char * a_Buffer, size_t a_NumBytes)
|
int cBufferedSslContext::ReceiveEncrypted(unsigned char * a_Buffer, size_t a_NumBytes)
|
||||||
{
|
{
|
||||||
// Called when PolarSSL wants to read encrypted data from the SSL peer
|
// Called when PolarSSL wants to read encrypted data from the SSL peer
|
||||||
|
Loading…
Reference in New Issue
Block a user