From 7654a7a2a1060eb2a127dd0f33d9730f6b57bec0 Mon Sep 17 00:00:00 2001 From: Mrs4s <1844812067@qq.com> Date: Sat, 22 Aug 2020 02:23:24 +0800 Subject: [PATCH] try to fix image upload. --- client/builders.go | 2 +- client/highway.go | 45 ++++++++++++++++++++++----------------------- 2 files changed, 23 insertions(+), 24 deletions(-) diff --git a/client/builders.go b/client/builders.go index a947d6d6..6263a555 100644 --- a/client/builders.go +++ b/client/builders.go @@ -552,7 +552,7 @@ func (c *QQClient) buildGroupImageStorePacket(groupCode int64, md5 []byte, size func (c *QQClient) buildImageUploadPacket(data, updKey []byte, commandId int32, fmd5 [16]byte) (r [][]byte) { offset := 0 - binary.ToChunkedBytesF(data, 8192*1024, func(chunked []byte) { + binary.ToChunkedBytesF(data, 8192*8, func(chunked []byte) { w := binary.NewWriter() cmd5 := md5.Sum(chunked) head, _ := proto.Marshal(&pb.ReqDataHighwayHead{ diff --git a/client/highway.go b/client/highway.go index 148e6c08..b35e105b 100644 --- a/client/highway.go +++ b/client/highway.go @@ -8,10 +8,9 @@ import ( "github.com/Mrs4s/MiraiGo/binary" "github.com/Mrs4s/MiraiGo/client/pb" "github.com/Mrs4s/MiraiGo/utils" - "github.com/golang/protobuf/proto" + "google.golang.org/protobuf/proto" "net" "strconv" - "time" ) func (c *QQClient) highwayUploadImage(ip uint32, port int, updKey, img []byte, cmdId int32) error { @@ -25,32 +24,32 @@ func (c *QQClient) highwayUploadImage(ip uint32, port int, updKey, img []byte, c return err } defer conn.Close() - if err = conn.SetDeadline(time.Now().Add(time.Second * 10)); err != nil { - return err - } h := md5.Sum(img) pkt := c.buildImageUploadPacket(img, updKey, cmdId, h) + r := binary.NewNetworkReader(conn) for _, p := range pkt { _, err = conn.Write(p) + if err != nil { + return err + } + _, err = r.ReadByte() + if err != nil { + return err + } + hl, _ := r.ReadInt32() + a2, _ := r.ReadInt32() + payload, _ := r.ReadBytes(int(hl)) + _, _ = r.ReadBytes(int(a2)) + r.ReadByte() + rsp := new(pb.RspDataHighwayHead) + if err = proto.Unmarshal(payload, rsp); err != nil { + return err + } + if rsp.ErrorCode != 0 { + return errors.New("upload failed") + } } - if err != nil { - return err - } - r := binary.NewNetworkReader(conn) - _, err = r.ReadByte() - if err != nil { - return err - } - hl, _ := r.ReadInt32() - _, _ = r.ReadBytes(4) - payload, _ := r.ReadBytes(int(hl)) - rsp := new(pb.RspDataHighwayHead) - if err = proto.Unmarshal(payload, rsp); err != nil { - return err - } - if rsp.ErrorCode != 0 { - return errors.New("upload failed") - } + return nil }