first commit
This commit is contained in:
45
relay.js
Normal file
45
relay.js
Normal file
@ -0,0 +1,45 @@
|
||||
const DHT = require("@hyperswarm/dht");
|
||||
const net = require("net");
|
||||
const pump = require("pump");
|
||||
const node = new DHT({});
|
||||
module.exports = () => {
|
||||
return {
|
||||
serve: (keyPair, host, port) => {
|
||||
const server = node.createServer();
|
||||
server.on("connection", function (servsock) {
|
||||
const socket = net.connect(port, host);
|
||||
socket.on('serve error', console.error);
|
||||
let open = { servsock: true, remote: true };
|
||||
servsock.on('data', (d) => { socket.write(d) });
|
||||
socket.on('data', (d) => { servsock.write(d) });
|
||||
|
||||
const remoteend = () => {
|
||||
if (open.remote) socket.end();
|
||||
open.remote = false;
|
||||
}
|
||||
const servsockend = () => {
|
||||
if (open.servsock) servsock.end();
|
||||
open.servsock = false;
|
||||
}
|
||||
servsock.on('error', remoteend)
|
||||
servsock.on('finish', remoteend)
|
||||
servsock.on('end', remoteend)
|
||||
socket.on('finish', servsockend)
|
||||
socket.on('error', servsockend)
|
||||
socket.on('end', servsockend)
|
||||
});
|
||||
server.listen(keyPair);
|
||||
return keyPair.publicKey;
|
||||
},
|
||||
client: (hexPublicKey, port) => {
|
||||
const publicKey = Buffer.from(hexPublicKey, 'hex');
|
||||
const server = net.createServer(function (local) {
|
||||
const socket = node.connect(publicKey);
|
||||
socket.on('client error', console.error);
|
||||
pump(local, socket, local);
|
||||
});
|
||||
server.listen(port, "127.0.0.1");
|
||||
return publicKey;
|
||||
}
|
||||
};
|
||||
};
|
Reference in New Issue
Block a user