From 1ffb13176806419d4760b953474169f69623ec5d Mon Sep 17 00:00:00 2001 From: Mrs4s Date: Wed, 4 Nov 2020 14:01:31 +0800 Subject: [PATCH] feature: reg rsp check. --- client/client.go | 15 ++++++++++----- client/decoders.go | 5 +++++ 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/client/client.go b/client/client.go index ad72ba72..af4d72fd 100644 --- a/client/client.go +++ b/client/client.go @@ -248,7 +248,7 @@ func (c *QQClient) SubmitSMS(code string) (*LoginResponse, error) { func (c *QQClient) init() { c.Online = true - c.registerClient() + _ = c.registerClient() c.groupSysMsgCache, _ = c.GetGroupSystemMessages() if !c.heartbeatEnabled { c.startHeartbeat() @@ -949,9 +949,9 @@ func (c *QQClient) SendGroupGift(groupCode, uin uint64, gift message.GroupGift) _ = c.send(packet) } -func (c *QQClient) registerClient() { - _, packet := c.buildClientRegisterPacket() - _ = c.send(packet) +func (c *QQClient) registerClient() error { + _, err := c.sendAndWait(c.buildClientRegisterPacket()) + return err } func (c *QQClient) nextSeq() uint16 { @@ -1034,7 +1034,12 @@ func (c *QQClient) netLoop() { break } reader = binary.NewNetworkReader(c.Conn) - c.registerClient() + if c.registerClient() != nil { + c.Disconnect() + c.lastLostMsg = "register client failed." + c.Error("reconnect failed: register client failed.") + break + } } if l <= 0 { retry++ diff --git a/client/decoders.go b/client/decoders.go index fea6fcdc..525375c4 100644 --- a/client/decoders.go +++ b/client/decoders.go @@ -170,6 +170,11 @@ func decodeClientRegisterResponse(_ *QQClient, _ uint16, payload []byte) (interf request.ReadFrom(jce.NewJceReader(payload)) data := &jce.RequestDataVersion2{} data.ReadFrom(jce.NewJceReader(request.SBuffer)) + svcRsp := &jce.SvcRespRegister{} + svcRsp.ReadFrom(jce.NewJceReader(data.Map["SvcRespRegister"]["QQService.SvcRespRegister"][1:])) + if svcRsp.Result != "" || svcRsp.Status != 11 { + return nil, errors.New("reg failed") + } return nil, nil }