170 lines
5.0 KiB
JavaScript
170 lines
5.0 KiB
JavaScript
/**
|
|
** ==================================
|
|
** OOOO OOOO OOOO O O OOOO
|
|
** O O O O O O O O O
|
|
** O O O O O O O O O
|
|
** OOOO OOOO OOOO O OOO OOOO
|
|
** O O O O O O O O O
|
|
** O O O O O O O O O
|
|
** OOOO OOOO OOOO OOOO O O OOOO
|
|
** ==================================
|
|
** BSSLAB, Dr. Stefan Bosse http://www.bsslab.de
|
|
**
|
|
** COPYRIGHT: THIS SOFTWARE, EXECUTABLE AND SOURCE CODE IS OWNED
|
|
** BY THE AUTHOR.
|
|
** THIS SOURCE CODE MAY NOT BE COPIED, EXTRACTED,
|
|
** MODIFIED, OR OTHERWISE USED IN A CONTEXT
|
|
** OUTSIDE OF THE SOFTWARE SYSTEM.
|
|
**
|
|
** $AUTHORS: Stefan Bosse
|
|
** $INITIAL: (C) 2015-2016 BSSLAB
|
|
** $CREATED: 8/7/15
|
|
** $VERSION: 1.1.2
|
|
**
|
|
** $INFO:
|
|
**
|
|
** Generic Network Node
|
|
**
|
|
** $ENDOFINFO
|
|
*/
|
|
"use strict";
|
|
var log = 0;
|
|
|
|
var Io = Require('com/io');
|
|
//Io.trace_open('/tmp/shell.trace');
|
|
|
|
var Net = Require('dos/network');
|
|
var Buf = Require('dos/buf');
|
|
var Sch = Require('dos/scheduler');
|
|
var Conn = Require('dos/connection');
|
|
var Rpc = Require('dos/rpc');
|
|
var Std = Require('dos/std');
|
|
var Router = Require('dos/router');
|
|
var util = require('util');
|
|
var Comp = Require('com/compat');
|
|
var assert = Comp.assert;
|
|
var String = Comp.string;
|
|
var Array = Comp.array;
|
|
var Perv = Comp.pervasives;
|
|
var Printf = Comp.printf;
|
|
var Filename = Comp.filename;
|
|
var Obj = Comp.obj;
|
|
var Args = Comp.args;
|
|
var Status = Net.Status;
|
|
var Command = Net.Command;
|
|
var Fs = require('fs');
|
|
var Dns = Require('dos/dns');
|
|
var Cs = Require('dos/capset');
|
|
var Getenv = Require('com/getenv');
|
|
var Host = Require('dos/host');
|
|
|
|
var trace = Io.tracing;
|
|
|
|
var privhostport = Net.uniqport();
|
|
var pubhostport = Net.prv2pub(privhostport);
|
|
|
|
function getip(str) {
|
|
var tokens = String.split(':',str);
|
|
if (tokens.length==2) return tokens[0];
|
|
else if (tokens.length==1) return 'localhost';
|
|
else return '';
|
|
|
|
}
|
|
|
|
function getipport(str) {
|
|
var tokens = String.split(':', str);
|
|
if (tokens.length == 2) return Perv.int_of_string(tokens[1]);
|
|
else if (tokens.length == 1) return Perv.int_of_string(tokens[0]);
|
|
else return '';
|
|
|
|
}
|
|
var dports = [];
|
|
var dip = 'localhost';
|
|
var links = [];
|
|
var bport = 3001;
|
|
var bip = 'localhost';
|
|
|
|
var argv = Io.getargs();
|
|
var verbose=0;
|
|
var monitor=0;
|
|
var report=0;
|
|
var help=false;
|
|
var todos = [];
|
|
|
|
var scheduler = Sch.TaskScheduler();
|
|
scheduler.Init();
|
|
var router = Router.RpcRouter(pubhostport);
|
|
var rpc = Rpc.RpcInt(router);
|
|
var std = Std.StdInt(rpc);
|
|
|
|
Args.parse(argv, [
|
|
[['-help','-h'],0,function() {help=true;}],
|
|
['-bport',1,function(val) {bport=Perv.int_of_string(val);}],
|
|
['-bip',1,function(val) {bip=val;}],
|
|
['+dport',1,function(val){dports.push(Perv.int_of_string(val))}],
|
|
['-dip',1,function(val){dip=val}],
|
|
['-info',1,function(val){todos.push([
|
|
function () {
|
|
var port = Net.Parse.port(val);
|
|
var cap = Net.Capability(port.port,Net.Private());
|
|
std.std_info(cap,function (stat,msg){
|
|
Io.out(Status.print(stat)+': '+msg);
|
|
})
|
|
}
|
|
])}],
|
|
['+link',2,function(val1,val2){links.push([Perv.int_of_string(val1),getip(val2),getipport(val2)])}],
|
|
[['-v','-verbose'],0,function(val){verbose++;}],
|
|
['-monitor',0,function(val){monitor++;}],
|
|
['-report',0,function(val){report++;}]
|
|
]);
|
|
|
|
if (help) {
|
|
Io.out('usage: '+argv[0]+' '+argv[1]);
|
|
Io.out(' [-help -monitor -report]');
|
|
Io.out(' [-bport <HTTP Broker server port>] (Default : '+bport+')');
|
|
Io.out(' [-bip <HTTP Broker URI>] (Default : '+bip+')');
|
|
Io.out(' [+dport <VLC UDP server port>] ');
|
|
Io.out(' [-dip <VLC UDP server URI>] (Default : '+dip+')');
|
|
Io.out(' [+link <VLC src port>] <VLC dst [URI]:port]');
|
|
Io.exit();
|
|
}
|
|
|
|
for (var i in dports) {
|
|
var dport = dports[i];
|
|
var create = function (dport) {
|
|
var vlc = Conn.UdpConnection(Net.uniqport(), dip, dport, undefined, undefined, router);
|
|
vlc.init();
|
|
vlc.start(function (stat) {
|
|
if(stat==Status.STD_OK) {
|
|
// Something to connect to ?
|
|
var connectit = Array.find(links,function (link) {return link[0]==dport;});
|
|
if (connectit != undefined) {
|
|
vlc.link(connectit[1],connectit[2]);
|
|
vlc.watchdog(true);
|
|
}
|
|
}
|
|
});
|
|
vlc.verbose=verbose;
|
|
return vlc;
|
|
};
|
|
create(dport);
|
|
}
|
|
|
|
if (Array.empty(dports)) {
|
|
var conn = Conn.HttpConnection(Net.uniqport(), bip, bport);
|
|
conn.init();
|
|
router.connection_broker(conn);
|
|
}
|
|
router.monitor=monitor;
|
|
router.init();
|
|
var hostsrv=Host.HostServer(scheduler,rpc,pubhostport,privhostport);
|
|
router.start(100);
|
|
|
|
if (report) Sch.AddTimer(10000,'Router Status',function(){
|
|
Io.out(router.status())
|
|
});
|
|
|
|
if (!Array.empty(todos)) {
|
|
Sch.ScheduleBlock(Array.flatten(todos));
|
|
}
|