summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/ByteBuffer.h40
-rw-r--r--src/PolarSSL++/BufferedSslContext.cpp31
2 files changed, 51 insertions, 20 deletions
diff --git a/src/ByteBuffer.h b/src/ByteBuffer.h
index 7656a5b13..c5ff05922 100644
--- a/src/ByteBuffer.h
+++ b/src/ByteBuffer.h
@@ -30,25 +30,25 @@ public:
cByteBuffer(size_t a_BufferSize);
~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);
- /// 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;
- /// 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;
- /// 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;
- /// 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; }
- /// 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;
- /// 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;
// 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 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)
{
UInt32 v;
@@ -91,37 +91,37 @@ public:
bool WriteVarUTF8String (const AString & a_Value); // string length as VarInt, then string as UTF-8
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);
- /// 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);
- /// 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);
- /// 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);
- /// 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);
- /// Reads all available data into a_Data
+ /** Reads all available data into 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);
- /// Removes the bytes that have been read from the ringbuffer
+ /** Removes the bytes that have been read from the ringbuffer */
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);
- /// 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);
- /// 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;
protected:
@@ -136,7 +136,7 @@ protected:
size_t m_WritePos; // Where the data ends 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);
} ;
diff --git a/src/PolarSSL++/BufferedSslContext.cpp b/src/PolarSSL++/BufferedSslContext.cpp
index 885b30c68..2455d5781 100644
--- a/src/PolarSSL++/BufferedSslContext.cpp
+++ b/src/PolarSSL++/BufferedSslContext.cpp
@@ -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)
{
// Called when PolarSSL wants to read encrypted data from the SSL peer