aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/library.js116
-rw-r--r--src/library_browser.js9
-rw-r--r--src/library_glut.js10
-rw-r--r--src/library_sdl.js3
-rw-r--r--src/library_xlib.js3
-rw-r--r--src/settings.js6
-rw-r--r--system/include/net/arpa/inet.h3
-rw-r--r--system/include/sys/ioctl.h2
-rw-r--r--system/include/sys/socket.h1
-rwxr-xr-xtests/runner.py76
-rwxr-xr-xtests/socket_server.sh3
-rw-r--r--tests/websockets.c125
-rw-r--r--third_party/websockify/.gitignore10
-rw-r--r--third_party/websockify/CHANGES.txt18
-rw-r--r--third_party/websockify/LICENSE.txt11
-rw-r--r--third_party/websockify/MANIFEST.in1
-rw-r--r--third_party/websockify/Makefile11
-rw-r--r--third_party/websockify/README.md155
-rw-r--r--third_party/websockify/Windows/Windows Service Readme.txt39
-rw-r--r--third_party/websockify/Windows/noVNC Websocket Service Project/Program.cs24
-rw-r--r--third_party/websockify/Windows/noVNC Websocket Service Project/ProjectInstaller.Designer.cs61
-rw-r--r--third_party/websockify/Windows/noVNC Websocket Service Project/ProjectInstaller.cs19
-rw-r--r--third_party/websockify/Windows/noVNC Websocket Service Project/ProjectInstaller.resx129
-rw-r--r--third_party/websockify/Windows/noVNC Websocket Service Project/Properties/AssemblyInfo.cs36
-rw-r--r--third_party/websockify/Windows/noVNC Websocket Service Project/Service1.Designer.cs37
-rw-r--r--third_party/websockify/Windows/noVNC Websocket Service Project/Service1.cs41
-rw-r--r--third_party/websockify/Windows/noVNC Websocket Service Project/noVNC Websocket.csproj75
-rw-r--r--third_party/websockify/Windows/noVNC Websocket Service Project/noVNC Websocket.sln20
-rw-r--r--third_party/websockify/docs/LICENSE.GPL-3621
-rw-r--r--third_party/websockify/docs/LICENSE.LGPL-3165
-rw-r--r--third_party/websockify/docs/TODO9
-rw-r--r--third_party/websockify/docs/flash_policy.txt4
-rw-r--r--third_party/websockify/docs/latency_results.txt114
-rw-r--r--third_party/websockify/docs/notes17
-rw-r--r--third_party/websockify/docs/release.txt9
-rw-r--r--third_party/websockify/docs/websockify.1110
-rw-r--r--third_party/websockify/include/VT100.js919
-rw-r--r--third_party/websockify/include/base64.js147
-rw-r--r--third_party/websockify/include/keysym.js99
-rw-r--r--third_party/websockify/include/util.js303
-rw-r--r--third_party/websockify/include/web-socket-js/README.txt109
-rw-r--r--third_party/websockify/include/web-socket-js/WebSocketMain.swfbin0 -> 177114 bytes
-rw-r--r--third_party/websockify/include/web-socket-js/swfobject.js4
-rwxr-xr-xthird_party/websockify/include/web-socket-js/web_socket.js391
-rw-r--r--third_party/websockify/include/websock.js427
-rw-r--r--third_party/websockify/include/webutil.js148
-rw-r--r--third_party/websockify/include/wsirc.js235
-rw-r--r--third_party/websockify/include/wstelnet.js335
-rw-r--r--third_party/websockify/other/Makefile14
-rw-r--r--third_party/websockify/other/README.md51
-rwxr-xr-xthird_party/websockify/other/launch.sh108
-rw-r--r--third_party/websockify/other/project.clj13
-rw-r--r--third_party/websockify/other/websocket.c802
-rw-r--r--third_party/websockify/other/websocket.h84
-rw-r--r--third_party/websockify/other/websocket.rb456
-rw-r--r--third_party/websockify/other/websockify.c385
-rw-r--r--third_party/websockify/other/websockify.clj233
-rw-r--r--third_party/websockify/other/websockify.js141
-rwxr-xr-xthird_party/websockify/other/websockify.rb171
-rwxr-xr-xthird_party/websockify/other/wswrap22
-rwxr-xr-xthird_party/websockify/rebind18
-rw-r--r--third_party/websockify/rebind.c94
-rwxr-xr-xthird_party/websockify/run5
-rw-r--r--third_party/websockify/setup.py30
-rwxr-xr-xthird_party/websockify/tests/b64_vs_utf8.py29
-rw-r--r--third_party/websockify/tests/base64.html91
-rw-r--r--third_party/websockify/tests/base64.js12
-rw-r--r--third_party/websockify/tests/echo.html148
-rwxr-xr-xthird_party/websockify/tests/echo.py75
-rwxr-xr-xthird_party/websockify/tests/echo.rb62
l---------third_party/websockify/tests/include1
-rw-r--r--third_party/websockify/tests/latency.html290
l---------third_party/websockify/tests/latency.py1
-rw-r--r--third_party/websockify/tests/load.html250
-rwxr-xr-xthird_party/websockify/tests/load.py167
-rw-r--r--third_party/websockify/tests/plain_echo.html168
-rw-r--r--third_party/websockify/tests/simple.html68
-rwxr-xr-xthird_party/websockify/tests/utf8-list.py22
l---------third_party/websockify/websockify.py1
-rw-r--r--third_party/websockify/websockify/__init__.py2
-rw-r--r--third_party/websockify/websockify/websocket.py965
-rwxr-xr-xthird_party/websockify/websockify/websocketproxy.py390
-rw-r--r--third_party/websockify/wsirc.html99
-rw-r--r--third_party/websockify/wstelnet.html74
-rw-r--r--tools/file_packager.py7
-rw-r--r--tools/settings_template_readonly.py10
-rw-r--r--tools/shared.py50
87 files changed, 10785 insertions, 34 deletions
diff --git a/src/library.js b/src/library.js
index 3531db97..938a3c92 100644
--- a/src/library.js
+++ b/src/library.js
@@ -6315,6 +6315,122 @@ LibraryManager.library = {
ntohl: 'htonl',
ntohs: 'htons',
+ inet_pton__deps: ['__setErrNo', '$ERRNO_CODES'],
+ inet_pton: function(af, src, dst) {
+ // int af, const char *src, void *dst
+ if ((af ^ {{{ cDefine("AF_INET") }}}) !== 0) { ___setErrNo(ERRNO_CODES.EAFNOSUPPORT); return -1; }
+ var b = Pointer_stringify(src).split(".");
+ if (b.length !== 4) return 0;
+ var ret = Number(b[0]) | (Number(b[1]) << 8) | (Number(b[2]) << 16) | (Number(b[3]) << 24);
+ if (isNaN(ret)) return 0;
+ setValue(dst, ret, 'i32');
+ return 1;
+ },
+
+ _inet_ntop_raw: function(addr) {
+ return (addr & 0xff) + '.' + ((addr >> 8) & 0xff) + '.' + ((addr >> 16) & 0xff) + '.' + ((addr >> 24) & 0xff)
+ },
+
+ inet_ntop__deps: ['_inet_ntop_raw'],
+ inet_ntop: function(af, src, dst, size) {
+ var addr = getValue(src, 'i32');
+ var str = __inet_ntop_raw(addr);
+ writeStringToMemory(str.substr(0, size), dst, true);
+ return dst;
+ },
+
+ // ==========================================================================
+ // sockets
+ // ==========================================================================
+
+ $Sockets__deps: ['__setErrNo', '$ERRNO_CODES'],
+ $Sockets: {
+ BUFFER_SIZE: 10*1024,
+ nextFd: 1,
+ fds: {},
+ sockaddr_in_layout: Runtime.generateStructInfo([
+ ['i16', 'sin_family'],
+ ['i16', 'sin_port'],
+ ['i32', 'sin_addr'],
+ ['i64', 'sin_zero'],
+ ]),
+ },
+
+ socket__deps: ['$Sockets'],
+ socket: function(family, type, protocol) {
+ var fd = Sockets.nextFd++;
+ Sockets.fds[fd] = {
+ connected: false
+ };
+ return fd;
+ },
+
+ connect__deps: ['$Sockets', '_inet_ntop_raw', 'ntohs'],
+ connect: function(fd, addr, addrlen) {
+ var info = Sockets.fds[fd];
+ if (!info) return -1;
+ info.connected = true;
+ info.addr = getValue(addr + Sockets.sockaddr_in_layout.sin_addr, 'i32');
+ info.port = _ntohs(getValue(addr + Sockets.sockaddr_in_layout.sin_port, 'i16'));
+ info.host = __inet_ntop_raw(info.addr);
+ info.socket = new WebSocket('ws://' + info.host + ':' + info.port, ['arraybuffer']);
+ info.socket.binaryType = 'arraybuffer';
+ info.buffer = new Uint8Array(Sockets.BUFFER_SIZE);
+ info.bufferWrite = info.bufferRead = 0;
+ info.socket.onmessage = function (event) {
+ var data = event.data;
+ if (typeof data == 'string') {
+ var binaryString = window.atob(data);
+ var len = binaryString.length;
+ for (var i = 0; i < len; i++) {
+ info.buffer[info.bufferWrite++] = binaryString.charCodeAt(i);
+ if (info.bufferWrite == Sockets.BUFFER_SIZE) info.bufferWrite = 0;
+ if (info.bufferWrite == info.bufferRead) throw 'socket buffer overflow';
+ }
+ } else {
+ console.log('binary!');
+ }
+ }
+ return 0;
+ },
+
+ recv__deps: ['$Sockets'],
+ recv: function(fd, buf, len, flags) {
+ var info = Sockets.fds[fd];
+ if (!info) return -1;
+ if (info.bufferWrite == info.bufferRead) {
+ ___setErrNo(ERRNO_CODES.EAGAIN); // no data, and all sockets are nonblocking, so this is the right behavior
+ return 0; // should this be -1 like the spec says?
+ }
+ var ret = 0;
+ while (info.bufferWrite != info.bufferRead && len > 0) {
+ // write out a byte
+ {{{ makeSetValue('buf++', '0', 'info.buffer[info.bufferRead++]', 'i8') }}};
+ if (info.bufferRead == Sockets.BUFFER_SIZE) info.bufferRead = 0;
+ len--;
+ ret++;
+ }
+ return ret;
+ },
+
+ shutdown: function(fd, how) {
+ var info = Sockets.fds[fd];
+ if (!info) return -1;
+ info.socket.close();
+ Sockets.fds[fd] = null;
+ },
+
+ ioctl: function(fd, request, varargs) {
+ var info = Sockets.fds[fd];
+ if (!info) return -1;
+ var start = info.bufferRead;
+ var end = info.bufferWrite;
+ if (end < start) end += Sockets.BUFFER_SIZE;
+ var dest = {{{ makeGetValue('varargs', '0', 'i32') }}};
+ {{{ makeSetValue('dest', '0', 'end - start', 'i32') }}};
+ return 0;
+ },
+
// ==========================================================================
// emscripten.h
// ==========================================================================
diff --git a/src/library_browser.js b/src/library_browser.js
index 5291dcee..27bf4a0c 100644
--- a/src/library_browser.js
+++ b/src/library_browser.js
@@ -347,6 +347,12 @@ mergeInto(LibraryManager.library, {
});
addRunDependency('al ' + url);
},
+
+ setCanvasSize: function(width, height) {
+ var canvas = Module['canvas'];
+ canvas.width = width;
+ canvas.height = height;
+ }
},
emscripten_async_wget: function(url, file, onload, onerror) {
@@ -494,8 +500,7 @@ mergeInto(LibraryManager.library, {
},
emscripten_set_canvas_size: function(width, height) {
- Module['canvas'].width = width;
- Module['canvas'].height = height;
+ Browser.setCanvasSize(width, height);
},
emscripten_get_now: function() {
diff --git a/src/library_glut.js b/src/library_glut.js
index d33f8436..b146cf47 100644
--- a/src/library_glut.js
+++ b/src/library_glut.js
@@ -237,8 +237,7 @@ var LibraryGLUT = {
document.removeEventListener('mozfullscreenchange', GLUT.onFullScreenEventChange, true);
document.removeEventListener('webkitfullscreenchange', GLUT.onFullScreenEventChange, true);
}
- Module['canvas'].width = width;
- Module['canvas'].height = height;
+ Browser.setCanvasSize(width, height);
/* Can't call _glutReshapeWindow as that requests cancelling fullscreen. */
if (GLUT.reshapeFunc) {
// console.log("GLUT.reshapeFunc (from FS): " + width + ", " + height);
@@ -274,8 +273,8 @@ var LibraryGLUT = {
},
glutInitWindowSize: function(width, height) {
- Module['canvas'].width = GLUT.initWindowWidth = width;
- Module['canvas'].height = GLUT.initWindowHeight = height;
+ Browser.setCanvasSize( GLUT.initWindowWidth = width,
+ GLUT.initWindowHeight = height );
},
glutInitWindowPosition: function(x, y) {
@@ -371,8 +370,7 @@ var LibraryGLUT = {
glutReshapeWindow: function(width, height) {
GLUT.cancelFullScreen();
// console.log("glutReshapeWindow: " + width + ", " + height);
- Module['canvas'].width = width;
- Module['canvas'].height = height;
+ Browser.setCanvasSize(width, height);
if (GLUT.reshapeFunc) {
// console.log("GLUT.reshapeFunc: " + width + ", " + height);
FUNCTION_TABLE[GLUT.reshapeFunc](width, height);
diff --git a/src/library_sdl.js b/src/library_sdl.js
index da1e88af..c056c3f1 100644
--- a/src/library_sdl.js
+++ b/src/library_sdl.js
@@ -659,8 +659,7 @@ var LibrarySDL = {
['mousedown', 'mouseup', 'mousemove', 'DOMMouseScroll', 'mousewheel', 'mouseout'].forEach(function(event) {
Module['canvas'].addEventListener(event, SDL.receiveEvent, true);
});
- Module['canvas'].width = width;
- Module['canvas'].height = height;
+ Browser.setCanvasSize(width, height);
return SDL.screen = SDL.makeSurface(width, height, flags, true, 'screen');
},
diff --git a/src/library_xlib.js b/src/library_xlib.js
index a110c786..7e420400 100644
--- a/src/library_xlib.js
+++ b/src/library_xlib.js
@@ -6,8 +6,7 @@ var LibraryXlib = {
XCreateWindow: function(display, parent, x, y, width, height, border_width, depth, class_, visual, valuemask, attributes) {
// All we can do is set the width and height
- Module['canvas'].width = width;
- Module['canvas'].height = height;
+ Browser.setCanvasSize(width, height);
return 2;
},
diff --git a/src/settings.js b/src/settings.js
index 9a1afd69..5970737c 100644
--- a/src/settings.js
+++ b/src/settings.js
@@ -1126,5 +1126,9 @@ var C_DEFINES = {'SI_MESGQ': '5',
'AT_FDCWD': '-2',
'SIGTTOU': '22',
'_CS_POSIX_V7_LP64_OFF64_LDFLAGS': '10',
- '_SC_TTY_NAME_MAX': '41'};
+ '_SC_TTY_NAME_MAX': '41',
+ 'AF_INET': '1',
+ 'AF_INET6': '6',
+ 'FIONREAD': '1'
+};
diff --git a/system/include/net/arpa/inet.h b/system/include/net/arpa/inet.h
index 06d44183..9d078276 100644
--- a/system/include/net/arpa/inet.h
+++ b/system/include/net/arpa/inet.h
@@ -16,6 +16,9 @@ uint16_t ntohs(uint16_t netshort);
int inet_aton(const char *cp, struct in_addr *addr);
char *inet_ntoa(struct in_addr in);
+int inet_pton(int af, const char *src, void *dst);
+const char *inet_ntop(int af, const void *src, char *dst, socklen_t size);
+
typedef long in_addr_t;
in_addr_t inet_addr(const char *cp);
diff --git a/system/include/sys/ioctl.h b/system/include/sys/ioctl.h
index edc9ea36..12857ae3 100644
--- a/system/include/sys/ioctl.h
+++ b/system/include/sys/ioctl.h
@@ -11,6 +11,