From 3d54e3fd8c4af1b6d94219e5ddf1a45c073b692f Mon Sep 17 00:00:00 2001
From: cgeek <cem.moreau@gmail.com>
Date: Tue, 20 Nov 2018 17:57:56 +0100
Subject: [PATCH] [fix] WS2P: UPnP local host interface can be forced (in case
 of UPnP fail for example)

---
 app/modules/upnp-provider.ts | 8 ++++++--
 app/modules/ws2p/index.ts    | 3 ++-
 2 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/app/modules/upnp-provider.ts b/app/modules/upnp-provider.ts
index cc7a396f9..dcda0a301 100644
--- a/app/modules/upnp-provider.ts
+++ b/app/modules/upnp-provider.ts
@@ -32,6 +32,7 @@ export class UpnpProvider {
     private upnpInterval = 300,
     private ttl = 600,
     private logger?:any,
+    private host = ''
   ) {}
 
   async checkUPnPisAvailable() {
@@ -72,7 +73,10 @@ export class UpnpProvider {
       const client = upnp.createClient()
       client.portMapping({
         'public': this.currentConfig.port,
-        'private': this.currentConfig.port,
+        'private': {
+          host: this.currentConfig.host,
+          port: this.currentConfig.port,
+        },
         'ttl': this.ttl,
         'description': this.getUpnpDescription()
       }, (err:any) => {
@@ -123,7 +127,7 @@ export class UpnpProvider {
   }
 
   private async getAvailablePort(client:any) {
-    const localIP = await UpnpProvider.getLocalIP(client)
+    const localIP = this.host || await UpnpProvider.getLocalIP(client)
     const remoteIP = await UpnpProvider.getRemoteIP(client)
     const mappings:{
       private: {
diff --git a/app/modules/ws2p/index.ts b/app/modules/ws2p/index.ts
index 8deb5523c..930962bd2 100644
--- a/app/modules/ws2p/index.ts
+++ b/app/modules/ws2p/index.ts
@@ -243,7 +243,8 @@ export class WS2PAPI extends stream.Transform {
             ':ws2p:' + suffix,
             WS2PConstants.WS2P_UPNP_INTERVAL,
             WS2PConstants.WS2P_UPNP_TTL,
-            logger)
+            logger,
+            this.conf.ws2p.host)
           const { host, port, available } = await this.upnpAPI.startRegular()
           if (available) {
             // Defaults UPnP to true if not defined and available
-- 
GitLab