diff --git a/functions.go b/functions.go index 91a50cd20..48b37b522 100644 --- a/functions.go +++ b/functions.go @@ -4,6 +4,7 @@ import ( "context" "v2ray.com/core/common" + "v2ray.com/core/common/buf" ) // CreateObject creates a new object based on the given V2Ray instance and config. The V2Ray instance may be nil. @@ -15,6 +16,24 @@ func CreateObject(v *Instance, config interface{}) (interface{}, error) { return common.CreateObject(ctx, config) } +// StartInstance starts a new V2Ray instance with given serialized config, and return a handle for shutting down the instance. +func StartInstance(configFormat string, configBytes []byte) (common.Closable, error) { + var mb buf.MultiBuffer + common.Must2(mb.Write(configBytes)) + config, err := LoadConfig(configFormat, "", &mb) + if err != nil { + return nil, err + } + instance, err := New(config) + if err != nil { + return nil, err + } + if err := instance.Start(); err != nil { + return nil, err + } + return instance, nil +} + func PrintDeprecatedFeatureWarning(feature string) { newError("You are using a deprecated feature: " + feature + ". Please update your config file with latest configuration format, or update your client software.").WriteToLog() } diff --git a/proxy/freedom/freedom.go b/proxy/freedom/freedom.go index 06c672ce8..557260ee5 100644 --- a/proxy/freedom/freedom.go +++ b/proxy/freedom/freedom.go @@ -6,7 +6,6 @@ import ( "context" "time" - "github.com/miekg/dns" "v2ray.com/core" "v2ray.com/core/common" "v2ray.com/core/common/buf" @@ -17,6 +16,7 @@ import ( "v2ray.com/core/common/signal" "v2ray.com/core/common/task" "v2ray.com/core/common/vio" + "v2ray.com/core/features/dns" "v2ray.com/core/features/policy" "v2ray.com/core/proxy" "v2ray.com/core/transport/internet" diff --git a/v2ray_test.go b/v2ray_test.go index 7f287a50a..934491afe 100644 --- a/v2ray_test.go +++ b/v2ray_test.go @@ -3,8 +3,11 @@ package core_test import ( "testing" + proto "github.com/golang/protobuf/proto" . "v2ray.com/core" + "v2ray.com/core/app/dispatcher" "v2ray.com/core/app/proxyman" + "v2ray.com/core/common" "v2ray.com/core/common/dice" "v2ray.com/core/common/net" "v2ray.com/core/common/protocol" @@ -14,16 +17,14 @@ import ( "v2ray.com/core/proxy/dokodemo" "v2ray.com/core/proxy/vmess" "v2ray.com/core/proxy/vmess/outbound" - . "v2ray.com/ext/assert" ) func TestV2RayClose(t *testing.T) { - assert := With(t) - port := net.Port(dice.RollUint16()) userId := uuid.New() config := &Config{ App: []*serial.TypedMessage{ + serial.ToTypedMessage(&dispatcher.Config{}), serial.ToTypedMessage(&proxyman.InboundConfig{}), serial.ToTypedMessage(&proxyman.OutboundConfig{}), }, @@ -63,8 +64,10 @@ func TestV2RayClose(t *testing.T) { }, } - server, err := New(config) - assert(err, IsNil) + cfgBytes, err := proto.Marshal(config) + common.Must(err) + server, err := StartInstance("protobuf", cfgBytes) + common.Must(err) server.Close() }