mirror of https://github.com/Dreamacro/clash.git
Fix: connectivity of ssr auth_chain_(ab) protocol (#1180)
This commit is contained in:
parent
e4cdea2111
commit
ff430df845
|
@ -230,7 +230,7 @@ func (a *authChain) initUserKeyAndID() {
|
|||
if len(params) >= 2 {
|
||||
if userID, err := strconv.ParseUint(params[0], 10, 32); err == nil {
|
||||
binary.LittleEndian.PutUint32(a.uid[:], uint32(userID))
|
||||
a.userKey = []byte(params[1])[:len(a.userKey)]
|
||||
a.userKey = []byte(params[1])
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -292,6 +292,10 @@ func (a *authChain) packAuthData(data []byte) (outData []byte) {
|
|||
defer a.mutex.Unlock()
|
||||
a.connectionID++
|
||||
if a.connectionID > 0xFF000000 {
|
||||
a.clientID = nil
|
||||
}
|
||||
if len(a.clientID) == 0 {
|
||||
a.clientID = make([]byte, 4)
|
||||
rand.Read(a.clientID)
|
||||
b := make([]byte, 4)
|
||||
rand.Read(b)
|
||||
|
@ -351,7 +355,7 @@ func (a *authChain) packAuthData(data []byte) (outData []byte) {
|
|||
|
||||
// data
|
||||
chunkLength, randLength := a.packedDataLen(data)
|
||||
if chunkLength <= 1500 {
|
||||
if chunkLength+authHeadLength <= cap(outData) {
|
||||
outData = outData[:authHeadLength+chunkLength]
|
||||
} else {
|
||||
newOutData := make([]byte, authHeadLength+chunkLength)
|
||||
|
|
Loading…
Reference in New Issue