name upnp naming scheme (fs compatible)
parent
e0b837876d
commit
a105e5aa93
|
|
@ -69,6 +69,6 @@ module.exports.Identity = class Identity {
|
|||
}
|
||||
|
||||
toString() {
|
||||
return `[Identity(${this.name})]`;
|
||||
return `[Identity ${this.name}]`;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
const net = require('net');
|
||||
const EventEmitter = require('events');
|
||||
const NodeRSA = require('node-rsa');
|
||||
const log = require('signale').scope('stp');
|
||||
const log = require('signale').scope('_STP');
|
||||
const {
|
||||
KeyExchangePacket,
|
||||
AckPacket
|
||||
|
|
@ -36,7 +36,7 @@ class Server extends EventEmitter {
|
|||
}
|
||||
|
||||
openServer() {
|
||||
log.info(`opening STP server on ${this.port}`);
|
||||
// log.info(`opening STP server on ${this.port}`);
|
||||
this.tcpServer = net.createServer(this.tcpConnectClient.bind(this));
|
||||
this.tcpServer.on('error', e => {
|
||||
log.warn(e)
|
||||
|
|
|
|||
74
lib/node.js
74
lib/node.js
|
|
@ -4,6 +4,8 @@ const upnp = require('./upnp');
|
|||
const md5 = require('md5');
|
||||
const pkg = require('./../package.json');
|
||||
const { config, write } = require('./config.js');
|
||||
const log = require('signale').scope('NODE');
|
||||
const { createAdvertisement, tcp, browseThemAll } = require('mdns');
|
||||
|
||||
class Node extends EventEmitter {
|
||||
clients = [];
|
||||
|
|
@ -12,66 +14,84 @@ class Node extends EventEmitter {
|
|||
readyPromise = null;
|
||||
port = null;
|
||||
identity;
|
||||
multicastAd = null;
|
||||
multicastBrowser = null;
|
||||
connected = false;
|
||||
|
||||
constructor(identity) {
|
||||
super();
|
||||
this.identity = identity;
|
||||
this.hash = md5(identity.publicKey);
|
||||
this.name = `valnet node - ${this.hash}`;
|
||||
// stp.createServer({
|
||||
// identity,
|
||||
// port
|
||||
// }, socket => {
|
||||
// log.info('secured connection from ' + socket.remoteAddress);
|
||||
// this.clients.push(socket);
|
||||
// });
|
||||
this.readyPromise = this.negotiatePort().then(this.startServer.bind(this));
|
||||
this.name = `valnet-node-${identity.name}`;
|
||||
|
||||
this.readyPromise = this.negotiatePort()
|
||||
.then(this.startServer.bind(this))
|
||||
.catch(this.serverStartupFailed.bind(this))
|
||||
.then(this.connectNetwork.bind(this))
|
||||
}
|
||||
|
||||
startServer() {
|
||||
|
||||
console.log('creating server on port ' + this.port);
|
||||
async connectNetwork() {
|
||||
|
||||
}
|
||||
|
||||
async serverStartupFailed(error) {
|
||||
log.warn('Failed to set up Valet server on node.')
|
||||
}
|
||||
|
||||
async startServer() {
|
||||
log.info('creating Valnet Node on port ' + this.port + '...');
|
||||
|
||||
stp.createServer({
|
||||
identity: this.identity,
|
||||
port: this.port
|
||||
}, (connection) => {
|
||||
console.log('incomming connection...');
|
||||
console.dir(connection);
|
||||
})
|
||||
log.info('incomming connection from ' + connection.remoteAddress);
|
||||
});
|
||||
|
||||
log.info('advertising node on multicast...')
|
||||
this.multicastAd = createAdvertisement(tcp('STP'), this.port, {
|
||||
name: 'xyz.valnet.node',
|
||||
});
|
||||
|
||||
this.multicastBrowser = browseThemAll();
|
||||
|
||||
this.multicastBrowser.on('serviceUp', this.serviceUp.bind(this));
|
||||
this.multicastBrowser.on('serviceDown', this.serviceDown.bind(this));
|
||||
|
||||
// log.success('Node successfully registered!');
|
||||
}
|
||||
|
||||
async serviceUp(service) {
|
||||
log.debug('up', service);
|
||||
}
|
||||
|
||||
async serviceDown(service) {
|
||||
log.debug('down', service);
|
||||
}
|
||||
|
||||
async negotiatePort() {
|
||||
// await upnp.map(5600, 60 * 5, 'other application');
|
||||
|
||||
const mappings = await upnp.mappings();
|
||||
|
||||
const matchingMappings = mappings.filter(mapping => {
|
||||
return mapping.description === this.name
|
||||
});
|
||||
const alreadyMapped = matchingMappings.length > 0;
|
||||
const takenPorts = mappings.map(mapping => mapping.public.port);
|
||||
|
||||
if(alreadyMapped) {
|
||||
console.log('already mapped!');
|
||||
this.port = matchingMappings[0].public.port;
|
||||
log.success(`upnp port ${this.port} already registered!`);
|
||||
return;
|
||||
}
|
||||
|
||||
const takenPorts = mappings.map(mapping => mapping.public.port);
|
||||
|
||||
for(let port = config.ports.relay; port <= config.ports.relayEnd; port ++) {
|
||||
if(takenPorts.indexOf(port) === -1) {
|
||||
console.log('registering to port ' + port);
|
||||
await upnp.mapIndefinite(port, this.name);
|
||||
this.port = port;
|
||||
break;
|
||||
} else {
|
||||
console.log('port ' + port + ' is taken...');
|
||||
log.success(`registered upnp port ${this.port}`);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
// console.log(mappings, this.hash);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -31,6 +31,7 @@
|
|||
"keyv": "^4.0.3",
|
||||
"keyv-file": "^0.2.0",
|
||||
"md5": "^2.3.0",
|
||||
"mdns": "^2.7.2",
|
||||
"nat-upnp": "^1.1.1",
|
||||
"nedb": "^1.8.0",
|
||||
"node-rsa": "^1.1.1",
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
(async () => {
|
||||
const { title } = require('../lib/title');
|
||||
const net = require('net');
|
||||
const log = require('signale').scope('relay');
|
||||
const log = require('signale').scope('RLAY');
|
||||
const { Identity } = require('../lib/Identity');
|
||||
const stp = require('../lib/STP');
|
||||
title('relay', false);
|
||||
|
|
@ -22,7 +22,7 @@ function connectNetwork(t = 1000) {
|
|||
if(t > 60000) t /= 2;
|
||||
|
||||
const poopoo = config.endpoints[0].split(':');
|
||||
console.log(poopoo);
|
||||
// console.log(poopoo);
|
||||
|
||||
const client = stp.connect({
|
||||
identity,
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
(async () => {
|
||||
const log = require('signale').scope('service');
|
||||
const log = require('signale').scope('SRVC');
|
||||
const { execSync, spawn } = require('child_process');
|
||||
const branch = execSync('git rev-parse --abbrev-ref HEAD').toString().trim();
|
||||
let proc;
|
||||
|
|
|
|||
15
yarn.lock
15
yarn.lock
|
|
@ -119,6 +119,10 @@ binary-search-tree@0.2.5:
|
|||
dependencies:
|
||||
underscore "~1.4.4"
|
||||
|
||||
bindings@~1.2.1:
|
||||
version "1.2.1"
|
||||
resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.2.1.tgz#14ad6113812d2d37d72e67b4cacb4bb726505f11"
|
||||
|
||||
body-parser@1.19.0:
|
||||
version "1.19.0"
|
||||
resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a"
|
||||
|
|
@ -920,6 +924,13 @@ md5@^2.3.0:
|
|||
crypt "0.0.2"
|
||||
is-buffer "~1.1.6"
|
||||
|
||||
mdns@^2.7.2:
|
||||
version "2.7.2"
|
||||
resolved "https://registry.yarnpkg.com/mdns/-/mdns-2.7.2.tgz#1629077b950e2a9bdb02e370d505ff4fa2ace0ff"
|
||||
dependencies:
|
||||
bindings "~1.2.1"
|
||||
nan "^2.14.0"
|
||||
|
||||
media-typer@0.3.0:
|
||||
version "0.3.0"
|
||||
resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
|
||||
|
|
@ -992,6 +1003,10 @@ mute-stream@0.0.8:
|
|||
version "0.0.8"
|
||||
resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d"
|
||||
|
||||
nan@^2.14.0:
|
||||
version "2.14.2"
|
||||
resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19"
|
||||
|
||||
nat-upnp@^1.1.1:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/nat-upnp/-/nat-upnp-1.1.1.tgz#b18365e4faf44652549bb593c69e6b690df22043"
|
||||
|
|
|
|||
Reference in New Issue