merge master v0.20.x
This commit is contained in:
		
						commit
						40ab6a4bb8
					
				| @ -16,7 +16,13 @@ module.exports = function pipeWs(servername, service, srv, conn, serviceport) { | |||||||
|   function sendWs(data, serviceOverride) { |   function sendWs(data, serviceOverride) { | ||||||
|     if (srv.ws && (!conn.tunnelClosing || serviceOverride)) { |     if (srv.ws && (!conn.tunnelClosing || serviceOverride)) { | ||||||
|       try { |       try { | ||||||
|         srv.ws.send(Packer.pack(browserAddr, data, serviceOverride), { binary: true }); |         if (data && !Buffer.isBuffer(data)) { | ||||||
|  |           data = Buffer.from(JSON.stringify(data)); | ||||||
|  |         } | ||||||
|  |         srv.ws.send(Packer.packHeader(browserAddr, data, serviceOverride), { binary: true }); | ||||||
|  |         if (data) { | ||||||
|  |           srv.ws.send(data, { binary: true }); | ||||||
|  |         } | ||||||
|         // If we can't send data over the websocket as fast as this connection can send it to us
 |         // If we can't send data over the websocket as fast as this connection can send it to us
 | ||||||
|         // (or there are a lot of connections trying to send over the same websocket) then we
 |         // (or there are a lot of connections trying to send over the same websocket) then we
 | ||||||
|         // need to pause the connection for a little. We pause all connections if any are paused
 |         // need to pause the connection for a little. We pause all connections if any are paused
 | ||||||
| @ -39,6 +45,10 @@ module.exports = function pipeWs(servername, service, srv, conn, serviceport) { | |||||||
|   conn.serviceport = serviceport; |   conn.serviceport = serviceport; | ||||||
|   conn.service = service; |   conn.service = service; | ||||||
| 
 | 
 | ||||||
|  |   // send peek at data too?
 | ||||||
|  |   srv.ws.send(Packer.packHeader(browserAddr, null, 'connection'), { binary: true }); | ||||||
|  | 
 | ||||||
|  |   // TODO convert to read stream?
 | ||||||
|   conn.on('data', function (chunk) { |   conn.on('data', function (chunk) { | ||||||
|     //if (state.debug) { console.log('[pipeWs] client', cid, ' => srv', rid, chunk.byteLength, 'bytes'); }
 |     //if (state.debug) { console.log('[pipeWs] client', cid, ' => srv', rid, chunk.byteLength, 'bytes'); }
 | ||||||
|     sendWs(chunk); |     sendWs(chunk); | ||||||
|  | |||||||
							
								
								
									
										27
									
								
								lib/relay.js
									
									
									
									
									
								
							
							
						
						
									
										27
									
								
								lib/relay.js
									
									
									
									
									
								
							| @ -98,6 +98,13 @@ var Server = { | |||||||
|         return srv._commandHandlers[cmd[1]].apply(null, cmd.slice(2)).then(onSuccess, onError); |         return srv._commandHandlers[cmd[1]].apply(null, cmd.slice(2)).then(onSuccess, onError); | ||||||
|       } |       } | ||||||
| 
 | 
 | ||||||
|  |     , onconnection: function (tun) { | ||||||
|  |         // I don't think this event can happen since this relay
 | ||||||
|  |         // is acting the part of the client, but just in case...
 | ||||||
|  |         // (in fact it should probably be explicitly disallowed)
 | ||||||
|  |         console.error("[SANITY FAIL] reverse connection start"); | ||||||
|  |       } | ||||||
|  | 
 | ||||||
|     , onmessage: function (tun) { |     , onmessage: function (tun) { | ||||||
|         var cid = Packer.addrToId(tun); |         var cid = Packer.addrToId(tun); | ||||||
|         if (state.debug) { console.log("remote '" + Server.logName(state, srv) + "' has data for '" + cid + "'", tun.data.byteLength); } |         if (state.debug) { console.log("remote '" + Server.logName(state, srv) + "' has data for '" + cid + "'", tun.data.byteLength); } | ||||||
| @ -236,7 +243,11 @@ var Server = { | |||||||
|     Server.sendTunnelMsg(srv, null, [1, 'hello', [srv.unpacker._version], Object.keys(srv._commandHandlers)], 'control'); |     Server.sendTunnelMsg(srv, null, [1, 'hello', [srv.unpacker._version], Object.keys(srv._commandHandlers)], 'control'); | ||||||
|   } |   } | ||||||
| , sendTunnelMsg: function sendTunnelMsg(srv, addr, data, service) { | , sendTunnelMsg: function sendTunnelMsg(srv, addr, data, service) { | ||||||
|     srv.ws.send(Packer.pack(addr, data, service), {binary: true}); |     if (data && !Buffer.isBuffer()) { | ||||||
|  |       data = Buffer.from(JSON.stringify(data)); | ||||||
|  |     } | ||||||
|  |     srv.ws.send(Packer.packHeader(addr, data, service), {binary: true}); | ||||||
|  |     srv.ws.send(data, {binary: true}); | ||||||
|   } |   } | ||||||
| , logName: function logName(state, srv) { | , logName: function logName(state, srv) { | ||||||
|     var result = Object.keys(srv.grants).map(function (jwtoken) { |     var result = Object.keys(srv.grants).map(function (jwtoken) { | ||||||
| @ -399,7 +410,16 @@ var Server = { | |||||||
|       return; |       return; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     conn.once('data', function (firstChunk) { |     // When using raw TCP we're already paired to the client by port
 | ||||||
|  |     // and we can begin connecting right away, but we'll wait just a sec
 | ||||||
|  |     // to reject known bad connections
 | ||||||
|  |     var sendConnection = setTimeout(function () { | ||||||
|  |       conn.removeListener('data', peekFirstPacket) | ||||||
|  |       console.log("[debug tcp conn] Connecting possible telnet client to device..."); | ||||||
|  |       pipeWs(null, 'tcp', nextDevice, conn, serviceport); | ||||||
|  |     }, 350); | ||||||
|  |     function peekFirstPacket(firstChunk) { | ||||||
|  |       clearTimeout(sendConnection); | ||||||
|       if (state.debug) { console.log("[DynTcp]", serviceport, "examining firstChunk from", Packer.socketToId(conn)); } |       if (state.debug) { console.log("[DynTcp]", serviceport, "examining firstChunk from", Packer.socketToId(conn)); } | ||||||
|       conn.pause(); |       conn.pause(); | ||||||
|       //conn.unshift(firstChunk);
 |       //conn.unshift(firstChunk);
 | ||||||
| @ -434,7 +454,8 @@ var Server = { | |||||||
|       pipeWs(null, 'tcp', nextDevice, conn, serviceport); |       pipeWs(null, 'tcp', nextDevice, conn, serviceport); | ||||||
| 
 | 
 | ||||||
|       process.nextTick(function () { conn.resume(); }); |       process.nextTick(function () { conn.resume(); }); | ||||||
|     }); |     } | ||||||
|  |     conn.once('data', peekFirstPacket); | ||||||
|   } |   } | ||||||
| , addToken: function addToken(state, srv, rawAuth) { | , addToken: function addToken(state, srv, rawAuth) { | ||||||
|     console.log("[addToken]", rawAuth); |     console.log("[addToken]", rawAuth); | ||||||
|  | |||||||
| @ -1,6 +1,6 @@ | |||||||
| { | { | ||||||
|   "name": "telebit-relay", |   "name": "telebit-relay", | ||||||
|   "version": "0.13.1", |   "version": "0.20.0", | ||||||
|   "description": "Friends don't let friends localhost. Expose your bits with a secure connection even from behind NAT, Firewalls, in a box, with a fox, on a train or in a plane... or a Raspberry Pi in your closet. An attempt to create a better localtunnel.me server, a more open ngrok. Uses Automated HTTPS (Free SSL) via ServerName Indication (SNI). Can also tunnel tls and plain tcp.", |   "description": "Friends don't let friends localhost. Expose your bits with a secure connection even from behind NAT, Firewalls, in a box, with a fox, on a train or in a plane... or a Raspberry Pi in your closet. An attempt to create a better localtunnel.me server, a more open ngrok. Uses Automated HTTPS (Free SSL) via ServerName Indication (SNI). Can also tunnel tls and plain tcp.", | ||||||
|   "main": "lib/relay.js", |   "main": "lib/relay.js", | ||||||
|   "bin": { |   "bin": { | ||||||
| @ -51,7 +51,7 @@ | |||||||
|     "jwk-to-pem": "^2.0.0", |     "jwk-to-pem": "^2.0.0", | ||||||
|     "mkdirp": "^0.5.1", |     "mkdirp": "^0.5.1", | ||||||
|     "nowww": "^1.2.1", |     "nowww": "^1.2.1", | ||||||
|     "proxy-packer": "^1.4.3", |     "proxy-packer": "^2.0.0", | ||||||
|     "recase": "^1.0.4", |     "recase": "^1.0.4", | ||||||
|     "redirect-https": "^1.1.5", |     "redirect-https": "^1.1.5", | ||||||
|     "request": "^2.87.0", |     "request": "^2.87.0", | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user