WIP v0.20.x: add onconnection handler
This commit is contained in:
		
							parent
							
								
									78407f2a3e
								
							
						
					
					
						commit
						bd8d32d8ec
					
				@ -243,6 +243,23 @@ function _connect(state) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  var connCallback;
 | 
					  var connCallback;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  function hyperPeek(tun) {
 | 
				
			||||||
 | 
					    var m;
 | 
				
			||||||
 | 
					    var str;
 | 
				
			||||||
 | 
					    if (tun.data) {
 | 
				
			||||||
 | 
					      if ('http' === tun.service) {
 | 
				
			||||||
 | 
					        str = tun.data.toString();
 | 
				
			||||||
 | 
					        m = str.match(/(?:^|[\r\n])Host: ([^\r\n]+)[\r\n]*/im);
 | 
				
			||||||
 | 
					        tun._name = tun._hostname = (m && m[1].toLowerCase() || '').split(':')[0];
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      else if ('https' === tun.service || 'tls' === tun.service) {
 | 
				
			||||||
 | 
					        tun._name = tun._servername = sni(tun.data);
 | 
				
			||||||
 | 
					      } else {
 | 
				
			||||||
 | 
					        tun._name = '';
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  var packerHandlers = {
 | 
					  var packerHandlers = {
 | 
				
			||||||
    oncontrol: function (opts) {
 | 
					    oncontrol: function (opts) {
 | 
				
			||||||
      var cmd, err;
 | 
					      var cmd, err;
 | 
				
			||||||
@ -305,24 +322,14 @@ function _connect(state) {
 | 
				
			|||||||
      wsHandlers.sendMessage(Packer.packHeader(null, [-cmd[0], err], 'control', packBody));
 | 
					      wsHandlers.sendMessage(Packer.packHeader(null, [-cmd[0], err], 'control', packBody));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  , onmessage: function (tun) {
 | 
					  , onconnection: function (tun) {
 | 
				
			||||||
      var cid = tun._id = Packer.addrToId(tun);
 | 
					      var cid = tun._id = Packer.addrToId(tun);
 | 
				
			||||||
      var str;
 | 
					 | 
				
			||||||
      var m;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
      if ('http' === tun.service) {
 | 
					      // this data should have been gathered already as part of the proxy protocol
 | 
				
			||||||
        str = tun.data.toString();
 | 
					      // but if it's available again here we can double check
 | 
				
			||||||
        m = str.match(/(?:^|[\r\n])Host: ([^\r\n]+)[\r\n]*/im);
 | 
					      hyperPeek(tun);
 | 
				
			||||||
        tun._name = tun._hostname = (m && m[1].toLowerCase() || '').split(':')[0];
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
      else if ('https' === tun.service || 'tls' === tun.service) {
 | 
					 | 
				
			||||||
        tun._name = tun._servername = sni(tun.data);
 | 
					 | 
				
			||||||
      } else {
 | 
					 | 
				
			||||||
        tun._name = '';
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      if (clientHandlers.write(cid, tun)) { return; }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      // TODO use readable streams instead
 | 
				
			||||||
      wstunneler.pause();
 | 
					      wstunneler.pause();
 | 
				
			||||||
      require(state.sortingHat).assign(state, tun, function (err, conn) {
 | 
					      require(state.sortingHat).assign(state, tun, function (err, conn) {
 | 
				
			||||||
        if (err) {
 | 
					        if (err) {
 | 
				
			||||||
@ -336,6 +343,18 @@ function _connect(state) {
 | 
				
			|||||||
      });
 | 
					      });
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  , onmessage: function (tun) {
 | 
				
			||||||
 | 
					      var cid = tun._id = Packer.addrToId(tun);
 | 
				
			||||||
 | 
					      var handled;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      hyperPeek(tun);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      handled = clientHandlers.write(cid, tun);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      // quasi backwards compat
 | 
				
			||||||
 | 
					      if (!handled) { clientHandlers.onconnection(tun); }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  , onpause: function (opts) {
 | 
					  , onpause: function (opts) {
 | 
				
			||||||
      var cid = Packer.addrToId(opts);
 | 
					      var cid = Packer.addrToId(opts);
 | 
				
			||||||
      if (localclients[cid]) {
 | 
					      if (localclients[cid]) {
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user