github.com/xmplusdev/xmcore@v1.8.11-0.20240412132628-5518b55526af/proxy/vmess/outbound/command.go (about)

     1  package outbound
     2  
     3  import (
     4  	"time"
     5  
     6  	"github.com/xmplusdev/xmcore/common"
     7  	"github.com/xmplusdev/xmcore/common/net"
     8  	"github.com/xmplusdev/xmcore/common/protocol"
     9  	"github.com/xmplusdev/xmcore/proxy/vmess"
    10  )
    11  
    12  func (h *Handler) handleSwitchAccount(cmd *protocol.CommandSwitchAccount) {
    13  	rawAccount := &vmess.Account{
    14  		Id: cmd.ID.String(),
    15  		SecuritySettings: &protocol.SecurityConfig{
    16  			Type: protocol.SecurityType_AUTO,
    17  		},
    18  	}
    19  
    20  	account, err := rawAccount.AsAccount()
    21  	common.Must(err)
    22  	user := &protocol.MemoryUser{
    23  		Email:   "",
    24  		Level:   cmd.Level,
    25  		Account: account,
    26  	}
    27  	dest := net.TCPDestination(cmd.Host, cmd.Port)
    28  	until := time.Now().Add(time.Duration(cmd.ValidMin) * time.Minute)
    29  	h.serverList.AddServer(protocol.NewServerSpec(dest, protocol.BeforeTime(until), user))
    30  }
    31  
    32  func (h *Handler) handleCommand(dest net.Destination, cmd protocol.ResponseCommand) {
    33  	switch typedCommand := cmd.(type) {
    34  	case *protocol.CommandSwitchAccount:
    35  		if typedCommand.Host == nil {
    36  			typedCommand.Host = dest.Address
    37  		}
    38  		h.handleSwitchAccount(typedCommand)
    39  	default:
    40  	}
    41  }