HEX
Server: nginx/1.28.1
System: Linux 10-41-63-61 6.8.0-31-generic #31-Ubuntu SMP PREEMPT_DYNAMIC Sat Apr 20 00:40:06 UTC 2024 x86_64
User: www (1001)
PHP: 7.4.33
Disabled: passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv
Upload Files
File: /www/server/nodejs/v18.20.6/lib/node_modules/pm2/node_modules/js-git/net/tcp-node.js
"use strict";

var makeChannel = require('culvert');
var wrapHandler = require('../lib/wrap-handler');
var net = require('net');

module.exports = connect;

function connect(host, port, onError) {
  port = port|0;
  host = String(host);
  if (!port || !host) throw new TypeError("host and port are required");

  // Wrap event handlers from node stream
  onConnect = wrap(onConnect, onError);
  pump = wrap(pump, onError);
  onEnd = wrap(onEnd, onError);
  onDrain = wrap(onDrain, onError);

  // Wrap event handlers from culvert socket
  onTake = wrapHandler(onTake, onError);

  var serverChannel = makeChannel();
  var clientChannel = makeChannel();
  var socket = {
    put: serverChannel.put,
    drain: serverChannel.drain,
    take: clientChannel.take
  };

  var client = net.connect({ host: host, port: port }, onConnect);
  if (onError) client.on("error", onError);

  return {
    put: clientChannel.put,
    drain: clientChannel.drain,
    take: serverChannel.take
  };

  function onConnect() {
    socket.take(onTake);
    client.on("end", onEnd);
    client.on("readable", pump);
    client.on("drain", onDrain);
    client.on("error", onError);
  }

  function pump() {
    var chunk;
    do {
      chunk = client.read();
      if (!chunk) return;
    } while (socket.put(chunk));
    socket.drain(pump);
  }

  function onEnd() {
    socket.put();
  }

  function onTake(data) {
    if (data === undefined) {
      client.end();
    }
    else if (client.write(data)) {
      socket.take(onTake);
    }
  }

  function onDrain() {
    socket.take(onTake);
  }

}

function wrap(fn, onError) {
  return function () {
    try {
      return fn.apply(this, arguments);
    }
    catch (err) {
      onError(err);
    }
  };
}