mirror of https://github.com/XTLS/Xray-core
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
67 lines
1.8 KiB
67 lines
1.8 KiB
package vmess |
|
|
|
import ( |
|
"google.golang.org/protobuf/proto" |
|
"strings" |
|
|
|
"github.com/xtls/xray-core/common/errors" |
|
"github.com/xtls/xray-core/common/protocol" |
|
"github.com/xtls/xray-core/common/uuid" |
|
) |
|
|
|
// MemoryAccount is an in-memory form of VMess account. |
|
type MemoryAccount struct { |
|
// ID is the main ID of the account. |
|
ID *protocol.ID |
|
// Security type of the account. Used for client connections. |
|
Security protocol.SecurityType |
|
|
|
AuthenticatedLengthExperiment bool |
|
NoTerminationSignal bool |
|
} |
|
|
|
// Equals implements protocol.Account. |
|
func (a *MemoryAccount) Equals(account protocol.Account) bool { |
|
vmessAccount, ok := account.(*MemoryAccount) |
|
if !ok { |
|
return false |
|
} |
|
return a.ID.Equals(vmessAccount.ID) |
|
} |
|
|
|
func (a *MemoryAccount) ToProto() proto.Message { |
|
var test = "" |
|
if a.AuthenticatedLengthExperiment { |
|
test = "AuthenticatedLength|" |
|
} |
|
if a.NoTerminationSignal { |
|
test = test + "NoTerminationSignal" |
|
} |
|
return &Account{ |
|
Id: a.ID.String(), |
|
TestsEnabled: test, |
|
SecuritySettings: &protocol.SecurityConfig{Type: a.Security}, |
|
} |
|
} |
|
|
|
// AsAccount implements protocol.Account. |
|
func (a *Account) AsAccount() (protocol.Account, error) { |
|
id, err := uuid.ParseString(a.Id) |
|
if err != nil { |
|
return nil, errors.New("failed to parse ID").Base(err).AtError() |
|
} |
|
protoID := protocol.NewID(id) |
|
var AuthenticatedLength, NoTerminationSignal bool |
|
if strings.Contains(a.TestsEnabled, "AuthenticatedLength") { |
|
AuthenticatedLength = true |
|
} |
|
if strings.Contains(a.TestsEnabled, "NoTerminationSignal") { |
|
NoTerminationSignal = true |
|
} |
|
return &MemoryAccount{ |
|
ID: protoID, |
|
Security: a.SecuritySettings.GetSecurityType(), |
|
AuthenticatedLengthExperiment: AuthenticatedLength, |
|
NoTerminationSignal: NoTerminationSignal, |
|
}, nil |
|
}
|
|
|