webtty: switch upward protocol to JSON
Switch the client-to-server messages from the HTML forms format to JSON (for the webtty app). Message numbers are sent but not yet used.
This commit is contained in:
parent
32127f8b77
commit
090e02ed59
2 changed files with 24 additions and 23 deletions
19
shterm.js
19
shterm.js
|
|
@ -2,6 +2,9 @@
|
||||||
* is running a shell via the webtty.js server.
|
* is running a shell via the webtty.js server.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/* The number of the next packet to send. */
|
||||||
|
var nsend = 0;
|
||||||
|
|
||||||
// A state machine that keeps track of polling the server.
|
// A state machine that keeps track of polling the server.
|
||||||
var ajaxstate = {
|
var ajaxstate = {
|
||||||
state: 0,
|
state: 0,
|
||||||
|
|
@ -169,10 +172,11 @@ function postResponseHandler() {
|
||||||
|
|
||||||
function sendback(str) {
|
function sendback(str) {
|
||||||
/* For responding to terminal queries. */
|
/* For responding to terminal queries. */
|
||||||
|
var formdata = {"t": "d", "n": nsend++, "d": str};
|
||||||
var datareq = new XMLHttpRequest();
|
var datareq = new XMLHttpRequest();
|
||||||
datareq.onreadystatechange = postResponseHandler;
|
datareq.onreadystatechange = postResponseHandler;
|
||||||
datareq.open('POST', '/feed', true);
|
datareq.open('POST', '/feed', true);
|
||||||
datareq.send("keys=" + str);
|
datareq.send(JSON.stringify(formdata));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -214,10 +218,11 @@ function sendkey(ev) {
|
||||||
}
|
}
|
||||||
if (termemu.alive)
|
if (termemu.alive)
|
||||||
ev.preventDefault();
|
ev.preventDefault();
|
||||||
|
var formdata = {"t": "d", "n": nsend++, "d": code};
|
||||||
var datareq = new XMLHttpRequest();
|
var datareq = new XMLHttpRequest();
|
||||||
datareq.onreadystatechange = postResponseHandler;
|
datareq.onreadystatechange = postResponseHandler;
|
||||||
datareq.open('POST', '/feed', true);
|
datareq.open('POST', '/feed', true);
|
||||||
datareq.send("keys=" + code);
|
datareq.send(JSON.stringify(formdata));
|
||||||
//dkey(code);
|
//dkey(code);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -263,10 +268,11 @@ function vkey(c) {
|
||||||
else
|
else
|
||||||
return;
|
return;
|
||||||
//writeData("Sending " + keystr);
|
//writeData("Sending " + keystr);
|
||||||
|
var formdata = {"t": "d", "n": nsend++, "d": code};
|
||||||
var datareq = new XMLHttpRequest();
|
var datareq = new XMLHttpRequest();
|
||||||
datareq.onreadystatechange = postResponseHandler;
|
datareq.onreadystatechange = postResponseHandler;
|
||||||
datareq.open('POST', '/feed', true);
|
datareq.open('POST', '/feed', true);
|
||||||
datareq.send("keys=" + keystr);
|
datareq.send(JSON.stringify(formdata));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -300,6 +306,7 @@ function togglectrl() {
|
||||||
function login(h, w) {
|
function login(h, w) {
|
||||||
if (termemu.alive)
|
if (termemu.alive)
|
||||||
return;
|
return;
|
||||||
|
params = {"login": true, "h": h, "w": w};
|
||||||
var req = new XMLHttpRequest();
|
var req = new XMLHttpRequest();
|
||||||
req.onreadystatechange = function () {
|
req.onreadystatechange = function () {
|
||||||
if (req.readyState == 4 && req.status == 200) {
|
if (req.readyState == 4 && req.status == 200) {
|
||||||
|
|
@ -308,6 +315,7 @@ function login(h, w) {
|
||||||
/* Success */
|
/* Success */
|
||||||
termemu.resize(logindict.h, logindict.w);
|
termemu.resize(logindict.h, logindict.w);
|
||||||
termemu.alive = true;
|
termemu.alive = true;
|
||||||
|
nsend = 0;
|
||||||
setTitle("Logged in");
|
setTitle("Logged in");
|
||||||
debug(1, "Logged in with id " + logindict.id);
|
debug(1, "Logged in with id " + logindict.id);
|
||||||
getData();
|
getData();
|
||||||
|
|
@ -317,7 +325,8 @@ function login(h, w) {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
req.open('POST', '/login', true);
|
req.open('POST', '/login', true);
|
||||||
req.send("login=login&h=" + String(h) + "&w=" + String(w));
|
req.send(JSON.stringify(params));
|
||||||
|
//req.send("login=login&h=" + String(h) + "&w=" + String(w));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -332,7 +341,7 @@ function stop() {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
req.open('POST', '/feed', true);
|
req.open('POST', '/feed', true);
|
||||||
req.send("quit=quit");
|
req.send(JSON.stringify({"t": "q", "n": nsend++}));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
28
webtty.js
28
webtty.js
|
|
@ -144,22 +144,14 @@ function urlDec(encstr) {
|
||||||
|
|
||||||
/* Returns the contents of a form */
|
/* Returns the contents of a form */
|
||||||
function getFormValues(formtext) {
|
function getFormValues(formtext) {
|
||||||
var pairstrs = formtext.split("&");
|
var jsonobj;
|
||||||
var data = {};
|
try {
|
||||||
for (var i = 0; i < pairstrs.length; i++)
|
jsonobj = JSON.parse(formtext);
|
||||||
{
|
} catch (e) {
|
||||||
var eqsign = pairstrs[i].indexOf("=");
|
if (e instanceof SyntaxError)
|
||||||
if (eqsign > 0) {
|
return null;
|
||||||
rawname = pairstrs[i].slice(0, eqsign);
|
|
||||||
rawval = pairstrs[i].slice(eqsign + 1);
|
|
||||||
name = urlDec(rawname);
|
|
||||||
val = urlDec(rawval);
|
|
||||||
if (!(name in data))
|
|
||||||
data[name] = [];
|
|
||||||
data[name].push(val);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return data;
|
return jsonobj;
|
||||||
}
|
}
|
||||||
|
|
||||||
function login(req, res, formdata) {
|
function login(req, res, formdata) {
|
||||||
|
|
@ -298,14 +290,14 @@ function handler(req, res) {
|
||||||
sendError(res, 1);
|
sendError(res, 1);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (formdata["quit"] == "quit") {
|
if (formdata["t"] == "q") {
|
||||||
/* The client wants to quit. */
|
/* The client wants to quit. */
|
||||||
// FIXME need to send a message back to the client
|
// FIXME need to send a message back to the client
|
||||||
cterm.close();
|
cterm.close();
|
||||||
}
|
}
|
||||||
else if (formdata["keys"]) {
|
else if (formdata["t"] == "d" && typeof(formdata["d"]) == "string") {
|
||||||
/* process the keys */
|
/* process the keys */
|
||||||
hexstr = formdata["keys"][0].replace(/[^0-9a-f]/gi, "");
|
hexstr = formdata["d"].replace(/[^0-9a-f]/gi, "");
|
||||||
if (hexstr.length % 2 != 0) {
|
if (hexstr.length % 2 != 0) {
|
||||||
sendError(res, 2);
|
sendError(res, 2);
|
||||||
return;
|
return;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue