mirror of https://github.com/v2ray/v2ray-core
commit
9e0859ee49
|
@ -12,7 +12,6 @@ import (
|
|||
"golang.org/x/net/dns/dnsmessage"
|
||||
"v2ray.com/core/common"
|
||||
"v2ray.com/core/common/net"
|
||||
v2net "v2ray.com/core/common/net"
|
||||
)
|
||||
|
||||
func Test_parseResponse(t *testing.T) {
|
||||
|
@ -52,7 +51,7 @@ func Test_parseResponse(t *testing.T) {
|
|||
wantErr bool
|
||||
}{
|
||||
{"empty",
|
||||
&IPRecord{0, []v2net.Address(nil), time.Time{}, dnsmessage.RCodeSuccess},
|
||||
&IPRecord{0, []net.Address(nil), time.Time{}, dnsmessage.RCodeSuccess},
|
||||
false,
|
||||
},
|
||||
{"error",
|
||||
|
@ -60,12 +59,12 @@ func Test_parseResponse(t *testing.T) {
|
|||
true,
|
||||
},
|
||||
{"a record",
|
||||
&IPRecord{1, []v2net.Address{v2net.ParseAddress("8.8.8.8"), v2net.ParseAddress("8.8.4.4")},
|
||||
&IPRecord{1, []net.Address{net.ParseAddress("8.8.8.8"), net.ParseAddress("8.8.4.4")},
|
||||
time.Time{}, dnsmessage.RCodeSuccess},
|
||||
false,
|
||||
},
|
||||
{"aaaa record",
|
||||
&IPRecord{2, []v2net.Address{v2net.ParseAddress("2001::123:8888"), v2net.ParseAddress("2001::123:8844")}, time.Time{}, dnsmessage.RCodeSuccess},
|
||||
&IPRecord{2, []net.Address{net.ParseAddress("2001::123:8888"), net.ParseAddress("2001::123:8844")}, time.Time{}, dnsmessage.RCodeSuccess},
|
||||
false,
|
||||
},
|
||||
}
|
||||
|
|
|
@ -200,7 +200,7 @@ func (h *Handler) Dial(ctx context.Context, dest net.Destination) (internet.Conn
|
|||
return h.getStatCouterConnection(conn), err
|
||||
}
|
||||
|
||||
func (h *Handler) getStatCouterConnection(conn internet.Connection) (internet.Connection) {
|
||||
func (h *Handler) getStatCouterConnection(conn internet.Connection) internet.Connection {
|
||||
if h.uplinkCounter != nil || h.downlinkCounter != nil {
|
||||
return &internet.StatCouterConnection{
|
||||
Connection: conn,
|
||||
|
|
|
@ -57,7 +57,7 @@ func TestOutboundWithStatCounter(t *testing.T) {
|
|||
serial.ToTypedMessage(&policy.Config{
|
||||
System: &policy.SystemPolicy{
|
||||
Stats: &policy.SystemPolicy_Stats{
|
||||
OutboundUplink: true,
|
||||
OutboundUplink: true,
|
||||
OutboundDownlink: true,
|
||||
},
|
||||
},
|
||||
|
|
|
@ -83,7 +83,7 @@ func (p *IncrementalWorkerPicker) findAvailable() int {
|
|||
return -1
|
||||
}
|
||||
|
||||
func (p *IncrementalWorkerPicker) pickInternal() (*ClientWorker, error, bool) {
|
||||
func (p *IncrementalWorkerPicker) pickInternal() (*ClientWorker, bool, error) {
|
||||
p.access.Lock()
|
||||
defer p.access.Unlock()
|
||||
|
||||
|
@ -93,14 +93,14 @@ func (p *IncrementalWorkerPicker) pickInternal() (*ClientWorker, error, bool) {
|
|||
if n > 1 && idx != n-1 {
|
||||
p.workers[n-1], p.workers[idx] = p.workers[idx], p.workers[n-1]
|
||||
}
|
||||
return p.workers[idx], nil, false
|
||||
return p.workers[idx], false, nil
|
||||
}
|
||||
|
||||
p.cleanup()
|
||||
|
||||
worker, err := p.Factory.Create()
|
||||
if err != nil {
|
||||
return nil, err, false
|
||||
return nil, false, err
|
||||
}
|
||||
p.workers = append(p.workers, worker)
|
||||
|
||||
|
@ -111,11 +111,11 @@ func (p *IncrementalWorkerPicker) pickInternal() (*ClientWorker, error, bool) {
|
|||
}
|
||||
}
|
||||
|
||||
return worker, nil, true
|
||||
return worker, true, nil
|
||||
}
|
||||
|
||||
func (p *IncrementalWorkerPicker) PickAvailable() (*ClientWorker, error) {
|
||||
worker, err, start := p.pickInternal()
|
||||
worker, start, err := p.pickInternal()
|
||||
if start {
|
||||
common.Must(p.cleanupTask.Start())
|
||||
}
|
||||
|
|
|
@ -2,8 +2,8 @@ package sidh
|
|||
|
||||
import (
|
||||
"errors"
|
||||
. "v2ray.com/core/external/github.com/cloudflare/sidh/internal/isogeny"
|
||||
"io"
|
||||
. "v2ray.com/core/external/github.com/cloudflare/sidh/internal/isogeny"
|
||||
)
|
||||
|
||||
// I keep it bool in order to be able to apply logical NOT
|
||||
|
|
|
@ -3,8 +3,8 @@ package quic
|
|||
import (
|
||||
"sync"
|
||||
|
||||
"v2ray.com/core/external/github.com/lucas-clemente/quic-go/internal/protocol"
|
||||
"v2ray.com/core/common/bytespool"
|
||||
"v2ray.com/core/external/github.com/lucas-clemente/quic-go/internal/protocol"
|
||||
)
|
||||
|
||||
type packetBuffer struct {
|
||||
|
|
|
@ -22,8 +22,8 @@ import (
|
|||
"sync/atomic"
|
||||
"time"
|
||||
|
||||
"v2ray.com/core/external/github.com/cloudflare/sidh/sidh"
|
||||
"golang.org/x/crypto/curve25519"
|
||||
"v2ray.com/core/external/github.com/cloudflare/sidh/sidh"
|
||||
)
|
||||
|
||||
// numSessionTickets is the number of different session tickets the
|
||||
|
|
|
@ -83,7 +83,7 @@ func generateRandomBytes(random []byte, connType [4]byte) {
|
|||
continue
|
||||
}
|
||||
|
||||
if 0x00000000 == (uint32(random[7])<<24)|(uint32(random[6])<<16)|(uint32(random[5])<<8)|uint32(random[4]) {
|
||||
if (uint32(random[7])<<24)|(uint32(random[6])<<16)|(uint32(random[5])<<8)|uint32(random[4]) == 0x00000000 {
|
||||
continue
|
||||
}
|
||||
|
||||
|
|
|
@ -38,7 +38,7 @@ var addrParser = protocol.NewAddressParser(
|
|||
func ReadTCPSession(user *protocol.MemoryUser, reader io.Reader) (*protocol.RequestHeader, buf.Reader, error) {
|
||||
account := user.Account.(*MemoryAccount)
|
||||
|
||||
hashkdf := hmac.New(func()hash.Hash{return sha256.New()}, []byte("SSBSKDF"))
|
||||
hashkdf := hmac.New(func() hash.Hash { return sha256.New() }, []byte("SSBSKDF"))
|
||||
hashkdf.Write(account.Key)
|
||||
|
||||
behaviorSeed := crc32.ChecksumIEEE(hashkdf.Sum(nil))
|
||||
|
@ -50,7 +50,6 @@ func ReadTCPSession(user *protocol.MemoryUser, reader io.Reader) (*protocol.Requ
|
|||
DrainSize := BaseDrainSize + 16 + 38 + RandDrainRolled
|
||||
readSizeRemain := DrainSize
|
||||
|
||||
|
||||
buffer := buf.New()
|
||||
defer buffer.Release()
|
||||
|
||||
|
@ -59,7 +58,7 @@ func ReadTCPSession(user *protocol.MemoryUser, reader io.Reader) (*protocol.Requ
|
|||
if ivLen > 0 {
|
||||
if _, err := buffer.ReadFullFrom(reader, ivLen); err != nil {
|
||||
readSizeRemain -= int(buffer.Len())
|
||||
DrainConnN(reader,readSizeRemain)
|
||||
DrainConnN(reader, readSizeRemain)
|
||||
return nil, nil, newError("failed to read IV").Base(err)
|
||||
}
|
||||
|
||||
|
@ -69,7 +68,7 @@ func ReadTCPSession(user *protocol.MemoryUser, reader io.Reader) (*protocol.Requ
|
|||
r, err := account.Cipher.NewDecryptionReader(account.Key, iv, reader)
|
||||
if err != nil {
|
||||
readSizeRemain -= int(buffer.Len())
|
||||
DrainConnN(reader,readSizeRemain)
|
||||
DrainConnN(reader, readSizeRemain)
|
||||
return nil, nil, newError("failed to initialize decoding stream").Base(err).AtError()
|
||||
}
|
||||
br := &buf.BufferedReader{Reader: r}
|
||||
|
@ -87,7 +86,7 @@ func ReadTCPSession(user *protocol.MemoryUser, reader io.Reader) (*protocol.Requ
|
|||
addr, port, err := addrParser.ReadAddressPort(buffer, br)
|
||||
if err != nil {
|
||||
readSizeRemain -= int(buffer.Len())
|
||||
DrainConnN(reader,readSizeRemain)
|
||||
DrainConnN(reader, readSizeRemain)
|
||||
return nil, nil, newError("failed to read address").Base(err)
|
||||
}
|
||||
|
||||
|
@ -101,13 +100,13 @@ func ReadTCPSession(user *protocol.MemoryUser, reader io.Reader) (*protocol.Requ
|
|||
|
||||
if request.Option.Has(RequestOptionOneTimeAuth) && account.OneTimeAuth == Account_Disabled {
|
||||
readSizeRemain -= int(buffer.Len())
|
||||
DrainConnN(reader,readSizeRemain)
|
||||
DrainConnN(reader, readSizeRemain)
|
||||
return nil, nil, newError("rejecting connection with OTA enabled, while server disables OTA")
|
||||
}
|
||||
|
||||
if !request.Option.Has(RequestOptionOneTimeAuth) && account.OneTimeAuth == Account_Enabled {
|
||||
readSizeRemain -= int(buffer.Len())
|
||||
DrainConnN(reader,readSizeRemain)
|
||||
DrainConnN(reader, readSizeRemain)
|
||||
return nil, nil, newError("rejecting connection with OTA disabled, while server enables OTA")
|
||||
}
|
||||
}
|
||||
|
@ -119,20 +118,20 @@ func ReadTCPSession(user *protocol.MemoryUser, reader io.Reader) (*protocol.Requ
|
|||
_, err := buffer.ReadFullFrom(br, AuthSize)
|
||||
if err != nil {
|
||||
readSizeRemain -= int(buffer.Len())
|
||||
DrainConnN(reader,readSizeRemain)
|
||||
DrainConnN(reader, readSizeRemain)
|
||||
return nil, nil, newError("Failed to read OTA").Base(err)
|
||||
}
|
||||
|
||||
if !bytes.Equal(actualAuth, buffer.BytesFrom(-AuthSize)) {
|
||||
readSizeRemain -= int(buffer.Len())
|
||||
DrainConnN(reader,readSizeRemain)
|
||||
DrainConnN(reader, readSizeRemain)
|
||||
return nil, nil, newError("invalid OTA")
|
||||
}
|
||||
}
|
||||
|
||||
if request.Address == nil {
|
||||
readSizeRemain -= int(buffer.Len())
|
||||
DrainConnN(reader,readSizeRemain)
|
||||
DrainConnN(reader, readSizeRemain)
|
||||
return nil, nil, newError("invalid remote address.")
|
||||
}
|
||||
|
||||
|
|
|
@ -8,6 +8,7 @@ import (
|
|||
"encoding/binary"
|
||||
"io"
|
||||
"time"
|
||||
|
||||
"v2ray.com/core/common"
|
||||
)
|
||||
|
||||
|
@ -21,8 +22,7 @@ func SealVMessAEADHeader(key [16]byte, data []byte) []byte {
|
|||
|
||||
aeadPayloadLengthSerializeBuffer := bytes.NewBuffer(nil)
|
||||
|
||||
var headerPayloadDataLen uint16
|
||||
headerPayloadDataLen = uint16(len(data))
|
||||
headerPayloadDataLen := uint16(len(data))
|
||||
|
||||
common.Must(binary.Write(aeadPayloadLengthSerializeBuffer, binary.BigEndian, headerPayloadDataLen))
|
||||
|
||||
|
|
|
@ -3,9 +3,10 @@ package aead
|
|||
import (
|
||||
"bytes"
|
||||
"fmt"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"io"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
func TestOpenVMessAEADHeader(t *testing.T) {
|
||||
|
|
|
@ -12,19 +12,18 @@ import (
|
|||
"io/ioutil"
|
||||
"sync"
|
||||
"time"
|
||||
"v2ray.com/core/common/dice"
|
||||
vmessaead "v2ray.com/core/proxy/vmess/aead"
|
||||
|
||||
"golang.org/x/crypto/chacha20poly1305"
|
||||
|
||||
"v2ray.com/core/common"
|
||||
"v2ray.com/core/common/bitmask"
|
||||
"v2ray.com/core/common/buf"
|
||||
"v2ray.com/core/common/crypto"
|
||||
"v2ray.com/core/common/dice"
|
||||
"v2ray.com/core/common/net"
|
||||
"v2ray.com/core/common/protocol"
|
||||
"v2ray.com/core/common/task"
|
||||
"v2ray.com/core/proxy/vmess"
|
||||
vmessaead "v2ray.com/core/proxy/vmess/aead"
|
||||
)
|
||||
|
||||
type sessionId struct {
|
||||
|
@ -170,7 +169,7 @@ func (s *ServerSession) DecodeRequestHeader(reader io.Reader) (*protocol.Request
|
|||
var fixedSizeAuthID [16]byte
|
||||
copy(fixedSizeAuthID[:], buffer.Bytes())
|
||||
|
||||
if foundAEAD == true {
|
||||
if foundAEAD {
|
||||
vmessAccount = user.Account.(*vmess.MemoryAccount)
|
||||
var fixedSizeCmdKey [16]byte
|
||||
copy(fixedSizeCmdKey[:], vmessAccount.ID.CmdKey())
|
||||
|
@ -405,8 +404,7 @@ func (s *ServerSession) EncodeResponseHeader(header *protocol.ResponseHeader, wr
|
|||
|
||||
aeadResponseHeaderLengthEncryptionBuffer := bytes.NewBuffer(nil)
|
||||
|
||||
var decryptedResponseHeaderLengthBinaryDeserializeBuffer uint16
|
||||
decryptedResponseHeaderLengthBinaryDeserializeBuffer = uint16(aeadEncryptedHeaderBuffer.Len())
|
||||
decryptedResponseHeaderLengthBinaryDeserializeBuffer := uint16(aeadEncryptedHeaderBuffer.Len())
|
||||
|
||||
common.Must(binary.Write(aeadResponseHeaderLengthEncryptionBuffer, binary.BigEndian, decryptedResponseHeaderLengthBinaryDeserializeBuffer))
|
||||
|
||||
|
|
|
@ -11,13 +11,13 @@ import (
|
|||
"sync"
|
||||
"sync/atomic"
|
||||
"time"
|
||||
"v2ray.com/core/common/dice"
|
||||
"v2ray.com/core/proxy/vmess/aead"
|
||||
|
||||
"v2ray.com/core/common"
|
||||
"v2ray.com/core/common/dice"
|
||||
"v2ray.com/core/common/protocol"
|
||||
"v2ray.com/core/common/serial"
|
||||
"v2ray.com/core/common/task"
|
||||
"v2ray.com/core/proxy/vmess/aead"
|
||||
)
|
||||
|
||||
const (
|
||||
|
@ -141,8 +141,8 @@ func (v *TimedUserValidator) Add(u *protocol.MemoryUser) error {
|
|||
v.generateNewHashes(protocol.Timestamp(nowSec), uu)
|
||||
|
||||
account := uu.user.Account.(*MemoryAccount)
|
||||
if v.behaviorFused == false {
|
||||
hashkdf := hmac.New(func()hash.Hash{return sha256.New()}, []byte("VMESSBSKDF"))
|
||||
if !v.behaviorFused {
|
||||
hashkdf := hmac.New(func() hash.Hash { return sha256.New() }, []byte("VMESSBSKDF"))
|
||||
hashkdf.Write(account.ID.Bytes())
|
||||
v.behaviorSeed = crc64.Update(v.behaviorSeed, crc64.MakeTable(crc64.ECMA), hashkdf.Sum(nil))
|
||||
}
|
||||
|
|
|
@ -928,8 +928,8 @@ func TestVMessKCPLarge(t *testing.T) {
|
|||
t.Error(err)
|
||||
}
|
||||
|
||||
defer func(){
|
||||
<-time.After(5*time.Second)
|
||||
defer func() {
|
||||
<-time.After(5 * time.Second)
|
||||
CloseAllServers(servers)
|
||||
}()
|
||||
}
|
||||
|
@ -1178,8 +1178,8 @@ func TestVMessGCMMuxUDP(t *testing.T) {
|
|||
time.Sleep(time.Second)
|
||||
}
|
||||
|
||||
defer func(){
|
||||
<-time.After(5*time.Second)
|
||||
defer func() {
|
||||
<-time.After(5 * time.Second)
|
||||
CloseAllServers(servers)
|
||||
}()
|
||||
}
|
||||
|
|
|
@ -11,7 +11,7 @@ import (
|
|||
"strings"
|
||||
|
||||
"golang.org/x/sys/unix"
|
||||
|
||||
|
||||
"v2ray.com/core/common"
|
||||
"v2ray.com/core/common/net"
|
||||
"v2ray.com/core/transport/internet"
|
||||
|
|
|
@ -126,7 +126,7 @@ func (h *HeaderReader) Read(reader io.Reader) (*buf.Buffer, error) {
|
|||
}
|
||||
}
|
||||
|
||||
if hasThisUri == false {
|
||||
if !hasThisUri {
|
||||
return nil, ErrHeaderMisMatch
|
||||
}
|
||||
|
||||
|
|
|
@ -34,7 +34,6 @@ func TestReaderWriter(t *testing.T) {
|
|||
t.Error("unknown error ", err)
|
||||
}
|
||||
_ = buffer
|
||||
return
|
||||
/*
|
||||
if buffer.String() != "efg" {
|
||||
t.Error("buffer: ", buffer.String())
|
||||
|
@ -256,7 +255,6 @@ func TestConnectionInvPath(t *testing.T) {
|
|||
break
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func TestConnectionInvReq(t *testing.T) {
|
||||
|
@ -315,5 +313,4 @@ func TestConnectionInvReq(t *testing.T) {
|
|||
if !strings.HasPrefix(string(l), "HTTP/1.1 400 Bad Request") {
|
||||
t.Error("Resp to non http conn", string(l))
|
||||
}
|
||||
return
|
||||
}
|
||||
|
|
|
@ -121,10 +121,7 @@ func (sw *SendingWindow) Flush(current uint32, rto uint32, maxInFlightSize uint3
|
|||
segment.transmit++
|
||||
sw.writer.Write(segment)
|
||||
inFlightSize++
|
||||
if inFlightSize >= maxInFlightSize {
|
||||
return false
|
||||
}
|
||||
return true
|
||||
return inFlightSize < maxInFlightSize
|
||||
})
|
||||
|
||||
if sw.onPacketLoss != nil && inFlightSize > 0 && sw.totalInFlightSize != 0 {
|
||||
|
|
Loading…
Reference in New Issue