Mon 21 Jul 22:43:21 CEST 2025

This commit is contained in:
sbosse 2025-07-21 22:45:09 +02:00
parent c6b047a4ae
commit 93c0980d97

192
js/dos/runsrv.js Normal file
View File

@ -0,0 +1,192 @@
/**
** ==================================
** 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) 2006-2016 BSSLAB
** $CREATED: 23/05/16 by sbosse.
** $VERSION: 1.1.8
**
** $INFO:
**
** JAMDOS: Run Server Extension
**
**
** $ENDOFINFO
*/
var log = 0;
var util = Require('util');
var Io = Require('com/io');
var trace = Io.tracing;
var current=none;
var Aios = none;
var Net = Require('dos/network');
var Rpc = Require('dos/rpc');
var Router = Require('dos/router');
var Compat = Require('com/compat');
var Perv = Compat.pervasives;
var String = Compat.string;
var Array = Compat.array;
var assert = Compat.assert;
var Sch = Require('dos/scheduler');
var Buf = Require('dos/buf');
var DnsCom = Require('dos/dns_srv_common');
var Dns = Require('dos/dns');
var Cs = Require('dos/capset');
var Json = Require('jam/jsonfn');
var Status = Net.Status;
var Command = Net.Command;
var Rights = Net.Rights;
var isNodeJS = Compat.isNodeJS();
var run = function (options) {
this.options=options;
}
run.prototype.request = function (rpcio) {
var text,ac,code,name,
id,obj;
Io.log((log < 1) || ('[RUN] service request: '+Net.Print.header(rpcio.header)));
assert(rpcio.index != -1, 'RPCIO invalid');
rpcio.pos = 0;
rpcio.header.h_status = Status.STD_OK;
obj = Net.prv_number(rpcio.header.h_priv);
try {switch (rpcio.header.h_command) {
case Command.PS_CREATE:
/* Create a process from a template and execute with arguments
** --------------------
** class name (string)
** num argunments (int16)
** arg1 (string)
** ..
** --------------------
** --------------------
*/
break;
case Command.PS_EXEC:
/* Create a process from code {} (next activity already computed!)
** ------------------
** object JS (string) "{ x:..,y:..,act:..,trans:..,.. }"
** ----------------------
** ----------------------
*/
if (!Net.prv_rights_check(rpcio.header.h_priv ,this.random, Rights.PSR_WRITE|Rights.PSR_CREATE)) {
throw Status.STD_DENIED;
}
text = Buf.buf_get_string(rpcio);
// code=Json.parse(text,{});
// console.log(code)
this.receive(text,true);
break;
case Command.PS_FORK:
// Fork a process from a running process
break;
case Command.PS_MIGRATE:
// Migration: Execute a process from a snapshot (next activity computed here!)
// console.log(Net.Print.private(rpcio.header.h_priv))
if (!Net.prv_rights_check(rpcio.header.h_priv ,this.random, Rights.PSR_WRITE|Rights.PSR_CREATE)) {
throw Status.STD_DENIED;
}
/*
**
** ----------------------
** object JS (string) "{ x:..,y:..,act:..,trans:..,.. }"
** ----------------------
** ----------------------
*/
text = Buf.buf_get_string(rpcio);
// code=Json.parse(text,{});
// console.log(code)
// console.log(text)
this.receive(text,false);
break;
case Command.PS_READ:
/* Client read request for a process class template
**
** ----------------------
** class name (string)
** ----------------------
** object JS (string) "{ ac: function() .. }"
** ----------------------
*/
name = Buf.buf_get_string(rpcio);
ac=this.getclass(name);
if (ac) {
text=Json.stringify({name:ac});
Buf.buf_init(rpcio);
Buf.buf_put_string(rpcio, text);
} else rpcio.header.h_status = Status.STD_UNKNOWN;
break;
case Command.PS_STUN:
// Kill a process/ create a snapshot
id = Buf.buf_get_string(rpcio);
stat=Aios.kill(id);
if (stat) this.out('Agent '+id+' terminated.');
break;
case Command.PS_WRITE:
// console.log(Net.Print.private(rpcio.header.h_priv))
if (!Net.prv_rights_check(rpcio.header.h_priv ,this.random, Rights.PSR_WRITE|Rights.PSR_CREATE)) {
throw Status.STD_DENIED;
}
/*
** Client write request for a process class template
**
** ----------------------
** object JS (string) "{ ac: function() .. }"
** ----------------------
** ----------------------
*/
text = Buf.buf_get_string(rpcio);
ac=Json.parse(text,{});
// console.log(ac)
this.addclass(ac);
break;
default:
// Not serviced.
return false;
}} catch (e) {
switch (e) {
case Status.STD_DENIED: rpcio.header.h_status=e; break;
default:
Io.out('[RUN] Error: '+e);
rpcio.header.h_status=Status.STD_SYSERR;
}
}
return true; // serviced
}
module.exports = {
run:run,
current:function (module) { current=module.current; Aios=module; }
}