|
|
@@ -26,6 +26,7 @@ type DokodemoDoor struct {
|
|
|
udpHub *hub.UDPHub
|
|
|
udpServer *hub.UDPServer
|
|
|
listeningPort v2net.Port
|
|
|
+ listeningAddress v2net.Address
|
|
|
}
|
|
|
|
|
|
func NewDokodemoDoor(config *Config, space app.Space) *DokodemoDoor {
|
|
|
@@ -65,25 +66,26 @@ func (this *DokodemoDoor) Close() {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-func (this *DokodemoDoor) Listen(port v2net.Port) error {
|
|
|
+func (this *DokodemoDoor) Listen(address v2net.Address, port v2net.Port) error {
|
|
|
if this.accepting {
|
|
|
- if this.listeningPort == port {
|
|
|
+ if this.listeningPort == port && this.listeningAddress.Equals(address) {
|
|
|
return nil
|
|
|
} else {
|
|
|
return proxy.ErrorAlreadyListening
|
|
|
}
|
|
|
}
|
|
|
this.listeningPort = port
|
|
|
+ this.listeningAddress = address
|
|
|
this.accepting = true
|
|
|
|
|
|
if this.config.Network.HasNetwork(v2net.TCPNetwork) {
|
|
|
- err := this.ListenTCP(port)
|
|
|
+ err := this.ListenTCP(address, port)
|
|
|
if err != nil {
|
|
|
return err
|
|
|
}
|
|
|
}
|
|
|
if this.config.Network.HasNetwork(v2net.UDPNetwork) {
|
|
|
- err := this.ListenUDP(port)
|
|
|
+ err := this.ListenUDP(address, port)
|
|
|
if err != nil {
|
|
|
return err
|
|
|
}
|
|
|
@@ -91,9 +93,9 @@ func (this *DokodemoDoor) Listen(port v2net.Port) error {
|
|
|
return nil
|
|
|
}
|
|
|
|
|
|
-func (this *DokodemoDoor) ListenUDP(port v2net.Port) error {
|
|
|
+func (this *DokodemoDoor) ListenUDP(address v2net.Address, port v2net.Port) error {
|
|
|
this.udpServer = hub.NewUDPServer(this.packetDispatcher)
|
|
|
- udpHub, err := hub.ListenUDP(port, this.handleUDPPackets)
|
|
|
+ udpHub, err := hub.ListenUDP(address, port, this.handleUDPPackets)
|
|
|
if err != nil {
|
|
|
log.Error("Dokodemo failed to listen on port ", port, ": ", err)
|
|
|
return err
|
|
|
@@ -118,8 +120,8 @@ func (this *DokodemoDoor) handleUDPResponse(dest v2net.Destination, payload *all
|
|
|
this.udpHub.WriteTo(payload.Value, dest)
|
|
|
}
|
|
|
|
|
|
-func (this *DokodemoDoor) ListenTCP(port v2net.Port) error {
|
|
|
- tcpListener, err := hub.ListenTCP(port, this.HandleTCPConnection, nil)
|
|
|
+func (this *DokodemoDoor) ListenTCP(address v2net.Address, port v2net.Port) error {
|
|
|
+ tcpListener, err := hub.ListenTCP(address, port, this.HandleTCPConnection, nil)
|
|
|
if err != nil {
|
|
|
log.Error("Dokodemo: Failed to listen on port ", port, ": ", err)
|
|
|
return err
|