abstract-socket
Advanced tools
Comparing version 1.1.0 to 2.0.0
@@ -0,10 +1,10 @@ | ||
'use strict'; | ||
var net = require('net'); | ||
var util = require('util'); | ||
var binding = require('bindings')('abstract_socket.node'); | ||
const net = require('net'); | ||
const binding = require('bindings')('abstract_socket.node'); | ||
var socket = binding.socket; | ||
var bind = binding.bind; | ||
var connect = binding.connect; | ||
var close = binding.close; | ||
const socket = binding.socket; | ||
const bind = binding.bind; | ||
const connect = binding.connect; | ||
const close = binding.close; | ||
@@ -14,3 +14,3 @@ | ||
// TODO: having the errno message here would be nice | ||
var e = new Error(syscall + ' ' + errorno); | ||
const e = new Error(syscall + ' ' + errorno); | ||
e.errno = e.code = errorno; | ||
@@ -22,37 +22,45 @@ e.syscall = syscall; | ||
function AbstractSocketServer(connectionListener) { | ||
net.Server.call(this, connectionListener); | ||
} | ||
util.inherits(AbstractSocketServer, net.Server); | ||
class AbstractSocketServer extends net.Server { | ||
constructor(listener) { | ||
super(listener); | ||
} | ||
listen(name, listener) { | ||
let err = socket(); | ||
if (err < 0) { | ||
this.emit(errnoException(err, 'socket')); | ||
} | ||
AbstractSocketServer.prototype.listen = function(name, listeningListener) { | ||
var err = socket(); | ||
if (err < 0) | ||
throw errnoException(err, 'socket'); | ||
const handle = {fd: err}; | ||
var handle = {fd: err}; | ||
err = bind(err, name); | ||
if (err < 0) { | ||
close(handle.fd); | ||
throw errnoException(err, 'bind'); | ||
err = bind(err, name); | ||
if (err < 0) { | ||
close(handle.fd); | ||
this.emit(errnoException(err, 'bind')); | ||
} | ||
super.listen(handle, listener); | ||
} | ||
} | ||
net.Server.prototype.listen.call(this, handle, listeningListener); | ||
exports.createServer = function(listener) { | ||
return new AbstractSocketServer(listener); | ||
}; | ||
exports.createServer = function(connectionListener) { | ||
return new AbstractSocketServer(connectionListener); | ||
}; | ||
exports.connect = exports.createConnection = function(name, connectListener) { | ||
const defaultOptions = { | ||
readable: true, | ||
writable: true | ||
}; | ||
let err = socket(); | ||
if (err < 0) { | ||
const sock = new net.Socket(defaultOptions); | ||
setImmediate(() => sock.emit('error', errnoException(err, 'socket'))); | ||
return sock; | ||
} | ||
exports.connect = function(name, connectListener) { | ||
var err = socket(); | ||
if (err < 0) | ||
throw errnoException(err, 'socket'); | ||
const options = Object.assign({fd: err}, defaultOptions); | ||
var options = {fd: err, readable: true, writable: true}; | ||
// yes, connect is synchronous, so sue me | ||
@@ -62,9 +70,13 @@ err = connect(err, name); | ||
close(options.fd); | ||
throw errnoException(err, 'connect'); | ||
const sock = new net.Socket(defaultOptions); | ||
setImmediate(() => sock.emit('error', errnoException(err, 'connect'))); | ||
return sock; | ||
} | ||
return new net.Socket(options); | ||
const sock = new net.Socket(options); | ||
if (typeof connectListener === 'function') { | ||
setImmediate(() => connectListener(sock)); | ||
} | ||
return sock; | ||
}; | ||
exports.createConnection = exports.connect; | ||
{ | ||
"author": { | ||
"name": "Saúl Ibarra Corretgé", | ||
"email": "saghul@gmail.com", | ||
"url": "http://bettercallsaghul.com" | ||
}, | ||
"name": "abstract-socket", | ||
"version": "1.1.0", | ||
"description": "Abstract domain socket support for Node / io.js", | ||
"main": "lib/abstract_socket", | ||
"homepage": "https://github.com/saghul/node-abstractsocket", | ||
"license": "MIT", | ||
"repository": { | ||
"type": "git", | ||
"url": "git://github.com/saghul/node-abstractsocket.git" | ||
}, | ||
"engines": { | ||
"node": ">=0.10.0" | ||
}, | ||
"dependencies": { | ||
"bindings": "^1.2.1", | ||
"nan": "^2.0.9" | ||
}, | ||
"os": [ | ||
"linux" | ||
] | ||
"author": { | ||
"name": "Saúl Ibarra Corretgé", | ||
"email": "saghul@gmail.com", | ||
"url": "http://bettercallsaghul.com" | ||
}, | ||
"scripts": { | ||
"test": "./node_modules/.bin/mocha --growl --timeout 10000 test/*.test.js" | ||
}, | ||
"name": "abstract-socket", | ||
"version": "2.0.0", | ||
"description": "Abstract domain socket support for Node", | ||
"main": "lib/abstract_socket", | ||
"homepage": "https://github.com/saghul/node-abstractsocket", | ||
"license": "MIT", | ||
"repository": { | ||
"type": "git", | ||
"url": "git://github.com/saghul/node-abstractsocket.git" | ||
}, | ||
"engines": { | ||
"node": ">=4.0.0" | ||
}, | ||
"dependencies": { | ||
"bindings": "^1.2.1", | ||
"nan": "^2.0.9" | ||
}, | ||
"devDependencies": { | ||
"should": "8.2.x", | ||
"mocha": "2.4.x" | ||
}, | ||
"os": [ | ||
"linux" | ||
] | ||
} | ||
@@ -19,5 +19,5 @@ # node-abstractsocket | ||
// abstract echo server | ||
var abs = require('./lib/abstract_socket'); | ||
const abs = require('./lib/abstract_socket'); | ||
var server = abs.createServer(function(c) { //'connection' listener | ||
const server = abs.createServer(function(c) { //'connection' listener | ||
console.log('client connected'); | ||
@@ -37,3 +37,3 @@ c.on('end', function() { | ||
```js | ||
var abs = require('./lib/abstract_socket'); | ||
const abs = require('./lib/abstract_socket'); | ||
@@ -50,3 +50,3 @@ var client = abs.connect('\0foo', function() { //'connect' listener | ||
process.stdin.on('readable', function() { | ||
var chunk = process.stdin.read(); | ||
const chunk = process.stdin.read(); | ||
if (chunk !== null) | ||
@@ -68,3 +68,3 @@ client.write(chunk); | ||
Throws an exception if the `socket(2)` system call fails. | ||
Emits an error if the `socket(2)` system call fails. | ||
@@ -75,3 +75,3 @@ ### AbstractSocketServer.listen(name, [callback] | ||
Throws an exception if the `bind(2)` system call fails, or the given `name` | ||
Emits an error if the `bind(2)` system call fails, or the given `name` | ||
is invalid. | ||
@@ -89,8 +89,11 @@ | ||
Returns a new and connected net.Socket object. | ||
Returns a new net.Socket object. | ||
Throws an exception if the `socket(2)` or `connect(2)` system calls fail, | ||
Emits an error if the `socket(2)` or `connect(2)` system calls fail, | ||
or the given `name` is invalid. | ||
## Tests | ||
Run tests with `npm test`. | ||
## Thanks | ||
@@ -101,2 +104,3 @@ | ||
@mmalecki taught me how to inherit like a pro. | ||
@randunel refactored it heavily in v2. | ||
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
Shell access
Supply chain riskThis module accesses the system shell. Accessing the system shell increases the risk of executing arbitrary code.
Found 1 instance in 1 package
Native code
Supply chain riskContains native code (e.g., compiled binaries or shared libraries). Including native code can obscure malicious behavior.
Found 1 instance in 1 package
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
313
100
0
4
20558
2
13