Mon 21 Jul 22:43:21 CEST 2025
This commit is contained in:
parent
62b0b449a3
commit
b3cfbc069e
284
js/dos/appl/dns.js
Normal file
284
js/dos/appl/dns.js
Normal file
|
@ -0,0 +1,284 @@
|
|||
/**
|
||||
** ==============================
|
||||
** O O O OOOO
|
||||
** O O O O O O
|
||||
** O O O O O O
|
||||
** OOOO OOOO O OOO OOOO
|
||||
** O O O O O O O
|
||||
** O O O O O O O
|
||||
** OOOO OOOO O O OOOO
|
||||
** ==============================
|
||||
** Dr. Stefan Bosse http://www.bsslab.de
|
||||
**
|
||||
** COPYRIGHT: THIS SOFTWARE, EXECUTABLE AND SOURCE CODE IS OWNED
|
||||
** BY THE AUTHOR(S).
|
||||
** 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) 2006-2017 bLAB
|
||||
** $CREATED: 8-7-15 by sbosse.
|
||||
** $VERSION: 1.2.5
|
||||
**
|
||||
** $INFO:
|
||||
**
|
||||
** DOS: DNS Top-level
|
||||
**
|
||||
** $ENDOFINFO
|
||||
*/
|
||||
"use strict";
|
||||
|
||||
var Io = Require('com/io');
|
||||
//Io.trace_open('/tmp/afs.trace');
|
||||
|
||||
var Net = Require('dos/network');
|
||||
var Status = Net.Status;
|
||||
var Command = Net.Command;
|
||||
var Rights = Net.Rights;
|
||||
var Sch = Require('dos/scheduler');
|
||||
var Conn = Require('dos/connection');
|
||||
var Buf = Require('dos/buf');
|
||||
var Rpc = Require('dos/rpc');
|
||||
var Std = Require('dos/std');
|
||||
var Afs = Require('dos/afs');
|
||||
var DnsInt = Require('dos/dns');
|
||||
var Dns = Require('dos/dns_srv_common');
|
||||
var DnsSrv = Require('dos/dns_srv');
|
||||
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 div = Comp.div;
|
||||
var Fs = Require('fs');
|
||||
var HostSrv = Require('dos/hostsrv');
|
||||
var Args = Comp.args;
|
||||
|
||||
var trace = Io.tracing;
|
||||
|
||||
var options = {
|
||||
cols : DnsInt.DNS_DEFAULT_COLS,
|
||||
colmasks : DnsInt.DNS_DEFAULT_RIGHTS,
|
||||
create:false,
|
||||
blocksize:512,
|
||||
bip:'localhost',
|
||||
bport:3001,
|
||||
broker: true,
|
||||
dcapf:'dns.cap',
|
||||
dip:'localhost',
|
||||
dir:'/tmp',
|
||||
dports:[],
|
||||
env:{},
|
||||
fcapf:'afs.cap',
|
||||
fs_caps:[],
|
||||
hostname:Io.hostname(),
|
||||
hostport:undefined,
|
||||
hostsrv:false,
|
||||
http:false,
|
||||
keepalive:true,
|
||||
links:[],
|
||||
monitor:0,
|
||||
myip:'localhost',
|
||||
ndirs:1024,
|
||||
overwrite:false,
|
||||
part:'dns.inode',
|
||||
setdefault:false,
|
||||
shunk:10000,
|
||||
tcpnet:1,
|
||||
verbose:0
|
||||
};
|
||||
|
||||
|
||||
|
||||
var help=false;
|
||||
var todo = [];
|
||||
|
||||
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 argv = Io.getargs();
|
||||
Args.parse(argv, [
|
||||
[['-h','-help'],0,function() {help=true}],
|
||||
[['-v','-verbose'],0,function() {options.verbose++;}],
|
||||
['-monitor',0,function(val){options.monitor++;}],
|
||||
['-broker',1,function(val){
|
||||
var tokens = Comp.string.split(':',val);
|
||||
if (tokens.length==1)
|
||||
options.bip=val;
|
||||
else {
|
||||
options.bip=tokens[0];
|
||||
options.bport=Perv.int_of_string(tokens[1])
|
||||
}
|
||||
}],
|
||||
[['-default','-d'],0,function() {options.setdefault=true;}],
|
||||
['-dip',1,function(val){options.dip=val}],
|
||||
['-overwrite',0,function() {options.overwrite=true;}],
|
||||
['-create',0,function() {options.create=true;}],
|
||||
['-ndirs',1,function(val) {options.ndirs=Perv.int_of_string(val);}],
|
||||
['-blocksize',1,function(val) {options.blocksize=Perv.int_of_string(val);}],
|
||||
['-dir',1,function(val){options.dir=val}],
|
||||
['-part',1,function(val) {options.part=val;}],
|
||||
['-fcap',1,function(val) {
|
||||
var cp = Net.Parse.capability(val);
|
||||
if (cp!=undefined)
|
||||
options.fs_caps.push(cp.cap);
|
||||
else {
|
||||
/*
|
||||
** Path to capability file?
|
||||
*/
|
||||
var cap = Net.cap_of_file(options.dir+'/'+val);
|
||||
if (cap!=undefined) {
|
||||
Io.out('[DNS] Got AFS capability from file '+options.dir+'/'+val);
|
||||
options.fs_caps.push(cap);
|
||||
}
|
||||
}}],
|
||||
['-dcap',1,function(val) {options.dcapf=val;}],
|
||||
['-nokeepalive',0,function(val){options.keepalive=false;}],
|
||||
['-D',1,function(val){options.dports.push(Perv.int_of_string(val))}],
|
||||
['-L',2,function(val1,val2){options.links.push([Perv.int_of_string(val1),getip(val2),getipport(val2)])}],
|
||||
['-T',0,function(val){options.tcpnet=1;options.http=false;}],
|
||||
['-T2',0,function(val){options.tcpnet=2;options.http=false;}],
|
||||
['-H',0,function(val){options.http=true;options.tcpnet=0;}]
|
||||
]);
|
||||
|
||||
options.part = options.dir+'/'+options.part;
|
||||
options.dcapf = options.dir+'/'+options.dcapf;
|
||||
options.fcapf = options.dir+'/'+options.fcapf;
|
||||
|
||||
|
||||
if (help) {
|
||||
Io.out('usage: ' + process.argv[0] + ' ' + process.argv[1]);
|
||||
Io.out(' [-H -T -T2] Enable connection service');
|
||||
Io.out(' T: TCPIP, 1-ch H:HTTP T2: TCPIP, 2-ch');
|
||||
Io.out(' H: bport, T: bport+100');
|
||||
Io.out(' (Default: -T)');
|
||||
Io.out(' [-D <port>] UDP Server Port');
|
||||
Io.out(' [-L <src port> <UDP dst [address:]port] UDP P2P Connection');
|
||||
Io.out(' [-nokeepalive] Establish a new conncetion for each message.');
|
||||
Io.out(' [-broker <ip[:ipport]>] Broker URL (Default: '+options.bip+': HTTP '+options.bport+' TCPNET '+(options.bport+100)+')');
|
||||
Io.out(' [-dip <VLC UDP server URI>] (Default: '+options.dip+')');
|
||||
Io.out(' [-default -d] Set this server as default and notify broker server (Default: false).');
|
||||
Io.out(' [-help -h -v -verbose -monitor]');
|
||||
Io.out(' [-create -overwrite]');
|
||||
Io.out(' [-ndirs ' + options.ndirs + ' -blocksize ' + options.blocksize + ']');
|
||||
Io.out(' [-part ' + options.part + ' -dcap ' + options.dcapf + ']');
|
||||
Io.out(' [-fcap <AFS capability|full_path_to_cap_file>' + '] (Default: '+options.fpcaf+')');
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
|
||||
if (Array.length(options.fs_caps)==0) {
|
||||
/*
|
||||
** Try to get AFS capability from file system...
|
||||
*/
|
||||
var cap = Net.cap_of_file(options.fcapf);
|
||||
if (cap!=undefined) {
|
||||
options.fs_caps.push(cap);
|
||||
Io.out('[DNS] Got AFS capability from file '+options.fcapf);
|
||||
}
|
||||
}
|
||||
if (Array.length(options.fs_caps)==1) options.fs_caps.push(Net.nilcap);
|
||||
|
||||
|
||||
options.privhostport = Net.uniqport();
|
||||
options.pubhostport = Net.prv2pub(options.privhostport);
|
||||
var scheduler = Sch.TaskScheduler();
|
||||
scheduler.Init();
|
||||
|
||||
// Set-up the network environment ..
|
||||
// typeof options : {http,tcpnet,dports,bip,bport,myip,verbose}
|
||||
var network = Conn.setup(options);
|
||||
|
||||
|
||||
var server = DnsSrv.Server(network.rpc,options);
|
||||
var stat=Status.STD_OK;
|
||||
server.init();
|
||||
|
||||
if (options.create)
|
||||
todo.push([
|
||||
function () {
|
||||
server.create_fs('mydirs',options.ndirs,options.blocksize,options.cols,options.colmasks,
|
||||
options.part,options.fs_caps,true, function (_stat) {
|
||||
stat=_stat;
|
||||
});
|
||||
},
|
||||
function () {
|
||||
if (stat!=Status.STD_OK)
|
||||
Io.err('[DNS] Creation of DNS failed: '+Status.print(stat));
|
||||
else
|
||||
Io.out('[DNS] Finished.')
|
||||
}
|
||||
]);
|
||||
|
||||
todo.push([
|
||||
function () {
|
||||
server.open_fs(options.part,Dns.Dns_cache_parameter(2*div(options.ndirs*Dns.DEF_INODE_SIZE,Dns.DEF_BLOCK_SIZE),1,100,30), function (_stat) {
|
||||
stat=_stat;
|
||||
});
|
||||
},
|
||||
function () {
|
||||
if (stat!=Status.STD_OK)
|
||||
Io.err('[DNS] Opening of DNS failed: '+Status.print(stat));
|
||||
else
|
||||
Io.out('[DNS] Finished.')
|
||||
}
|
||||
]);
|
||||
var hostsrv;
|
||||
if (options.hostsrv)
|
||||
hostsrv = HostSrv.HostServer(
|
||||
scheduler,
|
||||
rpc,options,
|
||||
'DNS.'+options.hostname
|
||||
);
|
||||
|
||||
|
||||
|
||||
//Io.out(server.afs_stat());
|
||||
todo.push([
|
||||
function () {
|
||||
for(var i=0;i<4;i++) {
|
||||
server.dns_start_server(i,scheduler);
|
||||
}
|
||||
options.env.dns_def=
|
||||
Net.Capability(server.dns_super.dns_putport,
|
||||
Net.prv_encode(server.rootdir.dd_objnum,Rights.PRV_ALL_RIGHTS,server.rootdir.dd_random));
|
||||
Io.out('[DNS] Super Capability '+Net.Print.capability(options.env.dns_def));
|
||||
Io.out('[DNS] Publishing Super Capability in file '+options.dcapf);
|
||||
Net.cap_to_file(options.env.dns_def,options.dcapf);
|
||||
if (options.setdefault)
|
||||
network.notify('DNS',Net.Print.capability(options.env.dns_def));
|
||||
|
||||
}]);
|
||||
|
||||
|
||||
todo=Array.flatten(todo);
|
||||
Sch.ScheduleBlock(todo, function (e) {
|
||||
Io.out('[DNS] Caught error: '+e+'. Exiting.');
|
||||
Io.exit();
|
||||
});
|
||||
|
||||
process.on('SIGINT', function () {
|
||||
Io.out('Got SIGINT ..');
|
||||
server.exit();
|
||||
process.exit(2);
|
||||
});
|
||||
|
||||
// Start up the network ..
|
||||
network.init(network.start);
|
||||
scheduler.Run();
|
Loading…
Reference in New Issue
Block a user