diff --git a/bin/client b/bin/client index 1ff2631..06294c4 100755 --- a/bin/client +++ b/bin/client @@ -25,7 +25,12 @@ var argv = require('yargs') alias: 'port', describe: 'Internal http server port', }) + .option('d', { + alias: 'debug-logs', + describe: 'Print Request Headers', + }) .require('port') + .boolean('debug-logs') .help('help', 'Show this help and exit') .version(require('../package').version) .argv; @@ -41,6 +46,7 @@ var opt = { port: argv.port, local_host: argv['local-host'], subdomain: argv.subdomain, + debug_logs: argv['debug-logs'], }; lt_client(opt.port, opt, function(err, tunnel) { diff --git a/lib/Tunnel.js b/lib/Tunnel.js index 050431d..9ff972a 100644 --- a/lib/Tunnel.js +++ b/lib/Tunnel.js @@ -70,13 +70,14 @@ Tunnel.prototype._init = function(cb) { Tunnel.prototype._establish = function(info) { var self = this; var opt = self._opt; - + // increase max event listeners so that localtunnel consumers don't get // warning messages as soon as they setup even one listener. See #71 self.setMaxListeners(info.max_conn + (EventEmitter.defaultMaxListeners || 10)); info.local_host = opt.local_host; info.local_port = opt.port; + info.debug_logs = opt.debug_logs; var tunnels = self.tunnel_cluster = TunnelCluster(info); diff --git a/lib/TunnelCluster.js b/lib/TunnelCluster.js index 0ee7111..46ed550 100644 --- a/lib/TunnelCluster.js +++ b/lib/TunnelCluster.js @@ -30,6 +30,8 @@ TunnelCluster.prototype.open = function() { var local_host = opt.local_host || 'localhost'; var local_port = opt.local_port; + var debug_logs = opt.debug_logs; + debug('establishing tunnel %s:%s <> %s:%s', local_host, local_port, remote_host, remote_port); // connection to localtunnel server @@ -113,6 +115,19 @@ TunnelCluster.prototype.open = function() { }); } + remote.on('data', function(data) { + if (debug_logs) { + var match = data.toString().match(/^(\w+) (\S+)/); + if (match) { + console.log( + new Date().toString(), + `method=${match[1]}`, + `path=${match[2]}` + ); + } + } + }); + // tunnel is considered open when remote connects remote.once('connect', function() { self.emit('open', remote);