mirror of
https://github.com/v2ray/v2ray-core.git
synced 2026-11-11 05:20:02 +00:00
support using specific address
This commit is contained in:
1 parent
6c31ff91e6
commit
a4d76dc394
48 files changed
+412
-301
No files matched your search
+12
-16
@@ -29,11 +29,13 @@ type DokodemoDoor struct {
|
||||
listeningAddress v2net.Address
|
||||
}
|
||||
|
||||
func NewDokodemoDoor(config *Config, space app.Space) *DokodemoDoor {
|
||||
func NewDokodemoDoor(config *Config, space app.Space, listen v2net.Address, port v2net.Port) *DokodemoDoor {
|
||||
d := &DokodemoDoor{
|
||||
config: config,
|
||||
address: config.Address,
|
||||
port: config.Port,
|
||||
config: config,
|
||||
address: config.Address,
|
||||
port: config.Port,
|
||||
listeningAddress: listen,
|
||||
listeningPort: port,
|
||||
}
|
||||
space.InitializeApplication(func() error {
|
||||
if !space.HasApp(dispatcher.APP_ID) {
|
||||
@@ -66,26 +68,20 @@ func (this *DokodemoDoor) Close() {
|
||||
}
|
||||
}
|
||||
|
||||
func (this *DokodemoDoor) Listen(address v2net.Address, port v2net.Port) error {
|
||||
func (this *DokodemoDoor) Start() error {
|
||||
if this.accepting {
|
||||
if this.listeningPort == port && this.listeningAddress.Equals(address) {
|
||||
return nil
|
||||
} else {
|
||||
return proxy.ErrorAlreadyListening
|
||||
}
|
||||
return nil
|
||||
}
|
||||
this.listeningPort = port
|
||||
this.listeningAddress = address
|
||||
this.accepting = true
|
||||
|
||||
if this.config.Network.HasNetwork(v2net.TCPNetwork) {
|
||||
err := this.ListenTCP(address, port)
|
||||
err := this.ListenTCP(this.listeningAddress, this.listeningPort)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
if this.config.Network.HasNetwork(v2net.UDPNetwork) {
|
||||
err := this.ListenUDP(address, port)
|
||||
err := this.ListenUDP(this.listeningAddress, this.listeningPort)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -168,7 +164,7 @@ func (this *DokodemoDoor) HandleTCPConnection(conn *hub.Connection) {
|
||||
|
||||
func init() {
|
||||
internal.MustRegisterInboundHandlerCreator("dokodemo-door",
|
||||
func(space app.Space, rawConfig interface{}) (proxy.InboundHandler, error) {
|
||||
return NewDokodemoDoor(rawConfig.(*Config), space), nil
|
||||
func(space app.Space, rawConfig interface{}, listen v2net.Address, port v2net.Port) (proxy.InboundHandler, error) {
|
||||
return NewDokodemoDoor(rawConfig.(*Config), space, listen, port), nil
|
||||
})
|
||||
}
|
||||
@@ -37,23 +37,23 @@ func TestDokodemoTCP(t *testing.T) {
|
||||
space := app.NewSpace()
|
||||
space.BindApp(dispatcher.APP_ID, dispatchers.NewDefaultDispatcher(space))
|
||||
ohm := proxyman.NewDefaultOutboundHandlerManager()
|
||||
ohm.SetDefaultHandler(freedom.NewFreedomConnection(&freedom.Config{}, space))
|
||||
ohm.SetDefaultHandler(freedom.NewFreedomConnection(&freedom.Config{}, space, v2net.LocalHostIP))
|
||||
space.BindApp(proxyman.APP_ID_OUTBOUND_MANAGER, ohm)
|
||||
|
||||
data2Send := "Data to be sent to remote."
|
||||
|
||||
port := v2nettesting.PickPort()
|
||||
dokodemo := NewDokodemoDoor(&Config{
|
||||
Address: v2net.LocalHostIP,
|
||||
Port: tcpServer.Port,
|
||||
Network: v2net.TCPNetwork.AsList(),
|
||||
Timeout: 600,
|
||||
}, space)
|
||||
}, space, v2net.LocalHostIP, port)
|
||||
defer dokodemo.Close()
|
||||
|
||||
assert.Error(space.Initialize()).IsNil()
|
||||
|
||||
port := v2nettesting.PickPort()
|
||||
err = dokodemo.Listen(v2net.LocalHostIP, port)
|
||||
err = dokodemo.Start()
|
||||
assert.Error(err).IsNil()
|
||||
assert.Port(port).Equals(dokodemo.Port())
|
||||
|
||||
@@ -95,23 +95,23 @@ func TestDokodemoUDP(t *testing.T) {
|
||||
space := app.NewSpace()
|
||||
space.BindApp(dispatcher.APP_ID, dispatchers.NewDefaultDispatcher(space))
|
||||
ohm := proxyman.NewDefaultOutboundHandlerManager()
|
||||
ohm.SetDefaultHandler(freedom.NewFreedomConnection(&freedom.Config{}, space))
|
||||
ohm.SetDefaultHandler(freedom.NewFreedomConnection(&freedom.Config{}, space, v2net.AnyIP))
|
||||
space.BindApp(proxyman.APP_ID_OUTBOUND_MANAGER, ohm)
|
||||
|
||||
data2Send := "Data to be sent to remote."
|
||||
|
||||
port := v2nettesting.PickPort()
|
||||
dokodemo := NewDokodemoDoor(&Config{
|
||||
Address: v2net.LocalHostIP,
|
||||
Port: udpServer.Port,
|
||||
Network: v2net.UDPNetwork.AsList(),
|
||||
Timeout: 600,
|
||||
}, space)
|
||||
}, space, v2net.LocalHostIP, port)
|
||||
defer dokodemo.Close()
|
||||
|
||||
assert.Error(space.Initialize()).IsNil()
|
||||
|
||||
port := v2nettesting.PickPort()
|
||||
err = dokodemo.Listen(v2net.LocalHostIP, port)
|
||||
err = dokodemo.Start()
|
||||
assert.Error(err).IsNil()
|
||||
assert.Port(port).Equals(dokodemo.Port())
|
||||
|
||||
|
||||
Reference in new issue
Block a user