Esempio n. 1
0
Traceroute.prototype._run = function(target) {
  var self = this, args, child, lineEmitter, emitter, stderrBuffer;

  args = [];

  if (this._addressType === 'ipv4') {
    args.push('-4');
  }
  else {
    args.push('-6');
  }

  args.push('-n');
  args.push('-m');
  args.push(this._maxTtl);
  args.push('-w');
  args.push(this._waitTime);
  args.push(target);
  args.push(this._packetLen);

  child = this._spawn('traceroute', args);
  lineEmitter = new LineEmitter();
  emitter = new EventEmitter();
  stderrBuffer = '';

  lineEmitter.on('data', function(line) {
    line = line.replace(/^\s+|\s+$/g, '');
    var hops = self._parseLine(line);

    if (!hops) {
      return;
    }

    hops.forEach(function(hop) {
      emitter.emit('hop', hop);
    });
  });

  child.stdout.on('data', function(chunk) {
    lineEmitter.write(chunk);
  });

  child.stderr.on('data', function(chunk) {
    stderrBuffer += chunk;
  });

  child.on('exit', function(code) {
    var err;

    if (code === 0) {
      process.nextTick(function() {
        emitter.emit('end');
      });
    }
    else {
      err = new Error('Error: ' + stderrBuffer);

      process.nextTick(function() {
        emitter.emit('error', err);
      });
    }
  });

  return emitter;
};
Esempio n. 2
0
 child.stdout.on('data', function(chunk) {
   lineEmitter.write(chunk);
 });