-const electron = require('electron')
-const http = require('http')
-const path = require('path')
-const url = require('url')
const fs = require('fs')
-const app = electron.app
-const BrowserWindow = electron.BrowserWindow
-const ipcMain = electron.ipcMain
-
-let mainWindow
-
-function beginRendererProcess() {
- mainWindow = new BrowserWindow({show: true, webPreferences: { webSecurity: false, experimentalFeatures: true}})
- mainWindow.loadURL(url.format({
- pathname: path.join(__dirname, 'renderer.html'),
- protocol: 'file:',
- slashes: true
- }))
- mainWindow.webContents.openDevTools()
-}
-
-function captureStream() {
- mainWindow.webContents.send('defaultStreamRequest', 'slr')
- let p = new Promise((resolve,reject) => {
- ipcMain.on('defaultStreamResponse', (event, arg) => {
- console.log('defaultStreamResponse')
- console.log(arg)
- resolve(arg)
- })
- })
+const ws = require('ws')
+const https = require('https')
+const http = require('http')
+const getport = require('get-port')
+const argv = require('minimist')(process.argv.slice(2))
- return p
+const https_router_opts = {
+ key: fs.readFileSync('stunnel.key'),
+ cert: fs.readFileSync('stunnel.cert')
}
-
-const routes = {
- '/': function root(response) {
- response.write(fs.readFileSync('admin.html'))
- response.end()
- },
- '/admin.js': function js(response) {
- response.write(fs.readFileSync('admin.js'))
- response.end()
- },
- '/admin.css': function css(response) {
- response.write(fs.readFileSync('admin.css'))
- response.end()
- },
- '/favicon.ico': function favicon() {
- return 'strapp'
+let https_routes = {}
+const https_router = https.createServer(https_router_opts, (request, response) => {
+ let ht_argv = request.url.slice(1).split("?")
+ console.log(ht_argv)
+ if (ht_argv[0] in https_routes) {
+ response.writeHead(200, { 'Content-Type': 'text/plain' })
+ response.write('You are a remote client\r\n')
+ let route = https_routes[ht_argv[0]]
+ response.write('You should connect to ' + route.host + "\r\nOn port: " + route.port + "\r\n")
response.end()
- },
- '/streamlist': function streamlist(response) {
- let mediaStream = captureStream().then((stream) => {
- console.log(stream)
+ }
+ else if (ht_argv[0].indexOf(".") == -1) {
+ https_routes[ht_argv[0]] = 'true'
+ response.writeHead(200, { 'Content-Type': 'text/html' })
+ let new_route = {}
+ new_route.host = request.headers['x-forwarded-for'] || request.connection.remoteAddress
+ getport().then( (port) => {
+ new_route.port = port
+ new_route.httpd = https.createServer(https_router_opts, (request, response) => {
+ }).listen(port)
+ new_route.ws = new ws.Server( { server: new_route.httpd } )
+ new_route.ws.on('connection', (ws) => { console.log("socket connected"); ws.send("CONNECTED") } )
+ new_route.ws.on('message', (msg) => { console.log("Received message" + msg) })
+ console.log("Listening for websocket socket " + new_route.port + " on " + new_route.host)
+ console.log(new_route)
+ https_routes[ht_argv[0]] = new_route
+ }).then(() => {
+ let str = String(fs.readFileSync('remote-server.html'))
+ response.write(str.replace("$HOST",new_route.host.slice(7)).replace("$PORT",new_route.port))
+ response.end()
})
-
- //response.write(mediaStream)
}
-}
+}).listen(2443)
-app.on('ready', function() {
- beginRendererProcess()
- http.createServer(function(request, response) {
- const url = request.url
- console.log('routing to ' + url);
- routes[url](response)
+if ("electron" in process.versions);
- }).listen(5140);
-});