123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 |
- var os = require('os');
- var lib = {};
- function parallel(tasks, done) {
- var results = [];
- var errs = [];
- var length = 0;
- var doneLength = 0;
- function doneIt(ix, err, result) {
- if (err) {
- errs[ix] = err;
- } else {
- results[ix] = result;
- }
- doneLength += 1;
- if (doneLength >= length) {
- done(errs.length > 0 ? errs : errs, results);
- }
- }
- Object.keys(tasks).forEach(function (key) {
- length += 1;
- var task = tasks[key];
- (global.setImmediate || global.setTimeout)(function () {
- task(doneIt.bind(null, key), 1);
- });
- });
- }
- lib.networkInterfaces = function () {
- var ifaces = os.networkInterfaces();
- var allAddresses = {};
- Object.keys(ifaces).forEach(function (iface) {
- addresses = {};
- var hasAddresses = false;
- ifaces[iface].forEach(function (address) {
- if (!address.internal) {
- addresses[(address.family || "").toLowerCase()] = address.address;
- hasAddresses = true;
- if (address.mac) {
- addresses.mac = address.mac;
- }
- }
- });
- if (hasAddresses) {
- allAddresses[iface] = addresses;
- }
- });
- return allAddresses;
- };
- var _getMacAddress;
- switch (os.platform()) {
- case 'win32':
- _getMacAddress = require('./lib/windows.js');
- break;
- case 'linux':
- _getMacAddress = require('./lib/linux.js');
- break;
- case 'darwin':
- case 'sunos':
- _getMacAddress = require('./lib/unix.js');
- break;
-
- default:
- console.warn("node-macaddress: Unkown os.platform(), defaulting to `unix'.");
- _getMacAddress = require('./lib/unix.js');
- break;
- }
- lib.one = function (iface, callback) {
- if (typeof iface === 'function') {
- callback = iface;
- var ifaces = lib.networkInterfaces();
- var alleged = [ 'eth0', 'eth1', 'en0', 'en1' ];
- iface = Object.keys(ifaces)[0];
- for (var i = 0; i < alleged.length; i++) {
- if (ifaces[alleged[i]]) {
- iface = alleged[i];
- break;
- }
- }
- if (!ifaces[iface]) {
- if (typeof callback === 'function') {
- callback("no interfaces found", null);
- }
- return null;
- }
- if (ifaces[iface].mac) {
- if (typeof callback === 'function') {
- callback(null, ifaces[iface].mac);
- }
- return ifaces[iface].mac;
- }
- }
- if (typeof callback === 'function') {
- _getMacAddress(iface, callback);
- }
- return null;
- };
- lib.all = function (callback) {
- var ifaces = lib.networkInterfaces();
- var resolve = {};
- Object.keys(ifaces).forEach(function (iface) {
- if (!ifaces[iface].mac) {
- resolve[iface] = _getMacAddress.bind(null, iface);
- }
- });
- if (Object.keys(resolve).length === 0) {
- if (typeof callback === 'function') {
- callback(null, ifaces);
- }
- return ifaces;
- }
- parallel(resolve, function (err, result) {
- Object.keys(result).forEach(function (iface) {
- ifaces[iface].mac = result[iface];
- });
- if (typeof callback === 'function') {
- callback(null, ifaces);
- }
- });
- return null;
- };
- module.exports = lib;
|