{"version":3,"sources":["jsdelivr-header.js","/npm/pmp@0.5.0/lib/pmp.js"],"names":[],"mappings":"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","file":"/npm/pmp@0.5.0/lib/pmp.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/pmp@0.5.0/lib/pmp.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","/**\r\n * Created by Todd on 6/5/2014.\r\n */\r\nvar dgram = require('dgram'); // dgram is UDP\r\nvar upnp = require('./upnp');\r\n/*\r\nfunction listen(){  // Listen for pmp port change info\r\n// code to listen for changes\r\n\r\n// 3.2.1.  Announcing Address Changes\r\n//\r\n// Upon boot, acquisition of an external IPv4 address, subsequent change\r\n// of the external IPv4 address, reboot, or any other event that may\r\n// indicate possible loss or change of NAT mapping state, the NAT\r\n// gateway MUST send a gratuitous response to the link-local multicast\r\n// address 224.0.0.1, port 5350, with the packet format above, to notify\r\n// clients of the external IPv4 address and Seconds Since Start of\r\n// Epoch.\r\n\r\n\r\n //my router doesnt do this - or this code doesnt work - so for future use\r\n\r\n\r\n    var monitor = dgram.createSocket(\"udp4\");\r\n    monitor.on(\"message\", function (msg, rinfo) {\r\n        console.log(\"brodacast\", msg.toString(), rinfo)\r\n\r\n    });\r\n    monitor.on(\"listening\",function(){\r\n\r\n        monitor.setBroadcast(true);\r\n        monitor.setMulticastTTL(128);\r\n        monitor.addMembership('224.0.0.1');\r\n\r\n        console.log(\"listening\");\r\n        var address = monitor.address();\r\n\r\n        console.log(\"brodcast listen\",address.address,address.port);\r\n\r\n    });\r\n    monitor.bind(5350,\"10.6.1.138\",function() {\r\n        var address = monitor.address();\r\n\r\n        console.log(\"brodcast bind\",address.address,address.port);\r\n\r\n    });\r\n\r\n}\r\n */\r\nexports.findGateway = function(gatewayip,callback) {\r\n    gateway = {}\r\n    if (!gatewayip) { //will be true for '', null, undefined, 0, NaN and false.\r\n        // gateway not given attempt to get\r\n        var network = require('network');\r\n        network.get_gateway_ip(function (err, ip) {\r\n            //console.log(err,ip);\r\n            if (err) { // couldn't determine gateway ip addres -- try upnp\r\n                var upnp = require(\"./upnp\");\r\n                gateway.ip =null;\r\n               upnp.searchGateway(gateway,callback);\r\n\r\n            } else {\r\n                // no error appears we have a valid gateway now\r\n                gateway.ip = ip\r\n\r\n               natpmpgetexternaladdress(gateway, callback);\r\n            }\r\n\r\n        });\r\n\r\n    }\r\n}\r\nfunction natpmp(rslt,ip,privateport,publicport,ttl,callback){\r\n    var server = dgram.createSocket(\"udp4\");\r\n    server.on(\"error\", function (err) {\r\n        server.close();\r\n        clearTimeout(timeout);\r\n        if (callback) {\r\n        //    rslt = {};\r\n            rslt.error = \"*Socket Error sending to gateway address \" + ip + \":\" + err;\r\n            rslt.gateway = ip;\r\n            callback(-3, rslt);\r\n            return;\r\n        }\r\n    });\r\n\r\n    server.on(\"message\", function (msg, rinfo) {\r\n\r\n        if (rinfo.address == ip) {\r\n            clearTimeout(timeout);\r\n            //console.log(rinfo);\r\n            if (callback) {\r\n              //  var rslt={};\r\n\r\n                switch (msg[3]) {\r\n                    case 0:\r\n\r\n\r\n                        rslt.privatePort=msg[8]*256+msg[9];\r\n                        rslt.publicPort=msg[10]*256+msg[11];\r\n                        rslt.ttl=msg[12]*16777216+msg[13]*65536+msg[14]*256+msg[15];\r\n                        rslt.portMappingInitialized=msg[4]*16777216+msg[5]*65536+msg[6]*256+msg[7];\r\n                        rslt.gateway = rinfo.address;\r\n                        rslt.error = \"\";\r\n                        callback(0, rslt);\r\n                        break;\r\n                    case 1:\r\n                        callback(1, \"Unsupported Version\");\r\n                        break;\r\n                    case 2:\r\n                        callback(2, \"Not Authorized/Refused (e.g. box supports mapping, but user has turned feature off)\");\r\n                        break;\r\n                    case 3:\r\n                        callback(3, \"Network Failure (e.g. NAT box itself has not obtained a DHCP lease)\");\r\n                        break;\r\n                    case 4:\r\n                        callback(4, \"Out of resources (NAT box cannot create any more mappings at this time)\");\r\n                        break;\r\n                    case 5:\r\n                        callback(5, \"Unsupported opcode\");\r\n                        break;\r\n\r\n                }\r\n\r\n\r\n            }\r\n            server.close();\r\n\r\n        }\r\n        else\r\n        {\r\n            //would be weird\r\n            console.log(\"Response not from gateway \",rinfo.address);\r\n\r\n        }\r\n\r\n    });\r\n\r\n    server.bind(\"\",function(){\r\n        //console.log(\"server bind\");\r\n        timeout = setTimeout(function(){\r\n            if (callback)\r\n            {\r\n                rslt={};\r\n                rslt.error=\"Unable to connect to gateway - gateway may not support nat-pmp\";\r\n                rslt.gateway = ip;\r\n                callback(-1,rslt);\r\n            }\r\n            //console.log(\"Finished waiting\");\r\n            server.close();\r\n        },3000);\r\n        /**\r\n        **/\r\n\r\n        ttl = ttl * 60; //convert ttl minutes to seconds\r\n        if ((ttl == 0 && publicport != 0) || ttl >  4294967280) //if ttl is 0 set it to max (136 years) unless the public port is 0\r\n        // if the public port is 0 and the ttl is 0 the router will remove the port mapping\r\n        {ttl = 424967280\r\n\r\n        }\r\n\r\n\r\n        console.log(\"ttl:\"+ttl);\r\n\r\n\r\n        var message = new Buffer(12);\r\n        message[0] = 0x00; // version pmp(rfc3886) =0 pcp(rfc3887) = 2\r\n        message[1] = 0x02; //opcode 2 is tcp port mapping\r\n        message[2] = 0x00; //reserved\r\n        message[3] = 0x00; // reserved\r\n\r\n        message[5] = privateport  & (255);\r\n        privateport = privateport>>8;\r\n        message[4] = privateport  & (255);\r\n        message[7] = publicport  & (255);\r\n        publicport = publicport>>8;\r\n        message[6] = publicport  & (255);\r\n        message[11] = ttl &(255); // ttl byte 0\r\n        ttl = ttl>>8;\r\n        message[10] = ttl &(255); // ttl byte 1\r\n        ttl = ttl>>8;\r\n        message[9] = ttl &(255); // ttl byte 2\r\n        ttl = ttl>>8;\r\n        message[8] = ttl &(255); // ttl byte 3\r\n            server.send(message, 0, 12, 5351, ip, function (err, bytes) {\r\n                // if there is an error it is not handled in on error\r\n              });\r\n\r\n    });\r\n\r\n\r\n}\r\nexports.portMap =function(gateway,privateport,publicport,ttl,description,callback) {\r\n/*++\r\n    if (!gateway){ //will be true for '', null, undefined, 0, NaN and false.\r\n        // gateway not given attempt to get\r\n        var network = require('network');\r\n        network.get_gateway_ip(function(err, ip) {\r\n            //console.log(err,ip);\r\n            if(err){ // couldn't determine gateway ip addres\r\n                var rslt={};\r\n                if (callback){\r\n                    rslt={};\r\n                    rslt.error = err;\r\n                    callback(-2,rslt);\r\n\r\n                }\r\n                return -1;\r\n            }else{\r\n                // no error appears we have a valid gateway now\r\n                natpmp(gateway.ip,privateport,publicport,ttl,callback);\r\n            }\r\n\r\n        });\r\n ++*/\r\n    console.log(\"at pmp portmap function\");\r\n    if(gateway.supportsUPN ==true) {\r\n\r\n        gateway.protocol = \"TCP\";\r\n        gateway.ttl = ttl;\r\n        gateway.publicPort = publicport;\r\n        gateway.privatePort = privateport;\r\n        gateway.description = description;\r\n\r\n        upnp.AddMapping(callback,gateway);\r\n    }\r\n    else{\r\n       // appears valid gateway - go ahead and try natpmp\r\n\r\n        natpmp(gateway,gateway.ip,privateport,publicport,ttl,callback);}\r\n\r\n};\r\nexports.getExternalAddress=function(gateway,callback) {\r\n    if (!gateway) { //will be true for '', null, undefined, 0, NaN and false.\r\n        // gateway not given attempt to get\r\n        var network = require('network');\r\n        network.get_gateway_ip(function (err, ip) {\r\n           // console.log(err, ip);\r\n            if (err) { // couldn't determine gateway ip addres\r\n                rslt = {};\r\n                rslt.error = err;\r\n                if (callback) {\r\n                    callback(-2, rslt);\r\n                }\r\n                return -1;\r\n\r\n            } else {\r\n                // appears valid gateway - go ahead and try natpmp\r\n                natpmpgetexternaladdress(ip, callback);\r\n            }\r\n        });\r\n\r\n\r\n    }else\r\n    {\r\n        // gateway given  - go ahead and try natpmp\r\n        natpmpgetexternaladdress(gateway, callback);\r\n\r\n    }\r\n};\r\n\r\nfunction natpmpgetexternaladdress (gateway,callback){\r\n    var server = dgram.createSocket(\"udp4\");\r\n    server.on(\"error\", function (err) {\r\n        server.close();\r\n        clearTimeout(timeout);\r\n        if (callback) {\r\n            rslt = {};\r\n            rslt.error = \"*Socket Error sending to gateway address \" + gateway + \":\" + err;\r\n            rslt.gateway = gateway;\r\n            callback(-3, rslt);\r\n            return;\r\n        }\r\n    });\r\n    server.on(\"message\", function (msg, rinfo) {\r\n        if (rinfo.address == gateway.ip) {\r\n\r\n            clearTimeout(timeout);\r\n           server.close();\r\n            if (callback) {\r\n                rslt = {};\r\n                switch (msg[3]) {\r\n                    case 0:\r\n                        gateway.externalIP =msg[8] + \".\" + msg[9] + \".\" + msg[10] + \".\" + msg[11];\r\n                        gateway.error='';\r\n                       // callback(0,gateway );\r\n                        break;\r\n                    case 1:\r\n                        gateway.error=\"Unsupported Version\";\r\n                       // callback(1,rslt);\r\n                        break;\r\n                    case 2:\r\n                        gateway.error=\"Not Authorized/Refused (nat-pmp disabled or trying to map port below 1024)\";\r\n                      //  callback(2, rslt);\r\n                        break;\r\n                    case 3:\r\n                        gateway.error=\"Network Failure (e.g. NAT box itself has not obtained a DHCP lease)\";\r\n                      //  callback(3, rlst);\r\n                        break;\r\n                    case 4:\r\n                        gateway.error=\"Out of resources (NAT box cannot create any more mappings at this time)\";\r\n                     //   callback(4, rslt);\r\n                        break;\r\n                    case 5:\r\n                        gateway.error=\"Unsupported opcode\";\r\n                      //  callback(5, gateway);\r\n                        break;\r\n\r\n                }\r\n               if (msg[3] == 0) {\r\n                   gateway.supportsPMP = true;\r\n                   callback(msg[3], gateway);\r\n\r\n               }   else\r\n\r\n               {\r\n                   // pmp failed try upnp\r\n\r\n\r\n               }\r\n\r\n            }\r\n        }\r\n        else\r\n        {\r\n            //weird\r\n            console.log(\"Response not from gateway \",rinfo.address);\r\n\r\n        }\r\n    });\r\n\r\n    server.bind(\"\",function(){\r\n        console.log(\"server bind\");\r\n        timeout = setTimeout(function(){\r\n//++            server.close();\r\n            console.log(\"unable to open pmp port on router - doesnt support pmp\");\r\n            var upnp = require(\"./upnp\");\r\n            upnp.searchGateway(gateway,callback);\r\n\r\n//           if (callback)\r\n//            {\r\n//                rslt={};\r\n//                rslt.error=\"Unable to connect to gateway - gateway may not support nat-pmp\";\r\n//                rslt.gateway = gateway;\r\n//                callback(-1,rslt);\r\n//            }\r\n            console.log(\"Finished waiting\");\r\n            server.close();\r\n        },3000);\r\n        var message = new Buffer(2);\r\n        message[0] = 0x00; // version pmp(rfc3886) =0 pcp(rfc3887) = 2\r\n        message[1] = 0x00; //opcode 0 is request external ip address\r\n        server.send(message, 0, 2, 5351, gateway.ip,function(err, bytes) {  // this is the correct port\r\n//        server.send(message, 0, 2, 5352, gateway.ip,function(err, bytes) { //this forces pmp failure\r\n\r\n                if (err) {\r\n               // console.log(\"Error sending:\",err);\r\n                clearTimeout(timeout);\r\n                if (callback)\r\n                {\r\n                    rslt={};\r\n                    rslt.error=\"Socket Error sending to gateway address \"+gateway+\":\"+err;\r\n                    rslt.gateway = gateway;\r\n                    server.close();\r\n                    callback(-1,rslt);\r\n                }\r\n            }\r\n           // console.log('UDP message sent ',bytes);\r\n        });\r\n    });\r\n\r\n\r\n\r\n}\r\n\r\n//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\r\n\r\n\r\n"]}