Mon 21 Jul 22:43:21 CEST 2025
This commit is contained in:
parent
ab01ea8c30
commit
4a9c52fa1d
138
js/dos/filesrv.js
Normal file
138
js/dos/filesrv.js
Normal file
|
@ -0,0 +1,138 @@
|
|||
/**
|
||||
** ==============================
|
||||
** 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
|
||||
** ==============================
|
||||
** BSSLAB, 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: 18-05-15 by sbosse.
|
||||
** $VERSION: 1.1.4
|
||||
**
|
||||
** $INFO:
|
||||
**
|
||||
** HTTP file server Module.
|
||||
**
|
||||
*
|
||||
** $ENDOFINFO
|
||||
*/
|
||||
|
||||
|
||||
"use strict";
|
||||
var log = 0;
|
||||
|
||||
var Io = Require('com/io');
|
||||
var Net = Require('dos/network');
|
||||
var Buf = Require('dos/buf');
|
||||
var Rpc = Require('dos/rpc');
|
||||
var util = Require('util');
|
||||
var http = Require('http');
|
||||
var xmldoc = Require('dos/ext/xmldoc');
|
||||
var Sch = Require('dos/scheduler');
|
||||
var Comp = Require('com/compat');
|
||||
var Perv = Comp.pervasives;
|
||||
var String = Comp.string;
|
||||
var Array = Comp.array;
|
||||
var Filename = Comp.filename;
|
||||
var trace = Io.tracing;
|
||||
var div = Perv.div;
|
||||
|
||||
var isNode = Comp.isNodeJS();
|
||||
|
||||
/*********************************************
|
||||
** HTTP File SERVER
|
||||
*********************************************/
|
||||
/** Auxiliary File Server
|
||||
*
|
||||
* @param {options}
|
||||
* @constructor
|
||||
*/
|
||||
var File = function(options) {
|
||||
this.srv_ip=options.srv_ip; // URL
|
||||
this.srv_ipport=options.srv_ipport; // URL:port
|
||||
this.dir=options.dir; // Local file directory to be served
|
||||
this.https=undefined;
|
||||
this.verbose=options.verbose||0;
|
||||
this.index=options.index||'index.html';
|
||||
};
|
||||
|
||||
File.prototype.init=function () {
|
||||
var self=this,
|
||||
stat='';
|
||||
|
||||
this.dir=Filename.path_absolute(this.dir);
|
||||
this.https = http.createServer(function(request, response) {
|
||||
//Io.inspect(request);
|
||||
var path=String.prefix(request.url,'?');
|
||||
String.match(request.method,[
|
||||
['GET',function() {
|
||||
// TODO
|
||||
Io.log(((log+self.verbose)<2)||('[HTTP] Get: '+path));
|
||||
var data='';
|
||||
try {
|
||||
path=self.dir+'/'+Filename.path_normalize(path=='/'?self.index:path);
|
||||
data=Io.read_file_bin(path);
|
||||
stat='OK';
|
||||
} catch (e) {
|
||||
data='File server: failed to read file '+path+' , '+util.inspect(e);
|
||||
stat=data;
|
||||
}
|
||||
if (data == undefined) {
|
||||
stat='Failed: no data read.';
|
||||
Io.out('[HTTP] : Failed to get data for file '+path);
|
||||
}
|
||||
Io.log(((log+self.verbose)<2)||('[HTTP] Get: '+request.url+' -> '+stat+' ['+(data?data.length:0)+']'));
|
||||
|
||||
if (data!=undefined) {
|
||||
//response.writeHead(200);
|
||||
response.writeHead(200,{'Access-Control-Allow-Origin': '*'});
|
||||
response.write(data);
|
||||
response.end();
|
||||
}
|
||||
}]
|
||||
])
|
||||
});
|
||||
this.https.on("connection", function (socket) {
|
||||
socket.setNoDelay(true);
|
||||
});
|
||||
Io.out('[HTTP] servicing directory: ' + this.dir);
|
||||
|
||||
};
|
||||
|
||||
File.prototype.start=function () {
|
||||
var self=this;
|
||||
if (self.verbose) Io.out('[HTTP] Starting ..');
|
||||
this.https.listen(this.srv_ipport, function () {
|
||||
Io.out('[HTTP] listen: listening on *:' + self.srv_ipport);
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
module.exports = {
|
||||
/** Auxiliary File/HTML Server
|
||||
*
|
||||
* @param srv_ip
|
||||
* @param srv_ipport
|
||||
* @param {string} dir Local directory path
|
||||
* @returns {File}
|
||||
* @constructor
|
||||
*/
|
||||
// type options = {srv_ip,srv_ipport,dir,verbose?,index?}
|
||||
File: function(options) {
|
||||
var obj = new File(options);
|
||||
Object.preventExtensions(obj);
|
||||
return obj;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user