Sfoglia il codice sorgente

Small changes for abridged/intermediate

tags/0.9
9seconds 7 anni fa
parent
commit
154ff70bf7

+ 7
- 7
mtproto/wrappers/abridged.go Vedi File

2
 
2
 
3
 import (
3
 import (
4
 	"bytes"
4
 	"bytes"
5
-	"encoding/binary"
6
 	"io"
5
 	"io"
7
 	"net"
6
 	"net"
8
 
7
 
29
 
28
 
30
 func (a *AbridgedReadWriteCloserWithAddr) Read(p []byte) (int, error) {
29
 func (a *AbridgedReadWriteCloserWithAddr) Read(p []byte) (int, error) {
31
 	return a.BufferedRead(p, func() error {
30
 	return a.BufferedRead(p, func() error {
32
-		var msgLength uint8
33
-		if err := binary.Read(a.conn, binary.LittleEndian, &msgLength); err != nil {
31
+		buf := &bytes.Buffer{}
32
+		buf.Grow(3)
33
+
34
+		if _, err := io.CopyN(buf, a.conn, 1); err != nil {
34
 			return errors.Annotate(err, "Cannot read message length")
35
 			return errors.Annotate(err, "Cannot read message length")
35
 		}
36
 		}
37
+		msgLength := uint8(buf.Bytes()[0])
38
+		buf.Reset()
36
 
39
 
37
 		a.opts.QuickAck = false
40
 		a.opts.QuickAck = false
38
 		if msgLength >= abridgedQuickAckLength {
41
 		if msgLength >= abridgedQuickAckLength {
42
 
45
 
43
 		msgLength32 := uint32(msgLength)
46
 		msgLength32 := uint32(msgLength)
44
 		if msgLength == abridgedSmallPacketLength {
47
 		if msgLength == abridgedSmallPacketLength {
45
-			buf := &bytes.Buffer{}
46
-			buf.Grow(3)
47
-
48
 			if _, err := io.CopyN(buf, a.conn, 3); err != nil {
48
 			if _, err := io.CopyN(buf, a.conn, 3); err != nil {
49
-				return errors.Annotate(err, "Cannot read correct message length")
49
+				return errors.Annotate(err, "Cannot read the correct message length")
50
 			}
50
 			}
51
 			number := uint24{}
51
 			number := uint24{}
52
 			copy(number[:], buf.Bytes())
52
 			copy(number[:], buf.Bytes())

+ 0
- 1
mtproto/wrappers/frame.go Vedi File

4
 	"bytes"
4
 	"bytes"
5
 	"crypto/aes"
5
 	"crypto/aes"
6
 	"encoding/binary"
6
 	"encoding/binary"
7
-	"fmt"
8
 	"hash/crc32"
7
 	"hash/crc32"
9
 	"io"
8
 	"io"
10
 	"io/ioutil"
9
 	"io/ioutil"

+ 7
- 4
mtproto/wrappers/intermediate.go Vedi File

23
 
23
 
24
 func (i *IntermediateReadWriteCloserWithAddr) Read(p []byte) (int, error) {
24
 func (i *IntermediateReadWriteCloserWithAddr) Read(p []byte) (int, error) {
25
 	return i.BufferedRead(p, func() error {
25
 	return i.BufferedRead(p, func() error {
26
-		var length uint32
27
-		if err := binary.Read(i.conn, binary.LittleEndian, &length); err != nil {
26
+		buf := &bytes.Buffer{}
27
+		buf.Grow(4)
28
+
29
+		if _, err := io.CopyN(buf, i.conn, 4); err != nil {
28
 			return errors.Annotate(err, "Cannot read message length")
30
 			return errors.Annotate(err, "Cannot read message length")
29
 		}
31
 		}
32
+		length := binary.LittleEndian.Uint32(buf.Bytes())
33
+		buf.Reset()
34
+		buf.Grow(int(length))
30
 
35
 
31
 		if length > intermediateQuickAckLength {
36
 		if length > intermediateQuickAckLength {
32
 			i.opts.QuickAck = true
37
 			i.opts.QuickAck = true
33
 			length -= intermediateQuickAckLength
38
 			length -= intermediateQuickAckLength
34
 		}
39
 		}
35
 
40
 
36
-		buf := &bytes.Buffer{}
37
-		buf.Grow(int(length))
38
 		if _, err := io.CopyN(buf, i.conn, int64(length)); err != nil {
41
 		if _, err := io.CopyN(buf, i.conn, int64(length)); err != nil {
39
 			return errors.Annotate(err, "Cannot read the message")
42
 			return errors.Annotate(err, "Cannot read the message")
40
 		}
43
 		}

Loading…
Annulla
Salva