From 8c9bab2a6fe0f84f53c63b07c89c521e4ee38e16 Mon Sep 17 00:00:00 2001 From: Andy Wang Date: Fri, 10 Apr 2020 16:15:23 +0100 Subject: [PATCH] TLSConn.Write returns correct length --- internal/common/tls.go | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/internal/common/tls.go b/internal/common/tls.go index a2cb4a1..68b4ccb 100644 --- a/internal/common/tls.go +++ b/internal/common/tls.go @@ -11,6 +11,8 @@ const ( VersionTLS11 = 0x0301 VersionTLS13 = 0x0303 + recordLayerLength = 5 + Handshake = 22 ApplicationData = 23 ) @@ -55,7 +57,7 @@ func (tls *TLSConn) Read(buffer []byte) (n int, err error) { // a single message can also be segmented due to MTU of the IP layer. // This function guareentees a single TLS message to be read and everything // else is left in the buffer. - _, err = io.ReadFull(tls.Conn, buffer[:5]) + _, err = io.ReadFull(tls.Conn, buffer[:recordLayerLength]) if err != nil { return } @@ -71,7 +73,8 @@ func (tls *TLSConn) Read(buffer []byte) (n int, err error) { func (tls *TLSConn) Write(in []byte) (n int, err error) { // TODO: write record layer directly first? toWrite := AddRecordLayer(in, ApplicationData, VersionTLS13) - return tls.Conn.Write(toWrite) + n, err = tls.Conn.Write(toWrite) + return n - recordLayerLength, err } func (tls *TLSConn) Close() error {