mirror of
https://github.com/v2fly/v2ray-core.git
synced 2025-01-02 15:36:41 -05:00
remove old commands
This commit is contained in:
parent
3ec40eedc1
commit
c1c22a50d5
@ -1,93 +0,0 @@
|
||||
package command
|
||||
|
||||
import (
|
||||
"io"
|
||||
|
||||
v2net "github.com/v2ray/v2ray-core/common/net"
|
||||
proto "github.com/v2ray/v2ray-core/common/protocol"
|
||||
"github.com/v2ray/v2ray-core/common/serial"
|
||||
"github.com/v2ray/v2ray-core/common/uuid"
|
||||
"github.com/v2ray/v2ray-core/transport"
|
||||
)
|
||||
|
||||
func init() {
|
||||
RegisterResponseCommand(1, func() Command { return new(SwitchAccount) })
|
||||
}
|
||||
|
||||
// Structure
|
||||
// 1 byte: host len N
|
||||
// N bytes: host
|
||||
// 2 bytes: port
|
||||
// 16 bytes: uuid
|
||||
// 2 bytes: alterid
|
||||
// 1 byte: level
|
||||
// 1 bytes: time
|
||||
type SwitchAccount struct {
|
||||
Host v2net.Address
|
||||
Port v2net.Port
|
||||
ID *uuid.UUID
|
||||
AlterIds serial.Uint16Literal
|
||||
Level proto.UserLevel
|
||||
ValidMin byte
|
||||
}
|
||||
|
||||
func (this *SwitchAccount) Marshal(writer io.Writer) {
|
||||
hostStr := ""
|
||||
if this.Host != nil {
|
||||
hostStr = this.Host.String()
|
||||
}
|
||||
writer.Write([]byte{byte(len(hostStr))})
|
||||
|
||||
if len(hostStr) > 0 {
|
||||
writer.Write([]byte(hostStr))
|
||||
}
|
||||
|
||||
writer.Write(this.Port.Bytes())
|
||||
|
||||
idBytes := this.ID.Bytes()
|
||||
writer.Write(idBytes)
|
||||
|
||||
writer.Write(this.AlterIds.Bytes())
|
||||
writer.Write([]byte{byte(this.Level)})
|
||||
|
||||
writer.Write([]byte{this.ValidMin})
|
||||
}
|
||||
|
||||
func (this *SwitchAccount) Unmarshal(data []byte) error {
|
||||
if len(data) == 0 {
|
||||
return transport.ErrorCorruptedPacket
|
||||
}
|
||||
lenHost := int(data[0])
|
||||
if len(data) < lenHost+1 {
|
||||
return transport.ErrorCorruptedPacket
|
||||
}
|
||||
if lenHost > 0 {
|
||||
this.Host = v2net.ParseAddress(string(data[1 : 1+lenHost]))
|
||||
}
|
||||
portStart := 1 + lenHost
|
||||
if len(data) < portStart+2 {
|
||||
return transport.ErrorCorruptedPacket
|
||||
}
|
||||
this.Port = v2net.PortFromBytes(data[portStart : portStart+2])
|
||||
idStart := portStart + 2
|
||||
if len(data) < idStart+16 {
|
||||
return transport.ErrorCorruptedPacket
|
||||
}
|
||||
this.ID, _ = uuid.ParseBytes(data[idStart : idStart+16])
|
||||
alterIdStart := idStart + 16
|
||||
if len(data) < alterIdStart+2 {
|
||||
return transport.ErrorCorruptedPacket
|
||||
}
|
||||
this.AlterIds = serial.BytesLiteral(data[alterIdStart : alterIdStart+2]).Uint16()
|
||||
levelStart := alterIdStart + 2
|
||||
if len(data) < levelStart+1 {
|
||||
return transport.ErrorCorruptedPacket
|
||||
}
|
||||
this.Level = proto.UserLevel(data[levelStart])
|
||||
timeStart := levelStart + 1
|
||||
if len(data) < timeStart {
|
||||
return transport.ErrorCorruptedPacket
|
||||
}
|
||||
this.ValidMin = data[timeStart]
|
||||
return nil
|
||||
}
|
@ -1,41 +0,0 @@
|
||||
package command_test
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"testing"
|
||||
|
||||
netassert "github.com/v2ray/v2ray-core/common/net/testing/assert"
|
||||
"github.com/v2ray/v2ray-core/common/uuid"
|
||||
. "github.com/v2ray/v2ray-core/proxy/vmess/command"
|
||||
v2testing "github.com/v2ray/v2ray-core/testing"
|
||||
"github.com/v2ray/v2ray-core/testing/assert"
|
||||
)
|
||||
|
||||
func TestSwitchAccount(t *testing.T) {
|
||||
v2testing.Current(t)
|
||||
|
||||
sa := &SwitchAccount{
|
||||
Port: 1234,
|
||||
ID: uuid.New(),
|
||||
AlterIds: 1024,
|
||||
Level: 128,
|
||||
ValidMin: 16,
|
||||
}
|
||||
|
||||
cmd, err := CreateResponseCommand(1)
|
||||
assert.Error(err).IsNil()
|
||||
|
||||
buffer := bytes.NewBuffer(make([]byte, 0, 1024))
|
||||
sa.Marshal(buffer)
|
||||
|
||||
cmd.Unmarshal(buffer.Bytes())
|
||||
sa2, ok := cmd.(*SwitchAccount)
|
||||
assert.Bool(ok).IsTrue()
|
||||
assert.Pointer(sa.Host).IsNil()
|
||||
assert.Pointer(sa2.Host).IsNil()
|
||||
netassert.Port(sa.Port).Equals(sa2.Port)
|
||||
assert.String(sa.ID).Equals(sa2.ID.String())
|
||||
assert.Uint16(sa.AlterIds.Value()).Equals(sa2.AlterIds.Value())
|
||||
assert.Byte(byte(sa.Level)).Equals(byte(sa2.Level))
|
||||
assert.Byte(sa.ValidMin).Equals(sa2.ValidMin)
|
||||
}
|
@ -1,17 +0,0 @@
|
||||
package command
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"io"
|
||||
)
|
||||
|
||||
var (
|
||||
ErrorNoSuchCommand = errors.New("No such command.")
|
||||
)
|
||||
|
||||
type Command interface {
|
||||
Marshal(io.Writer)
|
||||
Unmarshal([]byte) error
|
||||
}
|
||||
|
||||
type CommandCreator func() Command
|
@ -1,65 +0,0 @@
|
||||
package command
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"io"
|
||||
|
||||
v2net "github.com/v2ray/v2ray-core/common/net"
|
||||
"github.com/v2ray/v2ray-core/transport"
|
||||
)
|
||||
|
||||
func init() {
|
||||
RegisterResponseCommand(2, func() Command { return new(CacheDns) })
|
||||
}
|
||||
|
||||
const (
|
||||
typeIPv4 byte = 1
|
||||
typeIPv6 byte = 2
|
||||
)
|
||||
|
||||
var (
|
||||
ErrDomainAddress = errors.New("Unexpected domain address")
|
||||
)
|
||||
|
||||
// Size: 1 byte type + 4 or 16 byte IP addr
|
||||
type CacheDns struct {
|
||||
Address v2net.Address
|
||||
}
|
||||
|
||||
func (this *CacheDns) Marshal(writer io.Writer) {
|
||||
if this.Address.IsIPv4() {
|
||||
writer.Write([]byte{typeIPv4})
|
||||
writer.Write(this.Address.IP())
|
||||
}
|
||||
|
||||
if this.Address.IsIPv6() {
|
||||
writer.Write([]byte{typeIPv6})
|
||||
writer.Write(this.Address.IP())
|
||||
}
|
||||
}
|
||||
|
||||
func (this *CacheDns) Unmarshal(data []byte) error {
|
||||
if len(data) == 0 {
|
||||
return transport.ErrorCorruptedPacket
|
||||
}
|
||||
typeIP := data[0]
|
||||
data = data[1:]
|
||||
|
||||
if typeIP == typeIPv4 {
|
||||
if len(data) < 4 {
|
||||
return transport.ErrorCorruptedPacket
|
||||
}
|
||||
this.Address = v2net.IPAddress(data[0:4])
|
||||
return nil
|
||||
}
|
||||
|
||||
if typeIP == typeIPv6 {
|
||||
if len(data) < 16 {
|
||||
return transport.ErrorCorruptedPacket
|
||||
}
|
||||
this.Address = v2net.IPAddress(data[0:16])
|
||||
return nil
|
||||
}
|
||||
|
||||
return transport.ErrorCorruptedPacket
|
||||
}
|
@ -1,30 +0,0 @@
|
||||
package command_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/v2ray/v2ray-core/common/alloc"
|
||||
v2net "github.com/v2ray/v2ray-core/common/net"
|
||||
netassert "github.com/v2ray/v2ray-core/common/net/testing/assert"
|
||||
. "github.com/v2ray/v2ray-core/proxy/vmess/command"
|
||||
v2testing "github.com/v2ray/v2ray-core/testing"
|
||||
"github.com/v2ray/v2ray-core/testing/assert"
|
||||
)
|
||||
|
||||
func TestCacheDnsIPv4(t *testing.T) {
|
||||
v2testing.Current(t)
|
||||
|
||||
cd := &CacheDns{
|
||||
Address: v2net.IPAddress([]byte{1, 2, 3, 4}),
|
||||
}
|
||||
|
||||
buffer := alloc.NewBuffer().Clear()
|
||||
defer buffer.Release()
|
||||
|
||||
cd.Marshal(buffer)
|
||||
|
||||
cd2 := &CacheDns{}
|
||||
err := cd2.Unmarshal(buffer.Value)
|
||||
assert.Error(err).IsNil()
|
||||
netassert.Address(cd.Address).Equals(cd2.Address)
|
||||
}
|
@ -1,18 +0,0 @@
|
||||
package command
|
||||
|
||||
var (
|
||||
cmdCache = make(map[byte]CommandCreator)
|
||||
)
|
||||
|
||||
func RegisterResponseCommand(id byte, cmdFactory CommandCreator) error {
|
||||
cmdCache[id] = cmdFactory
|
||||
return nil
|
||||
}
|
||||
|
||||
func CreateResponseCommand(id byte) (Command, error) {
|
||||
creator, found := cmdCache[id]
|
||||
if !found {
|
||||
return nil, ErrorNoSuchCommand
|
||||
}
|
||||
return creator(), nil
|
||||
}
|
@ -1,15 +0,0 @@
|
||||
// +build gofuzz
|
||||
|
||||
package fuzzing
|
||||
|
||||
import (
|
||||
. "github.com/v2ray/v2ray-core/proxy/vmess/command"
|
||||
)
|
||||
|
||||
func Fuzz(data []byte) int {
|
||||
cmd := new(SwitchAccount)
|
||||
if err := cmd.Unmarshal(data); err != nil {
|
||||
return 0
|
||||
}
|
||||
return 1
|
||||
}
|
Binary file not shown.
Loading…
Reference in New Issue
Block a user