- 13 Jan, 2011 3 commits
-
-
Joel Martin authored
Copy in include/websock.js from websockify and use that instead. Still some cleanup of network code but it's a good start.
-
Joel Martin authored
https://github.com/kanaka/websockify is now the canonical location of websockify (formerly wsproxy). A copy of the python version is kept here for backwards compatibility and ease-of-use. The other versions and related test scripts are in websockify.
-
Joel Martin authored
-
- 12 Jan, 2011 3 commits
-
-
Joel Martin authored
-
Joel Martin authored
-
Joel Martin authored
wswrapper: Getting the wswrapper.c LD_PRELOAD model working has turned out to involve too many dark corners of the glibc/POSIX file descriptor space. I realized that 95% of what I want can be accomplished by adding a "wrap command" mode to wsproxy. The code is still there for now, but consider it experimental at best. Minor fix to dup2 and add dup and dup3 logging. wsproxy Wrap Command: In wsproxy wrap command mode, a command line is specified instead of a target address and port. wsproxy then uses a much simpler LD_PRELOAD library, rebind.so, to move intercept any bind() system calls made by the program. If the bind() call is for the wsproxy listen port number then the real bind() system call is issued for an alternate (free high) port on loopback/localhost. wsproxy then forwards from the listen address/port to the moved port. The --wrap-mode argument takes three options that determine the behavior of wsproxy when the wrapped command returns an exit code (exit or daemonizing): ignore, exit, respawn. For example, this runs vncserver on turns port 5901 into a WebSockets port (rebind.so must be built first): ./utils/wsproxy.py --wrap-mode=ignore 5901 -- vncserver :1 The vncserver command backgrounds itself so the wrap mode is set to "ignore" so that wsproxy keeps running even after it receives an exit code from vncserver. wstelnet: To demonstrate the wrap command mode, I added WebSockets telnet client. For example, this runs telnetd (krb5-telnetd) on turns port 2023 into a WebSockets port (using "respawn" mode since telnetd exits after each connection closes): sudo ./utils/wsproxy.py --wrap-mode=respawn 2023 -- telnetd -debug 2023 Then the utils/wstelnet.html page can be used to connect to the telnetd server on port 2023. The telnet client includes VT100.js (from http://code.google.com/p/sshconsole) which handles the terminal emulation and rendering. rebind: The rebind LD_PRELOAD library is used by wsproxy in wrap command mode to intercept bind() system calls and move the port to a different port on loopback/localhost. The rebind.so library can be built by running make in the utils directory. The rebind library can be used separately from wsproxy by setting the REBIND_OLD_PORT and REBIND_NEW_PORT environment variables prior to executing a command. For example: export export REBIND_PORT_OLD="23" export export REBIND_PORT_NEW="65023" LD_PRELOAD=./rebind.so telnetd -debug 23 Alternately, the rebind script does the same thing: rebind 23 65023 telnetd -debug 23 Other changes/notes: - wsproxy no longer daemonizes by default. Remove -f/--foreground option and add -D/--deamon option. - When wsproxy is used to wrap a command in "respawn" mode, the command will not be respawn more often than 3 times within 10 seconds. - Move getKeysym routine out of Canvas object so that it can be called directly.
-
- 09 Jan, 2011 1 commit
-
-
Joel Martin authored
- add dup2 functionality. This requires adding a ref cnt to the _WS_connections structure so that we only free the structure once all dup'd referenced are closed. Also, refactor malloc and free of connection structure into _WS_alloc and _WS_free. - allow select to accept a NULL timeout value which means sleep forever instead of segfaulting. - fix some compile warnings related to ppoll definition. - move some WebSockets related html test pages into utils and symlink them from tests.
-
- 08 Jan, 2011 1 commit
-
-
Joel Martin authored
Moved websocket.py code into a class WebSocketServer. WebSockets server implementations will sub-class and define a handler() method which is passed the client socket after. Global variable settings have been changed to be parameters for WebSocketServer when created. Subclass implementations still have to handle queueing and sending but the parent class handles everything else (daemonizing, websocket handshake, encode/decode, etc). It would be better if the parent class could handle queueing and sending. This adds some buffering and polling complexity to the parent class but it would be better to do so at some point. However, the result is still much cleaner as can be seen in wsecho.py. Refactored wsproxy.py and wstest.py (formerly ws.py) to use the new class. Added wsecho.py as a simple echo server. - rename tests/ws.py to utils/wstest.py and add a symlink from tests/wstest.py - rename tests/ws.html to tests/wstest.html to match utils/wstest.py. - add utils/wsecho.py - add tests/wsecho.html which communicates with wsecho.py and simply sends periodic messages and shows what is received.
-
- 07 Jan, 2011 5 commits
-
-
Joel Martin authored
Flip table back to be horizontal. More readable.
-
Joel Martin authored
Flip the feature table to be tall instead of wide. Added row about "web server" functionality in wsproxy.py.
-
Joel Martin authored
-
Joel Martin authored
-
Joel Martin authored
- Added ability to respond to normal web requests. This is basically integrating web.py functionality into wsproxy. This is only in the python version and it is off by default when calling wsproxy. Turn it on with --web DIR where DIR is the web root directory. Next task is to clean up wsproxy.py. It's gotten unwieldy and it really no longer needs to be parallel to the C version.
-
- 04 Jan, 2011 4 commits
-
-
Joel Martin authored
Warn early about no SSL cert and add clearer warning when a connection comes in as SSL but no cert file exists. For the C version, cleanup closing of the connection socket. Use shutdown for a cleaner cleanup with the client.
-
Joel Martin authored
-
Joel Martin authored
-
Joel Martin authored
-
- 03 Jan, 2011 1 commit
-
-
Joel Martin authored
Related to issue Non-US keyboard layout option issue: https://github.com/kanaka/noVNC/issues#issue/21
-
- 30 Dec, 2010 1 commit
-
-
Joel Martin authored
Add wswrapper info to utils/README.md and docs/TODO. Remove innacurate info from docs/notes.
-
- 29 Dec, 2010 1 commit
-
-
Joel Martin authored
Update README to mention wswrapper. Add DO_MSG define which controls whether wswrapper code generates basic output.
-
- 28 Dec, 2010 1 commit
-
-
Joel Martin authored
poll/ppoll interposer builds but is untested.
-
- 27 Dec, 2010 2 commits
-
-
Joel Martin authored
The select call needs to timeout if a WebSocket socket keeps reporting ready but actually isn't ready. To prevent it hanging forever in that condition, the timeout value is now adjusted now for each call. Move the DO_DEBUG and DO_TRACE settings to wswrapper.c.
-
Joel Martin authored
Interpose on select/pselect so that WebSockets sockets are only reported as ready if they have enough to actually decode at least 1 byte of real data. This prevents hanging in read/recv after WebSocket is reported as ready but is not actually ready because empty frames or less than four base64 bytes have been received. Split defines and constant defintions into wswrapper.h. Cleanup debug output and add TRACE for more detailed tracing debug output. Major TODO is that select needs to timeout if WebSocket socket keeps reporting ready but actually isn't ready. That condition will currently hang forever because the select timeout value is not adjusted when looping.
-
- 25 Dec, 2010 1 commit
-
-
Joel Martin authored
Issue #39: https://github.com/kanaka/noVNC/issues/issue/39
-
- 24 Dec, 2010 1 commit
-
-
Joel Martin authored
Issue #39: https://github.com/kanaka/noVNC/issues/issue/39
-
- 21 Dec, 2010 3 commits
-
-
Joel Martin authored
-
Amir Malik authored
-
Amir Malik authored
-
- 16 Dec, 2010 1 commit
-
-
Joel Martin authored
Make path to ld preload library absolute so wswrapper works even if path is changed before main program is executed (i.e. by the vncserver wrapper script). bind() was using the return value for the port number, but it's actually the original port number that we should interpose on in the bind() routine.
-
- 14 Dec, 2010 2 commits
-
-
Joel Martin authored
-
Joel Martin authored
Allocate buffer and state memory for each accepted connection. This allows all WebSockets connections to a given listen port to be wrapped with WebSockets support.
-
- 13 Dec, 2010 1 commit
-
-
Joel Martin authored
wswrapper.so will only interpose on the listen port specified in WSWRAP_PORT. Add simple wswrap script that sets the WSWRAP_PORT, LD_PRELOAD and invokes the command line to wrap.
-
- 10 Dec, 2010 1 commit
-
-
Joel Martin authored
Rename the $() selector to $D() so that it doesn't collide with the jQuery name. The API change is that the 'target' option for Canvas and RFB objects must now be a DOM Canvas element. A string is no longer accepted because this requires that a DOM lookup is done and the Canvas and RFB should have no UI code in them. Modularity.
-
- 03 Dec, 2010 1 commit
-
-
Joel Martin authored
wswrapper.so is LD_PRELOAD shared library that interposes and turns a generic TCP socket into a WebSockets service. This current version works but will only allow work for a single connection, subsequent connections will not be wrapped. In addition the wrapper interposes on the first incoming network connection. It should read an environment variable to determine the port to interpose on. Also, should limit origin based on another environment variable. Then there should be a wswrap setup script that allows easier invocation.
-
- 15 Nov, 2010 1 commit
-
-
Joel Martin authored
Only call encode_message when the WebSockets object is actually ready to send. Otherwise multiple base64 encode sequences can be encoded into the same WebSockets frame. This causes the C version of wsproxy to crash and the python version to ignore the subsequent base64 sequence(s). Thanks to Colin Dean (xvpsource.org) for finding this and helping track it down.
-
- 10 Nov, 2010 1 commit
-
-
Joel Martin authored
And DefaultControls to UI.
-
- 09 Nov, 2010 1 commit
-
-
Joel Martin authored
- Add meta tag to vnc.html and vnc_auto.html so that if Chrome Frame is installed, it is used. - Add detection to default_controls.js that shows a message with a Chrome Frame install link if the user is using a version of IE without Canvas support. - Fix web.py so that requests have their connection closed after they are completed. This has been a bug for a while but it prevents Chrome Frame from working because Chrome Frame doesn't activate until the initial request connection closes.
-
- 08 Nov, 2010 2 commits
-
-
Joel Martin authored
- Also, discovered node.js bug in base64 decoding. Added test case and filed https://github.com/ry/node/issues/issue/402
-
Joel Martin authored
Node: http://nodejs.org/ https://github.com/ry/node It mostly works, but it eventually gets an error from the target which is probably due to missing support for re-assembly of client WebSockets frames.
-
- 06 Nov, 2010 1 commit
-
-
Joel Martin authored
-