1
0
mirror of https://github.com/Mrs4s/MiraiGo.git synced 2025-05-04 11:07:40 +08:00

feat: qidian protocol support.

This commit is contained in:
Mrs4s 2021-05-03 14:43:39 +08:00
parent 8f474db6a3
commit f2530cc66b
No known key found for this signature in database
GPG Key ID: 3186E98FA19CE3A7
22 changed files with 4684 additions and 148 deletions

View File

@ -42,7 +42,7 @@ func (c *QQClient) buildLoginPacket() (uint16, []byte) {
w.Write(tlv.T1(uint32(c.Uin), SystemDeviceInfo.IpAddress)) w.Write(tlv.T1(uint32(c.Uin), SystemDeviceInfo.IpAddress))
w.Write(tlv.T106(uint32(c.Uin), 0, c.version.AppId, c.version.SSOVersion, c.PasswordMd5, true, SystemDeviceInfo.Guid, SystemDeviceInfo.TgtgtKey, 0)) w.Write(tlv.T106(uint32(c.Uin), 0, c.version.AppId, c.version.SSOVersion, c.PasswordMd5, true, SystemDeviceInfo.Guid, SystemDeviceInfo.TgtgtKey, 0))
w.Write(tlv.T116(c.version.MiscBitmap, c.version.SubSigmap)) w.Write(tlv.T116(c.version.MiscBitmap, c.version.SubSigmap))
w.Write(tlv.T100(c.version.SSOVersion, c.version.AppId, c.version.MainSigMap)) w.Write(tlv.T100(c.version.SSOVersion, c.version.SubAppId, c.version.MainSigMap))
w.Write(tlv.T107(0)) w.Write(tlv.T107(0))
w.Write(tlv.T142(c.version.ApkId)) w.Write(tlv.T142(c.version.ApkId))
w.Write(tlv.T144( w.Write(tlv.T144(
@ -91,7 +91,7 @@ func (c *QQClient) buildLoginPacket() (uint16, []byte) {
w.Write(tlv.T521(0)) w.Write(tlv.T521(0))
w.Write(tlv.T525(tlv.T536([]byte{0x01, 0x00}))) w.Write(tlv.T525(tlv.T536([]byte{0x01, 0x00})))
}) })
sso := packets.BuildSsoPacket(seq, c.version.AppId, "wtlogin.login", SystemDeviceInfo.IMEI, []byte{}, c.OutGoingPacketSessionId, req, c.ksid) sso := packets.BuildSsoPacket(seq, c.version.AppId, c.version.SubAppId, "wtlogin.login", SystemDeviceInfo.IMEI, []byte{}, c.OutGoingPacketSessionId, req, c.ksid)
packet := packets.BuildLoginPacket(c.Uin, 2, make([]byte, 16), sso, []byte{}) packet := packets.BuildLoginPacket(c.Uin, 2, make([]byte, 16), sso, []byte{})
return seq, packet return seq, packet
} }
@ -107,7 +107,7 @@ func (c *QQClient) buildDeviceLockLoginPacket() (uint16, []byte) {
w.Write(tlv.T116(c.version.MiscBitmap, c.version.SubSigmap)) w.Write(tlv.T116(c.version.MiscBitmap, c.version.SubSigmap))
w.Write(tlv.T401(c.g)) w.Write(tlv.T401(c.g))
}) })
sso := packets.BuildSsoPacket(seq, c.version.AppId, "wtlogin.login", SystemDeviceInfo.IMEI, []byte{}, c.OutGoingPacketSessionId, req, c.ksid) sso := packets.BuildSsoPacket(seq, c.version.AppId, c.version.SubAppId, "wtlogin.login", SystemDeviceInfo.IMEI, []byte{}, c.OutGoingPacketSessionId, req, c.ksid)
packet := packets.BuildLoginPacket(c.Uin, 2, make([]byte, 16), sso, []byte{}) packet := packets.BuildLoginPacket(c.Uin, 2, make([]byte, 16), sso, []byte{})
return seq, packet return seq, packet
} }
@ -134,7 +134,7 @@ func (c *QQClient) buildQRCodeFetchRequestPacket() (uint16, []byte) {
w.Write(tlv.T35(8)) w.Write(tlv.T35(8))
})) }))
}) })
sso := packets.BuildSsoPacket(seq, watch.AppId, "wtlogin.trans_emp", SystemDeviceInfo.IMEI, []byte{}, c.OutGoingPacketSessionId, req, c.ksid) sso := packets.BuildSsoPacket(seq, watch.AppId, c.version.SubAppId, "wtlogin.trans_emp", SystemDeviceInfo.IMEI, []byte{}, c.OutGoingPacketSessionId, req, c.ksid)
packet := packets.BuildLoginPacket(0, 2, make([]byte, 16), sso, []byte{}) packet := packets.BuildLoginPacket(0, 2, make([]byte, 16), sso, []byte{})
return seq, packet return seq, packet
} }
@ -157,7 +157,7 @@ func (c *QQClient) buildQRCodeResultQueryRequestPacket(sig []byte) (uint16, []by
w.WriteUInt16(0) // const w.WriteUInt16(0) // const
})) }))
}) })
sso := packets.BuildSsoPacket(seq, watch.AppId, "wtlogin.trans_emp", SystemDeviceInfo.IMEI, []byte{}, c.OutGoingPacketSessionId, req, c.ksid) sso := packets.BuildSsoPacket(seq, watch.AppId, c.version.SubAppId, "wtlogin.trans_emp", SystemDeviceInfo.IMEI, []byte{}, c.OutGoingPacketSessionId, req, c.ksid)
packet := packets.BuildLoginPacket(0, 2, make([]byte, 16), sso, []byte{}) packet := packets.BuildLoginPacket(0, 2, make([]byte, 16), sso, []byte{})
return seq, packet return seq, packet
} }
@ -176,7 +176,7 @@ func (c *QQClient) buildQRCodeLoginPacket(t106, t16a, t318 []byte) (uint16, []by
})) }))
// w.Write(tlv.T106(uint32(c.Uin), 0, c.version.AppId, c.version.SSOVersion, c.PasswordMd5, true, SystemDeviceInfo.Guid, SystemDeviceInfo.TgtgtKey, 0)) // w.Write(tlv.T106(uint32(c.Uin), 0, c.version.AppId, c.version.SSOVersion, c.PasswordMd5, true, SystemDeviceInfo.Guid, SystemDeviceInfo.TgtgtKey, 0))
w.Write(tlv.T116(c.version.MiscBitmap, c.version.SubSigmap)) w.Write(tlv.T116(c.version.MiscBitmap, c.version.SubSigmap))
w.Write(tlv.T100(c.version.SSOVersion, c.version.AppId, c.version.MainSigMap)) w.Write(tlv.T100(c.version.SSOVersion, c.version.SubAppId, c.version.MainSigMap))
w.Write(tlv.T107(0)) w.Write(tlv.T107(0))
w.Write(tlv.T142(c.version.ApkId)) w.Write(tlv.T142(c.version.ApkId))
w.Write(tlv.T144( w.Write(tlv.T144(
@ -225,7 +225,7 @@ func (c *QQClient) buildQRCodeLoginPacket(t106, t16a, t318 []byte) (uint16, []by
w.WriteBytesShort(t318) w.WriteBytesShort(t318)
})) }))
}) })
sso := packets.BuildSsoPacket(seq, c.version.AppId, "wtlogin.login", SystemDeviceInfo.IMEI, []byte{}, c.OutGoingPacketSessionId, req, c.ksid) sso := packets.BuildSsoPacket(seq, c.version.AppId, c.version.SubAppId, "wtlogin.login", SystemDeviceInfo.IMEI, []byte{}, c.OutGoingPacketSessionId, req, c.ksid)
packet := packets.BuildLoginPacket(c.Uin, 2, make([]byte, 16), sso, []byte{}) packet := packets.BuildLoginPacket(c.Uin, 2, make([]byte, 16), sso, []byte{})
return seq, packet return seq, packet
} }
@ -241,7 +241,7 @@ func (c *QQClient) buildCaptchaPacket(result string, sign []byte) (uint16, []byt
w.Write(tlv.T104(c.t104)) w.Write(tlv.T104(c.t104))
w.Write(tlv.T116(c.version.MiscBitmap, c.version.SubSigmap)) w.Write(tlv.T116(c.version.MiscBitmap, c.version.SubSigmap))
}) })
sso := packets.BuildSsoPacket(seq, c.version.AppId, "wtlogin.login", SystemDeviceInfo.IMEI, []byte{}, c.OutGoingPacketSessionId, req, c.ksid) sso := packets.BuildSsoPacket(seq, c.version.AppId, c.version.SubAppId, "wtlogin.login", SystemDeviceInfo.IMEI, []byte{}, c.OutGoingPacketSessionId, req, c.ksid)
packet := packets.BuildLoginPacket(c.Uin, 2, make([]byte, 16), sso, []byte{}) packet := packets.BuildLoginPacket(c.Uin, 2, make([]byte, 16), sso, []byte{})
return seq, packet return seq, packet
} }
@ -259,7 +259,7 @@ func (c *QQClient) buildSMSRequestPacket() (uint16, []byte) {
w.Write(tlv.T17A(9)) w.Write(tlv.T17A(9))
w.Write(tlv.T197()) w.Write(tlv.T197())
}) })
sso := packets.BuildSsoPacket(seq, c.version.AppId, "wtlogin.login", SystemDeviceInfo.IMEI, []byte{}, c.OutGoingPacketSessionId, req, c.ksid) sso := packets.BuildSsoPacket(seq, c.version.AppId, c.version.SubAppId, "wtlogin.login", SystemDeviceInfo.IMEI, []byte{}, c.OutGoingPacketSessionId, req, c.ksid)
packet := packets.BuildLoginPacket(c.Uin, 2, make([]byte, 16), sso, []byte{}) packet := packets.BuildLoginPacket(c.Uin, 2, make([]byte, 16), sso, []byte{})
return seq, packet return seq, packet
} }
@ -278,7 +278,7 @@ func (c *QQClient) buildSMSCodeSubmitPacket(code string) (uint16, []byte) {
w.Write(tlv.T401(c.g)) w.Write(tlv.T401(c.g))
w.Write(tlv.T198()) w.Write(tlv.T198())
}) })
sso := packets.BuildSsoPacket(seq, c.version.AppId, "wtlogin.login", SystemDeviceInfo.IMEI, []byte{}, c.OutGoingPacketSessionId, req, c.ksid) sso := packets.BuildSsoPacket(seq, c.version.AppId, c.version.SubAppId, "wtlogin.login", SystemDeviceInfo.IMEI, []byte{}, c.OutGoingPacketSessionId, req, c.ksid)
packet := packets.BuildLoginPacket(c.Uin, 2, make([]byte, 16), sso, []byte{}) packet := packets.BuildLoginPacket(c.Uin, 2, make([]byte, 16), sso, []byte{})
return seq, packet return seq, packet
} }
@ -294,7 +294,7 @@ func (c *QQClient) buildTicketSubmitPacket(ticket string) (uint16, []byte) {
w.Write(tlv.T104(c.t104)) w.Write(tlv.T104(c.t104))
w.Write(tlv.T116(c.version.MiscBitmap, c.version.SubSigmap)) w.Write(tlv.T116(c.version.MiscBitmap, c.version.SubSigmap))
}) })
sso := packets.BuildSsoPacket(seq, c.version.AppId, "wtlogin.login", SystemDeviceInfo.IMEI, []byte{}, c.OutGoingPacketSessionId, req, c.ksid) sso := packets.BuildSsoPacket(seq, c.version.AppId, c.version.SubAppId, "wtlogin.login", SystemDeviceInfo.IMEI, []byte{}, c.OutGoingPacketSessionId, req, c.ksid)
packet := packets.BuildLoginPacket(c.Uin, 2, make([]byte, 16), sso, []byte{}) packet := packets.BuildLoginPacket(c.Uin, 2, make([]byte, 16), sso, []byte{})
return seq, packet return seq, packet
} }
@ -395,7 +395,7 @@ func (c *QQClient) buildRequestChangeSigPacket() (uint16, []byte) {
})) }))
// w.Write(tlv.T202(SystemDeviceInfo.WifiBSSID, SystemDeviceInfo.WifiSSID)) // w.Write(tlv.T202(SystemDeviceInfo.WifiBSSID, SystemDeviceInfo.WifiSSID))
}) })
sso := packets.BuildSsoPacket(seq, c.version.AppId, "wtlogin.exchange_emp", SystemDeviceInfo.IMEI, c.sigInfo.tgt, c.OutGoingPacketSessionId, req, c.ksid) sso := packets.BuildSsoPacket(seq, c.version.AppId, c.version.SubAppId, "wtlogin.exchange_emp", SystemDeviceInfo.IMEI, c.sigInfo.tgt, c.OutGoingPacketSessionId, req, c.ksid)
packet := packets.BuildLoginPacket(c.Uin, 2, make([]byte, 16), sso, []byte{}) packet := packets.BuildLoginPacket(c.Uin, 2, make([]byte, 16), sso, []byte{})
return seq, packet return seq, packet
} }
@ -443,7 +443,7 @@ func (c *QQClient) buildClientRegisterPacket() (uint16, []byte) {
Context: make(map[string]string), Context: make(map[string]string),
Status: make(map[string]string), Status: make(map[string]string),
} }
sso := packets.BuildSsoPacket(seq, c.version.AppId, "StatSvc.register", SystemDeviceInfo.IMEI, c.sigInfo.tgt, c.OutGoingPacketSessionId, pkt.ToBytes(), c.ksid) sso := packets.BuildSsoPacket(seq, c.version.AppId, c.version.SubAppId, "StatSvc.register", SystemDeviceInfo.IMEI, c.sigInfo.tgt, c.OutGoingPacketSessionId, pkt.ToBytes(), c.ksid)
packet := packets.BuildLoginPacket(c.Uin, 1, c.sigInfo.d2Key, sso, c.sigInfo.d2) packet := packets.BuildLoginPacket(c.Uin, 1, c.sigInfo.d2Key, sso, c.sigInfo.d2)
return seq, packet return seq, packet
} }

