- 26 Aug, 2010 2 commits
-
-
Joel Martin authored
-
Joel Martin authored
Generally, most servers send hextile updates as single updates containing many rects. Some servers send hextile updates as many small framebuffer updates with a few rects each (such as QEMU). This latter cases revealed that shifting off the beginning of the receive queue (which happens after each hextile FBU) performs poorly. This change switches to using an indexed receive queue (instead of actually shifting off the array). When the receive queue has grown to a certain size, then it is compacted all at once. The code is not as clean, but this change results in more than 2X speedup under Chrome for the pessimal case and 10-20% in firefox.
-
- 12 Aug, 2010 1 commit
-
-
Joel Martin authored
- This allows the recorded data to be immediately usable by tests/vnc_playback.html
-
- 11 Aug, 2010 1 commit
-
-
Joel Martin authored
Apparently there are versions of UltraVNC that report version 3.6. This is not a legal version according to the spec, but we'll just force version 3.3 if we receive it. Thanks to Larry Rowe for the info.
-
- 06 Aug, 2010 1 commit
-
-
Joel Martin authored
Turns out when Windows is running in QEMU and a window scroll happens, there are lots of little hextile rects sent. This is slow in noVNC. - Some recording/playback improvement. - Add test harness to drive playback of recordings. - By pulling off the rect header in one chunk we get a 3X speedup in Chrome and a 20% speedup in firefox (specifically for the scroll test). - Also, get rid of some noise from creating timers for handle_message. Check to make sure there isn't already a pending timer first.
-
- 04 Aug, 2010 6 commits
-
-
primalmotion authored
(cherry picked from commit 11f3271a52505dccbf38bea422e7c9a79dddd478) Signed-off-by: Joel Martin <github@martintribe.org>
-
primalmotion authored
This is very usefull when you need to open a new window (with a new document) from javascript, without having to reload the script.js. (cherry picked from commit 8ded53c1de06d01e50d58543c19e73926f0fbbd4) Signed-off-by: Joel Martin <github@martintribe.org>
-
Joel Martin authored
-
Joel Martin authored
-
Joel Martin authored
- Fallback to md5 module if hashlib not there. - Import parse_qsl from cgi where it is in both 2.4 and 2.6
-
Joel Martin authored
- Replace URL parsing using "".partition() with urlparse module.
-
- 03 Aug, 2010 2 commits
-
-
Joel Martin authored
- When a packet with only '\xff\x00' is received, this means the client is doing an orderly shutdown. (WebSockets spec version 76)
-
Joel Martin authored
-
- 02 Aug, 2010 2 commits
-
-
Joel Martin authored
New API: To use the RFB object, you now must instantiate it (this allows more than one instance of it on the same page). rfb = new RFB(settings); The 'settings' variable is a namespace that contains initial default settings. These can also be set and read using 'rfb.set_FOO()' and 'rfb.get_FOO()' where FOO is the setting name. The current settings are (and defaults) are: - target: the DOM Canvas element to use ('VNC_canvas'). - encrypt: whether to encrypt the connection (false) - true_color: true_color or palette (true) - b64encode: base64 encode the WebSockets data (true) - local_cursor: use local cursor rendering (true if supported) - connectTimeout: milliseconds to wait for connect (2000) - updateState: callback when RFB state changes (none) - clipboardReceive: callback when clipboard data received (none) The parameters to the updateState callback have also changed. The function spec is now updateState(rfb, state, oldstate, msg): - rfb: the RFB object that this state change is for. - state: the new state - oldstate: the previous state - msg: a message associate with the state (not always set). The clipboardReceive spec is clipboardReceive(rfb, text): - rfb: the RFB object that this text is from. - text: the clipboard text received. Changes: - The RFB and Canvas namespaces are now more proper objects. Private implementation is no longer exposed and the public API has been made explicit. Also, instantiation allows more than one VNC connection on the same page (to complete this, DefaultControls will also need this same refactoring). - Added 'none' logging level. - Removed automatic stylesheet selection workaround in util.js and move it to defaultcontrols so that it doesn't interfere with intergration. - Also, some major JSLinting. - Fix input, canvas, and cursor tests to work with new model.
-
Joel Martin authored
If cursor Data URI scheme detection threw an exception, it would cause canvas initialization to fail. cursor detection exceptions should just disable local cursor change support, not cause canvas init to fail.
-
- 30 Jul, 2010 1 commit
-
-
Joel Martin authored
Uses the CSS "scale()" operation. The main problem is that the DOM container is not rescaled, only the size of the displayed content within it so there will need to be some sort of mechanism to handle this better so other elements reflow to the new size. Or it might just not work and be removed later. The zoom property seems to do the right behavior, but it's not widely supported. Worth exploring though.
-
- 29 Jul, 2010 2 commits
-
-
Joel Martin authored
After each complete framebufferUpdate, set a short timer to continue processing the receive queue. This gives other events a chance to fire. Especially important when noVNC is integrated into another website.
-
Joel Martin authored
-
- 26 Jul, 2010 1 commit
-
-
Joel Martin authored
-
- 23 Jul, 2010 4 commits
-
-
Joel Martin authored
It points to the include sub-directory, not to the directory above.
-
Joel Martin authored
-
Joel Martin authored
noVNC was never processing more than one framebufferUpdate message per onmessage event. If noVNC receives an incomplete framebufferUpdate and then receives the rest of the framebufferUpdate plus another complete framebufferUpdate, then it will fall permanently behind. If there is more to process after a completed framebufferUpdate, then execute normal_msg again. All the render routines must return false if there is not enough data in the receive queue to process their current update, and true otherwise.
-
Joel Martin authored
-
- 22 Jul, 2010 6 commits
-
-
Joel Martin authored
-
Joel Martin authored
-
Joel Martin authored
Move the whole RFB object to rfb.js. vnc.js is now just the loader file. This allows an integrating project to easily replace vnc.js with an alternate loader mechanism (or just do it directly in the html file). Thanks for the idea primalmotion (http://github.com/primalmotion). Also, JSLint the various files.
-
Joel Martin authored
-
Joel Martin authored
-
Joel Martin authored
The following API changes may affect integrators: - Settings have been moved out of the RFB.connect() call. Each setting now has it's own setter function: setEncrypt, setBase64, setTrueColor, setCursor. - Encrypt and cursor settings now default to on. - CSS changes: - VNC_status_bar for input buttons switched to a element class. - VNC_buttons split into VNC_buttons_right and VNC_buttons_left - New id styles for VNC_settings_menu and VNC_setting Note: the encrypt, true_color and cursor, logging setting can all be set on load using query string variables (in addition to host, port and password). Client cursor (cursor pseudo-encoding) support has been polished and activated. The RFB settings are now presented as radio button list items in a drop-down "Settings" menu when using the default controls. Also, in the settings menu is the ability to select between alternate style-sheets. Cookie and stylesheet selection support added to util.js.
-
- 20 Jul, 2010 2 commits
-
-
Joel Martin authored
-
Joel Martin authored
To change the appearance of the cursor, we use the CSS cursor style and set the url to a data URI scheme. The image data sent via the cursor pseudo-encoding has to be encoded to a CUR format file before being used in the data URI. During Canvas initialization we try and set a simple cursor to see if the browser has support. Opera is missing support for data URI scheme in cursor URLs. Disabled for now until we have a better way of specifying settings overall (too many settings for control bar now).
-
- 17 Jul, 2010 2 commits
-
-
Joel Martin authored
Interestingly, the bug depends on compiler behavior. If local variables are automatically initialized to 0, then this always caused the program to error out indicating a failure to parse the listen port. Otherwise, the test was a no-op (except the rare case where the memory happened to be zero anyways). Thanks to Eugen Melnikoff for finding this.
-
Joel Martin authored
The listen port should be opened before daemonizing otherwise if opening the port fails, the user will get no feedback. The only complication was that the listen socket needs to not be closed as part of daemonizing. Thanks to http://github.com/rickr for finding it.
-
- 16 Jul, 2010 5 commits
-
-
Joel Martin authored
-
Joel Martin authored
-
Joel Martin authored
-
Joel Martin authored
Add new states 'loaded', 'connect' and 'fatal': - Loaded state is first page state. Pass WebSockets mode message using this state. - Connect indicates that the user has issued a "connect" but we haven't gotten an WebSockets onopen yet. - Fatal is a condition that indicates inability to continue on: right now, lack of WebSockets/Flash or non-working canvas. Move much of the actual state transition code into updateState. Handle 'password' state better in default_controls.js; instead of disconnecting, prompt for password to send. Add comments to updateState indicating possible states.
-
Joel Martin authored
-
- 15 Jul, 2010 1 commit
-
-
Joel Martin authored
-
- 14 Jul, 2010 1 commit
-
-
Joel Martin authored
0 is valid UTF-8, but in order to avoid WebSockets framing, we encode/decode it as 256. Also, be tolerant of 0 length messages.
-