Skip to content

Commit 3722334

Browse files
committed
optimize(builder): optinalize key param
1 parent f58f431 commit 3722334

File tree

13 files changed

+109
-101
lines changed

13 files changed

+109
-101
lines changed

client/auth/sig.go

+5-5
Original file line numberDiff line numberDiff line change
@@ -50,16 +50,16 @@ func (sig *SigInfo) ClearSession() {
5050
}
5151

5252
func (sig *SigInfo) Marshal() ([]byte, error) {
53-
buffer := new(bytes.Buffer)
53+
buffer := binary.NewBuilder()
5454
err := gob.NewEncoder(buffer).Encode(sig)
5555
if err != nil {
5656
return nil, err
5757
}
58-
dataHash := crypto.MD5Digest(buffer.Bytes())
59-
60-
return binary.NewBuilder(nil).
58+
data := buffer.ToBytes()
59+
dataHash := crypto.MD5Digest(data)
60+
return binary.NewBuilder().
6161
WriteLenBytes(dataHash).
62-
WriteLenBytes(buffer.Bytes()).
62+
WriteLenBytes(data).
6363
ToBytes(), nil
6464
}
6565

client/client.go

+11-14
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ func (c *QQClient) FetchQRCode(size, margin, ecLevel uint32) ([]byte, string, er
7474
return nil, "", err
7575
}
7676

77-
body := binary.NewBuilder(nil).
77+
packet := c.buildCode2dPacket(c.Uin, 0x31, binary.NewBuilder().
7878
WriteU16(0).
7979
WriteU64(0).
8080
WriteU8(0).
@@ -87,9 +87,8 @@ func (c *QQClient) FetchQRCode(size, margin, ecLevel uint32) ([]byte, string, er
8787
tlv.T35(c.Version().PTOSVersion),
8888
tlv.T66(c.Version().PTOSVersion),
8989
tlv.Td1(c.Version().OS, c.Device().DeviceName),
90-
).WriteU8(3).ToBytes()
90+
).WriteU8(3).ToBytes())
9191

