Add base64 decoding helpers to read ints
Some helper functions to read uint8, uint16 and uint32 (actually int32 it seems...). Note the value is effectively read as big-endian.
This commit is contained in:
@@ -12,6 +12,92 @@
|
||||
var logDiv;
|
||||
var desktop; // the canvas
|
||||
|
||||
var b64Values = new Array(
|
||||
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63,
|
||||
52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -2, -1, -1,
|
||||
-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
|
||||
15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1,
|
||||
-1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
|
||||
41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1);
|
||||
|
||||
//DEBUG
|
||||
var stream={s:"YWJjZA==YWI=YQ==VQ==qg==qlU=Vao=VaqqVQ==qlVVqg==",i:0};
|
||||
var stream2={s:"YWJjZAYWIYQVQqgqlUVaoVaqqVQqlVVqg",i:0};
|
||||
|
||||
|
||||
function b64_get_u32_(t, i)
|
||||
{
|
||||
var v = 0;
|
||||
if (b64Values[t.charCodeAt(i)] < 0) return v;
|
||||
v += b64Values[t.charCodeAt(i++)] << 26;
|
||||
if (b64Values[t.charCodeAt(i)] < 0) return v;
|
||||
v += b64Values[t.charCodeAt(i++)] << 20;
|
||||
if (b64Values[t.charCodeAt(i)] < 0) return v;
|
||||
v += b64Values[t.charCodeAt(i++)] << 14;
|
||||
if (b64Values[t.charCodeAt(i)] < 0) return v;
|
||||
v += b64Values[t.charCodeAt(i++)] << 8;
|
||||
if (b64Values[t.charCodeAt(i)] < 0) return v;
|
||||
v += b64Values[t.charCodeAt(i++)] << 2;
|
||||
if (b64Values[t.charCodeAt(i)] < 0) return v;
|
||||
v += b64Values[t.charCodeAt(i++)] >> 4;
|
||||
if (b64Values[t.charCodeAt(i)] < 0) i++;
|
||||
if (b64Values[t.charCodeAt(i)] < 0) i++;
|
||||
dbg("u32:" + v + " 0x" + v.toString(16));
|
||||
return v;
|
||||
}
|
||||
|
||||
|
||||
function b64_get_u8(s)
|
||||
{
|
||||
var v = 0;
|
||||
if (b64Values[s.s.charCodeAt(s.i)] < 0) return v;
|
||||
v += b64Values[s.s.charCodeAt(s.i++)] << 2;
|
||||
if (b64Values[s.s.charCodeAt(s.i)] < 0) return v;
|
||||
v += b64Values[s.s.charCodeAt(s.i++)] >> 4;
|
||||
if (b64Values[s.s.charCodeAt(s.i)] < 0) s.i++;
|
||||
if (b64Values[s.s.charCodeAt(s.i)] < 0) s.i++;
|
||||
dbg(" u8:" + v + " 0x" + v.toString(16));
|
||||
return v;
|
||||
}
|
||||
|
||||
function b64_get_u16(s)
|
||||
{
|
||||
var v = 0;
|
||||
if (b64Values[s.s.charCodeAt(s.i)] < 0) return v;
|
||||
v += b64Values[s.s.charCodeAt(s.i++)] << 10;
|
||||
if (b64Values[s.s.charCodeAt(s.i)] < 0) return v;
|
||||
v += b64Values[s.s.charCodeAt(s.i++)] << 4;
|
||||
if (b64Values[s.s.charCodeAt(s.i)] < 0) return v;
|
||||
v += b64Values[s.s.charCodeAt(s.i++)] >> 2;
|
||||
if (b64Values[s.s.charCodeAt(s.i)] < 0) s.i++;
|
||||
dbg("u16:" + v + " 0x" + v.toString(16));
|
||||
return v;
|
||||
}
|
||||
|
||||
function b64_get_u32(s)
|
||||
{
|
||||
var v = 0;
|
||||
if (b64Values[s.s.charCodeAt(s.i)] < 0) return v;
|
||||
v += b64Values[s.s.charCodeAt(s.i++)] << 26;
|
||||
if (b64Values[s.s.charCodeAt(s.i)] < 0) return v;
|
||||
v += b64Values[s.s.charCodeAt(s.i++)] << 20;
|
||||
if (b64Values[s.s.charCodeAt(s.i)] < 0) return v;
|
||||
v += b64Values[s.s.charCodeAt(s.i++)] << 14;
|
||||
if (b64Values[s.s.charCodeAt(s.i)] < 0) return v;
|
||||
v += b64Values[s.s.charCodeAt(s.i++)] << 8;
|
||||
if (b64Values[s.s.charCodeAt(s.i)] < 0) return v;
|
||||
v += b64Values[s.s.charCodeAt(s.i++)] << 2;
|
||||
if (b64Values[s.s.charCodeAt(s.i)] < 0) return v;
|
||||
v += b64Values[s.s.charCodeAt(s.i++)] >> 4;
|
||||
//v &= 0x0ffffffff;
|
||||
if (b64Values[s.s.charCodeAt(s.i)] < 0) s.i++;
|
||||
if (b64Values[s.s.charCodeAt(s.i)] < 0) s.i++;
|
||||
dbg("u32:" + v + " 0x" + v.toString(16));
|
||||
return v;
|
||||
}
|
||||
|
||||
function dbg(str)
|
||||
{
|
||||
var div = document.createElement("div");
|
||||
@@ -45,9 +131,61 @@ window.popup("plop");
|
||||
dbg(message.target.responseText);
|
||||
}
|
||||
|
||||
function decodeCanvasMessage(msg)
|
||||
{
|
||||
dbg("decodeCanvasMessage()");
|
||||
var code = b64_get_u16(msg);
|
||||
dbg("code: " + code);
|
||||
/* switch (code) {
|
||||
//case 1:
|
||||
//break;
|
||||
default:
|
||||
dbg("unhandled code " + code);
|
||||
return;
|
||||
}*/
|
||||
}
|
||||
|
||||
function onReadyStateChange()
|
||||
{
|
||||
dbg("readystate changed: " + this.readyState);
|
||||
if (this.readyState != 4)
|
||||
return;
|
||||
dbg("status: " + this.status);
|
||||
dbg("resonseType: " + this.responseType);
|
||||
dbg("response: " + this.responseText);
|
||||
//dbg("headers: " + this.getAllResponseHeaders());
|
||||
//var stream={s:"YWJjZA==YWI=YQ==VQ==qg==qlU=Vao=VaqqVQ==qlVVqg==",i:0};
|
||||
var msg = {s:(this.responseText),i:0};
|
||||
decodeCanvasMessage(msg);
|
||||
}
|
||||
|
||||
//DEBUG
|
||||
function testB64(stream)
|
||||
{
|
||||
var i = 0;
|
||||
b64_get_u32(stream);
|
||||
b64_get_u16(stream);
|
||||
b64_get_u8(stream);
|
||||
b64_get_u8(stream);
|
||||
b64_get_u8(stream);
|
||||
b64_get_u16(stream);
|
||||
b64_get_u16(stream);
|
||||
b64_get_u32(stream);
|
||||
b64_get_u32(stream);
|
||||
dbg("s.i:"+stream.i);
|
||||
}
|
||||
|
||||
function initDesktop()
|
||||
{
|
||||
dbg("initDesktop()");
|
||||
|
||||
//testB64(stream);
|
||||
//testB64(stream2);
|
||||
|
||||
//var stream={s:"YWJjZA==YWI=YQ==VQ==qg==qlU=Vao=VaqqVQ==qlVVqg==",i:0};
|
||||
var msg = {s:"YWJjZA==YWI=YQ==VQ==qg==qlU=Vao=VaqqVQ==qlVVqg==",i:0};
|
||||
decodeCanvasMessage(stream);
|
||||
|
||||
desktop = document.getElementById("desktop");
|
||||
var xhr = createXHR();
|
||||
if (xhr) {
|
||||
@@ -65,20 +203,11 @@ function initDesktop()
|
||||
dbg("multipart: " + xhr.multipart);
|
||||
xhr.open("GET", "http://127.0.0.1:8080/output", true);
|
||||
//xhr.onload = onMessage;
|
||||
xhr.onreadystatechange = function() {
|
||||
dbg("readystate changed: " + xhr.readyState);
|
||||
if (xhr.readyState != 4)
|
||||
return;
|
||||
dbg("status: " + xhr.status);
|
||||
dbg("resonseType: " + xhr.responseType);
|
||||
dbg("response: " + xhr.responseText);
|
||||
dbg("headers: " + xhr.getAllResponseHeaders());
|
||||
|
||||
}
|
||||
xhr.onreadystatechange = onReadyStateChange;
|
||||
//xhr.responseType = "arraybuffer";
|
||||
//dbg("xhr.onload:" + xhr.onload);
|
||||
//dbg("xhr.send:" + xhr.send);
|
||||
xhr.overrideMimeType("multipart/x-mixed-replace;boundary=x");
|
||||
//xhr.overrideMimeType("multipart/x-mixed-replace;boundary=x");
|
||||
xhr.send(null);
|
||||
//dbg("headers: " + xhr.getAllResponseHeaders());
|
||||
} else
|
||||
|
||||
@@ -13,6 +13,92 @@ static const char haiku_js[] =
|
||||
"var logDiv;\n"
|
||||
"var desktop; // the canvas\n"
|
||||
"\n"
|
||||
"var b64Values = new Array(\n"
|
||||
" -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n"
|
||||
" -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n"
|
||||
" -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63,\n"
|
||||
" 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -2, -1, -1,\n"
|
||||
" -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,\n"
|
||||
" 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1,\n"
|
||||
" -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,\n"
|
||||
" 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1);\n"
|
||||
"\n"
|
||||
"//DEBUG\n"
|
||||
"var stream={s:\"YWJjZA==YWI=YQ==VQ==qg==qlU=Vao=VaqqVQ==qlVVqg==\",i:0};\n"
|
||||
"var stream2={s:\"YWJjZAYWIYQVQqgqlUVaoVaqqVQqlVVqg\",i:0};\n"
|
||||
"\n"
|
||||
"\n"
|
||||
"function b64_get_u32_(t, i)\n"
|
||||
"{\n"
|
||||
" var v = 0;\n"
|
||||
" if (b64Values[t.charCodeAt(i)] < 0) return v;\n"
|
||||
" v += b64Values[t.charCodeAt(i++)] << 26;\n"
|
||||
" if (b64Values[t.charCodeAt(i)] < 0) return v;\n"
|
||||
" v += b64Values[t.charCodeAt(i++)] << 20;\n"
|
||||
" if (b64Values[t.charCodeAt(i)] < 0) return v;\n"
|
||||
" v += b64Values[t.charCodeAt(i++)] << 14;\n"
|
||||
" if (b64Values[t.charCodeAt(i)] < 0) return v;\n"
|
||||
" v += b64Values[t.charCodeAt(i++)] << 8;\n"
|
||||
" if (b64Values[t.charCodeAt(i)] < 0) return v;\n"
|
||||
" v += b64Values[t.charCodeAt(i++)] << 2;\n"
|
||||
" if (b64Values[t.charCodeAt(i)] < 0) return v;\n"
|
||||
" v += b64Values[t.charCodeAt(i++)] >> 4;\n"
|
||||
" if (b64Values[t.charCodeAt(i)] < 0) i++;\n"
|
||||
" if (b64Values[t.charCodeAt(i)] < 0) i++;\n"
|
||||
" dbg(\"u32:\" + v + \" 0x\" + v.toString(16));\n"
|
||||
" return v;\n"
|
||||
"}\n"
|
||||
"\n"
|
||||
"\n"
|
||||
"function b64_get_u8(s)\n"
|
||||
"{\n"
|
||||
" var v = 0;\n"
|
||||
" if (b64Values[s.s.charCodeAt(s.i)] < 0) return v;\n"
|
||||
" v += b64Values[s.s.charCodeAt(s.i++)] << 2;\n"
|
||||
" if (b64Values[s.s.charCodeAt(s.i)] < 0) return v;\n"
|
||||
" v += b64Values[s.s.charCodeAt(s.i++)] >> 4;\n"
|
||||
" if (b64Values[s.s.charCodeAt(s.i)] < 0) s.i++;\n"
|
||||
" if (b64Values[s.s.charCodeAt(s.i)] < 0) s.i++;\n"
|
||||
" dbg(\" u8:\" + v + \" 0x\" + v.toString(16));\n"
|
||||
" return v;\n"
|
||||
"}\n"
|
||||
"\n"
|
||||
"function b64_get_u16(s)\n"
|
||||
"{\n"
|
||||
" var v = 0;\n"
|
||||
" if (b64Values[s.s.charCodeAt(s.i)] < 0) return v;\n"
|
||||
" v += b64Values[s.s.charCodeAt(s.i++)] << 10;\n"
|
||||
" if (b64Values[s.s.charCodeAt(s.i)] < 0) return v;\n"
|
||||
" v += b64Values[s.s.charCodeAt(s.i++)] << 4;\n"
|
||||
" if (b64Values[s.s.charCodeAt(s.i)] < 0) return v;\n"
|
||||
" v += b64Values[s.s.charCodeAt(s.i++)] >> 2;\n"
|
||||
" if (b64Values[s.s.charCodeAt(s.i)] < 0) s.i++;\n"
|
||||
" dbg(\"u16:\" + v + \" 0x\" + v.toString(16));\n"
|
||||
" return v;\n"
|
||||
"}\n"
|
||||
"\n"
|
||||
"function b64_get_u32(s)\n"
|
||||
"{\n"
|
||||
" var v = 0;\n"
|
||||
" if (b64Values[s.s.charCodeAt(s.i)] < 0) return v;\n"
|
||||
" v += b64Values[s.s.charCodeAt(s.i++)] << 26;\n"
|
||||
" if (b64Values[s.s.charCodeAt(s.i)] < 0) return v;\n"
|
||||
" v += b64Values[s.s.charCodeAt(s.i++)] << 20;\n"
|
||||
" if (b64Values[s.s.charCodeAt(s.i)] < 0) return v;\n"
|
||||
" v += b64Values[s.s.charCodeAt(s.i++)] << 14;\n"
|
||||
" if (b64Values[s.s.charCodeAt(s.i)] < 0) return v;\n"
|
||||
" v += b64Values[s.s.charCodeAt(s.i++)] << 8;\n"
|
||||
" if (b64Values[s.s.charCodeAt(s.i)] < 0) return v;\n"
|
||||
" v += b64Values[s.s.charCodeAt(s.i++)] << 2;\n"
|
||||
" if (b64Values[s.s.charCodeAt(s.i)] < 0) return v;\n"
|
||||
" v += b64Values[s.s.charCodeAt(s.i++)] >> 4;\n"
|
||||
" //v &= 0x0ffffffff;\n"
|
||||
" if (b64Values[s.s.charCodeAt(s.i)] < 0) s.i++;\n"
|
||||
" if (b64Values[s.s.charCodeAt(s.i)] < 0) s.i++;\n"
|
||||
" dbg(\"u32:\" + v + \" 0x\" + v.toString(16));\n"
|
||||
" return v;\n"
|
||||
"}\n"
|
||||
"\n"
|
||||
"function dbg(str)\n"
|
||||
"{\n"
|
||||
" var div = document.createElement(\"div\");\n"
|
||||
@@ -46,9 +132,61 @@ static const char haiku_js[] =
|
||||
" dbg(message.target.responseText);\n"
|
||||
"}\n"
|
||||
"\n"
|
||||
"function decodeCanvasMessage(msg)\n"
|
||||
"{\n"
|
||||
" dbg(\"decodeCanvasMessage()\");\n"
|
||||
" var code = b64_get_u16(msg);\n"
|
||||
" dbg(\"code: \" + code);\n"
|
||||
"/* switch (code) {\n"
|
||||
" //case 1:\n"
|
||||
" //break;\n"
|
||||
" default:\n"
|
||||
" dbg(\"unhandled code \" + code);\n"
|
||||
" return;\n"
|
||||
" }*/\n"
|
||||
"}\n"
|
||||
"\n"
|
||||
"function onReadyStateChange()\n"
|
||||
"{\n"
|
||||
" dbg(\"readystate changed: \" + this.readyState);\n"
|
||||
" if (this.readyState != 4)\n"
|
||||
" return;\n"
|
||||
" dbg(\"status: \" + this.status);\n"
|
||||
" dbg(\"resonseType: \" + this.responseType);\n"
|
||||
" dbg(\"response: \" + this.responseText);\n"
|
||||
" //dbg(\"headers: \" + this.getAllResponseHeaders());\n"
|
||||
"//var stream={s:\"YWJjZA==YWI=YQ==VQ==qg==qlU=Vao=VaqqVQ==qlVVqg==\",i:0};\n"
|
||||
" var msg = {s:(this.responseText),i:0};\n"
|
||||
" decodeCanvasMessage(msg);\n"
|
||||
"}\n"
|
||||
"\n"
|
||||
"//DEBUG\n"
|
||||
"function testB64(stream)\n"
|
||||
"{\n"
|
||||
" var i = 0;\n"
|
||||
" b64_get_u32(stream);\n"
|
||||
" b64_get_u16(stream);\n"
|
||||
" b64_get_u8(stream);\n"
|
||||
" b64_get_u8(stream);\n"
|
||||
" b64_get_u8(stream);\n"
|
||||
" b64_get_u16(stream);\n"
|
||||
" b64_get_u16(stream);\n"
|
||||
" b64_get_u32(stream);\n"
|
||||
" b64_get_u32(stream);\n"
|
||||
" dbg(\"s.i:\"+stream.i);\n"
|
||||
"}\n"
|
||||
"\n"
|
||||
"function initDesktop()\n"
|
||||
"{\n"
|
||||
" dbg(\"initDesktop()\");\n"
|
||||
"\n"
|
||||
" //testB64(stream);\n"
|
||||
" //testB64(stream2);\n"
|
||||
"\n"
|
||||
"//var stream={s:\"YWJjZA==YWI=YQ==VQ==qg==qlU=Vao=VaqqVQ==qlVVqg==\",i:0};\n"
|
||||
" var msg = {s:\"YWJjZA==YWI=YQ==VQ==qg==qlU=Vao=VaqqVQ==qlVVqg==\",i:0};\n"
|
||||
" decodeCanvasMessage(stream);\n"
|
||||
"\n"
|
||||
" desktop = document.getElementById(\"desktop\");\n"
|
||||
" var xhr = createXHR();\n"
|
||||
" if (xhr) {\n"
|
||||
@@ -66,20 +204,11 @@ static const char haiku_js[] =
|
||||
" dbg(\"multipart: \" + xhr.multipart);\n"
|
||||
" xhr.open(\"GET\", \"http://127.0.0.1:8080/output\", true);\n"
|
||||
" //xhr.onload = onMessage;\n"
|
||||
" xhr.onreadystatechange = function() {\n"
|
||||
" dbg(\"readystate changed: \" + xhr.readyState);\n"
|
||||
" if (xhr.readyState != 4)\n"
|
||||
" return;\n"
|
||||
" dbg(\"status: \" + xhr.status);\n"
|
||||
" dbg(\"resonseType: \" + xhr.responseType);\n"
|
||||
" dbg(\"response: \" + xhr.responseText);\n"
|
||||
" dbg(\"headers: \" + xhr.getAllResponseHeaders());\n"
|
||||
"\n"
|
||||
" }\n"
|
||||
" xhr.onreadystatechange = onReadyStateChange;\n"
|
||||
" //xhr.responseType = \"arraybuffer\";\n"
|
||||
" //dbg(\"xhr.onload:\" + xhr.onload);\n"
|
||||
" //dbg(\"xhr.send:\" + xhr.send);\n"
|
||||
" xhr.overrideMimeType(\"multipart/x-mixed-replace;boundary=x\");\n"
|
||||
" //xhr.overrideMimeType(\"multipart/x-mixed-replace;boundary=x\");\n"
|
||||
" xhr.send(null);\n"
|
||||
" //dbg(\"headers: \" + xhr.getAllResponseHeaders());\n"
|
||||
" } else\n"
|
||||
|
||||
Reference in New Issue
Block a user