Commit Graph

890 Commits

Author SHA1 Message Date
Joel Martin 5958fb4996 Python 2.4 compatible imports.
- Fallback to md5 module if hashlib not there.
- Import parse_qsl from cgi where it is in both 2.4 and 2.6
2010-08-04 14:32:10 -05:00
Joel Martin c95c24e743 Fix #19: python2.4 support.
- Replace URL parsing using "".partition() with urlparse module.
2010-08-04 14:18:55 -05:00
Joel Martin 801482be6a WebSockets orderly/clean close frame.
- When a packet with only '\xff\x00' is received, this means the
  client is doing an orderly shutdown. (WebSockets spec version 76)
2010-08-03 13:23:59 -05:00
Joel Martin 208c832b28 Encrypt default to off, TODO updates. 2010-08-03 13:20:44 -05:00
Joel Martin 8db09746b7 New API. Refactor Canvas and RFB objects.
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.
2010-08-02 17:07:27 -05:00
Joel Martin 8171f4d818 Catch exceptions in cursor detection.
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.
2010-08-02 10:11:47 -05:00
Joel Martin 125d8bbb8f Preliminary scaling code (deactivated).
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.
2010-07-30 09:53:33 -05:00
Joel Martin 29ad96c526 Give other events chance to fire.
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.
2010-07-29 10:47:32 -05:00
Joel Martin a867de1652 Update TODO. 2010-07-29 10:46:58 -05:00
Joel Martin 0af07711ec README.md: fix command formatting. 2010-07-26 17:41:19 -05:00
Joel Martin acad10a5de README.md: correction about VNC_uri_prefix.
It points to the include sub-directory, not to the directory above.
2010-07-23 12:32:15 -05:00
Joel Martin b4748f041a Add twitter link to follow @noVNC for commits/news. 2010-07-23 12:30:31 -05:00
Joel Martin 42b2246c1a Issue #15: noVNC falls behind.
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.
2010-07-23 11:46:41 -05:00
Joel Martin 11304584ca README.md: Add more bug/issue suggested info. 2010-07-23 09:25:16 -05:00
Joel Martin 1b90deeef5 Turn off firebug-lite in canvas test page. 2010-07-22 11:35:26 -05:00
Joel Martin a8edf9d8a5 Query string cleanup and move it to util.js 2010-07-22 11:33:21 -05:00
Joel Martin a7a8962676 JSLint. RFB obj to rfb.js; vnc.js the 'loader'.
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.
2010-07-22 10:54:47 -05:00
Joel Martin 19463eac1f Fix logging init on first page load (not in cookie). 2010-07-22 10:46:50 -05:00
Joel Martin f7f69d8eaa Fix error when cursor Data URI scheme not supported. 2010-07-22 10:26:50 -05:00
Joel Martin da6dd8932e API changes. Client cursor and settings menu.
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.
2010-07-21 20:34:23 -05:00
Joel Martin f55b6b4185 Fail if initial server connection fails. 2010-07-20 14:54:49 -05:00
Joel Martin 2c2b492c0c Add Cursor pseudo-encoding support (disabled for now).
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).
2010-07-20 14:34:44 -05:00
Joel Martin 1656b1b98d Fix listen_port check.
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.
2010-07-17 12:13:54 -05:00
Joel Martin 31407abc25 Issue #11: daemonize after opening listen port.
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.
2010-07-17 12:05:58 -05:00
Joel Martin 3b6f60be7d Typos and formatting. 2010-07-15 20:22:55 -05:00
Joel Martin b89c6db3a1 Launch script and reworked usage in README.md. 2010-07-15 20:18:39 -05:00
Joel Martin 7c81747b52 Make black.css an alternate stylesheet. 2010-07-15 19:58:33 -05:00
Joel Martin f00b1e3776 State machine refactoring.
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.
2010-07-15 19:38:25 -05:00
Joel Martin 53b112f2a6 Add info on firefox 3.0.17. 2010-07-15 19:22:07 -05:00
Joel Martin fcfefdb9ab Clean up top level: move license files to docs/ 2010-07-15 18:45:32 -05:00
Joel Martin 754e0c0bee UTF-8: send 0 as 256 during encoding too.
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.
2010-07-14 16:57:02 -05:00
Joel Martin d798572da4 Add native base64 test (atob and btoa).
Interestingly it turns out that using the native base64 routines does
not improve performance. Likely because the actual time is in
marshalling/unmarshalling between strings and arrays (and associated
garbage collection overhead) which has to be done either way.
2010-07-13 17:53:01 -05:00
Joel Martin 77c7a454ac TightPng fixups and thanks to Sentry Data Systems.
- Change tightpng encoding number to -260 (aliguori provided it until
  an official number can be allocated).
2010-07-13 17:51:26 -05:00
Joel Martin 852ba642be Screenshots section, link to more. 2010-07-09 11:41:36 -05:00
Joel Martin 600887f053 README.md: caption formatting. 2010-07-09 10:52:42 -05:00
Joel Martin e5517ecd25 README.md: image caption and bigger dimensions. 2010-07-09 10:51:51 -05:00
Joel Martin 6b41d1d5a5 Add screenshots to README.md. 2010-07-09 10:50:33 -05:00
Joel Martin 0a32dfd31a Markdown links in README.md. 2010-07-07 16:06:44 -05:00
Joel Martin 660740b5d7 Links related to Tight PNG encoding work. 2010-07-07 12:41:19 -05:00
Joel Martin c83f1576ca Removed missed mootools include in ws.html test. 2010-07-07 12:40:56 -05:00
Joel Martin a095b38262 Add troubleshooting section. 2010-07-06 12:29:37 -05:00
Joel Martin 447cd4ade3 Remove unneeded mootools and FABridge test.
mootools is no longer needed. The bug that the FABridge test was
testing has been resolved in web-socket-js so it's no longer needed.
2010-07-06 12:14:38 -05:00
Joel Martin 81e5adafef Refactor console logging code.
Util.Debug, Util.Info, Util.Warn, Util.Error routines instead of
direct calls to console.*. Add "logging=XXX" query variable that sets
the logging level (default is "warn").

Logging values:
    debug: code debug logging (many calls in performance path are also
           commented for performance reasons).
    info: informative messages including timing information.
    warn: significant events
    error: something has gone wrong
2010-07-06 11:56:13 -05:00
Joel Martin 351a1da304 Init updated web-socket-js correctly. TODO updates. 2010-07-05 15:54:50 -05:00
Joel Martin ae0ecca2e4 Disable excanvas experiment.
Also, move bugs from TODO to github issues.
2010-07-02 14:25:12 -05:00
Joel Martin b8e07362d9 A little more cleanup of browser table. 2010-07-02 12:50:34 -05:00
Joel Martin 3df41d67e1 More browser table cleanup. 2010-07-02 12:40:29 -05:00
Joel Martin 47ef64634f Remove unsupported table colors. Cleanup table. 2010-07-02 12:34:37 -05:00
Joel Martin c54a65ba09 README.md: try browser tests in table. 2010-07-02 12:25:13 -05:00
Joel Martin f5769b00ea Test table in markdown. 2010-07-02 12:12:30 -05:00