javascript vm with system extensions.
Uses duktape for javascript vm.
Sys=Sys1;
Sys.dprint(1, "Number of arguments: "+Sys.argc + "\n");
for(i=0;i<Sys.argc;i++)
Sys.dprint(1, i + ": "+ Sys[i] + "\n");
var Sys=Sys1;
pid = Sys.fork();
if(pid > 0) {
Sys._exit(0);
}
Sys.setsid();
Sys.chdir("/");
fd = Sys.open("/dev/null",Sys.O_RDWR, 0);
Sys.dup2(fd, 0);
Sys.dup2(fd, 1);
Sys.dup2(fd, 2);
if(fd > 2) Sys.close(fd);
while(1) {
Sys.sleep(10);
}
Sys=Sys1;
fd = Sys.open('/etc/passwd', Sys.O_RDONLY, 0);
len = Sys.lseek(fd, 0, Sys.SEEK_END);
Sys.lseek(fd, 0, Sys.SEEK_SET);
Sys.dprint(1, "Len: "+len+"\n");
res = Sys.read(fd, len);
Sys.write(1, res.buffer, res.rc);
Sys.close(fd);
stat=Sys.lstat('/etc/group');
Sys.dprint(1, JSON.stringify(stat)+"\n");
Sys=Sys1;
fds = Sys.pipe();
Sys.dprint(1, fds.rc + "\n");
Sys.dprint(1, fds[0] + "\n");
Sys.dprint(1, fds[1] + "\n");
Sys=Sys1;
while(1) {
ret = Sys.poll( [ { fd: 0, events: Sys.POLLIN } ], 1, 5000);
Sys.dprint(1, JSON.stringify(ret)+"\n");
if(ret) {
for(i=0;i<ret.fds.length;i++) {
if(ret.fds[i].revents) {
res = Sys.read(ret.fds[i].fd, 1024);
if(res.rc > 0)
Sys.dprint(1, "Read "+res.buffer);
}
}
}
}
Sys=Sys1;
fd = Sys.socket(Sys.AF_INET, Sys.SOCK_STREAM, Sys.IPPROTO_TCP);
Sys.connect(fd, { in: '127.0.0.1', port: 80 });
Sys.dprint(fd, "Hello");
Sys.close(fd);
Sys=Sys1;
fd = Sys.socket(Sys.AF_INET, Sys.SOCK_STREAM, Sys.IPPROTO_TCP);
Sys.setsockopt(fd, Sys.SOL_SOCKET, Sys.SO_REUSEADDR, 1);
Sys.bind(fd, { in: '127.0.0.1', port: 7780 });
Sys.listen(fd, 10);
while(1) {
res = Sys.accept(fd);
if(res.rc >= 0) {
Sys.dprint(res.rc, res.famliy + " " + res.addr);
Sys.close(res.rc);
}
}
Sys=Sys1;
pid = Sys.fork();
if(pid == 0) {
Sys._exit(10);
}
r = Sys.waitpid(pid, 0);
Sys.dprint(1, JSON.stringify(r) + "\n");