1
0
mirror of https://github.com/Mrs4s/MiraiGo.git synced 2025-05-04 19:17:38 +08:00

client: use unpackOIDBPackage

This commit is contained in:
wdvxdr 2022-03-01 16:45:01 +08:00
parent d9f803837f
commit ef65fd67e6
No known key found for this signature in database
GPG Key ID: 703F8C071DE7A1B6
9 changed files with 40 additions and 76 deletions

View File

@ -783,13 +783,10 @@ func decodeMSFOfflinePacket(c *QQClient, _ *network.IncomingPacketInfo, _ []byte
// OidbSvc.0xd79 // OidbSvc.0xd79
func decodeWordSegmentation(_ *QQClient, _ *network.IncomingPacketInfo, payload []byte) (interface{}, error) { func decodeWordSegmentation(_ *QQClient, _ *network.IncomingPacketInfo, payload []byte) (interface{}, error) {
pkg := oidb.OIDBSSOPkg{}
rsp := &oidb.D79RspBody{} rsp := &oidb.D79RspBody{}
if err := proto.Unmarshal(payload, &pkg); err != nil { err := unpackOIDBPackage(payload, &rsp)
return nil, errors.Wrap(err, "failed to unmarshal protobuf message") if err != nil {
} return nil, err
if err := proto.Unmarshal(pkg.Bodybuffer, rsp); err != nil {
return nil, errors.Wrap(err, "failed to unmarshal protobuf message")
} }
if rsp.Content != nil { if rsp.Content != nil {
return rsp.Content.SliceContent, nil return rsp.Content.SliceContent, nil

View File

@ -25,8 +25,8 @@ func (handle *EventHandle[T]) Subscribe(handler func(client *QQClient, event T))
func (handle *EventHandle[T]) dispatch(client *QQClient, event T) { func (handle *EventHandle[T]) dispatch(client *QQClient, event T) {
eventMu.RLock() eventMu.RLock()
defer eventMu.RUnlock()
defer func() { defer func() {
eventMu.RUnlock()
if pan := recover(); pan != nil { if pan := recover(); pan != nil {
fmt.Printf("event error: %v\n%s", pan, debug.Stack()) fmt.Printf("event error: %v\n%s", pan, debug.Stack())
} }

View File

@ -356,15 +356,15 @@ func (c *QQClient) packOIDBPackageProto(cmd, serviceType int32, msg proto.Messag
return c.packOIDBPackage(cmd, serviceType, b) return c.packOIDBPackage(cmd, serviceType, b)
} }
func unpackOIDBPackage(buff []byte, payload proto.Message) error { func unpackOIDBPackage(payload []byte, rsp proto.Message) error {
pkg := new(oidb.OIDBSSOPkg) pkg := new(oidb.OIDBSSOPkg)
if err := proto.Unmarshal(buff, pkg); err != nil { if err := proto.Unmarshal(payload, pkg); err != nil {
return errors.Wrap(err, "failed to unmarshal protobuf message") return errors.Wrap(err, "failed to unmarshal protobuf message")
} }
if pkg.Result != 0 { if pkg.Result != 0 {
return errors.Errorf("oidb result unsuccessful: %v msg: %v", pkg.Result, pkg.ErrorMsg) return errors.Errorf("oidb result unsuccessful: %v msg: %v", pkg.Result, pkg.ErrorMsg)
} }
if err := proto.Unmarshal(pkg.Bodybuffer, payload); err != nil { if err := proto.Unmarshal(pkg.Bodybuffer, rsp); err != nil {
return errors.Wrap(err, "failed to unmarshal protobuf message") return errors.Wrap(err, "failed to unmarshal protobuf message")
} }
return nil return nil

View File

@ -441,26 +441,20 @@ func (c *QQClient) buildGroupFileDeleteReqPacket(groupCode int64, parentFolderId
} }
func decodeOIDB6d81Response(_ *QQClient, _ *network.IncomingPacketInfo, payload []byte) (interface{}, error) { func decodeOIDB6d81Response(_ *QQClient, _ *network.IncomingPacketInfo, payload []byte) (interface{}, error) {
pkg := oidb.OIDBSSOPkg{}
rsp := oidb.D6D8RspBody{} rsp := oidb.D6D8RspBody{}
if err := proto.Unmarshal(payload, &pkg); err != nil { err := unpackOIDBPackage(payload, &rsp)
return nil, errors.Wrap(err, "failed to unmarshal protobuf message") if err != nil {
} return nil, err
if err := proto.Unmarshal(pkg.Bodybuffer, &rsp); err != nil {
return nil, errors.Wrap(err, "failed to unmarshal protobuf message")
} }
return &rsp, nil return &rsp, nil
} }
// OidbSvc.0x6d6_2 // OidbSvc.0x6d6_2
func decodeOIDB6d62Response(_ *QQClient, _ *network.IncomingPacketInfo, payload []byte) (interface{}, error) { func decodeOIDB6d62Response(_ *QQClient, _ *network.IncomingPacketInfo, payload []byte) (interface{}, error) {
pkg := oidb.OIDBSSOPkg{}
rsp := oidb.D6D6RspBody{} rsp := oidb.D6D6RspBody{}
if err := proto.Unmarshal(payload, &pkg); err != nil { err := unpackOIDBPackage(payload, &rsp)
return nil, errors.Wrap(err, "failed to unmarshal protobuf message") if err != nil {
} return nil, err
if err := proto.Unmarshal(pkg.Bodybuffer, &rsp); err != nil {
return nil, errors.Wrap(err, "failed to unmarshal protobuf message")
} }
if rsp.DownloadFileRsp.DownloadUrl == nil { if rsp.DownloadFileRsp.DownloadUrl == nil {
return nil, errors.New(rsp.DownloadFileRsp.GetClientWording()) return nil, errors.New(rsp.DownloadFileRsp.GetClientWording())
@ -471,13 +465,10 @@ func decodeOIDB6d62Response(_ *QQClient, _ *network.IncomingPacketInfo, payload
} }
func decodeOIDB6d63Response(_ *QQClient, _ *network.IncomingPacketInfo, payload []byte) (interface{}, error) { func decodeOIDB6d63Response(_ *QQClient, _ *network.IncomingPacketInfo, payload []byte) (interface{}, error) {
pkg := oidb.OIDBSSOPkg{}
rsp := oidb.D6D6RspBody{} rsp := oidb.D6D6RspBody{}
if err := proto.Unmarshal(payload, &pkg); err != nil { err := unpackOIDBPackage(payload, &rsp)
return nil, errors.Wrap(err, "failed to unmarshal protobuf message") if err != nil {
} return nil, err
if err := proto.Unmarshal(pkg.Bodybuffer, &rsp); err != nil {
return nil, errors.Wrap(err, "failed to unmarshal protobuf message")
} }
if rsp.DeleteFileRsp == nil { if rsp.DeleteFileRsp == nil {
return "", nil return "", nil
@ -486,25 +477,19 @@ func decodeOIDB6d63Response(_ *QQClient, _ *network.IncomingPacketInfo, payload
} }
func decodeOIDB6d60Response(_ *QQClient, _ *network.IncomingPacketInfo, payload []byte) (interface{}, error) { func decodeOIDB6d60Response(_ *QQClient, _ *network.IncomingPacketInfo, payload []byte) (interface{}, error) {
pkg := oidb.OIDBSSOPkg{}
rsp := oidb.D6D6RspBody{} rsp := oidb.D6D6RspBody{}
if err := proto.Unmarshal(payload, &pkg); err != nil { err := unpackOIDBPackage(payload, &rsp)
return nil, errors.Wrap(err, "failed to unmarshal protobuf message") if err != nil {
} return nil, err
if err := proto.Unmarshal(pkg.Bodybuffer, &rsp); err != nil {
return nil, errors.Wrap(err, "failed to unmarshal protobuf message")
} }
return rsp.UploadFileRsp, nil return rsp.UploadFileRsp, nil
} }
func decodeOIDB6d7Response(_ *QQClient, _ *network.IncomingPacketInfo, payload []byte) (interface{}, error) { func decodeOIDB6d7Response(_ *QQClient, _ *network.IncomingPacketInfo, payload []byte) (interface{}, error) {
pkg := oidb.OIDBSSOPkg{}
rsp := oidb.D6D7RspBody{} rsp := oidb.D6D7RspBody{}
if err := proto.Unmarshal(payload, &pkg); err != nil { err := unpackOIDBPackage(payload, &rsp)
return nil, errors.Wrap(err, "failed to unmarshal protobuf message") if err != nil {
} return nil, err
if err := proto.Unmarshal(pkg.Bodybuffer, &rsp); err != nil {
return nil, errors.Wrap(err, "failed to unmarshal protobuf message")
} }
if rsp.CreateFolderRsp != nil && rsp.CreateFolderRsp.GetRetCode() != 0 { if rsp.CreateFolderRsp != nil && rsp.CreateFolderRsp.GetRetCode() != 0 {
return nil, errors.Errorf("create folder error: %v", rsp.CreateFolderRsp.GetRetCode()) return nil, errors.Errorf("create folder error: %v", rsp.CreateFolderRsp.GetRetCode())

View File

@ -227,13 +227,10 @@ func decodeGroupSearchResponse(_ *QQClient, _ *network.IncomingPacketInfo, paylo
// OidbSvc.0x88d_0 // OidbSvc.0x88d_0
func decodeGroupInfoResponse(c *QQClient, _ *network.IncomingPacketInfo, payload []byte) (interface{}, error) { func decodeGroupInfoResponse(c *QQClient, _ *network.IncomingPacketInfo, payload []byte) (interface{}, error) {
pkg := oidb.OIDBSSOPkg{}
rsp := oidb.D88DRspBody{} rsp := oidb.D88DRspBody{}
if err := proto.Unmarshal(payload, &pkg); err != nil { err := unpackOIDBPackage(payload, &rsp)
return nil, errors.Wrap(err, "failed to unmarshal protobuf message") if err != nil {
} return nil, err
if err := proto.Unmarshal(pkg.Bodybuffer, &rsp); err != nil {
return nil, errors.Wrap(err, "failed to unmarshal protobuf message")
} }
if len(rsp.RspGroupInfo) == 0 { if len(rsp.RspGroupInfo) == 0 {
return nil, errors.New(string(rsp.StrErrorInfo)) return nil, errors.New(string(rsp.StrErrorInfo))

View File

@ -397,13 +397,10 @@ func decodeGetGroupMsgResponse(c *QQClient, info *network.IncomingPacketInfo, pa
} }
func decodeAtAllRemainResponse(_ *QQClient, _ *network.IncomingPacketInfo, payload []byte) (interface{}, error) { func decodeAtAllRemainResponse(_ *QQClient, _ *network.IncomingPacketInfo, payload []byte) (interface{}, error) {
pkg := oidb.OIDBSSOPkg{}
rsp := oidb.D8A7RspBody{} rsp := oidb.D8A7RspBody{}
if err := proto.Unmarshal(payload, &pkg); err != nil { err := unpackOIDBPackage(payload, &rsp)
return nil, errors.Wrap(err, "failed to unmarshal protobuf message") if err != nil {
} return nil, err
if err := proto.Unmarshal(pkg.Bodybuffer, &rsp); err != nil {
return nil, errors.Wrap(err, "failed to unmarshal protobuf message")
} }
return &AtAllRemainInfo{ return &AtAllRemainInfo{
CanAtAll: rsp.GetCanAtAll(), CanAtAll: rsp.GetCanAtAll(),
@ -593,13 +590,10 @@ func (c *QQClient) buildEssenceMsgOperatePacket(groupCode int64, msgSeq, msgRand
// OidbSvc.0xeac_1/2 // OidbSvc.0xeac_1/2
func decodeEssenceMsgResponse(_ *QQClient, _ *network.IncomingPacketInfo, payload []byte) (interface{}, error) { func decodeEssenceMsgResponse(_ *QQClient, _ *network.IncomingPacketInfo, payload []byte) (interface{}, error) {
pkg := oidb.OIDBSSOPkg{}
rsp := &oidb.EACRspBody{} rsp := &oidb.EACRspBody{}
if err := proto.Unmarshal(payload, &pkg); err != nil { err := unpackOIDBPackage(payload, &rsp)
return nil, errors.Wrap(err, "failed to unmarshal protobuf message") if err != nil {
} return nil, err
if err := proto.Unmarshal(pkg.Bodybuffer, rsp); err != nil {
return nil, errors.Wrap(err, "failed to unmarshal protobuf message")
} }
return rsp, nil return rsp, nil
} }

View File

@ -405,13 +405,10 @@ func decodeGroupImageDownloadResponse(_ *QQClient, _ *network.IncomingPacketInfo
// OidbSvc.0xe07_0 // OidbSvc.0xe07_0
func decodeImageOcrResponse(_ *QQClient, _ *network.IncomingPacketInfo, payload []byte) (interface{}, error) { func decodeImageOcrResponse(_ *QQClient, _ *network.IncomingPacketInfo, payload []byte) (interface{}, error) {
pkg := oidb.OIDBSSOPkg{}
rsp := oidb.DE07RspBody{} rsp := oidb.DE07RspBody{}
if err := proto.Unmarshal(payload, &pkg); err != nil { err := unpackOIDBPackage(payload, &rsp)
return nil, errors.Wrap(err, "failed to unmarshal protobuf message") if err != nil {
} return nil, err
if err := proto.Unmarshal(pkg.Bodybuffer, &rsp); err != nil {
return nil, errors.Wrap(err, "failed to unmarshal protobuf message")
} }
if rsp.Wording != "" { if rsp.Wording != "" {
if strings.Contains(rsp.Wording, "服务忙") { if strings.Contains(rsp.Wording, "服务忙") {

View File

@ -49,13 +49,10 @@ func (c *QQClient) buildUrlCheckRequest(url string) (uint16, []byte) {
} }
func decodeUrlCheckResponse(_ *QQClient, _ *network.IncomingPacketInfo, payload []byte) (interface{}, error) { func decodeUrlCheckResponse(_ *QQClient, _ *network.IncomingPacketInfo, payload []byte) (interface{}, error) {
pkg := &oidb.OIDBSSOPkg{}
rsp := &oidb.DBCBRspBody{} rsp := &oidb.DBCBRspBody{}
if err := proto.Unmarshal(payload, pkg); err != nil { err := unpackOIDBPackage(payload, &rsp)
return nil, errors.Wrap(err, "failed to unmarshal protobuf message") if err != nil {
} return nil, err
if err := proto.Unmarshal(pkg.Bodybuffer, rsp); err != nil {
return nil, errors.Wrap(err, "failed to unmarshal protobuf message")
} }
if rsp.CheckUrlRsp == nil || len(rsp.CheckUrlRsp.Results) == 0 { if rsp.CheckUrlRsp == nil || len(rsp.CheckUrlRsp.Results) == 0 {
return nil, errors.New("response is empty") return nil, errors.New("response is empty")

View File

@ -42,13 +42,10 @@ func (c *QQClient) Translate(src, dst, text string) (string, error) {
// OidbSvc.0x990 // OidbSvc.0x990
func decodeTranslateResponse(_ *QQClient, _ *network.IncomingPacketInfo, payload []byte) (interface{}, error) { func decodeTranslateResponse(_ *QQClient, _ *network.IncomingPacketInfo, payload []byte) (interface{}, error) {
pkg := oidb.OIDBSSOPkg{}
rsp := oidb.TranslateRspBody{} rsp := oidb.TranslateRspBody{}
if err := proto.Unmarshal(payload, &pkg); err != nil { err := unpackOIDBPackage(payload, &rsp)
return nil, errors.Wrap(err, "failed to unmarshal protobuf message") if err != nil {
} return nil, err
if err := proto.Unmarshal(pkg.Bodybuffer, &rsp); err != nil {
return nil, errors.Wrap(err, "failed to unmarshal protobuf message")
} }
return rsp.BatchTranslateRsp, nil return rsp.BatchTranslateRsp, nil
} }