@@ -30,6 +30,9 @@ function parallel(tasks, done) {
30
30
} ) ;
31
31
}
32
32
33
+ // Retrieves all interfaces that do feature some non-internal address.
34
+ // This function does NOT employ caching as to reflect the current state
35
+ // of the machine accurately.
33
36
lib . networkInterfaces = function ( ) {
34
37
var allAddresses = { } ;
35
38
@@ -53,7 +56,7 @@ lib.networkInterfaces = function () {
53
56
if ( ! address . internal ) {
54
57
addresses [ ( address . family || "" ) . toLowerCase ( ) ] = address . address ;
55
58
hasAddresses = true ;
56
- if ( address . mac ) {
59
+ if ( address . mac && address . mac !== '00:00:00:00:00:00' ) {
57
60
addresses . mac = address . mac ;
58
61
}
59
62
}
@@ -89,17 +92,42 @@ switch (os.platform()) {
89
92
90
93
}
91
94
92
- lib . one = function ( iface , callback ) {
93
- if ( ! callback && typeof iface !== 'function' ) {
94
- return new Promise ( function ( resolve , reject ) {
95
- lib . one ( iface , function ( err , mac ) {
96
- if ( err ) {
97
- reject ( new Error ( err ) ) ;
98
- return ;
95
+ var validIfaceRegExp = '^[a-z0-9]+$' ;
96
+ var validIfaceRegExpObj = new RegExp ( validIfaceRegExp , 'i' ) ;
97
+
98
+ function getMacAddress ( iface , callback ) {
99
+
100
+ if ( ! validIfaceRegExpObj . test ( iface ) ) {
101
+ callback ( new Error ( [
102
+ 'invalid iface: \'' , iface ,
103
+ '\' (must conform to reg exp /' ,
104
+ validIfaceRegExp , '/)'
105
+ ] . join ( '' ) ) , null ) ;
106
+ return ;
107
+ }
108
+
109
+ _getMacAddress ( iface , callback ) ;
110
+ }
111
+
112
+ function promisify ( func ) {
113
+ return new Promise ( function ( resolve , reject ) {
114
+ func ( function ( err , data ) {
115
+ if ( err ) {
116
+ if ( ! err instanceof Error ) {
117
+ err = new Error ( err ) ;
99
118
}
119
+ reject ( err ) ;
120
+ return ;
121
+ }
122
+ resolve ( data ) ;
123
+ } ) ;
124
+ } ) ;
125
+ }
100
126
101
- resolve ( mac ) ;
102
- } ) ;
127
+ lib . one = function ( iface , callback ) {
128
+ if ( ! callback && typeof iface !== 'function' ) {
129
+ return promisify ( function ( callback ) {
130
+ lib . one ( iface , callback ) ;
103
131
} ) ;
104
132
}
105
133
@@ -133,39 +161,28 @@ lib.one = function (iface, callback) {
133
161
}
134
162
}
135
163
if ( typeof callback === 'function' ) {
136
- _getMacAddress ( iface , callback ) ;
164
+ getMacAddress ( iface , callback ) ;
137
165
}
138
166
return null ;
139
167
} ;
140
168
141
169
lib . all = function ( callback ) {
142
- if ( ! callback ) {
143
- return new Promise ( function ( resolve , reject ) {
144
- lib . all ( function ( err , all ) {
145
- if ( err ) {
146
- reject ( new Error ( err ) ) ;
147
- return ;
148
- }
149
-
150
- resolve ( all ) ;
151
- } ) ;
152
- } ) ;
170
+ if ( typeof callback !== 'function' ) {
171
+ return promisify ( lib . all ) ;
153
172
}
154
173
155
174
var ifaces = lib . networkInterfaces ( ) ;
156
175
var resolve = { } ;
157
176
158
177
Object . keys ( ifaces ) . forEach ( function ( iface ) {
159
178
if ( ! ifaces [ iface ] . mac ) {
160
- resolve [ iface ] = _getMacAddress . bind ( null , iface ) ;
179
+ resolve [ iface ] = getMacAddress . bind ( null , iface ) ;
161
180
}
162
181
} ) ;
163
182
164
183
if ( Object . keys ( resolve ) . length === 0 ) {
165
184
if ( typeof callback === 'function' ) {
166
- process . nextTick ( function ( ) {
167
- callback ( null , ifaces ) ;
168
- } ) ;
185
+ process . nextTick ( callback . bind ( null , ifaces ) ) ;
169
186
}
170
187
return ifaces ;
171
188
}
0 commit comments