View File

@ -43,6 +43,7 @@ type QQClient struct {
GroupList []*GroupInfo GroupList []*GroupInfo
OnlineClients []*OtherClientInfo OnlineClients []*OtherClientInfo
Online bool Online bool
QiDian *QiDianAccountInfo
// NetLooping bool // NetLooping bool
SequenceId int32 SequenceId int32
@ -75,7 +76,7 @@ type QQClient struct {
randSeed []byte // t403 randSeed []byte // t403
timeDiff int64 timeDiff int64
sigInfo *loginSigInfo sigInfo *loginSigInfo
highwaySession *highwaySessionInfo bigDataSession *bigDataSessionInfo
srvSsoAddrs []string srvSsoAddrs []string
otherSrvAddrs []string otherSrvAddrs []string
fileStorageInfo *jce.FileStoragePushFSSvcList fileStorageInfo *jce.FileStoragePushFSSvcList
@ -122,6 +123,15 @@ type loginSigInfo struct {
pt4TokenMap map[string][]byte pt4TokenMap map[string][]byte
} }
type QiDianAccountInfo struct {
MasterUin int64
ExtName string
CreateTime int64
bigDataReqAddrs []string
bigDataReqSession *bigDataSessionInfo
}
type handlerInfo struct { type handlerInfo struct {
fun func(i interface{}, err error) fun func(i interface{}, err error)
params requestParams params requestParams
@ -410,6 +420,10 @@ func (c *QQClient) init(tokenLogin bool) error {
go c.doHeartbeat() go c.doHeartbeat()
} }
_ = c.RefreshStatus() _ = c.RefreshStatus()
if c.version.Protocol == QiDian {
_, _ = c.sendAndWait(c.buildLoginExtraPacket()) // 小登录
_, _ = c.sendAndWait(c.buildConnKeyRequestPacket()) // big data key 如果等待 config push 的话时间来不及
}
seq, pkt := c.buildGetMessageRequestPacket(msg.SyncFlag_START, time.Now().Unix()) seq, pkt := c.buildGetMessageRequestPacket(msg.SyncFlag_START, time.Now().Unix())
_, _ = c.sendAndWait(seq, pkt, requestParams{"used_reg_proxy": true, "init": true}) _, _ = c.sendAndWait(seq, pkt, requestParams{"used_reg_proxy": true, "init": true})
c.stat.once.Do(func() { c.stat.once.Do(func() {
@ -536,8 +550,17 @@ func (c *QQClient) ReloadFriendList() error {
return nil return nil
} }
// GetFriendList request friend list // GetFriendList
// 当使用普通QQ时: 请求好友列表
// 当使用企点QQ时: 请求外部联系人列表
func (c *QQClient) GetFriendList() (*FriendListResponse, error) { func (c *QQClient) GetFriendList() (*FriendListResponse, error) {
if c.version.Protocol == QiDian {
rsp, err := c.getQiDianAddressDetailList()
if err != nil {
return nil, err
}
return &FriendListResponse{TotalCount: int32(len(rsp)), List: rsp}, nil
}
curFriendCount := 0 curFriendCount := 0
r := &FriendListResponse{} r := &FriendListResponse{}
for { for {
@ -1110,7 +1133,7 @@ func (c *QQClient) doHeartbeat() {
for c.Online { for c.Online {
time.Sleep(time.Second * 30) time.Sleep(time.Second * 30)
seq := c.nextSeq() seq := c.nextSeq()
sso := packets.BuildSsoPacket(seq, c.version.AppId, "Heartbeat.Alive", SystemDeviceInfo.IMEI, []byte{}, c.OutGoingPacketSessionId, []byte{}, c.ksid) sso := packets.BuildSsoPacket(seq, c.version.AppId, c.version.SubAppId, "Heartbeat.Alive", SystemDeviceInfo.IMEI, []byte{}, c.OutGoingPacketSessionId, []byte{}, c.ksid)
packet := packets.BuildLoginPacket(c.Uin, 0, []byte{}, sso, []byte{}) packet := packets.BuildLoginPacket(c.Uin, 0, []byte{}, sso, []byte{})
_, err := c.sendAndWait(seq, packet) _, err := c.sendAndWait(seq, packet)
if errors.Is(err, utils.ErrConnectionClosed) { if errors.Is(err, utils.ErrConnectionClosed) {

View File

@ -346,7 +346,7 @@ func decodePushReqPacket(c *QQClient, _ *incomingPacketInfo, payload []byte) (in
c.fileStorageInfo = list c.fileStorageInfo = list
rsp := cmd0x6ff.C501RspBody{} rsp := cmd0x6ff.C501RspBody{}
if err := proto.Unmarshal(list.BigDataChannel.PbBuf, &rsp); err == nil && rsp.RspBody != nil { if err := proto.Unmarshal(list.BigDataChannel.PbBuf, &rsp); err == nil && rsp.RspBody != nil {
c.highwaySession = &highwaySessionInfo{ c.bigDataSession = &bigDataSessionInfo{
SigSession: rsp.RspBody.SigSession, SigSession: rsp.RspBody.SigSession,
SessionKey: rsp.RspBody.SessionKey, SessionKey: rsp.RspBody.SessionKey,
} }

View File

@ -279,7 +279,7 @@ type (
Msg *message.GroupMessage Msg *message.GroupMessage
} }
highwaySessionInfo struct { bigDataSessionInfo struct {
SigSession []byte SigSession []byte
SessionKey []byte SessionKey []byte
} }
@ -335,6 +335,7 @@ const (
IPad ClientProtocol = 2 IPad ClientProtocol = 2
AndroidWatch ClientProtocol = 3 AndroidWatch ClientProtocol = 3
MacOS ClientProtocol = 4 MacOS ClientProtocol = 4
QiDian ClientProtocol = 5
) )
func (r *UserJoinGroupRequest) Accept() { func (r *UserJoinGroupRequest) Accept() {

View File

@ -107,11 +107,13 @@ type (
SortVersionName string SortVersionName string
SdkVersion string SdkVersion string
AppId uint32 AppId uint32
SubAppId uint32
BuildTime uint32 BuildTime uint32
SSOVersion uint32 SSOVersion uint32
MiscBitmap uint32 MiscBitmap uint32
SubSigmap uint32 SubSigmap uint32
MainSigMap uint32 MainSigMap uint32
Protocol ClientProtocol
} }
incomingPacketInfo struct { incomingPacketInfo struct {
@ -194,6 +196,7 @@ func genVersionInfo(p ClientProtocol) *versionInfo {
return &versionInfo{ return &versionInfo{
ApkId: "com.tencent.mobileqq", ApkId: "com.tencent.mobileqq",
AppId: 537066738, AppId: 537066738,
SubAppId: 537066738,
SortVersionName: "8.5.0", SortVersionName: "8.5.0",
BuildTime: 1607689988, BuildTime: 1607689988,
ApkSign: []byte{0xA6, 0xB7, 0x45, 0xBF, 0x24, 0xA2, 0xC2, 0x77, 0x52, 0x77, 0x16, 0xF6, 0xF3, 0x6E, 0xB6, 0x8D}, ApkSign: []byte{0xA6, 0xB7, 0x45, 0xBF, 0x24, 0xA2, 0xC2, 0x77, 0x52, 0x77, 0x16, 0xF6, 0xF3, 0x6E, 0xB6, 0x8D},
@ -202,11 +205,13 @@ func genVersionInfo(p ClientProtocol) *versionInfo {
MiscBitmap: 184024956, MiscBitmap: 184024956,
SubSigmap: 0x10400, SubSigmap: 0x10400,
MainSigMap: 34869472, MainSigMap: 34869472,
Protocol: p,
} }
case AndroidWatch: case AndroidWatch:
return &versionInfo{ return &versionInfo{
ApkId: "com.tencent.qqlite", ApkId: "com.tencent.qqlite",
AppId: 537064446, AppId: 537064446,
SubAppId: 537064446,
SortVersionName: "2.0.5", SortVersionName: "2.0.5",
BuildTime: 1559564731, BuildTime: 1559564731,
ApkSign: []byte{0xA6, 0xB7, 0x45, 0xBF, 0x24, 0xA2, 0xC2, 0x77, 0x52, 0x77, 0x16, 0xF6, 0xF3, 0x6E, 0xB6, 0x8D}, ApkSign: []byte{0xA6, 0xB7, 0x45, 0xBF, 0x24, 0xA2, 0xC2, 0x77, 0x52, 0x77, 0x16, 0xF6, 0xF3, 0x6E, 0xB6, 0x8D},
@ -215,11 +220,13 @@ func genVersionInfo(p ClientProtocol) *versionInfo {
MiscBitmap: 16252796, MiscBitmap: 16252796,
SubSigmap: 0x10400, SubSigmap: 0x10400,
MainSigMap: 34869472, MainSigMap: 34869472,
Protocol: p,
} }
case IPad: case IPad:
return &versionInfo{ return &versionInfo{
ApkId: "com.tencent.minihd.qq", ApkId: "com.tencent.minihd.qq",
AppId: 537065739, AppId: 537065739,
SubAppId: 537065739,
SortVersionName: "5.8.9", SortVersionName: "5.8.9",
BuildTime: 1595836208, BuildTime: 1595836208,
ApkSign: []byte{170, 57, 120, 244, 31, 217, 111, 249, 145, 74, 102, 158, 24, 100, 116, 199}, ApkSign: []byte{170, 57, 120, 244, 31, 217, 111, 249, 145, 74, 102, 158, 24, 100, 116, 199},
@ -228,11 +235,13 @@ func genVersionInfo(p ClientProtocol) *versionInfo {
MiscBitmap: 150470524, MiscBitmap: 150470524,
SubSigmap: 66560, SubSigmap: 66560,
MainSigMap: 1970400, MainSigMap: 1970400,
Protocol: p,
} }
case MacOS: case MacOS:
return &versionInfo{ return &versionInfo{
ApkId: "com.tencent.minihd.qq", ApkId: "com.tencent.minihd.qq",
AppId: 537064315, AppId: 537064315,
SubAppId: 537064315,
SortVersionName: "5.8.9", SortVersionName: "5.8.9",
BuildTime: 1595836208, BuildTime: 1595836208,
ApkSign: []byte{170, 57, 120, 244, 31, 217, 111, 249, 145, 74, 102, 158, 24, 100, 116, 199}, ApkSign: []byte{170, 57, 120, 244, 31, 217, 111, 249, 145, 74, 102, 158, 24, 100, 116, 199},
@ -241,6 +250,22 @@ func genVersionInfo(p ClientProtocol) *versionInfo {
MiscBitmap: 150470524, MiscBitmap: 150470524,
SubSigmap: 66560, SubSigmap: 66560,
MainSigMap: 1970400, MainSigMap: 1970400,
Protocol: p,
}
case QiDian:
return &versionInfo{
ApkId: "com.tencent.qidian",
AppId: 537061386,
SubAppId: 537036590,
SortVersionName: "3.8.6",
BuildTime: 1556628836,
ApkSign: []byte{160, 30, 236, 171, 133, 233, 227, 186, 43, 15, 106, 21, 140, 133, 92, 41},
SdkVersion: "6.0.0.2365",
SSOVersion: 5,
MiscBitmap: 49807228,
SubSigmap: 66560,
MainSigMap: 34869472,
Protocol: p,
} }
} }
return nil return nil

View File

@ -234,7 +234,7 @@ func (fs *GroupFileSystem) UploadFile(p, name, folderId string) error {
}, },
Unknown3: proto.Int32(0), Unknown3: proto.Int32(0),
}) })
if _, err = fs.client.excitingUploadStream(file, 71, fs.client.highwaySession.SigSession, ext); err != nil { if _, err = fs.client.excitingUploadStream(file, 71, fs.client.bigDataSession.SigSession, ext); err != nil {
return errors.Wrap(err, "upload failed") return errors.Wrap(err, "upload failed")
} }
_, pkt := fs.client.buildGroupFileFeedsRequest(fs.GroupCode, rsp.FileId, rsp.BusId, rand.Int31()) _, pkt := fs.client.buildGroupFileFeedsRequest(fs.GroupCode, rsp.FileId, rsp.BusId, rand.Int31())

View File

@ -111,10 +111,10 @@ func (c *QQClient) highwayUploadByBDH(stream io.Reader, length int64, cmdId int3
return nil, errors.New("srv addrs not found. maybe miss some packet?") return nil, errors.New("srv addrs not found. maybe miss some packet?")
} }
if encrypt { if encrypt {
if c.highwaySession == nil || len(c.highwaySession.SessionKey) == 0 { if c.bigDataSession == nil || len(c.bigDataSession.SessionKey) == 0 {
return nil, errors.New("session key not found. maybe miss some packet?") return nil, errors.New("session key not found. maybe miss some packet?")
} }
ext = binary.NewTeaCipher(c.highwaySession.SessionKey).Encrypt(ext) ext = binary.NewTeaCipher(c.bigDataSession.SessionKey).Encrypt(ext)
} }
const chunkSize = 8192 * 16 const chunkSize = 8192 * 16
conn, err := net.DialTimeout("tcp", c.srvSsoAddrs[0], time.Second*20) conn, err := net.DialTimeout("tcp", c.srvSsoAddrs[0], time.Second*20)
@ -202,10 +202,10 @@ func (c *QQClient) highwayUploadFileMultiThreadingByBDH(path string, cmdId int32
return nil, errors.New("srv addrs not found. maybe miss some packet?") return nil, errors.New("srv addrs not found. maybe miss some packet?")
} }
if encrypt { if encrypt {
if c.highwaySession == nil || len(c.highwaySession.SessionKey) == 0 { if c.bigDataSession == nil || len(c.bigDataSession.SessionKey) == 0 {
return nil, errors.New("session key not found. maybe miss some packet?") return nil, errors.New("session key not found. maybe miss some packet?")
} }
ext = binary.NewTeaCipher(c.highwaySession.SessionKey).Encrypt(ext) ext = binary.NewTeaCipher(c.bigDataSession.SessionKey).Encrypt(ext)
} }
stat, err := os.Stat(path) stat, err := os.Stat(path)
if err != nil { if err != nil {

View File

@ -243,7 +243,7 @@ func (c *QQClient) uploadOcrImage(img io.Reader, length int64, sum []byte) (stri
ActionType: proto.Uint32(0), ActionType: proto.Uint32(0),
Uuid: binary.GenUUID(r), Uuid: binary.GenUUID(r),
}) })
rsp, err := c.highwayUploadByBDH(img, length, 76, c.highwaySession.SigSession, sum, ext, false) rsp, err := c.highwayUploadByBDH(img, length, 76, c.bigDataSession.SigSession, sum, ext, false)
if err != nil { if err != nil {
return "", errors.Wrap(err, "upload ocr image error") return "", errors.Wrap(err, "upload ocr image error")
} }

View File

@ -0,0 +1,945 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.25.0
// protoc v3.14.0
// source: cmd0x3f6.proto
package cmd0x3f6
import (
proto "github.com/golang/protobuf/proto"
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
reflect "reflect"
sync "sync"
)
const (
// Verify that this generated code is sufficiently up-to-date.
_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
// Verify that runtime/protoimpl is sufficiently up-to-date.
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
// This is a compile-time assertion that a sufficiently up-to-date version
// of the legacy proto package is being used.
const _ = proto.ProtoPackageIsVersion4
type C3F6ReqBody struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
SubCmd *uint32 `protobuf:"varint,1,opt,name=subCmd" json:"subCmd,omitempty"`
CrmCommonHead *C3F6CRMMsgHead `protobuf:"bytes,2,opt,name=crmCommonHead" json:"crmCommonHead,omitempty"`
SubcmdLoginProcessCompleteReqBody *QDUserLoginProcessCompleteReqBody `protobuf:"bytes,42,opt,name=subcmdLoginProcessCompleteReqBody" json:"subcmdLoginProcessCompleteReqBody,omitempty"`
}
func (x *C3F6ReqBody) Reset() {
*x = C3F6ReqBody{}
if protoimpl.UnsafeEnabled {
mi := &file_cmd0x3f6_proto_msgTypes[0]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *C3F6ReqBody) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*C3F6ReqBody) ProtoMessage() {}
func (x *C3F6ReqBody) ProtoReflect() protoreflect.Message {
mi := &file_cmd0x3f6_proto_msgTypes[0]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use C3F6ReqBody.ProtoReflect.Descriptor instead.
func (*C3F6ReqBody) Descriptor() ([]byte, []int) {
return file_cmd0x3f6_proto_rawDescGZIP(), []int{0}
}
func (x *C3F6ReqBody) GetSubCmd() uint32 {
if x != nil && x.SubCmd != nil {
return *x.SubCmd
}
return 0
}
func (x *C3F6ReqBody) GetCrmCommonHead() *C3F6CRMMsgHead {
if x != nil {
return x.CrmCommonHead
}
return nil
}
func (x *C3F6ReqBody) GetSubcmdLoginProcessCompleteReqBody() *QDUserLoginProcessCompleteReqBody {
if x != nil {
return x.SubcmdLoginProcessCompleteReqBody
}
return nil
}
type C3F6RspBody struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
SubCmd *uint32 `protobuf:"varint,1,opt,name=subCmd" json:"subCmd,omitempty"`
CrmCommonHead *C3F6CRMMsgHead `protobuf:"bytes,2,opt,name=crmCommonHead" json:"crmCommonHead,omitempty"`
SubcmdLoginProcessCompleteRspBody *QDUserLoginProcessCompleteRspBody `protobuf:"bytes,42,opt,name=subcmdLoginProcessCompleteRspBody" json:"subcmdLoginProcessCompleteRspBody,omitempty"`
}
func (x *C3F6RspBody) Reset() {
*x = C3F6RspBody{}
if protoimpl.UnsafeEnabled {
mi := &file_cmd0x3f6_proto_msgTypes[1]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *C3F6RspBody) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*C3F6RspBody) ProtoMessage() {}
func (x *C3F6RspBody) ProtoReflect() protoreflect.Message {
mi := &file_cmd0x3f6_proto_msgTypes[1]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use C3F6RspBody.ProtoReflect.Descriptor instead.
func (*C3F6RspBody) Descriptor() ([]byte, []int) {
return file_cmd0x3f6_proto_rawDescGZIP(), []int{1}
}
func (x *C3F6RspBody) GetSubCmd() uint32 {
if x != nil && x.SubCmd != nil {
return *x.SubCmd
}
return 0
}
func (x *C3F6RspBody) GetCrmCommonHead() *C3F6CRMMsgHead {
if x != nil {
return x.CrmCommonHead
}
return nil
}
func (x *C3F6RspBody) GetSubcmdLoginProcessCompleteRspBody() *QDUserLoginProcessCompleteRspBody {
if x != nil {
return x.SubcmdLoginProcessCompleteRspBody
}
return nil
}
type QDUserLoginProcessCompleteReqBody struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Kfext *uint64 `protobuf:"varint,1,opt,name=kfext" json:"kfext,omitempty"`
Pubno *uint32 `protobuf:"varint,2,opt,name=pubno" json:"pubno,omitempty"`
Buildno *uint32 `protobuf:"varint,3,opt,name=buildno" json:"buildno,omitempty"`
TerminalType *uint32 `protobuf:"varint,4,opt,name=terminalType" json:"terminalType,omitempty"`
Status *uint32 `protobuf:"varint,5,opt,name=status" json:"status,omitempty"`
LoginTime *uint32 `protobuf:"varint,6,opt,name=loginTime" json:"loginTime,omitempty"`
HardwareInfo *string `protobuf:"bytes,7,opt,name=hardwareInfo" json:"hardwareInfo,omitempty"`
SoftwareInfo *string `protobuf:"bytes,8,opt,name=softwareInfo" json:"softwareInfo,omitempty"`
Guid []byte `protobuf:"bytes,9,opt,name=guid" json:"guid,omitempty"`
AppName *string `protobuf:"bytes,10,opt,name=appName" json:"appName,omitempty"`
SubAppId *uint32 `protobuf:"varint,11,opt,name=subAppId" json:"subAppId,omitempty"`
}
func (x *QDUserLoginProcessCompleteReqBody) Reset() {
*x = QDUserLoginProcessCompleteReqBody{}
if protoimpl.UnsafeEnabled {
mi := &file_cmd0x3f6_proto_msgTypes[2]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *QDUserLoginProcessCompleteReqBody) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*QDUserLoginProcessCompleteReqBody) ProtoMessage() {}
func (x *QDUserLoginProcessCompleteReqBody) ProtoReflect() protoreflect.Message {
mi := &file_cmd0x3f6_proto_msgTypes[2]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use QDUserLoginProcessCompleteReqBody.ProtoReflect.Descriptor instead.
func (*QDUserLoginProcessCompleteReqBody) Descriptor() ([]byte, []int) {
return file_cmd0x3f6_proto_rawDescGZIP(), []int{2}
}
func (x *QDUserLoginProcessCompleteReqBody) GetKfext() uint64 {
if x != nil && x.Kfext != nil {
return *x.Kfext
}
return 0
}
func (x *QDUserLoginProcessCompleteReqBody) GetPubno() uint32 {
if x != nil && x.Pubno != nil {
return *x.Pubno
}
return 0
}
func (x *QDUserLoginProcessCompleteReqBody) GetBuildno() uint32 {
if x != nil && x.Buildno != nil {
return *x.Buildno
}
return 0
}
func (x *QDUserLoginProcessCompleteReqBody) GetTerminalType() uint32 {
if x != nil && x.TerminalType != nil {
return *x.TerminalType
}
return 0
}
func (x *QDUserLoginProcessCompleteReqBody) GetStatus() uint32 {
if x != nil && x.Status != nil {
return *x.Status
}
return 0
}
func (x *QDUserLoginProcessCompleteReqBody) GetLoginTime() uint32 {
if x != nil && x.LoginTime != nil {
return *x.LoginTime
}
return 0
}
func (x *QDUserLoginProcessCompleteReqBody) GetHardwareInfo() string {
if x != nil && x.HardwareInfo != nil {
return *x.HardwareInfo
}
return ""
}
func (x *QDUserLoginProcessCompleteReqBody) GetSoftwareInfo() string {
if x != nil && x.SoftwareInfo != nil {
return *x.SoftwareInfo
}
return ""
}
func (x *QDUserLoginProcessCompleteReqBody) GetGuid() []byte {
if x != nil {
return x.Guid
}
return nil
}
func (x *QDUserLoginProcessCompleteReqBody) GetAppName() string {
if x != nil && x.AppName != nil {
return *x.AppName
}
return ""
}
func (x *QDUserLoginProcessCompleteReqBody) GetSubAppId() uint32 {
if x != nil && x.SubAppId != nil {
return *x.SubAppId
}
return 0
}
type QDUserLoginProcessCompleteRspBody struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Ret *RetInfo `protobuf:"bytes,1,opt,name=ret" json:"ret,omitempty"`
Url *string `protobuf:"bytes,2,opt,name=url" json:"url,omitempty"`
Mobile *string `protobuf:"bytes,3,opt,name=mobile" json:"mobile,omitempty"`
ExternalMobile *string `protobuf:"bytes,4,opt,name=externalMobile" json:"externalMobile,omitempty"`
DataAnalysisPriv *bool `protobuf:"varint,5,opt,name=dataAnalysisPriv" json:"dataAnalysisPriv,omitempty"`
DeviceLock *bool `protobuf:"varint,6,opt,name=deviceLock" json:"deviceLock,omitempty"`
ModulePrivilege *uint64 `protobuf:"varint,7,opt,name=modulePrivilege" json:"modulePrivilege,omitempty"`
ModuleSubPrivilege []uint32 `protobuf:"varint,8,rep,name=moduleSubPrivilege" json:"moduleSubPrivilege,omitempty"`
MasterSet *uint32 `protobuf:"varint,9,opt,name=masterSet" json:"masterSet,omitempty"`
ExtSet *uint32 `protobuf:"varint,10,opt,name=extSet" json:"extSet,omitempty"`
CorpConfProperty *uint64 `protobuf:"varint,11,opt,name=corpConfProperty" json:"corpConfProperty,omitempty"`
Corpuin *uint64 `protobuf:"varint,12,opt,name=corpuin" json:"corpuin,omitempty"`
Kfaccount *uint64 `protobuf:"varint,13,opt,name=kfaccount" json:"kfaccount,omitempty"`
SecurityLevel *uint32 `protobuf:"varint,14,opt,name=securityLevel" json:"securityLevel,omitempty"`
MsgTitle *string `protobuf:"bytes,15,opt,name=msgTitle" json:"msgTitle,omitempty"`
SuccNoticeMsg *string `protobuf:"bytes,16,opt,name=succNoticeMsg" json:"succNoticeMsg,omitempty"`
NameAccount *uint64 `protobuf:"varint,17,opt,name=nameAccount" json:"nameAccount,omitempty"`
CrmMigrateFlag *uint32 `protobuf:"varint,18,opt,name=crmMigrateFlag" json:"crmMigrateFlag,omitempty"`
ExtuinName *string `protobuf:"bytes,19,opt,name=extuinName" json:"extuinName,omitempty"`
OpenAccountTime *uint32 `protobuf:"varint,20,opt,name=openAccountTime" json:"openAccountTime,omitempty"`
}
func (x *QDUserLoginProcessCompleteRspBody) Reset() {
*x = QDUserLoginProcessCompleteRspBody{}
if protoimpl.UnsafeEnabled {
mi := &file_cmd0x3f6_proto_msgTypes[3]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *QDUserLoginProcessCompleteRspBody) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*QDUserLoginProcessCompleteRspBody) ProtoMessage() {}
func (x *QDUserLoginProcessCompleteRspBody) ProtoReflect() protoreflect.Message {
mi := &file_cmd0x3f6_proto_msgTypes[3]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use QDUserLoginProcessCompleteRspBody.ProtoReflect.Descriptor instead.
func (*QDUserLoginProcessCompleteRspBody) Descriptor() ([]byte, []int) {
return file_cmd0x3f6_proto_rawDescGZIP(), []int{3}
}
func (x *QDUserLoginProcessCompleteRspBody) GetRet() *RetInfo {
if x != nil {
return x.Ret
}
return nil
}
func (x *QDUserLoginProcessCompleteRspBody) GetUrl() string {
if x != nil && x.Url != nil {
return *x.Url
}
return ""
}
func (x *QDUserLoginProcessCompleteRspBody) GetMobile() string {
if x != nil && x.Mobile != nil {
return *x.Mobile
}
return ""
}
func (x *QDUserLoginProcessCompleteRspBody) GetExternalMobile() string {
if x != nil && x.ExternalMobile != nil {
return *x.ExternalMobile
}
return ""
}
func (x *QDUserLoginProcessCompleteRspBody) GetDataAnalysisPriv() bool {
if x != nil && x.DataAnalysisPriv != nil {
return *x.DataAnalysisPriv
}
return false
}
func (x *QDUserLoginProcessCompleteRspBody) GetDeviceLock() bool {
if x != nil && x.DeviceLock != nil {
return *x.DeviceLock
}
return false
}
func (x *QDUserLoginProcessCompleteRspBody) GetModulePrivilege() uint64 {
if x != nil && x.ModulePrivilege != nil {
return *x.ModulePrivilege
}
return 0
}
func (x *QDUserLoginProcessCompleteRspBody) GetModuleSubPrivilege() []uint32 {
if x != nil {
return x.ModuleSubPrivilege
}
return nil
}
func (x *QDUserLoginProcessCompleteRspBody) GetMasterSet() uint32 {
if x != nil && x.MasterSet != nil {
return *x.MasterSet
}
return 0
}
func (x *QDUserLoginProcessCompleteRspBody) GetExtSet() uint32 {
if x != nil && x.ExtSet != nil {
return *x.ExtSet
}
return 0
}
func (x *QDUserLoginProcessCompleteRspBody) GetCorpConfProperty() uint64 {
if x != nil && x.CorpConfProperty != nil {
return *x.CorpConfProperty
}
return 0
}
func (x *QDUserLoginProcessCompleteRspBody) GetCorpuin() uint64 {
if x != nil && x.Corpuin != nil {
return *x.Corpuin
}
return 0
}
func (x *QDUserLoginProcessCompleteRspBody) GetKfaccount() uint64 {
if x != nil && x.Kfaccount != nil {
return *x.Kfaccount
}
return 0
}
func (x *QDUserLoginProcessCompleteRspBody) GetSecurityLevel() uint32 {
if x != nil && x.SecurityLevel != nil {
return *x.SecurityLevel
}
return 0
}
func (x *QDUserLoginProcessCompleteRspBody) GetMsgTitle() string {
if x != nil && x.MsgTitle != nil {
return *x.MsgTitle
}
return ""
}
func (x *QDUserLoginProcessCompleteRspBody) GetSuccNoticeMsg() string {
if x != nil && x.SuccNoticeMsg != nil {
return *x.SuccNoticeMsg
}
return ""
}
func (x *QDUserLoginProcessCompleteRspBody) GetNameAccount() uint64 {
if x != nil && x.NameAccount != nil {
return *x.NameAccount
}
return 0
}
func (x *QDUserLoginProcessCompleteRspBody) GetCrmMigrateFlag() uint32 {
if x != nil && x.CrmMigrateFlag != nil {
return *x.CrmMigrateFlag
}
return 0
}
func (x *QDUserLoginProcessCompleteRspBody) GetExtuinName() string {
if x != nil && x.ExtuinName != nil {
return *x.ExtuinName
}
return ""
}
func (x *QDUserLoginProcessCompleteRspBody) GetOpenAccountTime() uint32 {
if x != nil && x.OpenAccountTime != nil {
return *x.OpenAccountTime
}
return 0
}
type RetInfo struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
RetCode *uint32 `protobuf:"varint,1,opt,name=retCode" json:"retCode,omitempty"`
ErrorMsg *string `protobuf:"bytes,2,opt,name=errorMsg" json:"errorMsg,omitempty"`
}
func (x *RetInfo) Reset() {
*x = RetInfo{}
if protoimpl.UnsafeEnabled {
mi := &file_cmd0x3f6_proto_msgTypes[4]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *RetInfo) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*RetInfo) ProtoMessage() {}
func (x *RetInfo) ProtoReflect() protoreflect.Message {
mi := &file_cmd0x3f6_proto_msgTypes[4]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use RetInfo.ProtoReflect.Descriptor instead.
func (*RetInfo) Descriptor() ([]byte, []int) {
return file_cmd0x3f6_proto_rawDescGZIP(), []int{4}
}
func (x *RetInfo) GetRetCode() uint32 {
if x != nil && x.RetCode != nil {
return *x.RetCode
}
return 0
}
func (x *RetInfo) GetErrorMsg() string {
if x != nil && x.ErrorMsg != nil {
return *x.ErrorMsg
}
return ""
}
type C3F6CRMMsgHead struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
CrmSubCmd *uint32 `protobuf:"varint,1,opt,name=crmSubCmd" json:"crmSubCmd,omitempty"`
HeadLen *uint32 `protobuf:"varint,2,opt,name=headLen" json:"headLen,omitempty"`
VerNo *uint32 `protobuf:"varint,3,opt,name=verNo" json:"verNo,omitempty"`
KfUin *uint64 `protobuf:"varint,4,opt,name=kfUin" json:"kfUin,omitempty"`
Seq *uint32 `protobuf:"varint,5,opt,name=seq" json:"seq,omitempty"`
PackNum *uint32 `protobuf:"varint,6,opt,name=packNum" json:"packNum,omitempty"`
CurPack *uint32 `protobuf:"varint,7,opt,name=curPack" json:"curPack,omitempty"`
BufSig *string `protobuf:"bytes,8,opt,name=bufSig" json:"bufSig,omitempty"`
Clienttype *uint32 `protobuf:"varint,9,opt,name=clienttype" json:"clienttype,omitempty"`
LaborUin *uint64 `protobuf:"varint,10,opt,name=laborUin" json:"laborUin,omitempty"`
LaborName *string `protobuf:"bytes,11,opt,name=laborName" json:"laborName,omitempty"`
Kfaccount *uint64 `protobuf:"varint,12,opt,name=kfaccount" json:"kfaccount,omitempty"`
TraceId *string `protobuf:"bytes,13,opt,name=traceId" json:"traceId,omitempty"`
AppId *uint32 `protobuf:"varint,14,opt,name=appId" json:"appId,omitempty"`
}
func (x *C3F6CRMMsgHead) Reset() {
*x = C3F6CRMMsgHead{}
if protoimpl.UnsafeEnabled {
mi := &file_cmd0x3f6_proto_msgTypes[5]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *C3F6CRMMsgHead) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*C3F6CRMMsgHead) ProtoMessage() {}
func (x *C3F6CRMMsgHead) ProtoReflect() protoreflect.Message {
mi := &file_cmd0x3f6_proto_msgTypes[5]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use C3F6CRMMsgHead.ProtoReflect.Descriptor instead.
func (*C3F6CRMMsgHead) Descriptor() ([]byte, []int) {
return file_cmd0x3f6_proto_rawDescGZIP(), []int{5}
}
func (x *C3F6CRMMsgHead) GetCrmSubCmd() uint32 {
if x != nil && x.CrmSubCmd != nil {
return *x.CrmSubCmd
}
return 0
}
func (x *C3F6CRMMsgHead) GetHeadLen() uint32 {
if x != nil && x.HeadLen != nil {
return *x.HeadLen
}
return 0
}
func (x *C3F6CRMMsgHead) GetVerNo() uint32 {
if x != nil && x.VerNo != nil {
return *x.VerNo
}
return 0
}
func (x *C3F6CRMMsgHead) GetKfUin() uint64 {
if x != nil && x.KfUin != nil {
return *x.KfUin
}
return 0
}
func (x *C3F6CRMMsgHead) GetSeq() uint32 {
if x != nil && x.Seq != nil {
return *x.Seq
}
return 0
}
func (x *C3F6CRMMsgHead) GetPackNum() uint32 {
if x != nil && x.PackNum != nil {
return *x.PackNum
}
return 0
}
func (x *C3F6CRMMsgHead) GetCurPack() uint32 {
if x != nil && x.CurPack != nil {
return *x.CurPack
}
return 0
}
func (x *C3F6CRMMsgHead) GetBufSig() string {
if x != nil && x.BufSig != nil {
return *x.BufSig
}
return ""
}
func (x *C3F6CRMMsgHead) GetClienttype() uint32 {
if x != nil && x.Clienttype != nil {
return *x.Clienttype
}
return 0
}
func (x *C3F6CRMMsgHead) GetLaborUin() uint64 {
if x != nil && x.LaborUin != nil {
return *x.LaborUin
}
return 0
}
func (x *C3F6CRMMsgHead) GetLaborName() string {
if x != nil && x.LaborName != nil {
return *x.LaborName
}
return ""
}
func (x *C3F6CRMMsgHead) GetKfaccount() uint64 {
if x != nil && x.Kfaccount != nil {
return *x.Kfaccount
}
return 0
}
func (x *C3F6CRMMsgHead) GetTraceId() string {
if x != nil && x.TraceId != nil {
return *x.TraceId
}
return ""
}
func (x *C3F6CRMMsgHead) GetAppId() uint32 {
if x != nil && x.AppId != nil {
return *x.AppId
}
return 0
}
var File_cmd0x3f6_proto protoreflect.FileDescriptor
var file_cmd0x3f6_proto_rawDesc = []byte{
0x0a, 0x0e, 0x63, 0x6d, 0x64, 0x30, 0x78, 0x33, 0x66, 0x36, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
0x22, 0xce, 0x01, 0x0a, 0x0b, 0x43, 0x33, 0x46, 0x36, 0x52, 0x65, 0x71, 0x42, 0x6f, 0x64, 0x79,
0x12, 0x16, 0x0a, 0x06, 0x73, 0x75, 0x62, 0x43, 0x6d, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d,
0x52, 0x06, 0x73, 0x75, 0x62, 0x43, 0x6d, 0x64, 0x12, 0x35, 0x0a, 0x0d, 0x63, 0x72, 0x6d, 0x43,
0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x48, 0x65, 0x61, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32,
0x0f, 0x2e, 0x43, 0x33, 0x46, 0x36, 0x43, 0x52, 0x4d, 0x4d, 0x73, 0x67, 0x48, 0x65, 0x61, 0x64,
0x52, 0x0d, 0x63, 0x72, 0x6d, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x48, 0x65, 0x61, 0x64, 0x12,
0x70, 0x0a, 0x21, 0x73, 0x75, 0x62, 0x63, 0x6d, 0x64, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x50, 0x72,
0x6f, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71,
0x42, 0x6f, 0x64, 0x79, 0x18, 0x2a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x51, 0x44, 0x55,
0x73, 0x65, 0x72, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x43,
0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x42, 0x6f, 0x64, 0x79, 0x52, 0x21,
0x73, 0x75, 0x62, 0x63, 0x6d, 0x64, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x50, 0x72, 0x6f, 0x63, 0x65,
0x73, 0x73, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x42, 0x6f, 0x64,
0x79, 0x22, 0xce, 0x01, 0x0a, 0x0b, 0x43, 0x33, 0x46, 0x36, 0x52, 0x73, 0x70, 0x42, 0x6f, 0x64,
0x79, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x75, 0x62, 0x43, 0x6d, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
0x0d, 0x52, 0x06, 0x73, 0x75, 0x62, 0x43, 0x6d, 0x64, 0x12, 0x35, 0x0a, 0x0d, 0x63, 0x72, 0x6d,
0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x48, 0x65, 0x61, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b,
0x32, 0x0f, 0x2e, 0x43, 0x33, 0x46, 0x36, 0x43, 0x52, 0x4d, 0x4d, 0x73, 0x67, 0x48, 0x65, 0x61,
0x64, 0x52, 0x0d, 0x63, 0x72, 0x6d, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x48, 0x65, 0x61, 0x64,
0x12, 0x70, 0x0a, 0x21, 0x73, 0x75, 0x62, 0x63, 0x6d, 0x64, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x50,
0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x73,
0x70, 0x42, 0x6f, 0x64, 0x79, 0x18, 0x2a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x51, 0x44,
0x55, 0x73, 0x65, 0x72, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73,
0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x73, 0x70, 0x42, 0x6f, 0x64, 0x79, 0x52,
0x21, 0x73, 0x75, 0x62, 0x63, 0x6d, 0x64, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x50, 0x72, 0x6f, 0x63,
0x65, 0x73, 0x73, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x73, 0x70, 0x42, 0x6f,
0x64, 0x79, 0x22, 0xd5, 0x02, 0x0a, 0x21, 0x51, 0x44, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x6f, 0x67,
0x69, 0x6e, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74,
0x65, 0x52, 0x65, 0x71, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x6b, 0x66, 0x65, 0x78,
0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x6b, 0x66, 0x65, 0x78, 0x74, 0x12, 0x14,
0x0a, 0x05, 0x70, 0x75, 0x62, 0x6e, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x70,
0x75, 0x62, 0x6e, 0x6f, 0x12, 0x18, 0x0a, 0x07, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x6e, 0x6f, 0x18,
0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x6e, 0x6f, 0x12, 0x22,
0x0a, 0x0c, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x18, 0x04,
0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x54, 0x79,
0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x05, 0x20, 0x01,
0x28, 0x0d, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x6c, 0x6f,
0x67, 0x69, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x6c,
0x6f, 0x67, 0x69, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x68, 0x61, 0x72, 0x64,
0x77, 0x61, 0x72, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c,
0x68, 0x61, 0x72, 0x64, 0x77, 0x61, 0x72, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x22, 0x0a, 0x0c,
0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x08, 0x20, 0x01,
0x28, 0x09, 0x52, 0x0c, 0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x49, 0x6e, 0x66, 0x6f,
0x12, 0x12, 0x0a, 0x04, 0x67, 0x75, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04,
0x67, 0x75, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x70, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x18,
0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a,
0x0a, 0x08, 0x73, 0x75, 0x62, 0x41, 0x70, 0x70, 0x49, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0d,
0x52, 0x08, 0x73, 0x75, 0x62, 0x41, 0x70, 0x70, 0x49, 0x64, 0x22, 0xcd, 0x05, 0x0a, 0x21, 0x51,
0x44, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73,
0x73, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x73, 0x70, 0x42, 0x6f, 0x64, 0x79,
0x12, 0x1a, 0x0a, 0x03, 0x72, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e,
0x52, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x03, 0x72, 0x65, 0x74, 0x12, 0x10, 0x0a, 0x03,
0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x16,
0x0a, 0x06, 0x6d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06,
0x6d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e,
0x61, 0x6c, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e,
0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x12, 0x2a,
0x0a, 0x10, 0x64, 0x61, 0x74, 0x61, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x50, 0x72,
0x69, 0x76, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x64, 0x61, 0x74, 0x61, 0x41, 0x6e,
0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x50, 0x72, 0x69, 0x76, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x65,
0x76, 0x69, 0x63, 0x65, 0x4c, 0x6f, 0x63, 0x6b, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a,
0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x6f, 0x63, 0x6b, 0x12, 0x28, 0x0a, 0x0f, 0x6d, 0x6f,
0x64, 0x75, 0x6c, 0x65, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x18, 0x07, 0x20,
0x01, 0x28, 0x04, 0x52, 0x0f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x50, 0x72, 0x69, 0x76, 0x69,
0x6c, 0x65, 0x67, 0x65, 0x12, 0x2e, 0x0a, 0x12, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x53, 0x75,
0x62, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0d,
0x52, 0x12, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x53, 0x75, 0x62, 0x50, 0x72, 0x69, 0x76, 0x69,
0x6c, 0x65, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x53, 0x65,
0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x53,
0x65, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x78, 0x74, 0x53, 0x65, 0x74, 0x18, 0x0a, 0x20, 0x01,
0x28, 0x0d, 0x52, 0x06, 0x65, 0x78, 0x74, 0x53, 0x65, 0x74, 0x12, 0x2a, 0x0a, 0x10, 0x63, 0x6f,
0x72, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x18, 0x0b,
0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x63, 0x6f, 0x72, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x50, 0x72,
0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x72, 0x70, 0x75, 0x69,
0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x63, 0x6f, 0x72, 0x70, 0x75, 0x69, 0x6e,
0x12, 0x1c, 0x0a, 0x09, 0x6b, 0x66, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0d, 0x20,
0x01, 0x28, 0x04, 0x52, 0x09, 0x6b, 0x66, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x24,
0x0a, 0x0d, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18,
0x0e, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x4c,
0x65, 0x76, 0x65, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x73, 0x67, 0x54, 0x69, 0x74, 0x6c, 0x65,
0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x73, 0x67, 0x54, 0x69, 0x74, 0x6c, 0x65,
0x12, 0x24, 0x0a, 0x0d, 0x73, 0x75, 0x63, 0x63, 0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x4d, 0x73,
0x67, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x75, 0x63, 0x63, 0x4e, 0x6f, 0x74,
0x69, 0x63, 0x65, 0x4d, 0x73, 0x67, 0x12, 0x20, 0x0a, 0x0b, 0x6e, 0x61, 0x6d, 0x65, 0x41, 0x63,
0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x11, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x6e, 0x61, 0x6d,
0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x72, 0x6d, 0x4d,
0x69, 0x67, 0x72, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0d,
0x52, 0x0e, 0x63, 0x72, 0x6d, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67,
0x12, 0x1e, 0x0a, 0x0a, 0x65, 0x78, 0x74, 0x75, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x13,
0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x65, 0x78, 0x74, 0x75, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65,
0x12, 0x28, 0x0a, 0x0f, 0x6f, 0x70, 0x65, 0x6e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x54,
0x69, 0x6d, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x6f, 0x70, 0x65, 0x6e, 0x41,
0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x3f, 0x0a, 0x07, 0x52, 0x65,
0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65,
0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x72, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12,
0x1a, 0x0a, 0x08, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28,
0x09, 0x52, 0x08, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x73, 0x67, 0x22, 0xfa, 0x02, 0x0a, 0x0e,
0x43, 0x33, 0x46, 0x36, 0x43, 0x52, 0x4d, 0x4d, 0x73, 0x67, 0x48, 0x65, 0x61, 0x64, 0x12, 0x1c,
0x0a, 0x09, 0x63, 0x72, 0x6d, 0x53, 0x75, 0x62, 0x43, 0x6d, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
0x0d, 0x52, 0x09, 0x63, 0x72, 0x6d, 0x53, 0x75, 0x62, 0x43, 0x6d, 0x64, 0x12, 0x18, 0x0a, 0x07,
0x68, 0x65, 0x61, 0x64, 0x4c, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x68,
0x65, 0x61, 0x64, 0x4c, 0x65, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x65, 0x72, 0x4e, 0x6f, 0x18,
0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x76, 0x65, 0x72, 0x4e, 0x6f, 0x12, 0x14, 0x0a, 0x05,
0x6b, 0x66, 0x55, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x6b, 0x66, 0x55,
0x69, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x65, 0x71, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52,
0x03, 0x73, 0x65, 0x71, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x63, 0x6b, 0x4e, 0x75, 0x6d, 0x18,
0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x70, 0x61, 0x63, 0x6b, 0x4e, 0x75, 0x6d, 0x12, 0x18,
0x0a, 0x07, 0x63, 0x75, 0x72, 0x50, 0x61, 0x63, 0x6b, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52,
0x07, 0x63, 0x75, 0x72, 0x50, 0x61, 0x63, 0x6b, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x75, 0x66, 0x53,
0x69, 0x67, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x75, 0x66, 0x53, 0x69, 0x67,
0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x74, 0x79, 0x70, 0x65, 0x18, 0x09,
0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x74, 0x79, 0x70, 0x65,
0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x62, 0x6f, 0x72, 0x55, 0x69, 0x6e, 0x18, 0x0a, 0x20, 0x01,
0x28, 0x04, 0x52, 0x08, 0x6c, 0x61, 0x62, 0x6f, 0x72, 0x55, 0x69, 0x6e, 0x12, 0x1c, 0x0a, 0x09,
0x6c, 0x61, 0x62, 0x6f, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52,
0x09, 0x6c, 0x61, 0x62, 0x6f, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6b, 0x66,
0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x6b,
0x66, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x72, 0x61, 0x63,
0x65, 0x49, 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x74, 0x72, 0x61, 0x63, 0x65,
0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28,
0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x42, 0x0c, 0x5a, 0x0a, 0x2e, 0x3b, 0x63, 0x6d,
0x64, 0x30, 0x78, 0x33, 0x66, 0x36,
}
var (
file_cmd0x3f6_proto_rawDescOnce sync.Once
file_cmd0x3f6_proto_rawDescData = file_cmd0x3f6_proto_rawDesc
)
func file_cmd0x3f6_proto_rawDescGZIP() []byte {
file_cmd0x3f6_proto_rawDescOnce.Do(func() {
file_cmd0x3f6_proto_rawDescData = protoimpl.X.CompressGZIP(file_cmd0x3f6_proto_rawDescData)
})
return file_cmd0x3f6_proto_rawDescData
}
var file_cmd0x3f6_proto_msgTypes = make([]protoimpl.MessageInfo, 6)
var file_cmd0x3f6_proto_goTypes = []interface{}{
(*C3F6ReqBody)(nil), // 0: C3F6ReqBody
(*C3F6RspBody)(nil), // 1: C3F6RspBody
(*QDUserLoginProcessCompleteReqBody)(nil), // 2: QDUserLoginProcessCompleteReqBody
(*QDUserLoginProcessCompleteRspBody)(nil), // 3: QDUserLoginProcessCompleteRspBody
(*RetInfo)(nil), // 4: RetInfo
(*C3F6CRMMsgHead)(nil), // 5: C3F6CRMMsgHead
}
var file_cmd0x3f6_proto_depIdxs = []int32{
5, // 0: C3F6ReqBody.crmCommonHead:type_name -> C3F6CRMMsgHead
2, // 1: C3F6ReqBody.subcmdLoginProcessCompleteReqBody:type_name -> QDUserLoginProcessCompleteReqBody
5, // 2: C3F6RspBody.crmCommonHead:type_name -> C3F6CRMMsgHead
3, // 3: C3F6RspBody.subcmdLoginProcessCompleteRspBody:type_name -> QDUserLoginProcessCompleteRspBody
4, // 4: QDUserLoginProcessCompleteRspBody.ret:type_name -> RetInfo
5, // [5:5] is the sub-list for method output_type
5, // [5:5] is the sub-list for method input_type
5, // [5:5] is the sub-list for extension type_name
5, // [5:5] is the sub-list for extension extendee
0, // [0:5] is the sub-list for field type_name
}
func init() { file_cmd0x3f6_proto_init() }
func file_cmd0x3f6_proto_init() {
if File_cmd0x3f6_proto != nil {
return
}
if !protoimpl.UnsafeEnabled {
file_cmd0x3f6_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*C3F6ReqBody); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_cmd0x3f6_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*C3F6RspBody); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_cmd0x3f6_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*QDUserLoginProcessCompleteReqBody); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_cmd0x3f6_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*QDUserLoginProcessCompleteRspBody); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_cmd0x3f6_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*RetInfo); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_cmd0x3f6_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*C3F6CRMMsgHead); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
}
type x struct{}
out := protoimpl.TypeBuilder{
File: protoimpl.DescBuilder{
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_cmd0x3f6_proto_rawDesc,
NumEnums: 0,
NumMessages: 6,
NumExtensions: 0,
NumServices: 0,
},
GoTypes: file_cmd0x3f6_proto_goTypes,
DependencyIndexes: file_cmd0x3f6_proto_depIdxs,
MessageInfos: file_cmd0x3f6_proto_msgTypes,
}.Build()
File_cmd0x3f6_proto = out.File
file_cmd0x3f6_proto_rawDesc = nil
file_cmd0x3f6_proto_goTypes = nil
file_cmd0x3f6_proto_depIdxs = nil
}

View File

@ -0,0 +1,73 @@
syntax = "proto2";
option go_package = ".;cmd0x3f6";
message C3F6ReqBody {
optional uint32 subCmd = 1;
optional C3F6CRMMsgHead crmCommonHead = 2;
optional QDUserLoginProcessCompleteReqBody subcmdLoginProcessCompleteReqBody = 42;
}
message C3F6RspBody {
optional uint32 subCmd = 1;
optional C3F6CRMMsgHead crmCommonHead = 2;
optional QDUserLoginProcessCompleteRspBody subcmdLoginProcessCompleteRspBody = 42;
}
message QDUserLoginProcessCompleteReqBody {
optional uint64 kfext = 1;
optional uint32 pubno = 2;
optional uint32 buildno = 3;
optional uint32 terminalType = 4;
optional uint32 status = 5;
optional uint32 loginTime = 6;
optional string hardwareInfo = 7;
optional string softwareInfo = 8;
optional bytes guid = 9;
optional string appName = 10;
optional uint32 subAppId = 11;
}
message QDUserLoginProcessCompleteRspBody {
optional RetInfo ret = 1;
optional string url = 2;
optional string mobile = 3;
optional string externalMobile = 4;
optional bool dataAnalysisPriv = 5;
optional bool deviceLock = 6;
optional uint64 modulePrivilege = 7;
repeated uint32 moduleSubPrivilege = 8;
optional uint32 masterSet = 9;
optional uint32 extSet = 10;
optional uint64 corpConfProperty = 11;
optional uint64 corpuin = 12;
optional uint64 kfaccount = 13;
optional uint32 securityLevel = 14;
optional string msgTitle = 15;
optional string succNoticeMsg = 16;
optional uint64 nameAccount = 17;
optional uint32 crmMigrateFlag = 18;
optional string extuinName = 19;
optional uint32 openAccountTime = 20;
}
message RetInfo {
optional uint32 retCode = 1;
optional string errorMsg = 2;
}
message C3F6CRMMsgHead {
optional uint32 crmSubCmd = 1;
optional uint32 headLen = 2;
optional uint32 verNo = 3;
optional uint64 kfUin = 4;
optional uint32 seq = 5;
optional uint32 packNum = 6;
optional uint32 curPack = 7;
optional string bufSig = 8;
optional uint32 clienttype = 9;
optional uint64 laborUin = 10;
optional string laborName = 11;
optional uint64 kfaccount = 12;
optional string traceId = 13;
optional uint32 appId = 14;
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,119 @@
syntax = "proto2";
option go_package = ".;cmd0x6ff";
message C519CRMMsgHead {
optional uint32 crmSubCmd = 1;
optional uint32 headLen = 2;
optional uint32 verNo = 3;
optional uint64 kfUin = 4;
optional uint32 seq = 5;
optional uint32 packNum = 6;
optional uint32 curPack = 7;
optional string bufSig = 8;
optional uint64 pubQq = 9;
optional uint32 clienttype = 10;
optional uint64 laborUin = 11;
optional string laborName = 12;
optional uint64 puin = 13;
}
message GetNavigationMenuReqBody {
optional uint64 puin = 1;
optional uint64 uin = 2;
optional uint32 verNo = 3;
}
message GetNavigationMenuRspBody {
optional C519RetInfo ret = 1;
optional int32 isShow = 2;
optional string uctMsg = 3;
optional uint32 verNo = 4;
}
message C519ReqBody {
optional uint32 subCmd = 1;
optional C519CRMMsgHead crmCommonHead = 2;
optional GetAddressDetailListReqBody getAddressDetailListReqBody = 33;
optional GetNavigationMenuReqBody getNavigationMenuReq = 35;
}
message C519RetInfo {
optional uint32 retCode = 1;
optional string errorMsg = 2;
}
message C519RspBody {
optional uint32 subCmd = 1;
optional C519CRMMsgHead crmCommonHead = 2;
optional GetAddressDetailListRspBody getAddressDetailListRspBody = 33;
optional GetNavigationMenuRspBody getNavigationMenuRsp = 35;
}
message GetAddressDetailListReqBody {
optional fixed32 timestamp = 1;
optional fixed64 timestamp2 = 2;
}
message GetAddressDetailListRspBody {
optional C519RetInfo ret = 1;
optional fixed32 timestamp = 2;
optional bool full = 3;
repeated AddressDetail addressDetail = 4;
optional fixed64 timestamp2 = 5;
}
message AddressDetail {
optional uint32 aid = 1;
optional fixed32 modifyTime = 2;
optional fixed32 createTime = 3;
optional uint32 status = 4;
optional uint32 groupid = 5;
optional bytes addGroupName = 6;
optional bytes name = 7;
optional uint32 gender = 8;
optional fixed32 birthday = 9;
optional bytes company0 = 10;
optional bytes companyPosition0 = 11;
optional bytes company1 = 12;
optional bytes companyPosition1 = 13;
optional bytes fixedPhone0 = 14;
optional bytes fixedPhone1 = 15;
optional bytes email0 = 16;
optional bytes email1 = 17;
optional bytes fax0 = 18;
optional bytes fax1 = 19;
optional bytes comment = 20;
optional bytes headUrl = 21;
repeated AddressMobileInfo mobilePhone = 22;
optional bool mobilePhoneUpdated = 23;
repeated AddressQQinfo qq = 24;
optional bool qqPhoneUpdated = 25;
optional fixed64 modifyTime2 = 26;
optional NewBizClientRegion clientRegion = 27;
optional NewBizClientRegionCode clientRegionCode = 28;
}
message AddressMobileInfo {
optional uint32 index = 1;
optional bytes account = 2;
optional bytes formattedAccount = 5;
}
message AddressQQinfo {
optional uint32 index = 1;
optional uint64 account = 2;
}
message NewBizClientRegion {
optional string clientNation = 1;
optional string clientProvince = 2;
optional string clientCity = 3;
optional string clientRegion = 4;
}
message NewBizClientRegionCode {
optional uint64 nationid = 1;
optional uint64 provinceid = 2;
optional uint64 cityid = 3;
optional uint64 regionid = 4;
}

View File

@ -1,18 +1,17 @@
// Code generated by protoc-gen-go. DO NOT EDIT. // Code generated by protoc-gen-go. DO NOT EDIT.
// versions: // versions:
// protoc-gen-go v1.25.0 // protoc-gen-go v1.25.0
// protoc v3.11.4 // protoc v3.14.0
// source: busi.proto // source: subcmd0x501.proto
package cmd0x6ff package cmd0x6ff
import ( import (
reflect "reflect"
sync "sync"
proto "github.com/golang/protobuf/proto" proto "github.com/golang/protobuf/proto"
protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl" protoimpl "google.golang.org/protobuf/runtime/protoimpl"
reflect "reflect"
sync "sync"
) )
const ( const (
@ -228,11 +227,9 @@ type SubCmd0X501RspBody struct {
sizeCache protoimpl.SizeCache sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields unknownFields protoimpl.UnknownFields
SigSession []byte `protobuf:"bytes,1,opt,name=sigSession" json:"sigSession,omitempty"` SigSession []byte `protobuf:"bytes,1,opt,name=sigSession" json:"sigSession,omitempty"`
SessionKey []byte `protobuf:"bytes,2,opt,name=sessionKey" json:"sessionKey,omitempty"` SessionKey []byte `protobuf:"bytes,2,opt,name=sessionKey" json:"sessionKey,omitempty"`
Addrs []*SrvAddrs `protobuf:"bytes,3,rep,name=addrs" json:"addrs,omitempty"` Addrs []*SrvAddrs `protobuf:"bytes,3,rep,name=addrs" json:"addrs,omitempty"`
ShareType *uint32 `protobuf:"varint,12,opt,name=shareType" json:"shareType,omitempty"`
ShareChannel *uint32 `protobuf:"varint,13,opt,name=shareChannel" json:"shareChannel,omitempty"`
} }
func (x *SubCmd0X501RspBody) Reset() { func (x *SubCmd0X501RspBody) Reset() {
@ -288,18 +285,59 @@ func (x *SubCmd0X501RspBody) GetAddrs() []*SrvAddrs {
return nil return nil
} }
func (x *SubCmd0X501RspBody) GetShareType() uint32 { type SrvAddrs struct {
if x != nil && x.ShareType != nil { state protoimpl.MessageState
return *x.ShareType sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
ServiceType *uint32 `protobuf:"varint,1,opt,name=serviceType" json:"serviceType,omitempty"`
Addrs []*IpAddr `protobuf:"bytes,2,rep,name=addrs" json:"addrs,omitempty"`
}
func (x *SrvAddrs) Reset() {
*x = SrvAddrs{}
if protoimpl.UnsafeEnabled {
mi := &file_subcmd0x501_proto_msgTypes[4]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *SrvAddrs) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*SrvAddrs) ProtoMessage() {}
func (x *SrvAddrs) ProtoReflect() protoreflect.Message {
mi := &file_subcmd0x501_proto_msgTypes[4]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use SrvAddrs.ProtoReflect.Descriptor instead.
func (*SrvAddrs) Descriptor() ([]byte, []int) {
return file_subcmd0x501_proto_rawDescGZIP(), []int{4}
}
func (x *SrvAddrs) GetServiceType() uint32 {
if x != nil && x.ServiceType != nil {
return *x.ServiceType
} }
return 0 return 0
} }
func (x *SubCmd0X501RspBody) GetShareChannel() uint32 { func (x *SrvAddrs) GetAddrs() []*IpAddr {
if x != nil && x.ShareChannel != nil { if x != nil {
return *x.ShareChannel return x.Addrs
} }
return 0 return nil
} }
type IpAddr struct { type IpAddr struct {
@ -316,7 +354,7 @@ type IpAddr struct {
func (x *IpAddr) Reset() { func (x *IpAddr) Reset() {
*x = IpAddr{} *x = IpAddr{}
if protoimpl.UnsafeEnabled { if protoimpl.UnsafeEnabled {
mi := &file_subcmd0x501_proto_msgTypes[4] mi := &file_subcmd0x501_proto_msgTypes[5]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -329,7 +367,7 @@ func (x *IpAddr) String() string {
func (*IpAddr) ProtoMessage() {} func (*IpAddr) ProtoMessage() {}
func (x *IpAddr) ProtoReflect() protoreflect.Message { func (x *IpAddr) ProtoReflect() protoreflect.Message {
mi := &file_subcmd0x501_proto_msgTypes[4] mi := &file_subcmd0x501_proto_msgTypes[5]
if protoimpl.UnsafeEnabled && x != nil { if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -342,7 +380,7 @@ func (x *IpAddr) ProtoReflect() protoreflect.Message {
// Deprecated: Use IpAddr.ProtoReflect.Descriptor instead. // Deprecated: Use IpAddr.ProtoReflect.Descriptor instead.
func (*IpAddr) Descriptor() ([]byte, []int) { func (*IpAddr) Descriptor() ([]byte, []int) {
return file_subcmd0x501_proto_rawDescGZIP(), []int{4} return file_subcmd0x501_proto_rawDescGZIP(), []int{5}
} }
func (x *IpAddr) GetType() uint32 { func (x *IpAddr) GetType() uint32 {
@ -373,61 +411,6 @@ func (x *IpAddr) GetArea() uint32 {
return 0 return 0
} }
type SrvAddrs struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
ServiceType *uint32 `protobuf:"varint,1,opt,name=serviceType" json:"serviceType,omitempty"`
Addrs []*IpAddr `protobuf:"bytes,2,rep,name=addrs" json:"addrs,omitempty"`
}
func (x *SrvAddrs) Reset() {
*x = SrvAddrs{}
if protoimpl.UnsafeEnabled {
mi := &file_subcmd0x501_proto_msgTypes[5]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *SrvAddrs) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*SrvAddrs) ProtoMessage() {}
func (x *SrvAddrs) ProtoReflect() protoreflect.Message {
mi := &file_subcmd0x501_proto_msgTypes[5]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use SrvAddrs.ProtoReflect.Descriptor instead.
func (*SrvAddrs) Descriptor() ([]byte, []int) {
return file_subcmd0x501_proto_rawDescGZIP(), []int{5}
}
func (x *SrvAddrs) GetServiceType() uint32 {
if x != nil && x.ServiceType != nil {
return *x.ServiceType
}
return 0
}
func (x *SrvAddrs) GetAddrs() []*IpAddr {
if x != nil {
return x.Addrs
}
return nil
}
var File_subcmd0x501_proto protoreflect.FileDescriptor var File_subcmd0x501_proto protoreflect.FileDescriptor
var file_subcmd0x501_proto_rawDesc = []byte{ var file_subcmd0x501_proto_rawDesc = []byte{
@ -455,30 +438,26 @@ var file_subcmd0x501_proto_rawDesc = []byte{
0x46, 0x6c, 0x61, 0x67, 0x12, 0x22, 0x0a, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x54, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x22, 0x0a, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x54,
0x79, 0x70, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x79, 0x70, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x0c, 0x73, 0x65, 0x72, 0x76,
0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x62, 0x69, 0x64, 0x18, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x62, 0x69, 0x64, 0x18,
0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x62, 0x69, 0x64, 0x22, 0xb7, 0x01, 0x0a, 0x12, 0x53, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x62, 0x69, 0x64, 0x22, 0x75, 0x0a, 0x12, 0x53, 0x75,
0x75, 0x62, 0x43, 0x6d, 0x64, 0x30, 0x78, 0x35, 0x30, 0x31, 0x52, 0x73, 0x70, 0x42, 0x6f, 0x64, 0x62, 0x43, 0x6d, 0x64, 0x30, 0x78, 0x35, 0x30, 0x31, 0x52, 0x73, 0x70, 0x42, 0x6f, 0x64, 0x79,
0x79, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x69, 0x67, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x69, 0x67, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01,
0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x73, 0x69, 0x67, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x73, 0x69, 0x67, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e,
0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x18, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x18, 0x02,
0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79,
0x79, 0x12, 0x1f, 0x0a, 0x05, 0x61, 0x64, 0x64, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x12, 0x1f, 0x0a, 0x05, 0x61, 0x64, 0x64, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32,
0x32, 0x09, 0x2e, 0x53, 0x72, 0x76, 0x41, 0x64, 0x64, 0x72, 0x73, 0x52, 0x05, 0x61, 0x64, 0x64, 0x09, 0x2e, 0x53, 0x72, 0x76, 0x41, 0x64, 0x64, 0x72, 0x73, 0x52, 0x05, 0x61, 0x64, 0x64, 0x72,
0x72, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x68, 0x61, 0x72, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x73, 0x22, 0x4b, 0x0a, 0x08, 0x53, 0x72, 0x76, 0x41, 0x64, 0x64, 0x72, 0x73, 0x12, 0x20, 0x0a,
0x0c, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x73, 0x68, 0x61, 0x72, 0x65, 0x54, 0x79, 0x70, 0x65, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01,
0x12, 0x22, 0x0a, 0x0c, 0x73, 0x68, 0x61, 0x72, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x28, 0x0d, 0x52, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12,
0x18, 0x0d, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x73, 0x68, 0x61, 0x72, 0x65, 0x43, 0x68, 0x61, 0x1d, 0x0a, 0x05, 0x61, 0x64, 0x64, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x07,
0x6e, 0x6e, 0x65, 0x6c, 0x22, 0x54, 0x0a, 0x06, 0x49, 0x70, 0x41, 0x64, 0x64, 0x72, 0x12, 0x12, 0x2e, 0x49, 0x70, 0x41, 0x64, 0x64, 0x72, 0x52, 0x05, 0x61, 0x64, 0x64, 0x72, 0x73, 0x22, 0x54,
0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x74, 0x79, 0x0a, 0x06, 0x49, 0x70, 0x41, 0x64, 0x64, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65,
0x70, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x07, 0x52, 0x02, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x0e, 0x0a, 0x02,
0x69, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x69, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x07, 0x52, 0x02, 0x69, 0x70, 0x12, 0x12, 0x0a, 0x04,
0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x72, 0x65, 0x61, 0x18, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74,
0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x61, 0x72, 0x65, 0x61, 0x22, 0x4b, 0x0a, 0x08, 0x53, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x72, 0x65, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04,
0x76, 0x41, 0x64, 0x64, 0x72, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x61, 0x72, 0x65, 0x61, 0x42, 0x0c, 0x5a, 0x0a, 0x2e, 0x3b, 0x63, 0x6d, 0x64, 0x30, 0x78, 0x36,
0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x73, 0x65, 0x72, 0x66, 0x66,
0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1d, 0x0a, 0x05, 0x61, 0x64, 0x64, 0x72,
0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x07, 0x2e, 0x49, 0x70, 0x41, 0x64, 0x64, 0x72,
0x52, 0x05, 0x61, 0x64, 0x64, 0x72, 0x73, 0x42, 0x0c, 0x5a, 0x0a, 0x2e, 0x3b, 0x63, 0x6d, 0x64,
0x30, 0x78, 0x36, 0x66, 0x66,
} }
var ( var (
@ -499,14 +478,14 @@ var file_subcmd0x501_proto_goTypes = []interface{}{
(*C501RspBody)(nil), // 1: C501RspBody (*C501RspBody)(nil), // 1: C501RspBody
(*SubCmd0X501ReqBody)(nil), // 2: SubCmd0x501ReqBody (*SubCmd0X501ReqBody)(nil), // 2: SubCmd0x501ReqBody
(*SubCmd0X501RspBody)(nil), // 3: SubCmd0x501RspBody (*SubCmd0X501RspBody)(nil), // 3: SubCmd0x501RspBody
(*IpAddr)(nil), // 4: IpAddr (*SrvAddrs)(nil), // 4: SrvAddrs
(*SrvAddrs)(nil), // 5: SrvAddrs (*IpAddr)(nil), // 5: IpAddr
} }
var file_subcmd0x501_proto_depIdxs = []int32{ var file_subcmd0x501_proto_depIdxs = []int32{
2, // 0: C501ReqBody.ReqBody:type_name -> SubCmd0x501ReqBody 2, // 0: C501ReqBody.ReqBody:type_name -> SubCmd0x501ReqBody
3, // 1: C501RspBody.RspBody:type_name -> SubCmd0x501RspBody 3, // 1: C501RspBody.RspBody:type_name -> SubCmd0x501RspBody
5, // 2: SubCmd0x501RspBody.addrs:type_name -> SrvAddrs 4, // 2: SubCmd0x501RspBody.addrs:type_name -> SrvAddrs
4, // 3: SrvAddrs.addrs:type_name -> IpAddr 5, // 3: SrvAddrs.addrs:type_name -> IpAddr
4, // [4:4] is the sub-list for method output_type 4, // [4:4] is the sub-list for method output_type
4, // [4:4] is the sub-list for method input_type 4, // [4:4] is the sub-list for method input_type
4, // [4:4] is the sub-list for extension type_name 4, // [4:4] is the sub-list for extension type_name
@ -569,7 +548,7 @@ func file_subcmd0x501_proto_init() {
} }
} }
file_subcmd0x501_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { file_subcmd0x501_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*IpAddr); i { switch v := v.(*SrvAddrs); i {
case 0: case 0:
return &v.state return &v.state
case 1: case 1:
@ -581,7 +560,7 @@ func file_subcmd0x501_proto_init() {
} }
} }
file_subcmd0x501_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { file_subcmd0x501_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*SrvAddrs); i { switch v := v.(*IpAddr); i {
case 0: case 0:
return &v.state return &v.state
case 1: case 1:

1476
client/pb/msg/head.pb.go Normal file

File diff suppressed because it is too large Load Diff

123
client/pb/msg/head.proto Normal file
View File

@ -0,0 +1,123 @@
syntax = "proto2";
option go_package = ".;msg";
message C2CHead {
optional uint64 toUin = 1;
optional uint64 fromUin = 2;
optional uint32 ccType = 3;
optional uint32 ccCmd = 4;
optional bytes authPicSig = 5;
optional bytes authSig = 6;
optional bytes authBuf = 7;
optional uint32 serverTime = 8;
optional uint32 clientTime = 9;
optional uint32 rand = 10;
optional string phoneNumber = 11;
}
message CSHead {
optional uint64 uin = 1;
optional uint32 command = 2;
optional uint32 seq = 3;
optional uint32 version = 4;
optional uint32 retryTimes = 5;
optional uint32 clientType = 6;
optional uint32 pubno = 7;
optional uint32 localid = 8;
optional uint32 timezone = 9;
optional fixed32 clientIp = 10;
optional uint32 clientPort = 11;
optional fixed32 connIp = 12;
optional uint32 connPort = 13;
optional fixed32 interfaceIp = 14;
optional uint32 interfacePort = 15;
optional fixed32 actualIp = 16;
optional uint32 flag = 17;
optional fixed32 timestamp = 18;
optional uint32 subcmd = 19;
optional uint32 result = 20;
optional uint32 appId = 21;
optional uint32 instanceId = 22;
optional uint64 sessionId = 23;
optional uint32 idcId = 24;
}
message DeltaHead {
optional uint64 totalLen = 1;
optional uint64 offset = 2;
optional uint64 ackOffset = 3;
optional bytes cookie = 4;
optional bytes ackCookie = 5;
optional uint32 result = 6;
optional uint32 flags = 7;
}
message IMHead {
optional uint32 headType = 1;
optional CSHead csHead = 2;
optional S2CHead s2CHead = 3;
optional HttpConnHead httpconnHead = 4;
optional uint32 paintFlag = 5;
optional LoginSig loginSig = 6;
optional DeltaHead deltaHead = 7;
optional C2CHead c2CHead = 8;
}
message HttpConnHead {
optional uint64 uin = 1;
optional uint32 command = 2;
optional uint32 subCommand = 3;
optional uint32 seq = 4;
optional uint32 version = 5;
optional uint32 retryTimes = 6;
optional uint32 clientType = 7;
optional uint32 pubNo = 8;
optional uint32 localId = 9;
optional uint32 timeZone = 10;
optional fixed32 clientIp = 11;
optional uint32 clientPort = 12;
optional fixed32 qzhttpIp = 13;
optional uint32 qzhttpPort = 14;
optional fixed32 sppIp = 15;
optional uint32 sppPort = 16;
optional uint32 flag = 17;
optional bytes key = 18;
optional uint32 compressType = 19;
optional uint32 originSize = 20;
optional uint32 errorCode = 21;
optional RedirectMsg redirect = 22;
optional uint32 commandId = 23;
optional uint32 serviceCmdid = 24;
optional TransOidbHead oidbhead = 25;
}
message LoginSig {
optional uint32 type = 1;
optional bytes sig = 2;
}
message RedirectMsg {
optional fixed32 lastRedirectIp = 1;
optional uint32 lastRedirectPort = 2;
optional fixed32 redirectIp = 3;
optional uint32 redirectPort = 4;
optional uint32 redirectCount = 5;
}
message S2CHead {
optional uint32 subMsgtype = 1;
optional uint32 msgType = 2;
optional uint64 fromUin = 3;
optional uint32 msgId = 4;
optional fixed32 relayIp = 5;
optional uint32 relayPort = 6;
optional uint64 toUin = 7;
}
message TransOidbHead {
optional uint32 command = 1;
optional uint32 serviceType = 2;
optional uint32 result = 3;
optional string errorMsg = 4;
}

View File

@ -1,18 +1,17 @@
// Code generated by protoc-gen-go. DO NOT EDIT. // Code generated by protoc-gen-go. DO NOT EDIT.
// versions: // versions:
// protoc-gen-go v1.23.0 // protoc-gen-go v1.25.0
// protoc v3.14.0 // protoc v3.14.0
// source: msg.proto // source: msg.proto
package msg package msg
import ( import (
reflect "reflect"
sync "sync"
proto "github.com/golang/protobuf/proto" proto "github.com/golang/protobuf/proto"
protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl" protoimpl "google.golang.org/protobuf/runtime/protoimpl"
reflect "reflect"
sync "sync"
) )
const ( const (

View File

@ -1,18 +1,17 @@
// Code generated by protoc-gen-go. DO NOT EDIT. // Code generated by protoc-gen-go. DO NOT EDIT.
// versions: // versions:
// protoc-gen-go v1.23.0 // protoc-gen-go v1.25.0
// protoc v3.14.0 // protoc v3.14.0
// source: objmsg.proto // source: objmsg.proto
package msg package msg
import ( import (
reflect "reflect"
sync "sync"
proto "github.com/golang/protobuf/proto" proto "github.com/golang/protobuf/proto"
protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl" protoimpl "google.golang.org/protobuf/runtime/protoimpl"
reflect "reflect"
sync "sync"
) )
const ( const (

View File

@ -1,18 +1,17 @@
// Code generated by protoc-gen-go. DO NOT EDIT. // Code generated by protoc-gen-go. DO NOT EDIT.
// versions: // versions:
// protoc-gen-go v1.23.0 // protoc-gen-go v1.25.0
// protoc v3.14.0 // protoc v3.14.0
// source: report.proto // source: report.proto
package msg package msg
import ( import (
reflect "reflect"
sync "sync"
proto "github.com/golang/protobuf/proto" proto "github.com/golang/protobuf/proto"
protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl" protoimpl "google.golang.org/protobuf/runtime/protoimpl"
reflect "reflect"
sync "sync"
) )
const ( const (

View File

@ -31,7 +31,7 @@ func (c *QQClient) UploadGroupPtt(groupCode int64, voice io.ReadSeeker) (*messag
fh := h.Sum(nil) fh := h.Sum(nil)
_, _ = voice.Seek(0, io.SeekStart) _, _ = voice.Seek(0, io.SeekStart)
ext := c.buildGroupPttStoreBDHExt(groupCode, fh[:], int32(length), 0, int32(length)) ext := c.buildGroupPttStoreBDHExt(groupCode, fh[:], int32(length), 0, int32(length))
rsp, err := c.highwayUploadByBDH(voice, length, 29, c.highwaySession.SigSession, fh, ext, false) rsp, err := c.highwayUploadByBDH(voice, length, 29, c.bigDataSession.SigSession, fh, ext, false)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -66,7 +66,7 @@ func (c *QQClient) UploadPrivatePtt(target int64, voice io.ReadSeeker) (*message
fh := h.Sum(nil) fh := h.Sum(nil)
_, _ = voice.Seek(0, io.SeekStart) _, _ = voice.Seek(0, io.SeekStart)
ext := c.buildC2CPttStoreBDHExt(target, fh[:], int32(length), int32(length)) ext := c.buildC2CPttStoreBDHExt(target, fh[:], int32(length), int32(length))
rsp, err := c.highwayUploadByBDH(voice, length, 26, c.highwaySession.SigSession, fh, ext, false) rsp, err := c.highwayUploadByBDH(voice, length, 26, c.bigDataSession.SigSession, fh, ext, false)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -132,14 +132,14 @@ func (c *QQClient) UploadGroupShortVideo(groupCode int64, video, thumb io.ReadSe
return err return err
} }
if err != nil || cp() != nil { if err != nil || cp() != nil {
hwRsp, err = c.highwayUploadByBDH(multi, length, 25, c.highwaySession.SigSession, fh, ext, true) hwRsp, err = c.highwayUploadByBDH(multi, length, 25, c.bigDataSession.SigSession, fh, ext, true)
} else { } else {
_ = file.Close() _ = file.Close()
hwRsp, err = c.highwayUploadFileMultiThreadingByBDH(cache, 25, 8, c.highwaySession.SigSession, ext, true) hwRsp, err = c.highwayUploadFileMultiThreadingByBDH(cache, 25, 8, c.bigDataSession.SigSession, ext, true)
_ = os.Remove(cache) _ = os.Remove(cache)
} }
} else { } else {
hwRsp, err = c.highwayUploadByBDH(multi, length, 25, c.highwaySession.SigSession, fh, ext, true) hwRsp, err = c.highwayUploadByBDH(multi, length, 25, c.bigDataSession.SigSession, fh, ext, true)
} }
if err != nil { if err != nil {
return nil, errors.Wrap(err, "upload video file error") return nil, errors.Wrap(err, "upload video file error")

191
client/qidian.go Normal file
View File

@ -0,0 +1,191 @@
// 企点协议相关特殊逻辑
package client
import (
"bytes"
"fmt"
"github.com/Mrs4s/MiraiGo/binary"
"github.com/Mrs4s/MiraiGo/client/pb/cmd0x3f6"
"github.com/Mrs4s/MiraiGo/client/pb/cmd0x6ff"
"github.com/Mrs4s/MiraiGo/client/pb/msg"
"github.com/Mrs4s/MiraiGo/protocol/packets"
"github.com/Mrs4s/MiraiGo/utils"
"github.com/golang/protobuf/proto"
"github.com/pkg/errors"
"io/ioutil"
"net/http"
)
func init() {
decoders["qidianservice.69"] = decodeLoginExtraResponse
decoders["HttpConn.0x6ff_501"] = decodeConnKeyResponse
}
// getQiDianAddressDetailList 外部联系人列表
func (c *QQClient) getQiDianAddressDetailList() ([]*FriendInfo, error) {
req := &cmd0x6ff.C519ReqBody{
SubCmd: proto.Uint32(33),
CrmCommonHead: &cmd0x6ff.C519CRMMsgHead{
KfUin: proto.Uint64(uint64(c.QiDian.MasterUin)),
VerNo: proto.Uint32(uint32(utils.ConvertSubVersionToInt(c.version.SortVersionName))),
CrmSubCmd: proto.Uint32(33),
LaborUin: proto.Uint64(uint64(c.Uin)),
},
GetAddressDetailListReqBody: &cmd0x6ff.GetAddressDetailListReqBody{
Timestamp2: proto.Uint64(0),
},
}
rspData, err := c.bigDataRequest(1305, req)
if err != nil {
return nil, errors.Wrap(err, "request error")
}
rsp := &cmd0x6ff.C519RspBody{}
if err = proto.Unmarshal(rspData, rsp); err != nil {
return nil, errors.Wrap(err, "unmarshal error")
}
if rsp.GetAddressDetailListRspBody == nil {
return nil, errors.New("rsp body is nil")
}
ret := []*FriendInfo{}
for _, detail := range rsp.GetAddressDetailListRspBody.AddressDetail {
if len(detail.Qq) == 0 {
c.Warning("address detail %v QQ is 0", string(detail.Name))
continue
}
ret = append(ret, &FriendInfo{
Uin: int64(detail.Qq[0].GetAccount()),
Nickname: string(detail.Name),
})
}
return ret, nil
}
func (c *QQClient) buildLoginExtraPacket() (uint16, []byte) {
seq := c.nextSeq()
req := &cmd0x3f6.C3F6ReqBody{
SubCmd: proto.Uint32(69),
CrmCommonHead: &cmd0x3f6.C3F6CRMMsgHead{
CrmSubCmd: proto.Uint32(69),
VerNo: proto.Uint32(uint32(utils.ConvertSubVersionToInt(c.version.SortVersionName))),
Clienttype: proto.Uint32(2),
},
SubcmdLoginProcessCompleteReqBody: &cmd0x3f6.QDUserLoginProcessCompleteReqBody{
Kfext: proto.Uint64(uint64(c.Uin)),
Pubno: &c.version.AppId,
Buildno: proto.Uint32(uint32(utils.ConvertSubVersionToInt(c.version.SortVersionName))),
TerminalType: proto.Uint32(2),
Status: proto.Uint32(10),
LoginTime: proto.Uint32(5),
HardwareInfo: proto.String(string(SystemDeviceInfo.Model)),
SoftwareInfo: proto.String(string(SystemDeviceInfo.Version.Release)),
Guid: SystemDeviceInfo.Guid,
AppName: &c.version.ApkId,
SubAppId: &c.version.AppId,
},
}
payload, _ := proto.Marshal(req)
packet := packets.BuildUniPacket(c.Uin, seq, "qidianservice.69", 1, c.OutGoingPacketSessionId, EmptyBytes, c.sigInfo.d2Key, payload)
return seq, packet
}
func (c *QQClient) buildConnKeyRequestPacket() (uint16, []byte) {
seq := c.nextSeq()
req := &cmd0x6ff.C501ReqBody{
ReqBody: &cmd0x6ff.SubCmd0X501ReqBody{
Uin: proto.Uint64(uint64(c.Uin)),
IdcId: proto.Uint32(0),
Appid: proto.Uint32(16),
LoginSigType: proto.Uint32(1),
RequestFlag: proto.Uint32(3),
ServiceTypes: []uint32{1},
},
}
payload, _ := proto.Marshal(req)
packet := packets.BuildUniPacket(c.Uin, seq, "HttpConn.0x6ff_501", 1, c.OutGoingPacketSessionId, EmptyBytes, c.sigInfo.d2Key, payload)
return seq, packet
}
func (c *QQClient) bigDataRequest(subCmd uint32, req proto.Message) ([]byte, error) {
if c.QiDian.bigDataReqSession == nil {
return nil, errors.New("please call conn key request method before")
}
data, _ := proto.Marshal(req)
head, _ := proto.Marshal(&msg.IMHead{
HeadType: proto.Uint32(4),
HttpconnHead: &msg.HttpConnHead{
Uin: proto.Uint64(uint64(c.Uin)),
Command: proto.Uint32(1791),
SubCommand: &subCmd,
Seq: proto.Uint32(uint32(c.nextHighwayApplySeq())),
Version: proto.Uint32(386), // todo: short version convert
Flag: proto.Uint32(1),
CompressType: proto.Uint32(0),
ErrorCode: proto.Uint32(0),
},
LoginSig: &msg.LoginSig{
Type: proto.Uint32(22),
Sig: c.QiDian.bigDataReqSession.SigSession,
},
})
tea := binary.NewTeaCipher(c.QiDian.bigDataReqSession.SessionKey)
body := tea.Encrypt(data)
url := fmt.Sprintf("http://%v/cgi-bin/httpconn", c.QiDian.bigDataReqAddrs[0])
httpReq, _ := http.NewRequest("POST", url, bytes.NewReader(binary.NewWriterF(func(w *binary.Writer) {
w.WriteByte(40)
w.WriteUInt32(uint32(len(head)))
w.WriteUInt32(uint32(len(body)))
w.Write(head)
w.Write(body)
w.WriteByte(41)
})))
rsp, err := http.DefaultClient.Do(httpReq)
if err != nil {
return nil, errors.Wrap(err, "request error")
}
rspBody, _ := ioutil.ReadAll(rsp.Body)
r := binary.NewReader(rspBody)
r.ReadByte()
l1 := int(r.ReadInt32())
l2 := int(r.ReadInt32())
r.ReadBytes(l1)
payload := r.ReadBytes(l2)
return tea.Decrypt(payload), nil
}
func decodeLoginExtraResponse(c *QQClient, _ *incomingPacketInfo, payload []byte) (interface{}, error) {
rsp := cmd0x3f6.C3F6RspBody{}
if err := proto.Unmarshal(payload, &rsp); err != nil {
return nil, errors.Wrap(err, "failed to unmarshal protobuf message")
}
if rsp.SubcmdLoginProcessCompleteRspBody == nil {
return nil, errors.New("login process resp is nil")
}
c.QiDian = &QiDianAccountInfo{
MasterUin: int64(rsp.SubcmdLoginProcessCompleteRspBody.GetCorpuin()),
ExtName: rsp.SubcmdLoginProcessCompleteRspBody.GetExtuinName(),
CreateTime: int64(rsp.SubcmdLoginProcessCompleteRspBody.GetOpenAccountTime()),
}
return nil, nil
}
func decodeConnKeyResponse(c *QQClient, _ *incomingPacketInfo, payload []byte) (interface{}, error) {
rsp := cmd0x6ff.C501RspBody{}
if err := proto.Unmarshal(payload, &rsp); err != nil {
return nil, errors.Wrap(err, "failed to unmarshal protobuf message")
}
if c.QiDian == nil {
return nil, errors.New("please call login extra before")
}
c.QiDian.bigDataReqSession = &bigDataSessionInfo{
SigSession: rsp.RspBody.SigSession,
SessionKey: rsp.RspBody.SessionKey,
}
for _, srv := range rsp.RspBody.Addrs {
if srv.GetServiceType() == 1 {
for _, addr := range srv.Addrs {
c.QiDian.bigDataReqAddrs = append(c.QiDian.bigDataReqAddrs, fmt.Sprintf("%v:%v", binary.UInt32ToIPV4Address(addr.GetIp()), addr.GetPort()))
}
}
}
return nil, nil
}

View File

@ -72,12 +72,12 @@ func BuildCode2DRequestPacket(seq uint32, j uint64, cmd uint16, bodyFunc func(wr
}) })
} }
func BuildSsoPacket(seq uint16, appID uint32, commandName, imei string, extData, outPacketSessionId, body, ksid []byte) []byte { func BuildSsoPacket(seq uint16, appID, subAppID uint32, commandName, imei string, extData, outPacketSessionId, body, ksid []byte) []byte {
return binary.NewWriterF(func(p *binary.Writer) { return binary.NewWriterF(func(p *binary.Writer) {
p.WriteIntLvPacket(4, func(writer *binary.Writer) { p.WriteIntLvPacket(4, func(writer *binary.Writer) {
writer.WriteUInt32(uint32(seq)) writer.WriteUInt32(uint32(seq))
writer.WriteUInt32(appID) writer.WriteUInt32(appID)
writer.WriteUInt32(appID) writer.WriteUInt32(subAppID)
writer.Write([]byte{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00}) writer.Write([]byte{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00})
if len(extData) == 0 || len(extData) == 4 { if len(extData) == 0 || len(extData) == 4 {
writer.WriteUInt32(0x04) writer.WriteUInt32(0x04)

View File

@ -5,6 +5,8 @@ import (
"crypto/rand" "crypto/rand"
"math/big" "math/big"
"reflect" "reflect"
"strconv"
"strings"
"unsafe" "unsafe"
) )
@ -62,6 +64,11 @@ func ChineseLength(str string, limit int) int {
return sum return sum
} }
func ConvertSubVersionToInt(str string) int32 {
i, _ := strconv.ParseInt(strings.Join(strings.Split(str, "."), ""), 10, 64)
return int32(i) * 10
}
// B2S converts byte slice to a string without memory allocation. // B2S converts byte slice to a string without memory allocation.
// See https://groups.google.com/forum/#!msg/Golang-Nuts/ENgbUzYvCuU/90yGx7GUAgAJ . // See https://groups.google.com/forum/#!msg/Golang-Nuts/ENgbUzYvCuU/90yGx7GUAgAJ .
// from github.com/savsgio/gotils/strconv // from github.com/savsgio/gotils/strconv