mirror of
				https://git.coolaj86.com/coolaj86/telebit-relay.js.git
				synced 2025-11-04 10:22:46 +00:00 
			
		
		
		
	v0.20.0: use proxy-packer v2.x
This commit is contained in:
		
							parent
							
								
									06cc7bbaeb
								
							
						
					
					
						commit
						bb018c538d
					
				@ -16,7 +16,13 @@ module.exports = function pipeWs(servername, service, srv, conn, serviceport) {
 | 
			
		||||
  function sendWs(data, serviceOverride) {
 | 
			
		||||
    if (srv.ws && (!conn.tunnelClosing || serviceOverride)) {
 | 
			
		||||
      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
 | 
			
		||||
        // (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
 | 
			
		||||
@ -39,6 +45,10 @@ module.exports = function pipeWs(servername, service, srv, conn, serviceport) {
 | 
			
		||||
  conn.serviceport = serviceport;
 | 
			
		||||
  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) {
 | 
			
		||||
    //if (state.debug) { console.log('[pipeWs] client', cid, ' => srv', rid, chunk.byteLength, 'bytes'); }
 | 
			
		||||
    sendWs(chunk);
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										27
									
								
								lib/relay.js
									
									
									
									
									
								
							
							
						
						
									
										27
									
								
								lib/relay.js
									
									
									
									
									
								
							@ -93,6 +93,13 @@ var Server = {
 | 
			
		||||
        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) {
 | 
			
		||||
        var cid = Packer.addrToId(tun);
 | 
			
		||||
        if (state.debug) { console.log("remote '" + Server.logName(state, srv) + "' has data for '" + cid + "'", tun.data.byteLength); }
 | 
			
		||||
@ -231,7 +238,11 @@ var Server = {
 | 
			
		||||
    Server.sendTunnelMsg(srv, null, [1, 'hello', [srv.unpacker._version], Object.keys(srv._commandHandlers)], 'control');
 | 
			
		||||
  }
 | 
			
		||||
, 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) {
 | 
			
		||||
    var result = Object.keys(srv.grants).map(function (jwtoken) {
 | 
			
		||||
@ -379,7 +390,16 @@ var Server = {
 | 
			
		||||
      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)); }
 | 
			
		||||
      conn.pause();
 | 
			
		||||
      //conn.unshift(firstChunk);
 | 
			
		||||
@ -414,7 +434,8 @@ var Server = {
 | 
			
		||||
      pipeWs(null, 'tcp', nextDevice, conn, serviceport);
 | 
			
		||||
 | 
			
		||||
      process.nextTick(function () { conn.resume(); });
 | 
			
		||||
    });
 | 
			
		||||
    }
 | 
			
		||||
    conn.once('data', peekFirstPacket);
 | 
			
		||||
  }
 | 
			
		||||
, addToken: function addToken(state, srv, newAuth) {
 | 
			
		||||
    console.log("addToken", newAuth);
 | 
			
		||||
 | 
			
		||||
@ -1,6 +1,6 @@
 | 
			
		||||
{
 | 
			
		||||
  "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.",
 | 
			
		||||
  "main": "lib/relay.js",
 | 
			
		||||
  "bin": {
 | 
			
		||||
@ -43,8 +43,8 @@
 | 
			
		||||
    "greenlock": "^2.2.4",
 | 
			
		||||
    "human-readable-ids": "^1.0.4",
 | 
			
		||||
    "js-yaml": "^3.11.0",
 | 
			
		||||
    "jsonwebtoken": "^8.2.1",
 | 
			
		||||
    "proxy-packer": "^1.4.3",
 | 
			
		||||
    "jsonwebtoken": "^8.3.0",
 | 
			
		||||
    "proxy-packer": "^2.0.0",
 | 
			
		||||
    "recase": "^1.0.4",
 | 
			
		||||
    "redirect-https": "^1.1.5",
 | 
			
		||||
    "serve-static": "^1.13.2",
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user