diff --git a/js/dos/appl/shell.js b/js/dos/appl/shell.js new file mode 100644 index 0000000..ea2c58d --- /dev/null +++ b/js/dos/appl/shell.js @@ -0,0 +1,507 @@ +/** + ** ============================== + ** 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) 2015-2017 bLAB + ** $CREATED: 26-5-15. + ** $VERSION: 1.2.17 + ** + ** $INFO: + ** + ** DOS: DOS Terminal Shell + ** + ** $ENDOFINFO + */ +"use strict"; +var log = 0; +var version = "1.2" +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 Ash = Require('dos/ash'); +var HostSrv = Require('dos/hostsrv'); + +var trace = Io.tracing; + +var options = { + bip:'localhost', + bport:3001, + broker: true, + default:false, + dip : 'localhost', + dports : [], + env:{}, + hostport:undefined, + hostsrv:false, + http:false, + keepalive:true, + links:[], + myip:'localhost', + monitor:false, + servmode:false, + tcpnet:1, + verbose:0 +}; + +options.privhostport = Net.uniqport(); +options.pubhostport = Net.prv2pub(options.privhostport); + +var env = Ash.Env(); +var help=false; +var argv = Io.getargs(); + +options.env = env; + +var readline = Require('dos/ext/readline'); + +Args.parse(argv, [ + [['-help','-h'],0,function() {help=true;}], + ['-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]) + } + }], + ['-dip',1,function(val){options.dip=val}], + ['-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)])}], + ['-nokeepalive',0,function(val){options.keepalive=false;}], + ['-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;}], + ['-server',0,function(val){options.servmode=true;}], + [['-default','-d'],0,function(val){options.default=true;}], + ['-monitor',0,function () {options.monitor++; out('Setting monitor to level '+options.monitor); }], + [['-v','-verbose'],0,function(val){options.verbose++; out('Setting verbosity to level '+options.verbose);}] +]); + +if (help) { + Io.out('usage: '+argv[0]+' '+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 ] UDP Server Port'); + Io.out(' [-L ] Broker URL (Default: '+options.bip+': HTTP '+options.bport+' TCPNET '+(options.bport+100)+')'); + Io.out(' [-dip ] (Default: '+options.dip+')'); + Io.out(' [-host ] Set Host Port'); + Io.out(' [-root ] Set Root Cap.'); + Io.out(' [+root ] Appennd Root Cap.'); + Io.out(' [-default, -d] Ask broker server for default DNS => DNS root => Shell root!'); + Io.out(' [-help -h -v -verbose -monitor]'); + Io.out(' [-e