| 123456789101112131415161718192021222324252627282930313233343536 | package internetimport (	"net"	"v2ray.com/core/common")type ConnectionAuthenticator interface {	Client(net.Conn) net.Conn	Server(net.Conn) net.Conn}type ConnectionAuthenticatorFactory interface {	Create(interface{}) ConnectionAuthenticator}var (	connectionAuthenticatorCache = make(map[string]ConnectionAuthenticatorFactory))func RegisterConnectionAuthenticator(name string, factory ConnectionAuthenticatorFactory) error {	if _, found := connectionAuthenticatorCache[name]; found {		return common.ErrDuplicatedName	}	connectionAuthenticatorCache[name] = factory	return nil}func CreateConnectionAuthenticator(name string, config interface{}) (ConnectionAuthenticator, error) {	factory, found := connectionAuthenticatorCache[name]	if !found {		return nil, common.ErrObjectNotFound	}	return factory.Create(config), nil}
 |