mirror of
https://github.com/ScuroNeko/mtg.git
synced 2026-09-01 16:01:55 +03:00
Small changes for abridged/intermediate
This commit is contained in:
@@ -2,7 +2,6 @@ package wrappers
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"encoding/binary"
|
|
||||||
"io"
|
"io"
|
||||||
"net"
|
"net"
|
||||||
|
|
||||||
@@ -29,10 +28,14 @@ type AbridgedReadWriteCloserWithAddr struct {
|
|||||||
|
|
||||||
func (a *AbridgedReadWriteCloserWithAddr) Read(p []byte) (int, error) {
|
func (a *AbridgedReadWriteCloserWithAddr) Read(p []byte) (int, error) {
|
||||||
return a.BufferedRead(p, func() error {
|
return a.BufferedRead(p, func() error {
|
||||||
var msgLength uint8
|
buf := &bytes.Buffer{}
|
||||||
if err := binary.Read(a.conn, binary.LittleEndian, &msgLength); err != nil {
|
buf.Grow(3)
|
||||||
|
|
||||||
|
if _, err := io.CopyN(buf, a.conn, 1); err != nil {
|
||||||
return errors.Annotate(err, "Cannot read message length")
|
return errors.Annotate(err, "Cannot read message length")
|
||||||
}
|
}
|
||||||
|
msgLength := uint8(buf.Bytes()[0])
|
||||||
|
buf.Reset()
|
||||||
|
|
||||||
a.opts.QuickAck = false
|
a.opts.QuickAck = false
|
||||||
if msgLength >= abridgedQuickAckLength {
|
if msgLength >= abridgedQuickAckLength {
|
||||||
@@ -42,11 +45,8 @@ func (a *AbridgedReadWriteCloserWithAddr) Read(p []byte) (int, error) {
|
|||||||
|
|
||||||
msgLength32 := uint32(msgLength)
|
msgLength32 := uint32(msgLength)
|
||||||
if msgLength == abridgedSmallPacketLength {
|
if msgLength == abridgedSmallPacketLength {
|
||||||
buf := &bytes.Buffer{}
|
|
||||||
buf.Grow(3)
|
|
||||||
|
|
||||||
if _, err := io.CopyN(buf, a.conn, 3); err != nil {
|
if _, err := io.CopyN(buf, a.conn, 3); err != nil {
|
||||||
return errors.Annotate(err, "Cannot read correct message length")
|
return errors.Annotate(err, "Cannot read the correct message length")
|
||||||
}
|
}
|
||||||
number := uint24{}
|
number := uint24{}
|
||||||
copy(number[:], buf.Bytes())
|
copy(number[:], buf.Bytes())
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ import (
|
|||||||
"bytes"
|
"bytes"
|
||||||
"crypto/aes"
|
"crypto/aes"
|
||||||
"encoding/binary"
|
"encoding/binary"
|
||||||
"fmt"
|
|
||||||
"hash/crc32"
|
"hash/crc32"
|
||||||
"io"
|
"io"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
|
|||||||
@@ -23,18 +23,21 @@ type IntermediateReadWriteCloserWithAddr struct {
|
|||||||
|
|
||||||
func (i *IntermediateReadWriteCloserWithAddr) Read(p []byte) (int, error) {
|
func (i *IntermediateReadWriteCloserWithAddr) Read(p []byte) (int, error) {
|
||||||
return i.BufferedRead(p, func() error {
|
return i.BufferedRead(p, func() error {
|
||||||
var length uint32
|
buf := &bytes.Buffer{}
|
||||||
if err := binary.Read(i.conn, binary.LittleEndian, &length); err != nil {
|
buf.Grow(4)
|
||||||
|
|
||||||
|
if _, err := io.CopyN(buf, i.conn, 4); err != nil {
|
||||||
return errors.Annotate(err, "Cannot read message length")
|
return errors.Annotate(err, "Cannot read message length")
|
||||||
}
|
}
|
||||||
|
length := binary.LittleEndian.Uint32(buf.Bytes())
|
||||||
|
buf.Reset()
|
||||||
|
buf.Grow(int(length))
|
||||||
|
|
||||||
if length > intermediateQuickAckLength {
|
if length > intermediateQuickAckLength {
|
||||||
i.opts.QuickAck = true
|
i.opts.QuickAck = true
|
||||||
length -= intermediateQuickAckLength
|
length -= intermediateQuickAckLength
|
||||||
}
|
}
|
||||||
|
|
||||||
buf := &bytes.Buffer{}
|
|
||||||
buf.Grow(int(length))
|
|
||||||
if _, err := io.CopyN(buf, i.conn, int64(length)); err != nil {
|
if _, err := io.CopyN(buf, i.conn, int64(length)); err != nil {
|
||||||
return errors.Annotate(err, "Cannot read the message")
|
return errors.Annotate(err, "Cannot read the message")
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user