92-
packet := c.buildCode2dPacket(c.Uin, 0x31, body)
9392
response, err := c.sendUniPacketAndWait("wtlogin.trans_emp", packet)
9493
if err != nil {
9594
return nil, "", err
@@ -119,15 +118,13 @@ func (c *QQClient) GetQRCodeResult() (qrcodestate.State, error) {
119118
return -1, errors.New("no qrsig found, execute fetch_qrcode first")
120119
}
121120

122-
body := binary.NewBuilder(nil).
123-
WritePacketBytes(c.transport.Sig.Qrsig, "u16", false).
124-
WriteU64(0).
125-
WriteU32(0).
126-
WriteU8(0).
127-
WriteU8(0x83).ToBytes()
128-
129121
response, err := c.sendUniPacketAndWait("wtlogin.trans_emp",
130-
c.buildCode2dPacket(0, 0x12, body))
122+
c.buildCode2dPacket(0, 0x12, binary.NewBuilder().
123+
WritePacketBytes(c.transport.Sig.Qrsig, "u16", false).
124+
WriteU64(0).
125+
WriteU32(0).
126+
WriteU8(0).
127+
WriteU8(0x83).ToBytes()))
131128
if err != nil {
132129
return -1, err
133130
}
@@ -345,10 +342,10 @@ func (c *QQClient) QRCodeLogin() (*LoginResponse, error) {
345342
device := c.Device()
346343
response, err := c.sendUniPacketAndWait(
347344
"wtlogin.login",
348-
c.buildLoginPacket(c.Uin, "wtlogin.login", binary.NewBuilder(nil).
345+
c.buildLoginPacket(c.Uin, "wtlogin.login", binary.NewBuilder().
349346
WriteU16(0x09).
350347
WriteTLV(
351-
binary.NewBuilder(nil).WriteBytes(c.t106).Pack(0x106),
348+
binary.NewBuilder().WriteBytes(c.t106).Pack(0x106),
352349
tlv.T144(c.transport.Sig.Tgtgt, app, device),
353350
tlv.T116(app.SubSigmap),
354351
tlv.T142(app.PackageName, 0),
@@ -360,7 +357,7 @@ func (c *QQClient) QRCodeLogin() (*LoginResponse, error) {
360357
tlv.T100(5, app.AppID, app.SubAppID, 8001, app.MainSigmap, 0),
361358
tlv.T107(1, 0x0d, 0, 1),
362359
tlv.T318(nil),
363-
binary.NewBuilder(nil).WriteBytes(c.t16a).Pack(0x16a),
360+
binary.NewBuilder().WriteBytes(c.t16a).Pack(0x16a),
364361
tlv.T166(5),
365362
tlv.T521(0x13, "basicim"),
366363
).ToBytes()))

client/internal/network/transport.go

+6-4
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ func (t *Transport) PackPacket(req *Request) []byte {
3636
}
3737
}
3838

39-
ssoHeader := binary.NewBuilder(nil).
39+
ssoHeader := binary.NewBuilder().
4040
WriteU32(req.SequenceID).
4141
WriteU32(uint32(t.Version.SubAppID)).
4242
WriteU32(2052). // locate id
@@ -50,7 +50,7 @@ func (t *Transport) PackPacket(req *Request) []byte {
5050
WritePacketBytes(head.Encode(), "u32", true).
5151
ToBytes()
5252

53-
ssoPacket := binary.NewBuilder(nil).
53+
ssoPacket := binary.NewBuilder().
5454
WritePacketBytes(ssoHeader, "u32", true).
5555
WritePacketBytes(req.Body, "u32", true).
5656
ToBytes()
@@ -64,7 +64,7 @@ func (t *Transport) PackPacket(req *Request) []byte {
6464
_s = 1
6565
}
6666

67-
service := binary.NewBuilder(nil).
67+
service := binary.NewBuilder().
6868
WriteU32(12).
6969
WriteU8(_s).
7070
WritePacketBytes(t.Sig.D2, "u32", true).
@@ -73,5 +73,7 @@ func (t *Transport) PackPacket(req *Request) []byte {
7373
WriteBytes(encrypted).
7474
ToBytes()
7575

76-
return binary.NewBuilder(nil).WritePacketBytes(service, "u32", true).ToBytes()
76+
return binary.NewBuilder().
77+
WritePacketBytes(service, "u32", true).
78+
ToBytes()
7779
}

client/internal/oicq/oicq.go

+2-4
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,7 @@ type Message struct {
4545
}
4646

4747
func (c *Codec) Marshal(m *Message) []byte {
48-
w := binary.SelectBuilder(nil)
49-
defer binary.PutBuilder(w)
48+
w := binary.NewBuilder()
5049

5150
w.WriteU8(0x02)
5251
w.WriteU16(0) // len 占位
@@ -137,8 +136,7 @@ type TLV struct {
137136
}
138137

139138
func (t *TLV) Marshal() []byte {
140-
w := binary.SelectBuilder(nil)
141-
defer binary.PutBuilder(w)
139+
w := binary.NewBuilder()
142140

143141
w.WriteU16(t.Command)
144142
w.WriteU16(uint16(len(t.List)))

client/ntlogin.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,14 @@ import (
1717
)
1818

1919
func buildPasswordLoginRequest(uin uint32, app *auth.AppInfo, device *auth.DeviceInfo, sig *auth.SigInfo, passwordMD5 [16]byte) ([]byte, error) {
20-
key := crypto.MD5Digest(binary.NewBuilder(nil).
20+
key := crypto.MD5Digest(binary.NewBuilder().
2121
WriteBytes(passwordMD5[:]).
2222
WriteU32(0).
2323
WriteU32(uin).
2424
ToBytes(),
2525
)
2626

27-
plainBytes := binary.NewBuilder(nil).
27+
plainBytes := binary.NewBuilder().
2828
WriteU16(4).
2929
WriteU32(crypto.RandU32()).
3030
WriteU32(0).

client/oicq.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ func (c *QQClient) buildCode2dPacket(uin uint32, cmdID int, body []byte) []byte
5555
return c.buildLoginPacket(
5656
uin,
5757
"wtlogin.trans_emp",
58-
binary.NewBuilder(nil).
58+
binary.NewBuilder().
5959
WriteU8(0).
6060
WriteU16(uint16(len(body))+53).
6161
WriteU32(uint32(c.Version().AppID)).

client/packets/tlv/common.go

+22-23
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import (
1313

1414
// T18 默认参数 pingVersion, unknown = 0, ssoVersion = 5
1515
func T18(appID, appClientVersion, uin, pingVersion, ssoVersion, unknown int) []byte {
16-
return binary.NewBuilder(nil).
16+
return binary.NewBuilder().
1717
WriteU16(uint16(pingVersion)).
1818
WriteU32(uint32(ssoVersion)).
1919
WriteU32(uint32(appID)).
@@ -25,7 +25,7 @@ func T18(appID, appClientVersion, uin, pingVersion, ssoVersion, unknown int) []b
2525

2626
// T100 dbBufVer 默认为 0
2727
func T100(ssoVersion, appID, subAppID, appClientVersion, sigmap, dbBufVer int) []byte {
28-
return binary.NewBuilder(nil).
28+
return binary.NewBuilder().
2929
WriteU16(uint16(dbBufVer)).
3030
WriteU32(uint32(ssoVersion)).
3131
WriteU32(uint32(appID)).
@@ -38,14 +38,13 @@ func T100(ssoVersion, appID, subAppID, appClientVersion, sigmap, dbBufVer int) [
3838
// T106 抄的时候注意参数顺序
3939
func T106(appID, appClientVersion, uin int, guid string, passwordMd5, tgtgtKey, ip []byte, savePassword bool) []byte {
4040
// password_md5 + bytes(4) + write_u32(uin).pack()
41-
key := crypto.MD5Digest(binary.NewBuilder(nil).
41+
key := crypto.MD5Digest(binary.NewBuilder().
4242
WriteBytes(passwordMd5).
4343
WriteU32(0).
4444
WriteU32(uint32(uin)).
45-
ToBytes(),
46-
)
45+
ToBytes())
4746

48-
body := binary.NewBuilder(nil).
47+
body := binary.NewBuilder().
4948
WriteStruct(uint16(4), // tgtgt version
5049
crypto.RandU32(),
5150
uint32(0), // sso_version, depreciated
@@ -65,14 +64,14 @@ func T106(appID, appClientVersion, uin int, guid string, passwordMd5, tgtgtKey,
6564
WritePacketString(strconv.Itoa(uin), "u16", false).
6665
ToBytes()
6766

68-
return binary.NewBuilder(nil).
67+
return binary.NewBuilder().
6968
WritePacketBytes(ftea.NewTeaCipher(key).Encrypt(body), "u32", true).
7069
Pack(0x106)
7170
}
7271

7372
// T107 默认参数为 1, 0x0d, 0, 1
7473
func T107(picType, capType, picSize, retType int) []byte {
75-
return binary.NewBuilder(nil).
74+
return binary.NewBuilder().
7675
WriteU16(uint16(picType)).
7776
WriteU8(uint8(capType)).
7877
WriteU16(uint16(picSize)).
@@ -81,7 +80,7 @@ func T107(picType, capType, picSize, retType int) []byte {
8180
}
8281

8382
func T116(subSigmap int) []byte {
84-
return binary.NewBuilder(nil).
83+
return binary.NewBuilder().
8584
WriteU8(0).
8685
WriteU32(12058620). // unknown?
8786
WriteU32(uint32(subSigmap)).
@@ -90,13 +89,13 @@ func T116(subSigmap int) []byte {
9089
}
9190

9291
func T124() []byte {
93-
return binary.NewBuilder(nil).
92+
return binary.NewBuilder().
9493
WriteBytes(make([]byte, 12)).
9594
Pack(0x124)
9695
}
9796

9897
func T128(appInfoOS string, deviceGUID []byte) []byte {
99-
return binary.NewBuilder(nil).
98+
return binary.NewBuilder().
10099
WriteU16(0).
101100
WriteU8(0).
102101
WriteU8(1).
@@ -110,15 +109,15 @@ func T128(appInfoOS string, deviceGUID []byte) []byte {
110109

111110
// T141 默认参数 apn = []byte{0}
112111
func T141(simInfo, apn []byte) []byte {
113-
return binary.NewBuilder(nil).
112+
return binary.NewBuilder().
114113
WritePacketBytes(simInfo, "u32", false).
115114
WritePacketBytes(apn, "u32", false).
116115
Pack(0x141)
117116
}
118117

119118
// T142 默认参数 version = 0 注意apkID长度要过32
120119
func T142(apkID string, version int) []byte {
121-
return binary.NewBuilder(nil).
120+
return binary.NewBuilder().
122121
WriteU16(uint16(version)).
123122
// WritePacketString(apkID[:32], "u16", false).
124123
// apkID长度没有32,不动了
@@ -127,7 +126,7 @@ func T142(apkID string, version int) []byte {
127126
}
128127

129128
func T144(tgtgtKey []byte, appInfo *auth.AppInfo, device *auth.DeviceInfo) []byte {
130-
return binary.NewBuilder(tgtgtKey).
129+
return binary.NewBuilder(tgtgtKey...).
131130
WriteTLV(
132131
T16e(device.DeviceName),
133132
T147(appInfo.AppID, appInfo.PTVersion, appInfo.PackageName),
@@ -137,62 +136,62 @@ func T144(tgtgtKey []byte, appInfo *auth.AppInfo, device *auth.DeviceInfo) []byt
137136
}
138137

139138
func T145(guid []byte) []byte {
140-
return binary.NewBuilder(nil).
139+
return binary.NewBuilder().
141140
WriteBytes(guid).
142141
Pack(0x145)
143142
}
144143

145144
func T147(appID int, ptVersion string, packageName string) []byte {
146-
return binary.NewBuilder(nil).
145+
return binary.NewBuilder().
147146
WriteU32(uint32(appID)).
148147
WritePacketString(ptVersion, "u16", false).
149148
WritePacketString(packageName, "u16", false).
150149
Pack(0x147)
151150
}
152151

153152
func T166(imageType int) []byte {
154-
return binary.NewBuilder(nil).
153+
return binary.NewBuilder().
155154
WriteI8(int8(imageType)).
156155
Pack(0x166)
157156
}
158157

159158
func T16a(noPicSig []byte) []byte {
160-
return binary.NewBuilder(nil).
159+
return binary.NewBuilder().
161160
WriteBytes(noPicSig).
162161
Pack(0x16a)
163162
}
164163

165164
func T16e(deviceName string) []byte {
166-
return binary.NewBuilder(nil).
165+
return binary.NewBuilder().
167166
WriteBytes(utils.S2B(deviceName)).
168167
Pack(0x16e)
169168
}
170169

171170
// T177 默认参数 buildTime=0
172171
func T177(sdkVersion string, buildTime int) []byte {
173-
return binary.NewBuilder(nil).
172+
return binary.NewBuilder().
174173
WriteStruct(uint8(1), uint32(buildTime)).
175174
WritePacketString(sdkVersion, "u16", false).
176175
Pack(0x177)
177176
}
178177

179178
// T191 默认参数 canWebVerify=0
180179
func T191(canWebVerify int) []byte {
181-
return binary.NewBuilder(nil).
180+
return binary.NewBuilder().
182181
WriteU8(uint8(canWebVerify)).
183182
Pack(0x191)
184183
}
185184

186185
// T318 默认参数 tgtQr = []byte{0}
187186
func T318(tgtQr []byte) []byte {
188-
return binary.NewBuilder(nil).
187+
return binary.NewBuilder().
189188
WriteBytes(tgtQr).
190189
Pack(0x318)
191190
}
192191

193192
// T521 默认参数 0x13, "basicim"
194193
func T521(productType int, productDesc string) []byte {
195-
return binary.NewBuilder(nil).
194+
return binary.NewBuilder().
196195
WriteU32(uint32(productType)).
197196
WritePacketString(productDesc, "u16", false).
198197
Pack(0x521)

0 commit comments

Comments
 (0)