commit a1a44d612a75f0fe8dc0c9e806c185cffbf94cb4
Author: Mehdi Abaakouk <sileht@sileht.net>
Date:   Fri Sep 21 11:23:46 2012 +0200

    Remove debian stuff

commit 7af261d58abd9b73d0f45187cf90a3c353ceaefd
Merge: 540f0e5 ceec052
Author: Mehdi Abaakouk <sileht@sileht.net>
Date:   Fri Sep 21 11:18:35 2012 +0200

    Merge tag 'v0.4' into debian/dfsg

commit ceec05260e2f6f330d4eb869adfbba97e36e80dc
Author: Joel Martin <github@martintribe.org>
Date:   Fri Sep 14 17:00:56 2012 -0500

    noVNC version 0.4

commit cbb55df0396bf2125b3da7066e4cbb2ee4e6ce0d
Author: Joel Martin <github@martintribe.org>
Date:   Tue Aug 28 17:39:02 2012 -0500

    README: simplify projects/companies. News/help/contact section.
    
    Instead of continuing to maintain the full list of project/companies
    that use noVNC in multiple places (README, wiki, web page) just link
    to the wiki page.
    
    Link to noVNC discussion group page. Link to issues page. Link to
    Amazon wishlist and non-profits for appreciation.

commit af6e9e2408054597a2212921a4d84376ef9809b8
Merge: fc003a1 cf068be
Author: Joel Martin <github@martintribe.org>
Date:   Tue Aug 28 06:59:52 2012 -0700

    Merge pull request #185 from dark/master
    
    Fix grep pattern when matching netstat output

commit cf068be2d883a87cb68cb7159cfaaf627f67acb3
Author: Marco Leogrande <dark.knight.ita@gmail.com>
Date:   Mon Aug 27 22:19:51 2012 -0700

    Fix grep pattern when searching for listening sockets
    
    The current grep pattern matches also port numbers that match only
    partially the given $PORT number; e.g., if $PORT is 6080, 60800 will
    match as well.
    
    While TCP listening sockets in the 60000-65535 range are rare, they
    need to be handled as well. The problem is also present if the user
    selects a shorter PORT value with the --listen command line argument.
    
    By adding a space, the pattern is fixed.

commit fc003a13e7fcbbad6cb871d3ed6f2543078a35d7
Author: Joel Martin <github@martintribe.org>
Date:   Wed Aug 15 13:48:03 2012 -0500

    Revert "Pull in latest websockify."
    
    This reverts commit 4dd1bb1ecbd49c112c2f7ff4bd66016ebe38d063.

commit ca6b3f4cb1216b9155f8fdabe7969e5777a529c5
Author: Joel Martin <github@martintribe.org>
Date:   Wed Aug 15 13:47:37 2012 -0500

    Revert "Fix tight decoding when using binary/non-base64 connection."
    
    This reverts commit 14717eb468d9cf1c93559c8d0a6cb16b3c959b55.

commit 14717eb468d9cf1c93559c8d0a6cb16b3c959b55
Author: Joel Martin <github@martintribe.org>
Date:   Wed Aug 15 12:45:53 2012 -0500

    Fix tight decoding when using binary/non-base64 connection.

commit 4dd1bb1ecbd49c112c2f7ff4bd66016ebe38d063
Author: Joel Martin <github@martintribe.org>
Date:   Tue Aug 14 15:33:42 2012 -0500

    Pull in latest websockify.
    
    Pull in version 376872d99.
    
    Several changes including:
    - binary/typed array support in websock.js
    - unix socket support
    - multiple target support via config file(s)
    - prefer IPv6 option

commit af1527b27610da9339c27439886766b9e65da2b9
Author: Joel Martin <github@martintribe.org>
Date:   Thu Jun 28 10:29:12 2012 -0500

    timers: fix over repeated connects.
    
    With tight we can't ever use FBU.rects being 0 as an indication of
    a full frame having been drawn.

commit e5d5a7d3fd4fcf56447658462235c55a1247063f
Author: Joel Martin <github@martintribe.org>
Date:   Mon Jun 25 21:42:56 2012 -0500

    websock.js: comment out debug options.

commit d58f8b5144d8b344afcbe7b8ee3c18e34b14cff4
Author: Joel Martin <github@martintribe.org>
Date:   Sun Jun 24 16:23:58 2012 -0500

    License clarification: HTML,CSS,images,fonts under permissive licenses.
    
    Clarify in LICENSE.txt that the noVNC core library is the part that is
    LGPLv3 licensed. The HTML, CSS, images and fonts are separate from the
    core library and can be modified and distributed with the noVNC core
    but under their own license conditions.
    
    HTML and CSS: 2-Clause BSD
    Fonts: SIL OFL 1.1
    Images: CC BY SA 3.0
    
    In other words, you can modify the layout and appearance of of noVNC
    to integrate with an existing or new web site or application without
    having to publish the source for those modifications under the LGPLv3.
    However, use of and modification of the noVNC core library (i.e. the
    core Javascript that makes up noVNC) must still be according to the
    LGPLv3.
    
    Chris Gordon was the other contributor to the HTML, CSS, and images
    included with noVNC and gave permission for this license clarification
    on June 23, 2012.

commit 18232af2a601d235ef745d3f122281a1040903c8
Merge: b50f340 d5575ef
Author: Joel Martin <github@martintribe.org>
Date:   Sat Jun 23 14:23:50 2012 -0500

    Merge branch 'master' of github.com:kanaka/noVNC

commit b50f34067432b62ac9f323957fb8960b5b4b3d0b
Author: Joel Martin <github@martintribe.org>
Date:   Sat Jun 23 14:22:47 2012 -0500

    UltraVNC repeaterID cleanup.
    
    https://github.com/kanaka/noVNC/issues/103
    https://github.com/kanaka/noVNC/pull/170

commit 2090f1af673eda5d2d6df8f7c44509881f497d4c
Merge: 9450f13 9ebc84f
Author: Joel Martin <github@martintribe.org>
Date:   Sat Jun 23 14:16:49 2012 -0500

    Merge remote branch 'kassah/master'

commit 9450f132c6766cbeb04f546531ffbc5ecf549895
Author: Joel Martin <github@martintribe.org>
Date:   Sat Jun 23 14:15:41 2012 -0500

    remove docs/TODO: see issues marked as "feature".
    
    https://github.com/kanaka/noVNC/issues?labels=feature

commit 9ebc84f2e963c6b1d4325defa07da5bf8447512e
Author: William Lightning <kassah@gmail.com>
Date:   Fri Jun 22 22:34:20 2012 -0700

    Update vnc_auto.html to use config option for repeaterID

commit a997c5fd942350450fbe62bfaded1e2abc08be1b
Author: William Lightning <kassah@gmail.com>
Date:   Fri Jun 22 22:30:57 2012 -0700

    Make repeaterID show up in config options on vnc.html

commit 12acb663ebae597e70d3b23aeb61330522102f5d
Author: William Lightning <kassah@gmail.com>
Date:   Fri Jun 22 22:30:05 2012 -0700

    Change RepeaterID to be a config option

commit d5575ef6f3e5863ed4a784c4003ef1f2df343ddd
Merge: bee3650 90f18a8
Author: Joel Martin <github@martintribe.org>
Date:   Fri Jun 22 15:41:43 2012 -0700

    Merge pull request #172 from soheilhassasyeganeh/fix_novarpc
    
    Fixes nova rpc package.

commit 90f18a8a960ae2e11b9d0188280be5d39553edc4
Author: Soheil Hassas Yeganeh <soheil@cs.toronto.edu>
Date:   Thu Jun 21 21:38:52 2012 -0400

    Fixes nova rpc package.

commit bee36506e1b6d70109e540697ec17c6da75000f7
Author: Joel Martin <github@martintribe.org>
Date:   Fri Jun 8 10:42:26 2012 -0500

    Fix forcing of web-socket-js even when native available.

commit cb3ad1b5b5d7dadbee7bb1f4ec5b82e302d1d493
Merge: ab44059 b1d2225
Author: Joel Martin <github@martintribe.org>
Date:   Fri Jun 8 08:26:41 2012 -0700

    Merge pull request #168 from soheilhassasyeganeh/master
    
    Fix nova flag API change

commit b1d2225eeefe0349d166c43eab72d58b6f8296cd
Merge: 9e2351f ab44059
Author: Soheil Hassas Yeganeh <soheil@cs.toronto.edu>
Date:   Fri Jun 8 11:12:22 2012 -0400

    Merging with upstream tree.

commit 8d0c7fb5aca8251ff72d9727c7e6997f761d89e2
Author: William Lightning <kassah@gmail.com>
Date:   Wed Jun 6 23:10:13 2012 -0700

    Add ultravnc_repeater.pl support to rfb.js and vnc_auto.html

commit 9e2351f5eb70df5f333299ea9829a14f23a78a70
Author: Soheil Hassas Yeganeh <soheil@cs.toronto.edu>
Date:   Wed Jun 6 21:26:25 2012 -0300

    Switch to nova's new flag API.

commit ab44059b8b3c545b00beab7547195e51cedac6a4
Author: Joel Martin <github@martintribe.org>
Date:   Thu May 24 07:08:45 2012 -0500

    README: Add PocketVNC.

commit a04087e44cf27784394285455053b2325f437f63
Merge: 72a5596 9f54c23
Author: Joel Martin <github@martintribe.org>
Date:   Fri May 18 09:44:54 2012 -0700

    Merge pull request #166 from mnaser/patch-1
    
    Remove old flagfile support

commit 9f54c236299e988fa166c2b8b129319463fda542
Author: Mohammed Naser <mnaser@vexxhost.com>
Date:   Thu May 17 13:48:42 2012 -0300

    Remove old flagfile support
    
    default_flagfile has been removed from the nova trunk in favour of .ini files (https://github.com/openstack/nova/commit/7e3e9b8e9cea4f1bf78d127ffb915b79c854fdbe)

commit 72a5596e50471039e16b49f6c15d0b02576cb7ae
Author: Joel Martin <github@martintribe.org>
Date:   Thu May 17 11:19:07 2012 -0500

    rfb: Use the render queue for copyrect.
    
    This will keep copyrect rendering actions in order with tight and tightPNG
    rendering actions (otherwise you can get visual image corruption when
    they are mixed together).
    
    Warning:
    
    RAW, RRE and HEXTILE still use immediate render commands so there is
    still the risk of out-of-order rendering if RAW, RRE, and HEXTILE are
    mixed with tight and tightPNG. Copyrect will work with either because
    the renderQ_push function will render copyrects immediately if they
    are the only thing being pushed on the queue.

commit 34d8b844ae225a4b1a20b79506be8f543bda9d10
Author: Joel Martin <github@martintribe.org>
Date:   Thu May 17 11:13:08 2012 -0500

    Move render queue processing to Display and use requestAnimationFrame
    
    The imgQ code in RFB should be a generic rendering queue system in
    Display.
    
    The reason for the render queue in the first place is that images
    loaded from raw data URI strings aren't immediately ready to display
    so we have to wait for them to complete 'loading'. However, when data
    URI images are mixed with other types of rendering actions then things
    can get out of order. This is the reason for the rendering queue.
    
    Currently this only keeps display actions for tight and tightPNG
    related actions in order (because they use a mix of fills, raw pixel
    data and data URI images).

commit a0726a4b56b07dc2392f5ec9f6f0005e90df4502
Author: Joel Martin <github@martintribe.org>
Date:   Thu May 17 11:07:07 2012 -0500

    rfb: debug output cleanup.

commit 57044a3c0abf966c1a17bf0033ee59e9642db867
Author: Joel Martin <github@martintribe.org>
Date:   Wed May 16 18:31:04 2012 -0500

    README: Link to websockify encryption page.

commit dc6e501f20f6d49f5ce7644ee86669dc1f86180b
Author: Joel Martin <github@martintribe.org>
Date:   Wed May 16 18:07:18 2012 -0500

    Fail the connection on unexpected tightPNG cmode.
    
    This related to https://github.com/kanaka/noVNC/issues/145
    
    The real fix is to QEMU so that this doesn't happen which was
    submitted as a patch to the mailinglist right before this.

commit e472e6ce3a3e465cde02e2743967d2898744f2bc
Author: Joel Martin <github@martintribe.org>
Date:   Fri May 11 14:48:34 2012 -0500

    docs/release.txt: --all and --tags are incompatible

commit 17bb6ca38e7076d836d63fecbcccc46dc1661b67
Author: Joel Martin <github@martintribe.org>
Date:   Fri May 11 14:45:53 2012 -0500

    docs/release.txt: correct tag instructions

commit df4fa13b890005965d602d54a7afeb018ffaeffb
Author: Joel Martin <github@martintribe.org>
Date:   Fri May 11 14:42:05 2012 -0500

    noVNC version 0.3
    
    - Also add docs/release.txt instruction file.

commit 53dfab7fb71530d09f0b70031003e2bd63374a84
Author: Joel Martin <github@martintribe.org>
Date:   Thu May 10 22:10:01 2012 -0500

    Pull from websockify. Fix close code.

commit bc28395abfea8a6a183b2ac500fd3e352f8aec3c
Author: Joel Martin <github@martintribe.org>
Date:   Thu May 10 18:13:07 2012 -0500

    Add/use display.drawImage which is viewport relative.
    
    Fixes https://github.com/kanaka/noVNC/issues/163
    
    When using an encoding with raw images (tight, tightPNG) we need to
    draw those image relative to the viewport so that clipping works when
    the viewport isn't at 0, 0.

commit a117514183d94d06d9d76c0d4fd870f08b8d0d90
Merge: 02d1f19 58ad838
Author: Joel Martin <github@martintribe.org>
Date:   Thu May 10 15:31:14 2012 -0700

    Merge pull request #162 from toddfreese/master
    
    RealVNC 4.6 Mac Support.

commit 58ad83878c2d18ba62bd248d836e46985f9fcdfa
Author: Todd Freese <toddf@filmworkers.com>
Date:   Thu May 10 12:29:36 2012 -0500

    Added support for RealVNC Mac.

commit 02d1f19b5f914ab860709628f85c9d4c64368333
Author: Joel Martin <github@martintribe.org>
Date:   Thu May 10 08:05:47 2012 -0500

    Pull from websockify.
    
    Fix python 2.4 CClose exception handling.

commit 4910600b71127039bb8bd28838b0ae010bb432b5
Merge: 483157f ca78183
Author: Joel Martin <github@martintribe.org>
Date:   Mon Apr 30 15:16:24 2012 -0700

    Merge pull request #158 from cloudbuilders/fix_rpc_backend
    
    Fix rpc initialization issue

commit ca7818317127fabb249b15cdbe2ccb73ffb682ec
Author: Anthony Young <sleepsonthefloor@gmail.com>
Date:   Mon Apr 30 14:07:15 2012 -0700

    Use explicit check for rpc.register_opts

commit 901e5655035ab1274e43488bc932a68610c0af02
Author: Anthony Young <sleepsonthefloor@gmail.com>
Date:   Mon Apr 30 13:21:48 2012 -0700

    Update to fix trunk nova issue with rpc library
    
     * rpc flags now must be manually initialized.

commit 483157f87fe12e61f6b5f39adf4b4818202c8efc
Author: Joel Martin <github@martintribe.org>
Date:   Thu Apr 26 08:18:27 2012 -0500

    Comment out duplicates in unicodeTable.
    
    Unfortunately the values for those duplicate keys are not the same and
    I'm not sure which ones are more correct. However, for now, I've
    commented out the second occurrence.
    
    This data is generated from /usr/include/X11/keysymdef.h using the
    utils/u2x11 script.

commit dcf1994d3ecf06f5a84762922b380aff04cb6abc
Author: Joel Martin <github@martintribe.org>
Date:   Wed Apr 25 20:13:25 2012 -0500

    Don't treat onerror as a close.
    
    The close event will also fire so trying to fail the connection twice
    is unhelpful and hiding status information.

commit c3900110997a79848f30901ec3570d120106aa11
Author: Joel Martin <github@martintribe.org>
Date:   Wed Apr 25 13:46:30 2012 -0500

    Update websockify to pull in close code/reason fixes.

commit f8380ff9392fd75304179dc11257dc0b8fd80f1f
Author: Joel Martin <github@martintribe.org>
Date:   Fri Apr 13 11:23:30 2012 -0500

    Add code/reason to close event messages. Remove useless object print in error event.

commit f736c3316a37e9e76969231add55673e11a6aa96
Merge: bd96e91 cbd3435
Author: Joel Martin <github@martintribe.org>
Date:   Tue Apr 10 07:07:35 2012 -0700

    Merge pull request #149 from ohadlevy/patch-1
    
    Update README.md to add Foreman project

commit cbd3435a072b85ed30e415bd0413d5e50ed0a2a5
Author: Ohad Levy <ohadlevy@gmail.com>
Date:   Tue Apr 10 16:58:27 2012 +0300

    Update README.md

commit bd96e91932712a1d5ccf4b86d709bdfc07b8b48f
Author: Joel Martin <github@martintribe.org>
Date:   Tue Apr 3 16:46:27 2012 -0500

    Use page host:port as default for WebSocket host/port.

commit 0139b2562c1e7a9e7e289f9c66ff7d6632011a86
Author: Anthony Young <sleepsonthefloor@gmail.com>
Date:   Tue Apr 3 10:34:24 2012 -0700

    Simplify nova-novncproxy related logic.
    
      *  Don't clobber default host/port

commit 4c75210a4d8946cfc35db1d18150cfab72cba61e
Author: Anthony Young <sleepsonthefloor@gmail.com>
Date:   Tue Apr 3 10:08:41 2012 -0700

    Add nova-novncproxy
    
     * Adds the nova-novncproxy binary, to provide support for vnc + OpensStack nova
     * Adds the ability to pass an auth token in via url, which is subsequently
       passed back to the proxy as a cookie.

commit f84504bc63183b43cf60b1e02c871cc8fd9ee9c6
Author: Joel Martin <github@martintribe.org>
Date:   Fri Mar 23 12:18:18 2012 -0500

    Support Apple Remote Desktop.
    
    https://github.com/kanaka/noVNC/issues/58

commit c76b3e4b2668d2956da4b143243204da4111e5c4
Author: Joel Martin <github@martintribe.org>
Date:   Fri Mar 16 09:21:38 2012 -0700

    Add jsunzip.js to debian install list.
    
    Thanks for catching this: https://github.com/abligh

commit 6671c7624d19565f350556fd06adf84770ed662b
Author: Joel Martin <github@martintribe.org>
Date:   Tue Mar 13 20:29:02 2012 -0500

    Release down/pressed keys when window loses focus.
    
    May window managers have a keyboard shortcut that switch away from the
    current desktop (e.g. desktop switcher). Unfortunately, when this
    happens, the meta/control keys that are used with the shortcut will
    send a down event to the browser, but the up event will never be sent
    because the browser no longer has focus at the point when the up event
    happens. This can cause weird stuck key issues for VNC clients (not
    just noVNC). To get around this, we try and detect when the browser
    loses focus and release any keys that are on the keyDownList.
    
    As an aside, if you run into this situation (in noVNC or another VNC
    client), you can unstick the state by pressing and releasing the Ctrl,
    Shift, Alt, etc.
    
    Addresses: https://github.com/kanaka/noVNC/pull/135

commit ce86f5c95472761303b7e0b38ebd6134118234f5
Author: Joel Martin <github@martintribe.org>
Date:   Tue Mar 13 20:24:24 2012 -0500

    Squelch noisy debug logs.

commit c0c20581f5598a7e0b864d20591e7f65f17c3445
Author: Joel Martin <github@martintribe.org>
Date:   Mon Mar 12 15:31:26 2012 -0700

    Merge tight/tightPNG routine.
    
    Mostly duplicate code so merge it and wrap with closures that pass in
    the isTightPNG parameter.
    
    Still detect and error if copy/filter when tightPNG.

commit f2a495c944759c387fd03882236df04f28892025
Author: Joel Martin <github@martintribe.org>
Date:   Mon Mar 12 00:34:53 2012 -0500

    Use standard citing format for contributors.

commit b8dd87c75732e32e4f464fcf7ce2357d0fc9108d
Author: Joel Martin <github@martintribe.org>
Date:   Sun Mar 11 14:39:23 2012 -0500

    Flesh out authors/contributors and licenses.

commit d065cad99e1bd9611a71270a5c499941874ebc88
Author: Joel Martin <github@martintribe.org>
Date:   Sat Mar 10 20:32:01 2012 -0600

    General code formatting and cleanliness.

commit a09a75e8f2e6333fe2a65631682c01fb5a78ff30
Author: Joel Martin <github@martintribe.org>
Date:   Sat Mar 10 19:56:19 2012 -0600

    Stats: count pixels instead of just FBU.rects.
    
    With last_rect, the rects count can be high until a last_rect
    pseudo-encoding is received which messes with the timing stats. So
    count up the number of pixels rendered and show timing after the pixel
    count reaches the width*height of the screen.

commit 4cd0070a1cfb9184596dd45147de354a3b4a4d96
Author: Joel Martin <github@martintribe.org>
Date:   Sat Mar 10 19:54:56 2012 -0600

    Cleanup vnc.js includes.

commit 35d7574b0979f3a898c7baea5a35baea00f3bd64
Merge: 0c4f4b5 d38db74
Author: Joel Martin <github@martintribe.org>
Date:   Sat Mar 10 19:52:11 2012 -0600

    Merge commit 'd38db74abd0efa34f7297dc19bf603b7f765e0f5'
    
    Conflicts:
    	README.md

commit d38db74abd0efa34f7297dc19bf603b7f765e0f5
Author: Mike Tinglof <quicklyfrozen@gmail.com>
Date:   Fri Mar 9 11:02:18 2012 -0500

    add some documentation; default to existing websocket transport

commit 0c4f4b598c97031dc28d016f5588adb003c35b5d
Author: Joel Martin <github@martintribe.org>
Date:   Mon Feb 20 16:33:08 2012 -0600

    Don't swallow SSL EOF errors.

commit c6f3919cb097096454b783b9cd3a9c3586c229e9
Author: Joel Martin <github@martintribe.org>
Date:   Mon Feb 20 15:48:39 2012 -0600

    Better base64 illegal character output.

commit 3b302463f816c070fcbeb77cbaca96c876fbc5b7
Author: Joel Martin <github@martintribe.org>
Date:   Mon Feb 20 12:37:14 2012 -0600

    Correction: Version 0.2
    
    noVNC version 0.2

commit 23ff806774fa977de946510a2e814ca2d2181558
Author: Joel Martin <github@martintribe.org>
Date:   Mon Feb 20 12:29:56 2012 -0600

    Version 0.1
    
    noVNC version 0.1

commit 94bcf652b3af47a6fe9d4a20d4e1e077b7f58b12
Author: Joel Martin <github@martintribe.org>
Date:   Mon Feb 20 12:28:17 2012 -0600

    Add images subdirectory to deb build.

commit 0ce93900ae738bedb75ad01cbdbd592e1e47fff8
Author: Joel Martin <github@martintribe.org>
Date:   Wed Feb 15 14:12:27 2012 -0600

    Add message panel when hosted at kanaka.github.com.
    
    Add a helpful popup/panel message for when noVNC is used at
    kanaka.github.com (e.g. where novnc.com redirects).

commit 9e6e6662c727d846d12906c6054d7ec95ef546ed
Author: Joel Martin <github@martintribe.org>
Date:   Tue Feb 14 17:23:14 2012 -0600

    Set $D on window directly.
    
    Addresses: https://github.com/kanaka/websockify/issues/29

commit 32f135d730531d88258832445e65cc267265aae4
Author: Joel Martin <github@martintribe.org>
Date:   Tue Feb 14 07:53:39 2012 -0600

    Add array map function for IE9.

commit 540f0e52a40af66996c938309469bcf175142f50
Author: Ghe Rivero <ghe@debian.org>
Date:   Mon Feb 13 16:16:37 2012 +0100

    debian dfsg

commit 22b9a7589e8d6678e4a0b92c6f88c5fe3a0595f7
Author: Anthony Young <sleepsonthefloor@gmail.com>
Date:   Fri Feb 10 23:21:23 2012 -0800

    Fix novncproxy for trunk cfg changes

commit 5158669942db0c3571cac2aa466f0a05cf45a4d4
Merge: fc68c6d 4a6ed02
Author: Jesse Andrews <anotherjesse@gmail.com>
Date:   Fri Feb 3 20:08:11 2012 -0800

    Merge pull request #5 from dtroyer/cfg
    
    cfg moved to nova.openstack.common

commit 4a6ed02d6ac60e783b353640391c237b9220a8fa
Author: Dean Troyer <dtroyer@gmail.com>
Date:   Fri Feb 3 21:50:18 2012 -0600

    cfg moved to nova.openstack.common

commit 1af3e54bef9f2954f87e28998d00bdacb6280545
Author: Joel Martin <github@martintribe.org>
Date:   Thu Feb 2 09:29:02 2012 -0600

    Make WebSocket encrypt setting default to page protocol.
    
    I.e. if the page is https:// then the WebSocket encrypt setting will
    default to wss:// (TLS encryption).
    
    Note that since noVNC settings are saved in cookies, this will only
    affect first load. If you have already loaded the page, then the
    encrypt setting will be whatever you last set it to.

commit 6a02f88e4d3ab956b44659566eb5dcf502595984
Author: Joel Martin <github@martintribe.org>
Date:   Tue Jan 31 13:37:20 2012 -0600

    Default path to 'websockify' in include/ui.js

commit 9b75bcaadaa5671683224bd2bf22316d6260d586
Author: Mike Tinglof <quicklyfrozen@gmail.com>
Date:   Tue Jan 31 00:15:56 2012 -0500

    add tight zlib stream reset; add error if tight encoding is used w/o true color

commit fc68c6dc565c528aec9a88ddd95bb366366da108
Merge: 1300cf1 419f4e2
Author: sleepsonthefloor <sleepsonthefloor@gmail.com>
Date:   Mon Jan 30 18:41:19 2012 -0800

    Merge pull request #3 from cloudbuilders/fix_flags
    
    Fix flags

commit 419f4e299b949d539d3a5fa48a2e75ef04e535c7
Author: Anthony Young <sleepsonthefloor@gmail.com>
Date:   Tue Jan 31 02:18:42 2012 +0000

    Fix flags for new nova refactor
    
     * Fixes bug 924058

commit a14b8fae2a9e047268b90f35f3d5e90f4ea5ed0d
Author: Mike Tinglof <quicklyfrozen@gmail.com>
Date:   Mon Jan 30 02:26:36 2012 -0500

    comment out per-decompress checksum and logging

commit 2cedf4839728bbe4c5db1ab4735eb16b1c30d5ae
Author: Mike Tinglof <quicklyfrozen@gmail.com>
Date:   Mon Jan 30 02:19:18 2012 -0500

    add last rect special encoding; fix tight fill subencoding color handling; fix mono indexed rect handling

commit c514fd5e1c74889b3db397dd3987f3e91067b350
Author: Mike Tinglof <quicklyfrozen@gmail.com>
Date:   Sun Jan 29 02:10:25 2012 -0500

    don't need to copy palette data until we have all data for rect; change a few comments

commit 5ca5e2d8cd51bd9ad83a2e1becf99e0f2b7f8b60
Author: Mike Tinglof <quicklyfrozen@gmail.com>
Date:   Sun Jan 29 01:55:41 2012 -0500

    implement tight indexed rectangle; remove some debug code

commit 6fbc37489fe3da33c94fce989ef12249e8b354db
Author: Mike Tinglof <quicklyfrozen@gmail.com>
Date:   Sat Jan 28 02:56:19 2012 -0500

    fix handling of min compression size

commit b0ac240f3124e01b54ccb59cc033b68722964f03
Author: Mike Tinglof <quicklyfrozen@gmail.com>
Date:   Sat Jan 28 01:56:55 2012 -0500

    re-enable history buffer (used as sliding window for decompress)

commit 523cc4d6ab57725be8cd161ed899f981f01df1a4
Author: Joel Martin <github@martintribe.org>
Date:   Fri Jan 27 16:03:20 2012 -0600

    Default path 'websockify' for Clojure Websockify.
    
    The Jetty WebSocket server code used by the Clojure version of
    websockify doesn't support WebSocket and Web at the same path so pass
    in a default value for the path so that we can support the Clojure
    version websockify.

commit 0fa6748c5290956831b378571d2b81f95b1372f0
Author: Mike Tinglof <quicklyfrozen@gmail.com>
Date:   Thu Jan 26 14:35:36 2012 -0500

    fix issue with parsing distance of more then 8 bits; convert to just supporting arrays for buffers

commit a820f1267a7422ed7561800f54b4ade76f8d4d78
Author: Mike Tinglof <quicklyfrozen@gmail.com>
Date:   Wed Jan 25 18:09:55 2012 -0500

    added rgb image drawing, some zlib changes (huffman coding working, but lz77 not so much)

commit c577ca23059b36c0d44d3d1a7d20762c6cd60670
Author: Mike Tinglof <quicklyfrozen@gmail.com>
Date:   Tue Jan 24 21:18:29 2012 -0500

    keep zlib history so we can decode as a stream

commit de84e098546ea8a1244bddd504fa23ada0bf1f02
Author: Mike T <quicklyfrozen@gmail.com>
Date:   Tue Jan 24 13:50:42 2012 -0500

    basic framing for tight is working (decode not complete)

commit 682f33a79049fe4987f426e72b0a494b42e6cd9b
Author: Mike <mike@Mikes-MacBook-Pro-2.local>
Date:   Tue Jan 24 13:49:49 2012 -0500

    add javascript zlib

commit e79917c3db630abe65b8c1eb47eea7595fc0c16e
Merge: a9a7f0e ac99a1f
Author: Joel Martin <github@martintribe.org>
Date:   Thu Jan 12 17:07:07 2012 -0600

    Merge remote branch 'origin/issue-70'
    
    Conflicts:
    	include/display.js
    	include/rfb.js
    
    This merges in the fix for https://github.com/kanaka/noVNC/issues/70
    
    This changes noVNC to use the preferred color ordering that most VNC
    server prefer and that VMWare VNC requires. It's possible this may
    break some VNC servers out there in which case we might have to do
    something a bit more subtle such as having alternate render functions
    for little and big endian color ordering.

commit a9a7f0e18c4a02a1ea8d220c223bea966c37af15
Author: Joel Martin <github@martintribe.org>
Date:   Thu Jan 12 12:52:09 2012 -0600

    Fix Intel AMT KVM: disable true color.
    
    Issue: https://github.com/kanaka/noVNC/issues/118
    Reporter @maxnet also found and suggested the fix.
    
    Probably could be more intelligent/generic by keying off the depth
    sent by the server, but this will do for now.

commit ff4bfcb77388c66b5d20eeaeee0b9a9d0e6eaee4
Author: Joel Martin <github@martintribe.org>
Date:   Thu Jan 12 12:38:55 2012 -0600

    Linting.
    
    Switched to using: http://www.jshint.com/

commit 1300cf194e8060910552be06e55f719318aefc17
Author: Anthony Young <sleepsonthefloor@gmail.com>
Date:   Tue Jan 10 07:10:05 2012 +0000

    rename nova binary

commit 9e4acfba45dd35a7f8ec954dcc56ded732daca10
Author: Anthony Young <sleepsonthefloor@gmail.com>
Date:   Tue Jan 10 06:07:41 2012 +0000

    rename ws proxy

commit f66bcda31b725c6fb800d8da7c00fd5e2ff6ad32
Author: Joel Martin <github@martintribe.org>
Date:   Thu Jan 5 11:55:56 2012 -0600

    Add websockify.py symlink for Windows.

commit f959b5bf190ae11db5525f41d1e0cf8d63450ec0
Author: Anthony Young <sleepsonthefloor@gmail.com>
Date:   Tue Jan 3 20:44:29 2012 +0000

    REmove optparse

commit adfca57547254e6cddcafdac28b29f947a5676f6
Author: Anthony Young <sleepsonthefloor@gmail.com>
Date:   Thu Dec 29 00:58:42 2011 +0000

    updates to vnc proxy to support new auth

commit fad26e7be0653efc7223d3090c491fc90a02b09a
Author: Anthony Young <sleepsonthefloor@gmail.com>
Date:   Thu Dec 22 21:43:53 2011 +0000

    Rework of vnc console for essex

commit 86ebeef709b3aa834bfe09bca8d26100e0fba20f
Merge: f2d8567 2fa565b
Author: Joel Martin <github@martintribe.org>
Date:   Thu Dec 15 15:34:30 2011 -0600

    Merge branch 'master' of github.com:kanaka/noVNC

commit f2d856767d37692945b2f03c71a83806acb4f23a
Author: Joel Martin <github@martintribe.org>
Date:   Thu Dec 15 15:26:16 2011 -0600

    websockify: better multi-python version support.
    
    Pull from websockify: 008a5118e728.
    
    Should address issue https://github.com/kanaka/noVNC/issues/107
    
    - Also add ability to force use of web-socket-js using
      window.WEB_SOCKET_FORCE_FLASH
    
    - in websock.js, for rQshift*, assume length is the full length if not
      specified.

commit 2fa565b37533a2a46cbf606394804420fdcbaaf1
Author: Joel Martin <jmartin@lonocloud.com>
Date:   Thu Dec 15 14:45:55 2011 -0600

    Fix python3 wss (TLS/SSL) connection detection.
    
    Compare the first byte of the handshake against numbers (character
    code) as well as string characters.

commit b688a909b0066aed30320dd96fbced0f74da7f2c
Author: Joel Martin <github@martintribe.org>
Date:   Thu Dec 15 13:59:35 2011 -0600

    Show close code and reason.
    
    Also add commented out web-socket-js debug variable in
    include/websock.js

commit 06a9ef0c6cd90746210f62d72b6bf8f0dcab9491
Author: Joel Martin <github@martintribe.org>
Date:   Thu Dec 1 09:05:16 2011 -0600

    Add View Only mode setting.
    
    Resolve issue: https://github.com/kanaka/noVNC/pull/101
    
    Based on proposal from @mightpenguin:
    Matthew Balman <emperor@mightypenguin.org>
    
    If view_only option is set then do not send mouse and keyboard events.
    This is not a secure/enforced way to make a client view only. To
    enforce view only at the server, most VNC servers support setting
    a view only password.

commit c3a172b98c035ff5e0dc5208717ee4c30522afe2
Author: Joel Martin <github@martintribe.org>
Date:   Sat Nov 19 17:59:06 2011 -0600

    Typo in Opera 11.60 fix.

commit aa670567858e948cf1d9ac12a258e1567911f57f
Author: Joel Martin <github@martintribe.org>
Date:   Sat Nov 19 17:37:18 2011 -0600

    Fix issue #102 - Opera 11.60 doesn't work.
    
    Opera presto engine version detection is broken. For now, just return
    true or false. That should cover most cases.

commit 91b0dc39150b73dc1f4d59a9c43492a4f427d646
Author: Joel Martin <github@martintribe.org>
Date:   Thu Nov 17 10:53:31 2011 -0600

    LibVNCServer capitalization.

commit 4f545a5ba6362a924bc9c73a3259f7d958e7643a
Author: Joel Martin <github@martintribe.org>
Date:   Thu Nov 17 10:49:34 2011 -0600

    Add libvncserver as project including noVNC.
    
    libvncserver now includes noVNC as an alternative to the Java web
    client.

commit 83ed7b8c2566a53947857b097c0be5af8b2c84fe
Author: Joel Martin <github@martintribe.org>
Date:   Mon Nov 7 14:26:44 2011 -0600

    Add Brightbox to user list.

commit 1c92807a8e70bae5e2ac75f593a75ec81d5638ac
Author: Joel Martin <github@martintribe.org>
Date:   Mon Oct 31 12:20:46 2011 -0500

    debian/ - Update CSS file names.
    
    Thanks Alex Bligh for the catch.

commit bc71506553659e40eaf4d282309bfc3ed58b9804
Author: Joel Martin <github@martintribe.org>
Date:   Sat Oct 29 16:11:37 2011 -0500

    README: feature section and minor rearranging.

commit 2e7d81ce24251c81808d226a82bb013300bac2bc
Author: Joel Martin <github@martintribe.org>
Date:   Fri Oct 28 10:00:03 2011 -0500

    Add Intel MeshCentral.

commit fa4607dbf5721395fc042c9446c26a098350dd88
Author: Joel Martin <github@martintribe.org>
Date:   Fri Oct 28 09:49:59 2011 -0500

    Add Amahi as a project using noVNC.

commit a538be43502b4fbb90c21a097913857e3826cf6b
Author: Joel Martin <github@martintribe.org>
Date:   Sat Oct 8 13:00:42 2011 -0500

    Update description. Remove Sentry reference.

commit a367e84a9273a9e6145d7347abc2eb6983db3f3b
Author: Joel Martin <github@martintribe.org>
Date:   Sat Oct 8 12:57:57 2011 -0500

    Update requirements. Note WS added to libvncserver.

commit df23ea065f5c366303745255c51c5a913e5daad2
Author: Anthony Young <sleepsonthefloor@gmail.com>
Date:   Wed Oct 5 14:55:51 2011 +0000

    fix to allow flagfile parsing

commit 1e5087159920d7c3ca18ff2ec3322594301cb446
Author: Joel Martin <github@martintribe.org>
Date:   Thu Sep 29 16:12:19 2011 -0500

    websockify --run-once, --timeout, numpy fallback
    
    Pull websockify 724aa3a.
    
    - Use array module for unmasking HyBi when no numpy module is
        available.
    
    - Detect client close properly when using python 3.
    
    - Print request URL path is specified.
    
    - New option --run-once will exit after handling a single WebSocket
      connection (but not ater flash policy or normal web requests).
    
    - New option --timeout TIME will stop listening for new connections
      after exit after TIME seconds (the master process shuts down).
      Existing WebSocket connections will continue but once all
      connections are closed all processes will terminate.

commit 65db2d8243324916653d89b2a7b59041a3c2e60e
Author: Joel Martin <github@martintribe.org>
Date:   Thu Sep 29 14:33:25 2011 -0500

    Fix README screenshot src.

commit b29e06f36e7c8e9e1f97c5207ddfb01e66f745fd
Author: Joel Martin <github@martintribe.org>
Date:   Thu Sep 29 14:32:54 2011 -0500

    Update README screenshots.

commit f4bce78307204a02fb1296ee42fca0900c1a68b4
Author: Joel Martin <github@martintribe.org>
Date:   Thu Sep 29 12:09:32 2011 -0500

    Re-organize CSS. Remove broken IE filter statement.

commit 5299db1a004faec901eb31a2a6040b72c3bf4a6c
Author: Joel Martin <github@martintribe.org>
Date:   Thu Sep 29 09:32:09 2011 -0500

    Formatting. Image renames/cleanup.
    
    - Remove the images using the old font.
    
    - Simplify the naming of the new control bar icon images.
    
    - Change keyboard input type to 'email'. 'url' type doesn't have
      a space bar.
    
    - Some clarifications to main LICENSE.txt file.

commit 938daad1c914b8b43bc8b11ac2acec664e7d36bc
Author: Chris Gordon <snorkeyg@gmail.com>
Date:   Thu Sep 29 13:44:08 2011 +1000

    Mobile icons.
    
    - CSS highlighting of buttons when selected.
    - Keyboard button tweaked to allow show/hide toggle of keyboard.
    
    Signed-off-by: Chris Gordon <snorkeyg@gmail.com>

commit 1709ee3ab7e97f1587d0cd6b8291eb1de5aad951
Author: Joel Martin <github@martintribe.org>
Date:   Wed Sep 28 11:39:36 2011 -0500

    LICENSE.txt, docs/TODO: bring up to date.
    
    - Add Orbitron info to LICENSE.txt
    
    - Update TODO.

commit b5a43c92a0a750ab2476231457718bb880eb67a7
Author: Anthony Young <sleepsonthefloor@gmail.com>
Date:   Tue Sep 27 19:37:21 2011 -0700

    remove space

commit 8565f34978ff71fd46c19c7a9f772875bdd89711
Merge: 84b0e55 7873bed
Author: Anthony Young <sleepsonthefloor@gmail.com>
Date:   Tue Sep 27 19:13:13 2011 -0700

    Merge branch 'master' into nova-vncproxy-redux
    
    Conflicts:
    	include/rfb.js
    	vnc_auto.html

commit 84b0e553d6ced5867e5e9ca157eb0f5b85639279
Author: Anthony Young <sleepsonthefloor@gmail.com>
Date:   Tue Sep 27 14:57:20 2011 -0700

    A new imlementation of nova-vncproxy, with better browser support.

commit 479bfa9964b610a08e0d7d9a246e6221ce4e6763
Author: Joel Martin <github@martintribe.org>
Date:   Tue Sep 27 16:53:09 2011 -0500

    Add local copy of Orbitron font.
    
    Instead of using Google Font API, use local copy of Orbitron for speed
    and also in case Internet connection is flaky or unavailable.
    
    More info about Orbitron font here:
    http://www.google.com/webfonts/specimen/Orbitron
    
    Orbitron font is:
    Copyright (c) 2009, Matt McInerney <matt@pixelspread.com>
    
    Licensed under SIL Open Font License 1.1
    see docs/LICENSE.OFL-1.1 or http://scripts.sil.org/OFL

commit a7f5589946904e077d84bbda56bd09ac339f388f
Author: Joel Martin <github@martintribe.org>
Date:   Tue Sep 27 12:49:50 2011 -0500

    vnc_auto.html: sync with mobile changes.
    
    Also, add path option settable with query string.

commit 6209639f2c2057aed2f319cfe1167befea210516
Author: Joel Martin <github@martintribe.org>
Date:   Tue Sep 27 12:36:06 2011 -0500

    Add WebSocket URL path to UI settings.

commit 7cd6118ce5e9919c523d57435a0a69119a051f71
Author: Joel Martin <github@martintribe.org>
Date:   Mon Sep 26 17:09:29 2011 -0500

    Move viewport functions.
    
    Move viewportChange(), getCleanDirtyReset(), absX() and absY() to the
    public API section. Also add some function comments.

commit 490d471c53b1791398d6c30f0efce54925939f33
Author: Joel Martin <github@martintribe.org>
Date:   Mon Sep 26 11:28:24 2011 -0500

    Remove support for non-HTML5 browsers.
    
    Display API change:
        - getTile -> startTile (no longer returns a tile)
        - setSubTile -> subTile (drop img/tile first parameter)
        - putTile -> finishTile (no longer takes img/tile paramter)
    
    The Display tile logic uses canvas image data directly and
    caches/reuses a 16x16 imageData tile (for other sizes, the tile is
    create for each call). This gives a 30% speedup on Chrome
    13 (and no significant change for Firefox 3.6/4.0).
    
    Other:
    
    - Remove rgbxImageFill and cmapImageFill routines.
    
    - Simplify constructor tests and just error if createImageData is not
      supported by canvas instead of .
    
    - Remove webkit canvas bug workaround that effects Chrome 7. Chrome
      7 usage share is now less than 0.5 percent and the workaround is
      ugly. Drop the function wrapping in the constructor and the canvas
      flush() routine.
    
    - Remove support for getImageData (Opera 11+ now required)
    
    Update browser support list:
    
        - Chrome 8+ (really any except 7)
        - Firefox 3.6+
        - Safari 4+
        - Opera 11+
        - IE9+
        - iOS 4.2+

commit 859fc7f18fce0cf876ed144d5869bf0558192d72
Author: Joel Martin <github@martintribe.org>
Date:   Mon Sep 26 11:16:16 2011 -0500

    include/ui.js: remove console.log debug.

commit 131060630505b16f4c63ddf2b56476dda837784d
Author: Joel Martin <github@martintribe.org>
Date:   Sun Sep 25 22:02:13 2011 -0500

    Make tests/vnc_perf.html work again.

commit a7db50597c47cfcd2eadf3852bbea696e01000a2
Author: Joel Martin <github@martintribe.org>
Date:   Fri Sep 23 00:51:55 2011 -0500

    Fixing iOS clipping, keyboard issues.
    
    - Make sure that on iOS the clipping setting is always forced to be
      enabled.
    - Hide the showKeyboard button unless connected.
    - Use the URL text entry method and disable autocorrect and
      autocapitalize in the show keyboard input box.

commit c506a481548db63843ae112acd4415d2d2621626
Author: Joel Martin <github@martintribe.org>
Date:   Fri Sep 23 00:04:01 2011 -0500

    Only show move/drag button when clipping. Cleanup.
    
    Cleanup:
    
    - remove unused changeViewportMeta function from include/ui.js
    - remove some debug output and debug CSS.
    - rename panel toggle functions and put them in same location in the
      code.
    - refactor some code from updateState to updateVisualState routine
      (renamed from updateSettingsState).

commit a5df24b488a6ef99f9e06313265a95985a9ff691
Author: Joel Martin <github@martintribe.org>
Date:   Thu Sep 22 10:36:23 2011 -0500

    Viewport clip/drag for mobile/touchscreen devices.
    
    API changes (forward compatible):
    
    - Display: add 'viewport' conf option to turn on and off viewport
      mode.
    - RFB: add 'viewportDrag' option to enable/disable viewport dragging
      mode.
    
    Other:
    
    - Add clip mode setting to default UI. For touch devices, clipping is
      forced on.
    - Use CSS media queries to adjust visual elements based on screen
      size. Especially disconnected logo size/position and button text size.
    - Catch page unload while connected and give a confirm dialog.
    - Change mouse button selector to a single button that changes between
      ' ', 'L', 'M', 'R' when clicked (empty means mouse is just being
      moved and doesn't send clicks).
    - include/ui.js:setViewClip() routine sets the clipping of the
      viewport to the current size of the viewport area (if clipping is
      enabled).
    - include/ui.js:setViewDrag() toggles/enables/disables viewport
      dragging mode.
    - Add several images for the UI and for Apple devices:
        - images/clipboard.png: clipboard menu icon
        - images/connect.png: connect menu icon
        - images/disconnect.png: disconnect button icon
        - images/keyboard.png: show keyboard button
        - images/move.png: viewport drag/move toggle button
        - images/settings.png: settings menu icon
        - images/screen_320x460.png: iOS app/desktop link start image
        - images/screen_57x57.png: iOS app icon
        - images/screen_700x700.png: full size noVNC image

commit e0b23efe95b068b749581e6bda2adbd7746d016c
Author: Joel Martin <github@martintribe.org>
Date:   Wed Sep 14 10:42:15 2011 -0500

    Fix fbUpdateRequest undefined parameter logic.

commit 608e0f52eeb948ea3abc6026d896a538a0c41cfd
Author: Joel Martin <github@martintribe.org>
Date:   Wed Sep 14 09:24:30 2011 -0500

    Some CSS style and DOM id/class cleanup.

commit 7e5f81f2555fc13a6095600142a2253909cb7723
Merge: b70ce07 832c744
Author: Joel Martin <github@martintribe.org>
Date:   Tue Sep 13 16:53:04 2011 -0500

    Merge branch 'master' into mobile

commit 832c744578f686f274c7e23f5a6881fd4fdbb509
Author: Joel Martin <github@martintribe.org>
Date:   Tue Sep 13 14:42:38 2011 -0500

    Framebuffer requests based on clean/dirty areas.
    
    New routine fbUpdateRequests that builds the update request messages
    based on the result of display.getCleanDirtyReset().
    
    - Also, fix fbUpdateRequest to properly accept x,y,xw,yw parameters.

commit b70ce07706d073a1e780da34ed79c2bd35eb704f
Author: Joel Martin <github@martintribe.org>
Date:   Tue Sep 13 13:14:11 2011 -0500

    Fix window/document sizing in firefox.
    
    Another firefox issue is that height: 100% is calculated as 100% of
    the containing element even when the containing element is the window.
    This means that the size of any sibling element shifts the window size
    down by that much and causes the vertical scroll bars to appear. This
    doesn't happen in Chrome.
    
    - So instead, put a pad element inside the noVNC_screen element that
      is the size of the control bar. This is hidden by the control bar,
      however, it causes things to be sized correctly.
    
    - Also, rename noVNC_defaultScreen to noVNC_logo.
    
    - Clean some style specification out of the HTML.

commit 1c3df652def466bcca9faa878096bc58f4a32075
Author: Joel Martin <github@martintribe.org>
Date:   Tue Sep 13 12:17:44 2011 -0500

    Firefox offset bug: use margin instead of padding.
    
    For some reason, the position calculation is broken in firefox when
    a DOM object in the ancestry change uses padding. So use margin to
    shift the view area down.

commit 9192cbe39c51e092a9353af29b2f22383aeedb78
Merge: 6ea8bec 54e7cbd
Author: Joel Martin <github@martintribe.org>
Date:   Tue Sep 13 10:14:53 2011 -0500

    Merge branch 'master' into mobile
    
    Conflicts:
    	include/rfb.js

commit 54e7cbdf8f50d3a77e70cb25491d9c2b5d40ae46
Author: Joel Martin <github@martintribe.org>
Date:   Tue Sep 13 09:54:44 2011 -0500

    Viewport handling in include/display.js
    
    Part of mobile device support:
    https://github.com/kanaka/noVNC/issues/48
    
    The Display object is redefined as a larger display region with
    an equal or smaller visible viewport. The size of the full display
    region is set/changed using resize(). The viewport is set/changed
    using viewportChange().
    
    All exposed routines that draw on the display now take coordinates
    that are absolute (relative to the full display region). For example,
    the result of fillRect(100, 100, 10, 10, [255,0,0]) will appear in the
    canvas at (0,0) if the viewport is set to (100,100).
    
    Details:
    
    - Move the generic part of the viewport code from tests/viewport.html
      into include/display.
    
    - Add two new routines to the Display interface:
    
        - viewportChange(deltaX, deltaY, width, height)
            - This adjusts the position of the visible viewport and/or the
              size of the viewport.
    
            - deltaX and deltaY specify how the position of the viewport
              should be shifted. The position of the viewport is clamped
              to the full region size (i.e. cannot outside the display
              region).
    
            - The clean and dirty regions of the display are updated based
              on calls to this routine. For example, if the viewport width
              is increased, then there is now a dirty box on the right
              side of the viewport. Another example, if the viewport is
              shifted down and to the left over the display region, there
              are now two dirty boxes: one on the left side and one
              on the bottom of the viewport.
    
        - getCleanDirtyReset()
            - This returns an object with the clean box and a list of
              dirty boxes (that need to be redrawn).
    
                {'cleanBox':
                    {'x': x, 'y': y, 'w': w, 'h': h},
                 'dirtyBoxes':
                    [{'x': x, 'y': y, 'w': w, 'h': h}, ...]
                 }
    
            - The coordinates in the clean and dirty boxes are absolute
              coordinates (relative to the full display region) but they
              are clipped to the visible viewport.
    
            - Calling this function also resets the clean rectangle to be
              the whole viewport (i.e. nothing visible needs to be redrawn
              dirty) so the caller of this routine is responsible for
              redrawing any

commit afecb839880dfaa2ecbf244ccc91edfff59a41f0
Author: Joel Martin <github@martintribe.org>
Date:   Sat Sep 10 16:03:39 2011 -0500

    Pull websockify: python3 numpy buffer/string fix.
    
    Pull from websockify 1c39c7f1f001.

commit 6ea8bece9b1299f51739e29dfce7c8033af58602
Author: Joel Martin <github@martintribe.org>
Date:   Thu Sep 8 10:10:46 2011 -0500

    Fix setBarPosotion runtime errors.

commit 01a9eee99166a169106516829eec4f6cd7fc375d
Author: Joel Martin <github@martintribe.org>
Date:   Thu Sep 8 10:00:09 2011 -0500

    HTML, CSS and Javascript indent/formatting.
    
    - 4 space indenting for HTML and Javascript.
    - 2 space indenting for CSS
    - Use hanging start curly for conditional blocks

commit 0911173a8985ea52e87c93da9456988668e136c7
Author: Joel Martin <github@martintribe.org>
Date:   Thu Sep 8 09:29:05 2011 -0500

    Disable static canvas logo.

commit 42e04907ff27daf625c2059f321e5cfbf34c72ca
Merge: d29c54c 7b10dc8
Author: Joel Martin <github@martintribe.org>
Date:   Thu Sep 8 08:50:18 2011 -0500

    Merge remote branch 'kanaka/master' into mobile

commit d29c54c476f01755612fd4065d4c6887121470a9
Author: Joel Martin <github@martintribe.org>
Date:   Thu Sep 8 08:41:50 2011 -0500

    Remove unused include/plain.css.

commit 89a76c785c973f5bb37d83a01dfb862b18c767c7
Author: Chris Gordon <snorkeyg@gmail.com>
Date:   Thu Sep 8 11:54:43 2011 +1000

    New theme. File: include/blue.css

commit a7eb596d89cb4efd0f7ef6febe177049761f12a2
Author: Chris Gordon <snorkeyg@gmail.com>
Date:   Thu Sep 8 11:27:08 2011 +1000

    Updated to use CSS3 gradients instead of images.
    
    Fixed display bug with keyboard textbox.

commit 8e0f008841fcf794e5ab30346c8a5fb00c2d1b30
Author: Chris Gordon <snorkeyg@gmail.com>
Date:   Thu Sep 8 11:25:52 2011 +1000

    Fixed bugs with connection panel, and moved functions into UI class.

commit c1e8b308770c734b4ea1acc45d62b4f96349237d
Author: Chris Gordon <snorkeyg@gmail.com>
Date:   Mon Sep 5 22:02:29 2011 +1000

    iOS keyboard bug fix.

commit 2c6b8a481e63f1eeaa4ebe70e040d481c232a709
Author: Chris Gordon <snorkeyg@gmail.com>
Date:   Mon Sep 5 13:33:22 2011 +1000

    Bug fix with mobile buttons.

commit c327865b4bd937e74ee633be683cd25b96612a61
Author: Chris Gordon <snorkeyg@gmail.com>
Date:   Mon Sep 5 13:31:00 2011 +1000

    Add base.css. Bar position formatting.

commit 53fc7392bb1fb89478195ac61e1801ac72c36a98
Author: Chris Gordon <snorkeyg@gmail.com>
Date:   Mon Sep 5 09:46:13 2011 +1000

    Modifed UI. Move HTML from ui.js to vnc.html.

commit 1734b5e465eb04675dfde7b49860762115e0c18c
Author: Chris Gordon <snorkeyg@gmail.com>
Date:   Thu Aug 25 09:52:54 2011 +1000

    Helper function for viewport meta changes.
    
    changeViewportMeta() now does viewport changes.

commit 7825b9ee9f2d4347b8091df34fdb71c1fe319920
Author: Chris Gordon <snorkeyg@gmail.com>
Date:   Tue Aug 23 10:26:04 2011 +1000

    Added support for native iOS and Android keyboards.
    
    Tested with Safari on iPad for iOS and Asus Transformer for Android.

commit 1150d0f70f3d49bff8ce561dddf2bcd4e32a9754
Author: Joel Martin <github@martintribe.org>
Date:   Tue Sep 6 17:46:57 2011 -0500

    Only output debug colourMap table once.

commit 7b10dc8a485079fdc34847140fb0c993265e3a1e
Author: Joel Martin <github@martintribe.org>
Date:   Wed Aug 31 18:06:58 2011 -0500

    utils/websocket.py: add HyBi 13 support.
    
    Pull from websockify 6e26306.

commit 94568bc08d9220b393232d9c9479ad3b011e8206
Author: Joel Martin <github@martintribe.org>
Date:   Wed Aug 31 15:33:30 2011 -0500

    utils/websocket.py: silence partial unmask debug.
    
    Pull from websockify ada02f2.

commit fa74a6e60cb689a9d27005dc3fdb42e23c461336
Author: Joel Martin <github@martintribe.org>
Date:   Wed Aug 31 15:08:03 2011 -0500

    websocket.py: fix payload length calculation.
    
    Pull from websockify 0da91c7.

commit 48f26d799f374cda876cba389799c42ed6e49890
Author: Joel Martin <github@martintribe.org>
Date:   Wed Aug 24 13:26:28 2011 -0500

    websockify: pull HyBi fixes.
    
    Pull 86af0b614d and 7b496ce5b from websockify.
    
        Fix HyBi support on 64-bit systems.
    
        https://github.com/kanaka/noVNC/issues/76
    
        - cleanup/update TODO.
        - remove explicit check for ctypes module for HyBi.
    
        Clarify that we support HyBi 07-10.
    
        HyBi 07 reports version 7 in the handshake.
        HyBi 08-10 report version 8 in the handshake.
    
        Remove version 9 since that is not yet actually defined.

commit ec40268e554796462a71396d0ae752f6d613be03
Author: Joel Martin <github@martintribe.org>
Date:   Mon Aug 22 11:21:55 2011 -0500

    Working viewport test.
    
    Tested on iOS (iPhone and iPad).
    
    The viewport is correctly clipped to the screen/browser size and
    resizing works correctly.
    
    This uses the CSS3 Flexible Box Layout model.

commit 46c621175cb0ac5433d16ce254e2128a0ada09ba
Author: Joel Martin <github@martintribe.org>
Date:   Wed Aug 10 17:54:15 2011 -0500

    Fix websockify with python2.4
    
    https://github.com/kanaka/noVNC/issues/72
    
    Pull from websockify 2e00f9643.

commit 676fbbb66255615070ab0654cb67351def79d601
Author: Joel Martin <github@martintribe.org>
Date:   Thu Aug 4 10:50:16 2011 -0500

    README: Zentyal (Ebox) and SlapOS to projects list.

commit 4245363cf4b2c123939f2f8cce5fd6b1e3b8a85b
Author: Joel Martin <github@martintribe.org>
Date:   Wed Aug 3 18:18:41 2011 -0500

    Add a viewport example/test.
    
    Tested with an iPad 2.
    
    This example shows a 400x200 viewport of an 800x400 display.
    
    It tries to be intelligent about how much it redraws. It copies what
    it can, and then when the user releases the mouse, it redraws the
    "dirty" areas that were newly revealed.

commit ce3bdbccc2a58d6c9ab6d0eeceb3f6ac3bc3b5e5
Author: Joel Martin <github@martintribe.org>
Date:   Tue Aug 2 08:02:51 2011 -0500

    Catch Mozilla prefixing of WebSocket.
    
    Pull 475cfae from websockify.
    
    In Firefox 7 Mozilla has added Websockets support but prefixed the
    constructor with "Moz".

commit ad3f7624093e6e467f6978f1c5afde0641b9bcda
Author: Joel Martin <github@martintribe.org>
Date:   Sat Jul 23 21:24:59 2011 -0500

    Touch events and mouse button selectors.
    
    First crack at supporting touch screen for devices like Android and
    iOS tablets. Part of https://github.com/kanaka/noVNC/issues/48.
    
    This change detects touch screen support and uses the touchstart,
    touchmove, touchend events in place of the normal mouse events.
    
    In order to support middle and right mouse clicks, if the device is
    a touch device, then three toggle buttons are added to the UI
    representing the left, middle and right mouse buttons. These select
    which mouse button will be sent when the screen is touched. All the
    buttons can be toggled off, in which case then the touch events only
    move the mouse cursor rather than sending a mouse down and mouse up
    for touchstart and touchend events respectively. This allows fairly
    full control with the mouse on touch screens.

commit ac99a1f791e71f0b02de748419c21af0f45350b5
Author: Joel Martin <github@martintribe.org>
Date:   Mon Jul 18 12:17:47 2011 -0500

    Change default PixelFormat. Fix canvas test.
    
    Instead of R,G,B (red-shift of 0, green-shift of 8, and blue-shift
    of 16), use the default ordering of B,G,R (red-shift of 16, green-shift of 8, and blue-shift
    of 0) that tightvncserver uses (and that VMWare's VNC server seems to
    require). Also, warn in the console if the server does not default to
    the new format.
    
    Fix the tests/canvas.html test. This is a general fix with regards to
    the rename/refactor of canvas.js into display.js and not specific to
    the color re-ordering.

commit c0c143a1536870d43135df2a19024a48a4c3433c
Author: Joel Martin <github@martintribe.org>
Date:   Thu Jul 14 15:57:01 2011 -0500

    Version 0.1, debian packaging, license text.
    
    noVNC version 0.1
    
    Add debian packaging directory loosely based on
    http://trac.zentyal.org/browser/trunk/extra/novnc/debian
    
    Show web root directory on startup (pulled from websockify f1c8223).
    
    Lintian fixups:
        - Some license text clarifications.
        - remove executable permission on utils/launch.sh and
          include/web-socket-js/web_socket.js
        - Add executable permission to utils/launch.sh

commit 29c3cbee8b9bc47482e697869f4147ccf4a60f1e
Author: Joel Martin <github@martintribe.org>
Date:   Wed Jul 13 15:19:09 2011 -0500

    README: Fix CloudSigma link.

commit 241a6caea657f1d0d117669bc7db12e6f201508f
Author: Joel Martin <github@martintribe.org>
Date:   Wed Jul 13 15:17:22 2011 -0500

    README: link to CloudSigma as product using noVNC.

commit 7873bed44c5f84b6eb7db3ed46838ee16dd2c750
Merge: d599a66 139d51d
Author: Andy Smith <github@anarkystic.com>
Date:   Tue Jul 12 11:51:23 2011 -0700

    Merge pull request #3 from sleepsonthefloor/master
    
    Declare Token Variable, minor fix

commit 4f8c74651830e6b08803a2ffcfe555f28ed77f32
Author: Joel Martin <github@martintribe.org>
Date:   Sat Jul 9 13:39:04 2011 -0500

    Pull websockify socket() static method.
    
    Pull websockify 46e2fbe.
    
    WebSocketServer.socket() is a static method takes a host and port and
    an optional connect parameter. If connect is not set then it returns
    a socket listening on host and port. If connect is set then
    a connection will be made host and port and the socket returned. This
    has IPv6 support like the addrinfo method it replaces.
    
    Also, prefer IPv4 resolutions if they are in the list. This can be
    overriden to prefer IPv6 resolutions for the same host using the
    optional prefer_ipv6 parameter.

commit 3a39bf60f3815650ec630593c1e259a61d0aad87
Author: Joel Martin <github@martintribe.org>
Date:   Thu Jul 7 15:14:41 2011 -0500

    Pull IPv6 and HyBi fixes from websockify.
    
    Pull 7ae8711 from websockify.

commit 123e5e74452842ec216612bfbfd27aedc0e04e41
Author: Joel Martin <github@martintribe.org>
Date:   Thu Jul 7 11:47:11 2011 -0500

    Pull IPv6 support from websockify.
    
    Pull from websockify 247b74950d.

commit a4ff1f573d0cc7cecd3438f380adcb0a60efd8f6
Author: Joel Martin <github@martintribe.org>
Date:   Wed Jul 6 16:32:42 2011 -0500

    Fix ordering of tightPNG fills.
    
    This addresses issue #65:
    https://github.com/kanaka/noVNC/issues/65
    
    When tightPNG encoded rects were received, any fill types were
    immediately drawn to the canvas while images (PNG, JPEGs) were queued
    for loading. This can cause screen corruption when things are changing
    rapidly due to the misordering of fills vs images.
    
    Also, remove the onload setting in each image on the queue and instead
    decrease the tight image queue scanning interval (to 40ms or 25
    scans per second).

commit c6fd71536f2f684841cc355b4e87ac072c84c1fb
Author: Joel Martin <github@martintribe.org>
Date:   Fri Jul 1 13:17:20 2011 -0500

    Show full pixelFormat received from server.
    
    For debugging issue #70: https://github.com/kanaka/noVNC/issues/70

commit 61fc1f2287c52364143d0592c648621ad8d23ed9
Author: Joel Martin <github@martintribe.org>
Date:   Tue Jun 28 16:29:29 2011 -0500

    Remove extraneous question mark.
    
    Part of https://github.com/kanaka/noVNC/issues/69
    
    Pull from websockify b590289de5.

commit 96513f564545ce9d7ddc5ac0678f87798a1e3313
Merge: 0b7bc4e 95ff836
Author: Joel Martin <github@martintribe.org>
Date:   Tue Jun 28 16:23:57 2011 -0500

    Merge branch 'master' of git@github.com:kanaka/noVNC

commit 0b7bc4e986d30a22000a538540c7f9bc2714a640
Author: Joel Martin <github@martintribe.org>
Date:   Tue Jun 28 16:22:50 2011 -0500

    Only append random string to swf path in IE.
    
    Issue https://github.com/kanaka/noVNC/issues/69
    
    Thanks https://github.com/EdSchouten for the catch.
    
    Import from websockify 9a2b50d8.

commit 95ff836e451c72ac27ac6a7e5f987520e47cfa58
Merge: 68edd7f 3b8caa4
Author: Joel Martin <github@martintribe.org>
Date:   Mon Jun 27 07:26:00 2011 -0700

    Merge pull request #67 from EdSchouten/master
    
    Add support for setting the WebSocket URI path.

commit 3b8caa4b094c667014481bcd1954ecc0bc2f8231
Author: Ed Schouten <ed@80386.nl>
Date:   Mon Jun 27 10:55:03 2011 +0200

    Add support for passing the file name to get.
    
    This change allows one to implement a single WebSockets proxy, which
    multiplexes connections to different hosts.

commit 8a7ce3da6a24f777089ecfebf0135f88c8d7ff1b
Author: Joel Martin <github@martintribe.org>
Date:   Sun Jun 26 16:02:42 2011 -0500

    Clarify companies/projects link description.

commit 68edd7f4f88bc914b7f08b00d465b7815157ad91
Author: Joel Martin <github@martintribe.org>
Date:   Sun Jun 26 15:55:44 2011 -0500

    Move project/companies info to wiki.
    
    Just have a list here without all the links.

commit 8c305c60addc1ef7fb04c7ff5f63e8a440066a0e
Author: Joel Martin <github@martintribe.org>
Date:   Sun Jun 26 14:21:56 2011 -0500

    Pull fix of recording from websockify.
    
    Pull websockify 7f487fdbd.
    
    The reocrd parameter will turn on recording of all messages sent
    to and from the client. The record parameter is a file prefix. The
    full file-name will be the prefix with an extension '.HANDLER_ID'
    based on the handler ID.

commit fa8f14d56d438ef4798706f3d331fd1ca445af42
Author: Joel Martin <github@martintribe.org>
Date:   Sun Jun 26 14:17:42 2011 -0500

    Fix playback of recorded VNC.
    
    - Update test mode calls to work with separate websock module.
    
    - Pull in include/websock.js update 7f487fdbd from websockify.

commit 2270c7b5ae30c96317c8684ab1c1c2cc692642cd
Author: Anthony Young <sleepsonthefloor@gmail.com>
Date:   Sun Jun 26 00:36:27 2011 -0700

    add ability to set title from url

commit 939cc6d563455f226cbaa9148effa09da783b3b6
Author: Joel Martin <github@martintribe.org>
Date:   Mon Jun 13 14:29:51 2011 -0500

    Broadway link cleanup.

commit 6a545db4cb73ee3ba33899ebccda2131ae62f3f9
Merge: a6f3281 3859e1d
Author: Joel Martin <github@martintribe.org>
Date:   Mon Jun 13 14:28:38 2011 -0500

    Merge branch 'master' of git@github.com:kanaka/noVNC

commit a6f32812833ce274d95b6d751b4799b148a05e09
Author: Joel Martin <github@martintribe.org>
Date:   Mon Jun 13 14:27:47 2011 -0500

    Broadway HTML5 GDK backend link.
    
    Broadway uses noVNC keyboard/input handling. Link to it.

commit 139d51d01f5b0a29c76c57920bed126e3e71ecf2
Author: Anthony Young <sleepsonthefloor@gmail.com>
Date:   Wed May 25 20:18:29 2011 -0700

    declare local variable

commit 3859e1d35cf0a33654eb472ebc5eb0784a7b1f9b
Merge: 557efaf 19ed81f
Author: Joel Martin <github@martintribe.org>
Date:   Thu May 19 10:08:30 2011 -0700

    Merge pull request #59 from smussmann/patch-1
    
    Fixed minor typo in util/launch.sh informational output (s/to to/to/)

commit 19ed81fdffc26853a75144d0ed7871d93cf9d7e8
Author: Sam Mussmann <sam@sammussmann.net>
Date:   Thu May 19 09:37:28 2011 -0700

    Fixed minor typo
    
    s/to to/to/

commit 557efaf85687bd135a41f0a36908c6dad272855e
Author: Joel Martin <github@martintribe.org>
Date:   Thu May 12 12:55:04 2011 -0500

    utils/websocket.py: disable debug output.

commit 7d146027599f920028aa1599d1a52f85992618ee
Author: Joel Martin <github@martintribe.org>
Date:   Thu May 12 12:33:57 2011 -0500

    Pull websockify 284ef3cc1a54
    
    Including HyBi-07 support and refactor of send/recv.

commit 5210330a6c4dde7963ac50c2c07dba7776e12d0c
Author: Joel Martin <github@martintribe.org>
Date:   Wed May 11 17:31:53 2011 -0500

    Refactor configuration attributes.
    
    - Add conf_defaults which accepts an array of configuration
      attributes.
    - Split out user configuration defaults from the actual configuration
      object.
    - Add mode field and enforce read-only, write-once, read-write modes.

commit d890e8640f20fba3215ba7be8e0ff145aeb8c17c
Author: Joel Martin <github@martintribe.org>
Date:   Wed May 11 15:55:44 2011 -0500

    API changes/cleanup.
    
    API changes:
        - include/canvas.js renamed to include/display.js
        - Display.rescale() method removed from API. Use Display.set_scale() instead.
        - Make logo configuration attribute of Display and display it when
          clear() is called if it is set.
    
    API deprecations:
        - use RFB onUpdateState instead of updateState.
        - use RFB onClipboard instead of clipboardReceive.
    
    See https://github.com/kanaka/noVNC/wiki/ModuleAPI for detailed noVNC
    modules and API description.
    
    Expand and normalize the event/callback interfaces. Standize on
    "onEventName" form for callbacks.
    
        Callback Renames:
            - RFB updateState -> onUpdateState
            - RFB clipboardReceive -> onClipboard
            - Keyboard keyPress -> onKeyPress
            - Mouse mouseButton -> onMouseButton
            - Mouse mouseMove -> onMouseMove
    
        Callback Additions:
            - RFB onPasswordRequired
            - RFB onBell
            - RFB onFBUReceive
            - RFB onFBUComplete
    
    Other:
    - Add array type support to Util.conf_default()
    - Removed a bunch of routines from the Display API that were just used
      internally and not actually by noVNC: flush, setFillColor,
      imageDataGet, imageDataCreate, rgbxImageData, rgbxImageFill,
      cmapImageData, cmapImageFill.
    - More keyboard/mouse logging when debug turned on.
    - Some JSLinting

commit 2fb665ec9464c4ee388c609161c02a8e98a4ba4a
Merge: f31eeaa 1a2371f
Author: Joel Martin <github@martintribe.org>
Date:   Mon May 9 18:09:59 2011 -0500

    Merge branch 'master' of git@github.com:kanaka/noVNC

commit f31eeaa8ab4b6a2fa946ca18a1d6d366e391cc51
Author: Joel Martin <github@martintribe.org>
Date:   Mon May 9 17:22:02 2011 -0500

    Stop sending empty frames.
    
    Pull from websockify a339a4856.

commit 1a2371fcd2e46b8b0134f65966357fb3eb3a3efb
Author: Joel Martin <github@martintribe.org>
Date:   Fri Apr 29 14:04:40 2011 -0500

    include/canvas.js: missed scale fix.

commit 58b4c5366146d0d74dfcd14a75427b16aba3151b
Author: Joel Martin <github@martintribe.org>
Date:   Fri Apr 29 14:01:40 2011 -0500

    Fix scale/rescale attribute/hooks.
    
    Still buggy so not yet activated in the UI, but the hooks are at least
    here.

commit 1ac21e2941f89d415b255f0de38100c0bcd27286
Author: Joel Martin <github@martintribe.org>
Date:   Sun Apr 24 12:52:19 2011 -0500

    README.md: adjust links to clarify.
    
    Separate the links from each other so it's obvious where the links
    are.

commit 4529ec0176880c658f3d44f12dc8b4daff77f75b
Author: Joel Martin <github@martintribe.org>
Date:   Sun Apr 24 12:45:58 2011 -0500

    README.md: Add OpenStack doc and video link.

commit 667ef9bae884203fb35bc69fb0b97c43e661ef3f
Author: Joel Martin <github@martintribe.org>
Date:   Sun Apr 24 12:34:09 2011 -0500

    README.md: fix wiki links.
    
    github changed something about relative links.

commit bbee8098c23afee85cc0f52c3f86537719b08850
Author: Joel Martin <github@martintribe.org>
Date:   Thu Apr 21 08:45:04 2011 -0500

    tests/browser.js: Missing. Needed for arrays.html test.

commit 41b9ae6ec92ba2c466945aa8dbf92eba97c8abdd
Author: Joel Martin <github@martintribe.org>
Date:   Tue Apr 19 09:37:43 2011 -0500

    Sync with websockify. Save handshake headers.
    
    Derived classes will almost certainly want to make use of the raw
    info.

commit eb6426b4bccd5009e7d73cbb046d1337e75c653d
Author: Joel Martin <github@martintribe.org>
Date:   Fri Apr 15 08:48:04 2011 -0600

    input.js: remove redundant switch case statments.
    
    Issue #21 - non-US key handling.

commit dc4131b14a417d92b331fb7675ed6fb207f36adf
Author: Joel Martin <github@martintribe.org>
Date:   Fri Apr 15 08:40:20 2011 -0600

    input.js: uncomment special key handling for non-US keys.
    
    Issue #21 - non-US keyboard layouts.
    
    The code section for tab, backspace and enter was commented out for
    testing but got checked in that way. Fix that.

commit b7c9657b83c4565a5d96a0f6fbeccba284b9b2c9
Author: Joel Martin <github@martintribe.org>
Date:   Thu Apr 14 11:25:11 2011 -0600

    include/input.js: change to LGPL-2 or later.
    
    Requested by Alexander Larsson at Red Hat to allow incorporation of
    solution into HTML5 gtk 3.0 backend.

commit fac149ddbe32dd233a1b34ffc4450508daaa420e
Author: Joel Martin <github@martintribe.org>
Date:   Tue Apr 12 09:06:11 2011 -0500

    input.js: adjust special key handling for non-US keys.
    
    Issue #21 - non-US keyboard layouts.
    
    Only identify some keys as special during the keyDown event so that
    when using non-US keyboards the values don't overlap with the values
    for normal keys.
    
    Some keys have to still be identified in both keyDown and keyPress
    since they generate both: backspace and enter for Firefox and Opera,
    tab for Opera.

commit 303819eaa956e6c16a9513eedec90d1b0daace0c
Author: Joel Martin <github@martintribe.org>
Date:   Wed Apr 6 11:19:02 2011 -0500

    util/json2graph.py: new location for json2graph.py.
    
    Also clarify usage statement with legend height adjustment.
    
    Remove console.log in arrays.js so that it works in firefox without
    firebug.

commit 40e5c25ad8d95c48c56ae936bc869211cd7aba75
Author: Joel Martin <github@martintribe.org>
Date:   Wed Apr 6 10:05:59 2011 -0500

    utils/rebind, utils/u2x11: use /usr/bin/env

commit 0a92014700baeff5140984ac9058ba36e5e5caeb
Author: Joel Martin <github@martintribe.org>
Date:   Tue Apr 5 14:46:22 2011 -0500

    include/webutil.js: fix dirObj undefined attribute.

commit d0c29bb679f065350529fa423f29daf24fda550d
Author: Joel Martin <github@martintribe.org>
Date:   Tue Apr 5 14:44:47 2011 -0500

    Fix copyright year to 2011.

commit c96f900336b57401a7e2d1678f80cf88662ab566
Author: Joel Martin <github@martintribe.org>
Date:   Tue Apr 5 14:26:54 2011 -0500

    Refactor keyboard event handling.
    
    This is part of addressing issue #21 - non-US keyboard layouts.
    
    There are several challenges when dealing with keyboard events:
      - The meaning and use of keyCode, charCode and which depends on
        both the browser and the event type (keyDown/Up vs keyPress).
      - We cannot automatically determine the keyboard layout
      - The keyDown and keyUp events have a keyCode value that has not
        been translated by modifier keys.
      - The keyPress event has a translated (for layout and modifiers)
        character code but the attribute containing it differs. keyCode
        contains the translated value in WebKit (Chrome/Safari), Opera
        11 and IE9. charCode contains the value in WebKit and Firefox.
        The which attribute contains the value on WebKit, Firefox and
        Opera 11.
      - The keyDown/Up keyCode value indicates (sort of) the physical
        key was pressed but only for standard US layout. On a US
        keyboard, the '-' and '_' characters are on the same key and
        generate a keyCode value of 189. But on an AZERTY keyboard even
        though they are different physical keys they both still
        generate a keyCode of 189!
      - To prevent a key event from propagating to the browser and
        causing unwanted default actions (such as closing a tab,
        opening a menu, shifting focus, etc) we must suppress this
        event in both keyDown and keyPress because not all key strokes
        generate on a keyPress event. Also, in WebKit and IE9
        suppressing the keyDown prevents a keyPress but other browsers
        still generated a keyPress even if keyDown is suppressed.
    
    For safe key events, we wait until the keyPress event before
    reporting a key down event. For unsafe key events, we report a key
    down event when the keyDown event fires and we suppress any further
    actions (including keyPress).
    
    In order to report a key up event that matches what we reported
    for the key down event, we keep a list of keys that are currently
    down. When the keyDown event happens, we add the key event to the
    list. If it is a safe key event, then we update the which attribute
    in the most recent item on the list when we received a keyPress
    event (keyPress should immediately follow keyDown). When we
    received a keyUp event we search for the event on the list with
    a matching keyCode and we report the character code using the value
    in the 'which' attribute that was stored with that key.
    
    For character codes above 255 we use a character code to keysym lookup
    table. This is generated using the util/u2x11 script contributed by
    Colin Dean (xvpsource.org).

commit d1bd5ec7d40333cd7f78bcd1beea1a73cac2ed53
Author: Joel Martin <github@martintribe.org>
Date:   Sun Apr 3 17:51:47 2011 -0500

    Fix focus/clipboard related to mouse/keyboard refactor.

commit d3796c149e66f0a9021f87570b5786c40683cdd1
Author: Joel Martin <github@martintribe.org>
Date:   Sun Apr 3 17:30:45 2011 -0500

    API change: Mouse/kbd handling to include/input.js
    
    API change: for intergrators that explicitly include the Javascript
    files (that do not use include/vnc.js)js, include/input.js is a new
    file that must also be included.
    
    The mouse and keyboard handling could be useful on its own so split it
    out into a Keyboard and Mouse class in include/input.js.
    
    This refactoring is preparation to deal with issue #21 - non-US
    keyboard layouts.

commit dec1861127a6a3d31c614b455a88dba3c0ebb3e2
Merge: f899070 e915581
Author: Joel Martin <github@martintribe.org>
Date:   Tue Mar 29 15:47:58 2011 -0500

    Merge branch 'master' of git@github.com:kanaka/noVNC

commit f899070482f34d48e29476cf157eb51f29c030d2
Author: Joel Martin <github@martintribe.org>
Date:   Tue Mar 29 15:44:03 2011 -0500

    IE9 fixes: mouse, doctype. Adobe Flash link.
    
    Fix mouse button mapping in IE9. All browsers have converged on
    a standard left=0, middle=1, right=2 ... all except IE that is.
    
    Add html5 doctype to tests.
    
    In vnc_perf test, use do_test instead of start for function name since
    start is a keyword in IE.
    
    In error about Flash give a link to Adobe's download page.

commit e9155818c8615739a30f5535c92a6f80b08ab59b
Author: Phil Phillips <pphillips@experts-exchange.com>
Date:   Sat Mar 26 02:46:58 2011 +0800

    Make scripts more compatible across OSes

commit 0b6292b8c09f114a9f67f965311e78004cc9e040
Author: Joel Martin <github@martintribe.org>
Date:   Fri Mar 25 09:01:53 2011 -0500

    No exception if noVNC_logo is undefined.

commit 8a377d7a95bb7d256d7a6286742db57e00af60ac
Author: Joel Martin <github@martintribe.org>
Date:   Wed Mar 23 21:23:08 2011 -0500

    Ignore utils/rebind.so

commit d599a6619ac93ea37d1af54422a461993d5c8f09
Author: root <root@tonycloud.hsd1.ca.comcast.net>
Date:   Wed Mar 23 15:46:22 2011 -0700

    make websocket path /data

commit 54fbfa8ecb90c2923310bcad1acd836ef678bac1
Merge: b23063e 81bcf70
Author: root <root@tonycloud.hsd1.ca.comcast.net>
Date:   Wed Mar 23 15:08:34 2011 -0700

    Merge remote branch 'kanaka/master'

commit 81bcf70fdcda0c413e3358efa09013d130def47e
Author: Joel Martin <github@martintribe.org>
Date:   Tue Mar 22 14:24:55 2011 -0500

    Higher connectTimeout default with web-socket-js.
    
    Current timeout is 2 seconds for connect timeout. Use 5 seconds if
    web-socket-js (Flash WebSockets emulator) is being used. On Windows XP
    with Flash 10.2.152.26, connecting seems to take quite a bit longer
    than it probably should. This should make it work more consistently.

commit bbd21ca7b5eda4b6813b91350fd9438198bcb285
Author: Joel Martin <github@martintribe.org>
Date:   Wed Mar 16 10:33:01 2011 -0500

    Update web-socket-js to bb5797cad.
    
    Syncs with same change to websockify (7534574a2f).
    
    Primary change is removal of FABridge interface.
    
    Seems to improve overall latency by perhaps 10%. Also, the slowdown
    over time in Opera is about half as bad (but still there).

commit 5e55378b6e4c9f24ef4481cec3032a860d4d824b
Author: Joel Martin <github@martintribe.org>
Date:   Mon Mar 14 19:05:42 2011 -0500

    test/*.html: use "../include" instead of symlink.
    
    This allows tests to work on the github pages site.

commit 468a9cc44ad3ec0145c18314ea92f5e1408aa81d
Author: Joel Martin <github@martintribe.org>
Date:   Mon Mar 14 18:54:16 2011 -0500

    tests/keyboard.html: fix getKeysym call.

commit b23063ec5fcae11a60336d30b0e894e6733eec85
Author: root <root@tonycloud.hsd1.ca.comcast.net>
Date:   Wed Mar 2 01:45:38 2011 -0800

    web based vnc proxy for nova

commit 1506a5ed54a4dfce1b6ef4c08421d60013532a32
Author: Joel Martin <github@martintribe.org>
Date:   Wed Feb 23 14:48:23 2011 -0600

    Clarify license on arrays test files.

commit d3da7c4c4fde101cc0722435f5dec6268b7e8a28
Author: Joel Martin <github@martintribe.org>
Date:   Wed Feb 23 11:08:09 2011 -0600

    Add Javascript binary byte array test.
    
    Compares normal Javascript arrays with Canvas ImageData arrays and
    Typed Arrays (ArrayBuffers from WebGL).

commit 43cf7bd83b122891b403092aa0137229c20c9c92
Author: Joel Martin <github@martintribe.org>
Date:   Sat Feb 19 16:44:10 2011 -0600

    Some JSLint'ing

commit 9b8f457b6b52e4a0db1daa6914c39c661ce6adb3
Author: Joel Martin <github@martintribe.org>
Date:   Sat Feb 5 13:03:12 2011 -0600

    Add OpenNode to README. Update TODOs.

commit 159ad55d03c453d091a3e67b4426eb541044f390
Author: Joel Martin <github@martintribe.org>
Date:   Thu Feb 3 11:04:32 2011 -0600

    Add logo, favicon.
    
    Thanks to Michael Sersen for creating images/Logo.svg.
    
    - Add images directory with original SVG logo, favicon, and some
      derivative PNGs of the logo for different purpose.
    
    - Note that license on images/* is CC BY-SA.
    
    - Add utils/img2js.py to take an image and generate a base64 encoded
      data URI string.
    
    - Add base64 encoded data URI screen logo to display in canvas when
      disconnected.

commit 0f354fb682c54c856341d28642f510b3768bdfc0
Author: Joel Martin <github@martintribe.org>
Date:   Wed Feb 2 10:48:29 2011 -0600

    Fix CSS sizes with HTML5 doctype.
    
    Using HTML5 doctype means CSS pixels sizes must have "px" suffix which
    many of them did not. Fix that.

commit 215ae8e5647dd3e3d7fc4b4273d2f3b6f8e69cde
Author: Joel Martin <github@martintribe.org>
Date:   Tue Feb 1 10:47:45 2011 -0600

    Better reaper, catch occasional bad WS header line.
    
    Call waitpid in loop to catch SIGCHLD signals that happen while
    handling the original SIGCHLD signal.
    
    Pulled from websockify.

commit ec2b614037aec641acd5bcce3c1b6d67182534eb
Author: Joel Martin <github@martintribe.org>
Date:   Mon Jan 31 12:13:30 2011 -0600

    Pull websockify: zombie reap, ignore unready clients.

commit 40f281ebbdf79e6b2af32f88bdf5efe8b8f4550f
Author: Joel Martin <github@martintribe.org>
Date:   Sun Jan 30 23:42:28 2011 -0600

    Add DOCTYPE. Misc cleanup.

commit 0981845ec45e3b6e36e51ea81162451aecb507e0
Author: Joel Martin <jmartin@sentryds.com>
Date:   Sun Jan 30 22:58:22 2011 -0600

    IE9 fixes. Works but slow. API change.
    
    API change: changed include path variable from VNC_uri_prefix to
    URI_INCLUDE since websock.js uses the variable and websock.js is no
    longer just for noVNC (i.e. websockify is really the canonical
    location for websock.js).
    
    Changes to get web-socket-js to work. Right now it's a hack to get
    around: https://github.com/gimite/web-socket-js/issues#issue/41. The
    hack is to disable caching of the flash objects by appending
    "?" + Math.random() to the end of the flash object path (but only when
    using IE).

commit 7cc5fbc52e0dbf4946f4253d2f5f81722d17634b
Author: Joel Martin <github@martintribe.org>
Date:   Sun Jan 23 19:36:11 2011 -0600

    Opera 11 WebSockets and Opera '-' key mapping fix.
    
    Opera 11 native WebSockets (if enabled) seems to have bad behavior for
    the bufferedAmount so add change from websockify project to allow max
    bufferedAmount (before send queue is delay) to be configured.
    
    Also, Opera 11 and 10.60 behave like Mozilla regarding the '-' key so
    translate it correctly.

commit 1756a30a4891e137849a161bd66e56d2719ae52d
Author: Joel Martin <github@martintribe.org>
Date:   Sun Jan 23 19:21:04 2011 -0600

    websock.send returns true/false.
    
    If all send data was flushed from the send queue then return true,
    otherwise false. This doesn't mean the data won't be sent, just that
    it wasn't sent this time and is queued.

commit 8b502df2a1f8b11afac1e0f0f6a70b80adc6767f
Author: Joel Martin <github@martintribe.org>
Date:   Sun Jan 23 19:17:59 2011 -0600

    Tolerate some bufferedAmount.
    
    Only delay sending data if bufferedAmount is greater than 1000.
    
    This seems to match the intention of the spec better. bufferedAmount
    does not mean that we can't send, it's just an indication that the
    network is becoming saturated. But Opera 11 native WebSockets seems to
    have a bug that bufferedAmount isn't set back to zero correctly so
    we'll be a bit more tolerant.

commit cabecf8964018cc818e79588037b21191ed53994
Author: Joel Martin <github@martintribe.org>
Date:   Wed Jan 19 13:09:32 2011 -0600

    canvas.js: prevent Opera keyboard event bubbling.
    
    Issue #8: https://github.com/kanaka/noVNC/issues#issue/8

commit b43c9838a5760d9a6f32049798cb292a7876ec3c
Author: Joel Martin <github@martintribe.org>
Date:   Wed Jan 19 13:01:28 2011 -0600

    web-socket-js: Add function invocation fix.
    
    Related to this issue:
    https://github.com/gimite/web-socket-js/issues/#issue/50
    
    This prevents the "Uncaught exception: TypeError:
    'this.__handleEvents' is not a function" everytime the timer fires.
    
    Yay, one of Javascript's worst behaviors; the way it sets "this".

commit 9a23006e7a33891d742a975b9d4702674cec30fa
Author: Joel Martin <github@martintribe.org>
Date:   Tue Jan 18 23:22:25 2011 -0600

    include/canvas.js: fix changeCursor data format.
    
    Issues #27 (safari cursor rendering messed up) and #29 (firefox 3.6.10
    segault).
    
    Finally found some better reference on the icon/cursor format which is
    added to the docs/links file.
    
    It seems like I was missing the XOR section. So setting the cursor
    would cause corruptin in Safari rendering or the segfault for firefox.

commit 9df83a3953618ac38984d0966d8bbf39e2efd74d
Author: Joel Martin <github@martintribe.org>
Date:   Tue Jan 18 14:19:55 2011 -0600

    Move advanced, integration, troubleshoot to wiki.
    
    Move the Advanced Usage, Integration and Troubleshooting sections to
    their own pages in the wiki.
    
    Also, update wsproxy.py referneces to be websockify.

commit 2840026468655b5985fba633c285310250f29f84
Author: Joel Martin <github@martintribe.org>
Date:   Tue Jan 18 12:16:50 2011 -0600

    include/canvas.js: add numpad support to getKeysym.
    
    Check keyLocation and translate numpad keys into numbers. keyLocation
    is not widely supported yet, but it should start percolating into
    browsers eventually:
    http://www.w3.org/TR/DOM-Level-3-Events/#events-KeyboardEvent
    
    This change is based on:
    https://github.com/leeor/noVNC/commit/8e59e3772c91eaffaa0f6d53270b97f1fe8510b4

commit 0a9f04241e7f336117c1e3761b30e0e065090e0d
Author: Joel Martin <github@martintribe.org>
Date:   Tue Jan 18 11:58:24 2011 -0600

    Move browsers.md to Wiki.
    
    It is now here: https://github.com/kanaka/noVNC/wiki/Browser-support

commit febae871ab8be4e1444a66c6f32bb64dbd81f077
Author: Joel Martin <github@martintribe.org>
Date:   Mon Jan 17 11:46:55 2011 -0600

    tests/vnc_perf.html: load from data/multi.js
    
    To go along with addition of performance notes to the website.

commit 30b0c00875bfe4f4b5ec7fb530cf38e6477c6c96
Author: Joel Martin <github@martintribe.org>
Date:   Sun Jan 16 19:27:32 2011 -0600

    Misc docs/{TODO,links} updates.

commit 24d01a5aa43ec44bd75a128492e9014ef86061cf
Author: Joel Martin <github@martintribe.org>
Date:   Sun Jan 16 19:05:58 2011 -0600

    Update gimite/web-socket-js build.
    
    Update to a build based on 20f837425d4 from gimite/web-socket-js.
    
    This changes the event handling code and fixes the frequent recursive
    call into Flash errors.

commit 1b097a63a3aff84f51ed326e53b1233283b298e5
Author: Joel Martin <github@martintribe.org>
Date:   Sun Jan 16 18:57:45 2011 -0600

    Fix strict mode complaints in firefox 4.

commit 72f1348b3514c2938d621d452dd5fc31c5e7a92e
Author: Joel Martin <github@martintribe.org>
Date:   Thu Jan 13 00:30:08 2011 -0600

    Convert to Websock library.
    
    Copy in include/websock.js from websockify and use that instead. Still
    some cleanup of network code but it's a good start.

commit 61265b3a7f1fa926174e6423b33a1b0deb710a36
Author: Joel Martin <github@martintribe.org>
Date:   Wed Jan 12 20:31:04 2011 -0600

    Remove files that are now in websockify.
    
    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.

commit 66937e399a426aba558ab1005a8a11d2dc206da1
Author: Joel Martin <github@martintribe.org>
Date:   Wed Jan 12 18:12:17 2011 -0600

    wsproxy.py: python2.4 fixes.

commit c32e00c67f6d19d38c18ff80cc76138438be6412
Author: Joel Martin <github@martintribe.org>
Date:   Wed Jan 12 17:09:33 2011 -0600

    wstelnet: forgot VT100.js.

commit 932e7318b93ecbb59bdf6c22917cc70e03831d86
Author: Joel Martin <github@martintribe.org>
Date:   Wed Jan 12 16:55:31 2011 -0600

    Minor correct to wstelnet.js header comment.

commit f2538f337d85695cd6bfa183195ca3189d45d58c
Author: Joel Martin <github@martintribe.org>
Date:   Wed Jan 12 13:15:11 2011 -0600

    wsproxy, wstelnet: wrap command, WS telnet client.
    
    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.

commit 86725f9b4cd9623124e685c5ae1bef9d59e802a7
Author: Joel Martin <github@martintribe.org>
Date:   Sat Jan 8 21:46:36 2011 -0600

    wswrapper: add dup2, fix select w/ NULL timeout.
    
    - 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.

commit 6a88340929bb78d0928e678e98655c9de33b0f56
Author: Joel Martin <github@martintribe.org>
Date:   Sat Jan 8 15:29:01 2011 -0600

    Refactor and cleanup websocket.py and deps.
    
    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.

commit 6ace64d3ae7d034d049b9bb252b9c19c1e872667
Author: Joel Martin <github@martintribe.org>
Date:   Thu Jan 6 19:21:17 2011 -0600

    utils/README.md: horizontal looks better.
    
    Flip table back to be horizontal. More readable.

commit 90966d6251f71ff48ee15718025c5bd4cf74bd18
Author: Joel Martin <github@martintribe.org>
Date:   Thu Jan 6 19:17:32 2011 -0600

    utils/README.md: flip table. Add web server info.
    
    Flip the feature table to be tall instead of wide.
    
    Added row about "web server" functionality in wsproxy.py.

commit 9aaf26e8780b1d8c28d0efab2455be4a36581437
Merge: 96bc3d3 02a7dd2
Author: Joel Martin <github@martintribe.org>
Date:   Thu Jan 6 19:13:39 2011 -0600

    Merge branch 'master' of git@github.com:kanaka/noVNC

commit 02a7dd2c291f78502b10f76d20b2f6230f1b3e5e
Merge: 2574936 58dc194
Author: Joel Martin <github@martintribe.org>
Date:   Thu Jan 6 17:33:22 2011 -0700

    Merge branch 'master' of git@github.com:kanaka/noVNC

commit 96bc3d308835b8ef76a10ba3dcdfab06356563af
Author: Joel Martin <github@martintribe.org>
Date:   Thu Jan 6 18:26:54 2011 -0600

    wsproxy.py: add web serving capability.
    
    - 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.

commit 58dc1947ded37983c0add02ac6a7859510a52a5b
Author: Joel Martin <github@martintribe.org>
Date:   Tue Jan 4 13:14:46 2011 -0600

    wsproxy: warn when no cert. C sock close cleanup.
    
    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.

commit 58da507bb81f960909f6e9c108f61137426c6ea5
Author: Joel Martin <github@martintribe.org>
Date:   Tue Jan 4 12:19:54 2011 -0600

    README: add companies/projects using noVNC.

commit 9b940131d3e44ff0e3146b637ae126d07b1d7230
Author: Joel Martin <github@martintribe.org>
Date:   Tue Jan 4 10:30:26 2011 -0600

    include/canvas.js: show full user agent in console.

commit e3716842ef03da96ce082dc47eda71b6ca14fb3f
Author: Joel Martin <github@martintribe.org>
Date:   Tue Jan 4 10:27:25 2011 -0600

    include/rfb.js: show Flash version in console.

commit bf5ee68828872f05d1356a22d3807c6ea29d017f
Author: Joel Martin <github@martintribe.org>
Date:   Mon Jan 3 12:34:41 2011 -0600

    Expose getKeysym and add keyboard test.
    
    Related to issue Non-US keyboard layout option issue:
    https://github.com/kanaka/noVNC/issues#issue/21

commit 2574936f604e3576c00afd99a996f210368f532a
Author: Joel Martin <github@martintribe.org>
Date:   Thu Dec 30 11:00:50 2010 -0700

    utils/README.md, docs/TODO, docs/notes: updates.
    
    Add wswrapper info to utils/README.md and docs/TODO. Remove innacurate
    info from docs/notes.

commit 71ba9a7a547798347ecfe1efbaba63904b0992c3
Author: Joel Martin <github@martintribe.org>
Date:   Wed Dec 29 14:11:28 2010 -0700

    wswrapper: update README, DO_MSG def for output.
    
    Update README to mention wswrapper. Add DO_MSG define which controls
    whether wswrapper code generates basic output.

commit 56d9aa816b439f4abd877de1b4e32b9c8272838d
Author: Joel Martin <github@martintribe.org>
Date:   Mon Dec 27 19:44:14 2010 -0700

    wswrapper: interpose on poll/ppoll also.
    
    poll/ppoll interposer builds but is untested.

commit 64dbc6bb6398e46c465f6a82d1936dbe13b858d8
Author: Joel Martin <github@martintribe.org>
Date:   Mon Dec 27 16:08:27 2010 -0700

    wswrapper: timeout select.
    
    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.

commit 6b900d25d06a0a83ae1eb67608286786e85c318f
Author: Joel Martin <github@martintribe.org>
Date:   Mon Dec 27 13:15:59 2010 -0700

    wswrapper: interpose select/pselect. Cleaup.
    
    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.

commit fce6ac5cb4771419dbd0cdf5f6b8456c8e19f814
Author: Joel Martin <github@martintribe.org>
Date:   Fri Dec 24 17:39:13 2010 -0700

    Fix to "Tolerate fragmented ServerInit".
    
    Issue #39: https://github.com/kanaka/noVNC/issues/issue/39

commit 318d47343880a533ed9fb7dc12b368c72af6037c
Author: Joel Martin <github@martintribe.org>
Date:   Fri Dec 24 15:02:48 2010 -0700

    Tolerate fragmented ServerInit.
    
    Issue #39: https://github.com/kanaka/noVNC/issues/issue/39

commit 0f7f146f200788c6046404016694fc5aec778a0a
Author: Joel Martin <github@martintribe.org>
Date:   Tue Dec 21 10:17:43 2010 -0600

    utils/launch.sh: find top web dir (with vnc.html).

commit b992f7c7ddb0c783c042912716165a6dce034ec0
Author: Amir Malik <amir@localhost>
Date:   Tue Dec 21 10:02:43 2010 +0800

    use cd, dirname, and pwd to determine path instead of readlink (Mac fix)

commit a22a3cc0ea18e3006ace279c54a08d23c9c941e1
Author: Amir Malik <amir@localhost>
Date:   Tue Dec 21 10:11:15 2010 +0800

    set socket option SO_REUSEADDR to prevent  "Address already in use" error

commit 40a653f55539147855723cda0e2fbc1caa3016e3
Author: Joel Martin <github@martintribe.org>
Date:   Thu Dec 16 14:04:16 2010 -0600

    wswrapper: fix preload path and interpose port.
    
    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.

commit b144a0933d997c638be924bd37ba54fb2d15aa1c
Author: Joel Martin <github@martintribe.org>
Date:   Tue Dec 14 13:05:17 2010 -0500

    wswrapper: Normalize comments, remove unused headers.

commit c99124b527f4ae3b3c2fec4b72784059ab51c830
Author: Joel Martin <github@martintribe.org>
Date:   Tue Dec 14 12:43:34 2010 -0500

    wswrapper: Allow multiple WebSockets connections.
    
    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.

commit 70c585968bd30b4a6207b96ede2342f7e86689a5
Author: Joel Martin <github@martintribe.org>
Date:   Mon Dec 13 14:20:34 2010 -0500

    wswrap: WSWRAP_PORT envvar and wswrap script.
    
    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.

commit e46719100c52b65921f941945ccd1440cef702cd
Author: Joel Martin <github@martintribe.org>
Date:   Fri Dec 10 08:25:36 2010 -0600

    Make compatible with jQuery. Slight API change.
    
    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.

commit 5b0bbd5c122cc019432011d420af7807ed4562b4
Author: Joel Martin <github@martintribe.org>
Date:   Thu Dec 2 22:11:02 2010 -0600

    wswrapper: wrap existing server using LD_PRELOAD.
    
    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.

commit 79f0a095b61a702988698331f68a4bcab9861ee5
Author: Joel Martin <github@martintribe.org>
Date:   Mon Nov 15 13:43:26 2010 -0500

    rfb.js: avoid multiple b64 sequences per frame.
    
    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.

commit f7ec5b2cb61b2bc25e3a8ca9f2deb8754471ccae
Author: Joel Martin <github@martintribe.org>
Date:   Wed Nov 10 16:02:19 2010 -0600

    Rename default_controls.js to ui.js.
    
    And DefaultControls to UI.

commit e66f3f89f2df2fa5ec47870a1dca006620e1da50
Author: Joel Martin <github@martintribe.org>
Date:   Tue Nov 9 12:06:03 2010 -0600

    Add Chrome Frame support. Close requests in web.py.
    
    - 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.

commit 1ee2d93e94e631c3993c4fa1012af47378a53b5e
Author: Joel Martin <github@martintribe.org>
Date:   Sun Nov 7 22:28:08 2010 -0600

    wsproxy.js: Fix multi-frame decoding.
    
    - Also, discovered node.js bug in base64 decoding. Added test case and
      filed https://github.com/ry/node/issues/issue/402

commit fd758dd3357355399a573a3e3d9520dc838705b6
Author: Joel Martin <github@martintribe.org>
Date:   Sun Nov 7 19:06:20 2010 -0600

    First pass at wsproxy using node (node.js).
    
    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.

commit 58b4c9408fa1ee98181badfd4eeb530951e51378
Author: Joel Martin <github@martintribe.org>
Date:   Sat Nov 6 14:12:37 2010 -0500

    wsproxy: Fix --key parameter use.

commit c1d008f1ee37184d592c75337f08c7205b1a4340
Author: Joel Martin <github@martintribe.org>
Date:   Sat Nov 6 14:11:30 2010 -0500

    Fix flush with strict DOCTYPE.
    
    - With a strict doctype, the margin size needs a "px" suffix.

commit cdb55d26e5e0c8b215f742370d335ccd5a4a5b26
Author: Joel Martin <github@martintribe.org>
Date:   Sat Nov 6 12:23:23 2010 -0500

    canvas.js: workaround WebKit bug, issue #28.
    
    This is WebKit bug https://bugs.webkit.org/show_bug.cgi?id=46319
    
    The workaround is to wrap Canvas render functions with a function that
    sets a flush timer. The flush function sets the right margin and then
    1ms later sets it back. This triggers the canvas to redraw with the
    correct contents.
    
    Two downsides:
    - rendering is slower, but only on the busted versions of webkit.
      Correct and useful is better than fast and useless.
    - There is a barely perceptible jitter of the control buttons because
      the canvas size is changing by one pixel.
    
    To support this functionality, we also have to read out the exact
    webkit version from the user agent in the render engine detection code
    in include/util.js.

commit 455e4657f62eed6c006fb8c63caf2088ba6bc30d
Author: Joel Martin <github@martintribe.org>
Date:   Sat Nov 6 12:15:08 2010 -0500

    default_controls.js: canvas fail fix. Misc cleanup.
    
    - Make sure that canvas exists (i.e. didn't throw an error) before
      trying to call canvas method get_canvas_uri.
    
    - Typos in HTML render engine debug output.

commit 3205a3dee88bebf111a8493a186905e80da6d168
Author: Joel Martin <github@martintribe.org>
Date:   Sat Nov 6 10:55:09 2010 -0500

    Add --key option for separate cert and key file.
    
    If only --cert is specified then continue to assume both certificate
    and key are in the same file (key first).

commit e70f1d947eece751e1f3a53ab8176d9ee6e4e6ac
Author: Joel Martin <github@martintribe.org>
Date:   Sat Nov 6 10:53:32 2010 -0500

    Remove left over record code. Squelch compile warnings

commit f61274c827716081f95001f6bc483258f6448467
Author: François Revol <revol@free.fr>
Date:   Sat Nov 6 14:49:59 2010 +0100

    wsproxy: Mac OS X build fixes
    
    - pass CFLAGS and LDFLAGS in case one needs to use -m32
    - link to libcrypto for _ERR_print_errors_fp
    - __THROW is non-standard define it to nothing by default
    - use b64_ntop and b64_pton instead of mangled versions, OSX doesn't mangle them in the same way
    - access() takes two arguments!
    
    Signed-off-by: François Revol <revol@free.fr>

commit 1f758e87d3c27fc5a9ace709d22c8d356a70f23c
Author: Joel Martin <github@martintribe.org>
Date:   Thu Oct 28 16:30:41 2010 -0500

    Issue #34: fix RFB 3.3/3.7 with no auth scheme.
    
    - Split out ClientInitialisation state.
    
    - In version 3.3 and 3.7, when the server has no auth (scheme
      1), then we should skip from Authentication to ClientInitialisation.

commit 3dc3135b21ab8c98d978ee715ea468b48876b514
Author: Joel Martin <github@martintribe.org>
Date:   Thu Oct 28 10:53:08 2010 -0500

    utils/README.md: second try on cmd formatting.

commit 6502293f211b1df9b3bafa20450df11be0ed7a82
Author: Joel Martin <github@martintribe.org>
Date:   Thu Oct 28 10:52:27 2010 -0500

    utils/README.md: Fix command formatting.

commit e5d60a8ba2a9556f8785f228239734a0c7650539
Author: Joel Martin <github@martintribe.org>
Date:   Thu Oct 28 10:45:26 2010 -0500

    Issue #32, wsproxy README, update webkit bug info,
    
    - Add wsproxy README.md in utils/ directory.
    
    - Document how to build ssl module for python 2.5 and older in wsproxy
      README.
    
    - Update browsers.md to note revision that have the webkit Canvas
      rendering bug: WebKit build 66396 through 68867 (Chrome/Chromium
      build 57968 through 61278).

commit f1a9971c820b99c16a39e4c351c7980be7afc039
Author: Joel Martin <github@martintribe.org>
Date:   Sun Oct 24 18:34:50 2010 -0500

    Expose VNC shared mode setting in UIs.
    
    If shared mode is false, then the server should disconnect other
    connections before the current connection is allowed to proceed.

commit 65bca0c904032b54d0e37d22080153379475f2ea
Author: Joel Martin <github@martintribe.org>
Date:   Mon Oct 18 14:30:50 2010 -0500

    Fix style caching. Canvas cleanup from Diet-noVNC.
    
    - Style caching gives a small performance speedup in firefox, but not
      much. Might not be worth complexity, but leave it in for now.

commit 028b26f14b585da2842e5c5910e93de35e9f0534
Author: Joel Martin <github@martintribe.org>
Date:   Thu Oct 14 11:07:54 2010 -0500

    Fix reason_len not defined bug.

commit ce2b6909cd1ffdd7b22fbdcba2f35d09ce21bded
Author: Joel Martin <github@martintribe.org>
Date:   Thu Oct 14 10:09:33 2010 -0500

    rfb.js: fail() wrapper for common failed pattern.

commit 8b17ac27f0a15c5d9d0ee84441d39722707a435e
Author: Joel Martin <github@martintribe.org>
Date:   Sun Oct 10 18:59:02 2010 -0500

    Add manual flash policy socat server info.

commit c084c396ba632861ae8c3c7d9d1810dab8907e12
Author: Joel Martin <github@martintribe.org>
Date:   Mon Oct 4 13:30:53 2010 -0400

    utils/Makefile: clean up md5.o too.

commit 60440cee1536a22bc01e1036f47c53bffd368c48
Author: Joel Martin <github@martintribe.org>
Date:   Fri Oct 1 11:50:22 2010 -0500

    rfb.js: rQwait, cuttext simplification.
    
    - rQwait checks the receive queue to see if there is enough data to
      satisfy the following request. If not it returns true (which is
      almost always translated into an immediate return false by the
      caller).
    
    - rQwait is called quite a bit and this generally allows 4 lines to
      become 1 line where it is called.
    
    - rQwait allows simplification of cuttext processing. No global
      tracking needed anymore.
    
    Overall, about 60 lines less code.

commit a99959719d72ee792fb8b576d04fad173046355e
Author: Joel Martin <github@martintribe.org>
Date:   Thu Sep 30 11:17:52 2010 -0500

    include/des.js: trim some fat.
    
    DES is just used once during authentication and is not performance
    sensitive so we save some space by generating and/or removing some
    lookup tables. Also, shorten some very frequently used variables.
    
    Shaves off about 100 lines.

commit a59f1cd2691c50036ee895e993b7aa10b2ea03bb
Author: Joel Martin <github@martintribe.org>
Date:   Wed Sep 29 15:05:27 2010 -0500

    webutil.js, util.js: split cleanup.

commit 5a00c9d18aa47add87bd3cdc1d1e5aa473a95f80
Merge: 12d2e7c 8d5d2c8
Author: Joel Martin <github@martintribe.org>
Date:   Wed Sep 29 15:01:01 2010 -0500

    Merge branch 'master' of git@github.com:kanaka/noVNC

commit 8d5d2c8230b9c232afd82e01039c680e8a8b0094
Author: Antoine Mercadal <antoine.mercadal@inframonde.eu>
Date:   Thu Sep 30 03:11:23 2010 +0800

    Split util into two file:
     - util.js that contains essential functions
     - webutils.js that contains the GUI utility function.js
    
    this helps to include noVNC in other project, especially Cappuccino Application
    i

commit 12d2e7c192a63f90ad443ca1525083b72d4de74c
Author: Joel Martin <github@martintribe.org>
Date:   Wed Sep 29 14:48:19 2010 -0500

    des.js: remove decrypt and simplify.
    
    The decrypt functionality is never used so remove it. Also, we can
    assume that we are always DES encrypting 16 characters which allows
    several things to be simplified in DES.
    
    Overall this removes about 80 lines of code.

commit a679a97d1b920b777e369003268f4af70c82acd1
Author: Joel Martin <github@martintribe.org>
Date:   Sat Sep 25 15:50:43 2010 -0500

    Show rect/enc counts, add vnc_perf.html test.
    
    - include/rfb.js: Keep track of the number of rects of each encoding
      type and print them out when we close a connection (if 'info'
      logging level).
    
    - tests/vnc_perf.html: first pass at a noVNC based performance
      benchmark.
    
    - utils/wsproxy.py: Fix the output of the record filename.

commit 3b20e7a90f025b66e520d65327d5e90e6d2cfbcb
Author: Joel Martin <github@martintribe.org>
Date:   Fri Sep 24 10:47:39 2010 -0500

    rfb.js, canvas.js: status feedback on Canvas functionality.
    
    Read the render mode selected by canvas and report it in the initial
    page loaded status message.

commit 562beccf186ed05ddb27d97c47dbc59ac583d1db
Author: Joel Martin <github@martintribe.org>
Date:   Fri Sep 24 10:46:59 2010 -0500

    docs/browsers.md: noVNC webkit bug link format.

commit d4139a9b064fc3b2495a913af5be3de09ec5c1a6
Author: Joel Martin <github@martintribe.org>
Date:   Fri Sep 24 10:45:33 2010 -0500

    README.md: move browser page link.

commit 6de07adb71016a618c022194d0b0712e0a0a4071
Author: Joel Martin <github@martintribe.org>
Date:   Fri Sep 24 10:29:42 2010 -0500

    README.md: add link to browsers.md, update requirements.

commit f01e917ecc2abe72be0b0f59bd99b0cc6cd6004f
Author: Joel Martin <github@martintribe.org>
Date:   Fri Sep 24 09:59:54 2010 -0500

    docs/browsers.md: Separate browser support page.

commit ff36b1270b04b706fea43f3ac94508c230cd86a7
Author: Joel Martin <github@martintribe.org>
Date:   Thu Sep 23 09:39:24 2010 -0500

    Refactor settings object, add connectTimeout setting.
    
    - include/util.js: Add type and desc field to conf_default routine.
      Make comment descriptions of settings into desc parameters that can
      be queried. Also, use set_FOO in conf_default to set or coerce the
      current setting so that we always have the right type for the value.
    
    - include/rfb.js, include/default_config.js: add connectTimeout
      setting to address situations with slow connections that may need
      more than 2 seconds.

commit aa787069832c7b32b90a23a4d5063f2d72f07ba3
Author: Joel Martin <github@martintribe.org>
Date:   Thu Sep 23 09:17:09 2010 -0500

    rfb.js: wait for SecurityResult failure reason bytes.
    
    Yet another weird VNC server behavior: sending a failure and length
    before the reason message. To calculated the length, the reason string
    is already available, why not just send everything as one packet. Oh
    well.

commit 005d9ee999b19e6a079625aeb5efcf9f2636c2a7
Author: Joel Martin <github@martintribe.org>
Date:   Thu Sep 23 08:17:00 2010 -0500

    Misc cleanup: debug logging, record filename, etc.
    
    - include/canvas.js: When 'debug' logging, show browser detection
      values.
    - test/canvas.html: Only restore the canvas to it's starting state if
      the logging level is not 'debug'.
    - wsproxy.py: Append the session number to the record filename so that
      multiple sessions don't stomp on each other.

commit 8787e49b92f00c27bbf872b29ea26aa03c145f3e
Author: Joel Martin <github@martintribe.org>
Date:   Thu Sep 23 08:08:08 2010 -0500

    util.js: detect firefox 4.X correctly.
    
    Update the browser detection code (from mootools) with a fix that
    detects firefox 4.0 correctly.

commit c1eba48f79b0131bec7cb8d4a95fafaa088956e7
Author: Joel Martin <github@martintribe.org>
Date:   Wed Sep 22 17:11:57 2010 -0500

    logging: add Util.get_logging(), canvas clearing.
    
    Only clear canvas if log level is not debug instead of using
    '#__debug__' in the URL.

commit 57c7903f60c34f3a56f23e29944b521be7dc4e28
Author: Joel Martin <github@martintribe.org>
Date:   Wed Sep 22 16:55:06 2010 -0500

    playback.js: move to include/ for easier reference.
    
    Easier to reference from web site (gh-pages branch).

commit 31a837d55e394875345b1cafa2c89fce4b07298f
Author: Joel Martin <github@martintribe.org>
Date:   Mon Sep 20 16:15:40 2010 -0500

    No local cursor by default due to issues #27, #29.
    
    In Safari, local cursor rendering is corrupt. In firefox 3.6.10, local
    cursor rendering causes a segfault. Probable that the .cur format is
    not 100% compliant (even though it works in Chrome and firefox 3.5 and
    firefox 4.0). So just disable it by default until I can figure out how
    to address the problems.

commit 02889945cb979a44da00e3336115f2ee24963b47
Author: Joel Martin <github@martintribe.org>
Date:   Wed Sep 15 18:21:42 2010 -0500

    C proxy: Issue #14: wss:// from Safari
    
    Addresses this issue:
    http://github.com/kanaka/noVNC/issues#issue/14
    
    This goes along with commit 7e63919e6 but for the C proxy.

commit 0a1184bde8d6ea4830f7717ec238cae69f0acebd
Author: Joel Martin <github@martintribe.org>
Date:   Wed Sep 15 18:14:27 2010 -0500

    API change: add sendKey() to manually send key code.
    
    RFB.sendKey(code, down)
    
    If down is not specified then both a down followed by an up code will
    be sent.

commit 7e63919e6dec0d6b546ad75e688ce5ba33f45c35
Author: Joel Martin <github@martintribe.org>
Date:   Wed Sep 15 12:09:17 2010 -0500

    proxy: Issue #14: detect and allow wss:// from Safari.
    
    Addresses this issue:
    http://github.com/kanaka/noVNC/issues#issue/14
    
    Safari starts with '\x80' rather than '\x16' like Chrome and Firefox
    and having PROTOCOL_TLSv1 doesn't work with Safari. But just removing
    the ssl_version allows things to work with Safari wss:// connections.
    
    Also, if the handshake (after SSL wrapping) is null then terminate the
    connection. This probably means the certificate was refused by the
    client. Unfortunately Safari (the version I have) doesn't cleanly
    shutdown WebSockets connections until the page is reloaded (even if
    the object is no longer referenced).

commit e3efeb32a7ac85b2e73af4e3be61091bcb58e7de
Author: Joel Martin <github@martintribe.org>
Date:   Sat Sep 11 15:31:50 2010 -0500

    rfb.js: state refactor, add 'disconnect' state.
    
    Add a new state 'disconnect' to reflect that we are not truly
    'disconnected' until we get an onclose event. Add a disconnect timer
    to match.
    
    Handle disconnected cleanup better in updateState(). Anytime we enter
    in a disconnect/disconnected state, make sure all running state is
    cleaned up (WebSocket, timers, canvas).

commit cc374cd61a8c11a2bb4ff565b40f159ad68fc471
Author: Joel Martin <github@martintribe.org>
Date:   Sat Sep 11 15:10:54 2010 -0500

    proxy: always multiprocess and add --verbose.
    
    Always fork handlers processes. Instead printing traffic when
    single-processing, print traffic if verbose flag given.

commit ac7bdbc22fd9a0f150479321ebe7e01f8d448a74
Author: Joel Martin <github@martintribe.org>
Date:   Sat Sep 11 13:52:49 2010 -0500

    web-socket-js (issue #37): close() when connecting
    
    Filed this issue for this bug:
    http://github.com/gimite/web-socket-js/issues/issue/37
    
    Right now the close() call only calls __flash.close() if readyState is OPEN.
    But it should really call close any time that readyState is not CLOSED or
    CLOSING.
    
    The case I ran into is when I want to do the following:
    1. make a test connection
    2. tell the server to setup for a connection
    3. connect again
    
    I call close on the test connection, but since it is ignored when CONNECTING,
    it eventually times out with a error. But by that time I have already issued a
    new connection, it causes the new connection to fail. close() should cancel
    CONNECTING state too.

commit 071f2818a8182d88040f5acba3b8e54dc644ef4e
Author: Joel Martin <github@martintribe.org>
Date:   Sat Sep 11 12:44:39 2010 -0500

    gimite/web-socket-js issue #35: async onclose.
    
    Filed this bug about this issue:
    http://github.com/gimite/web-socket-js/issues#issue/35
    
    To work around the flash "recursive call" problem, WebSocket.as has
    the onclose event disabled in the close() call and the javascript half
    of the close() call does the onclose() call instead. This is fine, but
    it needs to be asynchronous to act more like what happens with
    a normal WebSockets object. The current behavior is that the onclose()
    method is called inline (synchronously) when the close() is called and
    this inconsistency make state handling more difficult.

commit edc47252604d38fe6f0e229d5f8a206fbcd9dbce
Author: Joel Martin <github@martintribe.org>
Date:   Fri Sep 10 14:31:34 2010 -0500

    proxy: do handshake in forked process too.

commit a0315ab1dca6db90ce00127a528176b35f979884
Author: Joel Martin <github@martintribe.org>
Date:   Fri Sep 10 13:05:48 2010 -0500

    wsproxy: multiprocess capable.
    
    Add -m, --multiprocess option which forks a handler for each
    connection allowing multiple connections to the same target using the
    same proxy instance.
    
    Cleaned up the output of the handler process. Each process' output is
    prefixed with an ordinal value.
    
    Changed both the C and python versions of the proxy.

commit 465faf19db1d0fbc43e5b47b8419a8d2225a8a95
Author: Joel Martin <github@martintribe.org>
Date:   Fri Sep 10 09:58:26 2010 -0500

    Remove record option from C wsproxy.
    
    I've decided that debug/develop/extra features will just be in the
    python version of the proxy. The C version (and other versions) will
    just have the core functionality (unless someone wants to support it).

commit 5f409eeeeb74a55ca7525cc1f25f3139e1dc5692
Author: Joel Martin <github@martintribe.org>
Date:   Wed Sep 8 15:06:34 2010 -0500

    License header cleanup.

commit 2a6018df9f7d1c652ed9f722d0441736378e7262
Author: Joel Martin <github@martintribe.org>
Date:   Wed Sep 8 14:57:32 2010 -0500

    web-socket-js: 9e7663771 build and remove source.
    
    web-socket-js now has all the functionality and fixes needed for noVNC
    so remove the include/as3crypto_patched directory and the
    include/web-socket-js/flash-src directory (i.e. the sources for
    web-socket-js). This cleans up almost 3K from the include/ directory.
    
    Update to web-socket-js build based on upstream (gimite/web-socket-js)
    9e766377188.

commit b5087acc2405359654b82c5ecd976780f5557163
Author: Joel Martin <github@martintribe.org>
Date:   Wed Sep 8 13:46:41 2010 -0500

    default_controls.js: Fix cursor setting init.
    
    The rfb variable wasn't available at the point settingsDisabled() was
    being called since it was called inline with RFB() initialization. To
    solve this we pass the updateState rfb variable so that the canvas can
    be queried for setting the cursor_uri value.

commit c0f3c664894495148d8bb9ff522398af33c11453
Author: Joel Martin <github@martintribe.org>
Date:   Wed Sep 8 10:15:07 2010 -0500

    TODO and .gitignore: updates.

commit d595e65685162f371cba4099045cf7f522c97720
Author: Joel Martin <github@martintribe.org>
Date:   Wed Sep 8 10:11:11 2010 -0500

    JSLint.

commit 2f6a1c2bda2e2d20cb28db01e0511fc59b9d1f14
Author: Joel Martin <github@martintribe.org>
Date:   Tue Sep 7 16:22:28 2010 -0500

    vnc_playback.html: print frame_idx on error.

commit 673118fb215eff76fe1d789e3a23f7b155a87329
Author: Joel Martin <github@martintribe.org>
Date:   Tue Sep 7 09:57:37 2010 -0500

    Encrypt default to 'false' in vnc_auto.html also.

commit b8bd88d085d23687b238d9cdf0ef11a9f54e4388
Author: Joel Martin <github@martintribe.org>
Date:   Wed Sep 1 12:31:54 2010 -0500

    playback.js: realtime playback and split out code.
    
    Preparation for online demo.
    
    Split general playback code into tests/playback.js.
    
    Use timestamps from recording with proxy to playback in realtime.

commit 975aa8c01cf16bb3c5293e84176cc10bc28fd216
Author: Joel Martin <github@martintribe.org>
Date:   Tue Aug 31 22:48:11 2010 -0500

    TODO: move long-term features to github issues.

commit 3afc7a2b89386f660ae087d804b26edbe7a02f06
Author: Joel Martin <github@martintribe.org>
Date:   Tue Aug 31 22:22:22 2010 -0500

    Issue #15 - rfb.js: wait for security type list.
    
    Apparently the virtualbox VNC server send the size and then the
    security type list in separate frames so we need to wait for the full
    list.

commit 3cc74720f091800a636c30676d9cd59992490392
Author: Joel Martin <github@martintribe.org>
Date:   Tue Aug 31 13:36:14 2010 -0500

    canvas.js: Fix ignore for scrolled window.
    
    When the documement/window is scrolled, the onMouseDisable routine was
    not properly calculating the position to test whether to ignore the
    event or not.

commit d67de76770dcd752f761f15dc1937eee6b9ee5eb
Author: Joel Martin <github@martintribe.org>
Date:   Tue Aug 31 12:08:47 2010 -0500

    Rename tightpng img queue variable to imgQ.

commit 3e7a7cefc6e000bdc1d2bf36f4c473cf03a84566
Author: Joel Martin <github@martintribe.org>
Date:   Mon Aug 30 15:59:53 2010 -0500

    More timing "history" purge.

commit 9c57ac3985935e165d01f7c9520fbb295abc4aae
Author: Joel Martin <github@martintribe.org>
Date:   Mon Aug 30 15:57:58 2010 -0500

    rfb.js: JSLint'ing
    
    Change RQ and SQ vars to rQ and sQ since caps at the start implies
    a classable entity.

commit 0d1e1b7281be8bea33148571c4b696812fc20343
Author: Joel Martin <github@martintribe.org>
Date:   Mon Aug 30 15:16:07 2010 -0500

    Merge init() into the constructor.
    
    This is logical now since the external update callback can be provided
    when the object is created so we don't need a separate init function.

commit 55dee43279f3374fde433fbeffb798fa9e609a32
Author: Joel Martin <github@martintribe.org>
Date:   Fri Aug 27 12:10:09 2010 -0500

    Remove psuedo-UTF8 encoding.
    
    It's less efficient on average that base64 (150% vs 133%). It's
    non-standard (0 shifted to 256 before encoding). And I rarely use it.

commit e8c1698995571c55119b79efe5390ee08861bf06
Author: Joel Martin <github@martintribe.org>
Date:   Fri Aug 27 11:29:22 2010 -0500

    rfb.js: remove timing history.
    
    Turned out not to be useful (pretty much never looked at the info once
    I added it). The playback test is much more useful for measuring
    performance.

commit eabf4670fbf08e5107a18dfd1f4ce85548865c8c
Author: Joel Martin <github@martintribe.org>
Date:   Fri Aug 27 11:21:30 2010 -0500

    rfb.js/tight_png: fix indexed receive queue handling.
    
    getCLength was not using the index (RQi) into the receive queue.

commit 4ff85f496c0a96d0d31096baa3038822dc692dd0
Author: Joel Martin <github@martintribe.org>
Date:   Thu Aug 26 11:34:44 2010 -0500

    Test both builtin and base64.js functions.

commit 67b4e9879a0dc223dd0dfd8dce2392d4341aa5ff
Author: Joel Martin <github@martintribe.org>
Date:   Thu Aug 26 10:22:29 2010 -0500

    Indexed receive queue. Up to 2X speedup in Chrome.
    
    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.

commit fb007628d68b401fa25fb0f308fc46585274bdee
Author: Joel Martin <github@martintribe.org>
Date:   Thu Aug 12 09:50:49 2010 -0500

    Add Javascript variable container to record data.
    
    - This allows the recorded data to be immediately usable by
      tests/vnc_playback.html

commit 1a5dd77d37633803fd3006589a40cf31f0fd9687
Author: Joel Martin <github@martintribe.org>
Date:   Wed Aug 11 11:21:15 2010 -0500

    Treat RFB 3.6 as 3.3.
    
    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.

commit 4ed717ad31798fbb9ab0344fa9f590321f1f025f
Author: Joel Martin <github@martintribe.org>
Date:   Fri Aug 6 15:53:13 2010 -0500

    Scroll render test and perf speedup.
    
    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.

commit b7155950d3704d108b4a3cdc1afe5f9d54c9152e
Author: primalmotion <antoine.mercadal@inframonde.eu>
Date:   Wed Aug 4 15:20:53 2010 -0500

    * take care of kanaka's suggestions
    (cherry picked from commit 11f3271a52505dccbf38bea422e7c9a79dddd478)
    
    Signed-off-by: Joel Martin <github@martintribe.org>

commit 6425f611d8cdbd02ebecb75d159f004808ca743b
Author: primalmotion <antoine.mercadal@inframonde.eu>
Date:   Wed Aug 4 17:47:08 2010 +0200

    * Adding a way to set the DOM document to use.
    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>

commit b925c9678172800070f6a70fcb5f30f3b384e96e
Author: Joel Martin <github@martintribe.org>
Date:   Wed Aug 4 15:14:40 2010 -0500

    JSLint: use ===.

commit a6a1ad3d0a78f24a3090e69033af40d83f0ae7bc
Author: Joel Martin <github@martintribe.org>
Date:   Wed Aug 4 14:33:32 2010 -0500

    Remove unused imports (sys, ssl) in wsproxy.py

commit 5958fb49961482675fd2f95bf10f4fd6a4d89348
Author: Joel Martin <github@martintribe.org>
Date:   Wed Aug 4 14:32:10 2010 -0500

    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

commit c95c24e743cd52f14649b9dad9d867602d1d040b
Author: Joel Martin <github@martintribe.org>
Date:   Wed Aug 4 14:18:55 2010 -0500

    Fix #19: python2.4 support.
    
    - Replace URL parsing using "".partition() with urlparse module.

commit 801482be6aede1db31f8ee661f470de7036cbdd4
Author: Joel Martin <github@martintribe.org>
Date:   Tue Aug 3 13:21:00 2010 -0500

    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)

commit 208c832b283239a71144d72c18fb610e939a3833
Author: Joel Martin <github@martintribe.org>
Date:   Tue Aug 3 13:20:44 2010 -0500

    Encrypt default to off, TODO updates.

commit 8db09746b7b96da6bf48d0d7ef22f40df7205f7d
Author: Joel Martin <github@martintribe.org>
Date:   Mon Aug 2 17:07:27 2010 -0500

    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.

commit 8171f4d8187109093a32322377a35676813546ea
Author: Joel Martin <github@martintribe.org>
Date:   Mon Aug 2 10:11:47 2010 -0500

    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.

commit 125d8bbb8fc4cf41480f2e4c79d240eff5660b24
Author: Joel Martin <github@martintribe.org>
Date:   Fri Jul 30 09:53:33 2010 -0500

    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.

commit 29ad96c5261ab0a1ea4ec46601ad0e47418f4e75
Author: Joel Martin <github@martintribe.org>
Date:   Thu Jul 29 10:47:32 2010 -0500

    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.

commit a867de16524690edacca78a7b23fbadd9cf86443
Author: Joel Martin <github@martintribe.org>
Date:   Thu Jul 29 10:46:58 2010 -0500

    Update TODO.

commit 0af07711ec26f0b2af7b464b15566a04f2156d7e
Author: Joel Martin <github@martintribe.org>
Date:   Mon Jul 26 17:41:19 2010 -0500

    README.md: fix command formatting.

commit acad10a5de417813880d0b52ceae9465d6a9eb9e
Author: Joel Martin <github@martintribe.org>
Date:   Fri Jul 23 12:32:15 2010 -0500

    README.md: correction about VNC_uri_prefix.
    
    It points to the include sub-directory, not to the directory above.

commit b4748f041a104fa2e4fd97eab9d496d5a7d68fc7
Author: Joel Martin <github@martintribe.org>
Date:   Fri Jul 23 12:30:31 2010 -0500

    Add twitter link to follow @noVNC for commits/news.

commit 42b2246c1ab34213661d8f616fcda8c1141acba7
Author: Joel Martin <github@martintribe.org>
Date:   Fri Jul 23 11:46:41 2010 -0500

    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.

commit 11304584ca39564a5b28dd599e974acf62bd15a0
Author: Joel Martin <github@martintribe.org>
Date:   Fri Jul 23 09:25:16 2010 -0500

    README.md: Add more bug/issue suggested info.

commit 1b90deeef5479b719d10e3b8730677dba68d9b3f
Author: Joel Martin <github@martintribe.org>
Date:   Thu Jul 22 11:35:26 2010 -0500

    Turn off firebug-lite in canvas test page.

commit a8edf9d8a530459657345bbfe31b961a04a0353f
Author: Joel Martin <github@martintribe.org>
Date:   Thu Jul 22 11:33:21 2010 -0500

    Query string cleanup and move it to util.js

commit a7a8962676734041b85a96a0eaa70ac4dc35f545
Author: Joel Martin <github@martintribe.org>
Date:   Thu Jul 22 10:54:47 2010 -0500

    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.

commit 19463eac1f6910fc2b19870691f31f7ffc783885
Author: Joel Martin <github@martintribe.org>
Date:   Thu Jul 22 10:46:50 2010 -0500

    Fix logging init on first page load (not in cookie).

commit f7f69d8eaa18c940478955f60bbe697a569217c5
Author: Joel Martin <github@martintribe.org>
Date:   Thu Jul 22 10:26:50 2010 -0500

    Fix error when cursor Data URI scheme not supported.

commit da6dd8932e3d87e39ffc8afcb371a61ff1342e87
Author: Joel Martin <github@martintribe.org>
Date:   Wed Jul 21 20:34:23 2010 -0500

    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.

commit f55b6b418512b2579ba80e57899ffbad587976c9
Author: Joel Martin <github@martintribe.org>
Date:   Tue Jul 20 14:54:49 2010 -0500

    Fail if initial server connection fails.

commit 2c2b492c0c1431e185fc4ca2a10bb18cd56eac5a
Author: Joel Martin <github@martintribe.org>
Date:   Tue Jul 20 14:34:44 2010 -0500

    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).

commit 1656b1b98dcdbe5aee60d53b7b0ece5f19664493
Author: Joel Martin <github@martintribe.org>
Date:   Sat Jul 17 12:13:54 2010 -0500

    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.

commit 31407abc2597ef8e1b6935bea67986445f9636a6
Author: Joel Martin <github@martintribe.org>
Date:   Sat Jul 17 12:05:58 2010 -0500

    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.

commit 3b6f60be7d158f9270802ee64c86c7ec5ae0b94f
Author: Joel Martin <github@martintribe.org>
Date:   Thu Jul 15 20:22:55 2010 -0500

    Typos and formatting.

commit b89c6db3a1373d1578fc003a1016731b821be6aa
Author: Joel Martin <github@martintribe.org>
Date:   Thu Jul 15 20:18:39 2010 -0500

    Launch script and reworked usage in README.md.

commit 7c81747b5242273f2434f4bebd195359c5b6d1b8
Author: Joel Martin <github@martintribe.org>
Date:   Thu Jul 15 19:58:33 2010 -0500

    Make black.css an alternate stylesheet.

commit f00b1e37769210dd243b722646bee1ed3d0deb0a
Author: Joel Martin <github@martintribe.org>
Date:   Thu Jul 15 19:38:25 2010 -0500

    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.

commit 53b112f2a63c74f411b55f39dc39f51e418abe1a
Author: Joel Martin <github@martintribe.org>
Date:   Thu Jul 15 19:22:07 2010 -0500

    Add info on firefox 3.0.17.

commit fcfefdb9ab94f9e5486bf51bdf0ccbfcd3197121
Author: Joel Martin <github@martintribe.org>
Date:   Thu Jul 15 18:45:32 2010 -0500

    Clean up top level: move license files to docs/

commit 754e0c0bee43bb1d972f026646d778a8d8c611fc
Author: Joel Martin <github@martintribe.org>
Date:   Wed Jul 14 16:57:02 2010 -0500

    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.

commit d798572da4d1a8c99b6e199126664d842381ef57
Author: Joel Martin <github@martintribe.org>
Date:   Tue Jul 13 17:53:01 2010 -0500

    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.

commit 77c7a454ac57216437dc9dd8ffb06e62d6f45ccc
Author: Joel Martin <github@martintribe.org>
Date:   Tue Jul 13 17:51:26 2010 -0500

    TightPng fixups and thanks to Sentry Data Systems.
    
    - Change tightpng encoding number to -260 (aliguori provided it until
      an official number can be allocated).

commit 852ba642be9b7afbc919b9fbec2a3c1c58aec539
Author: Joel Martin <github@martintribe.org>
Date:   Fri Jul 9 11:41:36 2010 -0500

    Screenshots section, link to more.

commit 600887f053a0d3f12d5c4549af0188303633f2fe
Author: Joel Martin <github@martintribe.org>
Date:   Fri Jul 9 10:52:42 2010 -0500

    README.md: caption formatting.

commit e5517ecd25b61164094a3409887ed41f2590a9a6
Author: Joel Martin <github@martintribe.org>
Date:   Fri Jul 9 10:51:51 2010 -0500

    README.md: image caption and bigger dimensions.

commit 6b41d1d5a500cf6c9d9c5d11a4a997396f5032d6
Author: Joel Martin <github@martintribe.org>
Date:   Fri Jul 9 10:50:33 2010 -0500

    Add screenshots to README.md.

commit 0a32dfd31a7b3c37c789965498493e1afc20da3c
Author: Joel Martin <github@martintribe.org>
Date:   Wed Jul 7 16:06:44 2010 -0500

    Markdown links in README.md.

commit 660740b5d7b397458a58699cc3c5af8f1b5f1011
Author: Joel Martin <github@martintribe.org>
Date:   Wed Jul 7 12:41:19 2010 -0500

    Links related to Tight PNG encoding work.

commit c83f1576ca4c651819dba01ce8ddce808197b222
Author: Joel Martin <github@martintribe.org>
Date:   Wed Jul 7 12:40:56 2010 -0500

    Removed missed mootools include in ws.html test.

commit a095b3826229ebe042caadb06fd1ed444a2c4975
Author: Joel Martin <github@martintribe.org>
Date:   Tue Jul 6 12:29:37 2010 -0500

    Add troubleshooting section.

commit 447cd4ade30f80378543b58c8f0dcfbf79c4cc8c
Author: Joel Martin <github@martintribe.org>
Date:   Tue Jul 6 12:14:38 2010 -0500

    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.

commit 81e5adafef0bdc43709b7edf4102f2655f7e14ae
Author: Joel Martin <github@martintribe.org>
Date:   Tue Jul 6 11:56:13 2010 -0500

    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

commit 351a1da304337a8dd7cb952b345fe869be810c5f
Author: Joel Martin <github@martintribe.org>
Date:   Mon Jul 5 15:54:15 2010 -0500

    Init updated web-socket-js correctly. TODO updates.

commit ae0ecca2e40bbc459d18eb2472801d7c46a9381f
Author: Joel Martin <github@martintribe.org>
Date:   Fri Jul 2 14:25:12 2010 -0500

    Disable excanvas experiment.
    
    Also, move bugs from TODO to github issues.

commit b8e07362d9e6b81eb604e21fa685a6ce9f0ecf2e
Author: Joel Martin <github@martintribe.org>
Date:   Fri Jul 2 12:50:34 2010 -0500

    A little more cleanup of browser table.

commit 3df41d67e1c3b230557ec2297db8d5fdfc99f73b
Author: Joel Martin <github@martintribe.org>
Date:   Fri Jul 2 12:40:29 2010 -0500

    More browser table cleanup.

commit 47ef64634fab64332f279882c80ffb9d66a5fce7
Author: Joel Martin <github@martintribe.org>
Date:   Fri Jul 2 12:34:37 2010 -0500

    Remove unsupported table colors. Cleanup table.

commit c54a65ba099da91b7b0daeadd99df86c1e97b24b
Author: Joel Martin <github@martintribe.org>
Date:   Fri Jul 2 12:25:13 2010 -0500

    README.md: try browser tests in table.

commit f5769b00eaa31a15d49e45ab3f146bd1b1eed895
Author: Joel Martin <github@martintribe.org>
Date:   Fri Jul 2 12:12:30 2010 -0500

    Test table in markdown.

commit 5ba1dd78ba2ba732889d9f06d0da803b433b091e
Author: Joel Martin <github@martintribe.org>
Date:   Fri Jul 2 12:02:57 2010 -0500

    README/TODO: Windows browser testing results.

commit 2ca053affcdd7da08b75e0cadf9b4dea1e5849e6
Author: Joel Martin <github@martintribe.org>
Date:   Fri Jul 2 10:50:52 2010 -0500

    Rebuild web-socket-js swf with gimite updates.
    
    Bug fixes, restore RFC2817 proxy for non wss://, and handle new closing
    handshake from WebSockets 76.

commit 1144eaa37a528602736315cf187eddafc27cabb7
Author: Joel Martin <github@martintribe.org>
Date:   Fri Jul 2 09:54:55 2010 -0500

    Add global variable option for swf location.
    
    The problem is, you can't set WebSocket.__swfLocation before you load
    web_socket.js (because it creates the WebSocket global), but you also
    can't reliably set WebSocket.__swfLocation after because if you are
    doing dynamic script file includes then the onload (i.e.
    WebSocket.__initialize) may fire before you have a chance to set
    Websocket.__swfLocation.

commit b9633f8bfd72100e59d791a9357f4bc0822f0a04
Author: Joel Martin <github@martintribe.org>
Date:   Fri Jul 2 09:52:59 2010 -0500

    Import/merge gimite/web-socket-js up to da7caff96496c7d7bfb3.
    
    Bug fixes, restore RFC2817 proxy for non wss://, and handle new
    closing handshake from WebSockets 76.

commit e091b47a9fe534e8faf417e9a6635d88ea016519
Author: Joel Martin <github@martintribe.org>
Date:   Thu Jul 1 12:18:18 2010 -0500

    Clarify browser results in README.md

commit a94699265e4edb6e8417ca867fee063f2f003c76
Author: Joel Martin <github@martintribe.org>
Date:   Thu Jul 1 12:13:17 2010 -0500

    Remove sequence code in client and proxies.

commit 2b71a4db580e0be9725c3f341e3a76cbc92f89c3
Author: Joel Martin <github@martintribe.org>
Date:   Thu Jul 1 12:04:26 2010 -0500

    Update web-socket-js binary build and README.md
    
    Brings it up to date with the most recent web-socket-js event handling
    fixes.

commit bc8e3d4db75e693eceee74badf27ddb3f99bee22
Author: Joel Martin <github@martintribe.org>
Date:   Thu Jul 1 11:54:44 2010 -0500

    Opera fixes and big Opera performance boost.
    
    Add message/state pollling in web-socket-js. Since Opera tends to drop
    message events, we can dramatically increase performance by polling
    every now for message event data.
    
    Also, add more direct calls to update readyState so that it's not
    missed when Opera drops events.

commit 4a96178307b0ff995343042ac2f051c37541b686
Author: Joel Martin <github@martintribe.org>
Date:   Thu Jul 1 10:35:03 2010 -0500

    Better web-socket-js dataQueue reset.
    
    At connect and close time instead of initialization time.

commit 9479c72083031d137d694c6eedc14d8fd8c053da
Author: Joel Martin <github@martintribe.org>
Date:   Thu Jul 1 10:32:14 2010 -0500

    web-socket-js event fixes.
    
    When using web-socket-js, the onopen event may happen inline so the
    caller may not have time to set onopen before the event fires. In this
    case set a short timeout and try again. In particular this affects
    Opera most of the time.
    
    Also, to get around Opera event droppings, always read the readyState
    directly instead of relying on the local readyState variable to be
    correct (which it isn't if stateChange event were dropped).

commit 6713418413c2db75cd372167c53ec2a0d747ca34
Author: Joel Martin <github@martintribe.org>
Date:   Thu Jul 1 10:30:07 2010 -0500

    Always prefer JS ops if we have imageData.
    
    All browsers with Canvas imageData are faster with JS ops instead of
    canvas ops. This gives significant performance improvement in Opera.
    Except for missing web-socet-js message notifications, Opera 10.60 is
    now faster than firefox 3.5.

commit a93c9555389317fa9af7774d22b1417098e0890a
Author: Joel Martin <github@martintribe.org>
Date:   Thu Jul 1 09:53:38 2010 -0500

    Opera works! Fix message event drops/reorders.
    
    Instead of relying on FABridge AS -> JS event delivery, we just use
    the events to notify JS of pending data. The message handler then
    calls the AS readSocketData routine which sends back an array of
    the pending WebSocket frames.
    
    There is still a minor bug somewhere that happens after the first
    connect where the web-socket-js throws an "INVALID_STATE_ERR: Web
    Socket connection has not been established". But, Opera is now usable
    and we should be able to drop the packet sequence numbering and
    re-ordering code.
    
    Another minor issue to better support Opera is to move JS script
    includes to the <head> of the page instead of after the body.

commit 1eba7b4279494231b379f7855b07c8b72c013339
Author: Joel Martin <github@martintribe.org>
Date:   Wed Jun 30 20:39:41 2010 -0500

    Update C proxy to WS protocol version 76.
    
    Pull in LGPL md5.c and md5.h files (written by Ulrich Drepper).
    
    Now both python and C version of the proxy support both protocol 75
    and protocol 76 (hybi 00).
    
    Reorganize websocket.py slightly to match websocket.c.

commit 5235b29ddfd67c5e440a86523e332fb5555db31a
Author: Joel Martin <github@martintribe.org>
Date:   Tue Jun 29 14:36:18 2010 -0500

    Significant firefox perf improvement. Update TODOs.
    
    Interesting. Enough has changed in the Canvas tile operations, that
    Canvas.prefer_js=true is better for firefox/gecko too. Approximately
    2X improvement in firefox for large hextile renders.

commit dfa8db8f38ae594fed0f1b80dc325a0a48976967
Author: Joel Martin <github@martintribe.org>
Date:   Sat Jun 26 17:41:39 2010 -0500

    Fix issue #7: security scheme list parsing.
    
    Also, lower connect timeout to 2 seconds.

commit c3785ae12b9c6bcd4c6a77bed5548e82ae147191
Author: Joel Martin <github@martintribe.org>
Date:   Thu Jun 24 18:45:30 2010 -0500

    Remove proxy handshake debug.

commit ad8734937e8a828529c730462babb34a794833c9
Author: Joel Martin <github@martintribe.org>
Date:   Thu Jun 24 18:42:45 2010 -0500

    Add WebSockets spec links.

commit 9e2f775d42daea5f83c0ae5158a2b917313e36bd
Author: Joel Martin <github@martintribe.org>
Date:   Thu Jun 24 18:04:40 2010 -0500

    Add missing full GPL-3 text.

commit 48eed1ac054165e86af7a4f1d64a5f1825965450
Author: Joel Martin <github@martintribe.org>
Date:   Thu Jun 24 17:09:54 2010 -0500

    Refactor canvas imageData test slightly.

commit 486cd527f208a50a9c8114493cdd5c7b61b3ffa5
Author: Joel Martin <github@martintribe.org>
Date:   Thu Jun 24 17:04:57 2010 -0500

    Support WebSockets 76 (hixie-76, hybi-00).
    
    Looks like disabling web-socket-js debug messages by default that we
    get a minor speedup.
    
    Python proxy should support both 75 and 76 (00) modes. Also, update ws
    test to more reliably hit the WebSockets ordering/drop issue.

commit 7dfa20b8fd8d1a3cb58d1fe358f52f3095b9e8e2
Author: Joel Martin <github@martintribe.org>
Date:   Thu Jun 24 17:01:58 2010 -0500

    Remove invalid pos check from web-socket-js.

commit 094b489b76dbb98eda761d255f1e3036d52561a1
Author: Joel Martin <github@martintribe.org>
Date:   Thu Jun 24 17:00:41 2010 -0500

    Missed change web-socket-js to dd80a1807758abfab4a0fde840f94c5d649e4a24.

commit 2ddd6214a5d2c5f81cc2e65525ba7504f9090a91
Author: Joel Martin <github@martintribe.org>
Date:   Thu Jun 24 16:59:53 2010 -0500

    Add web-socket-js debug flag and default to off.

commit 76053e2bae83e0a140223ec733339630ec9836ea
Author: Joel Martin <github@martintribe.org>
Date:   Thu Jun 24 16:58:24 2010 -0500

    Squelch MD5.as build warnings.

commit 0e9b61d209e167bd022d09d805ddbd7abf518e84
Author: Joel Martin <github@martintribe.org>
Date:   Thu Jun 24 12:55:26 2010 -0500

    TODO: Test IE 9 preview 3.

commit 35f5b11ce5e9d942655a1a1869a7a48138a37ff8
Author: Joel Martin <github@martintribe.org>
Date:   Thu Jun 24 12:42:34 2010 -0500

    Update gimite/web-socket-js to dd80a1807758abfab4a0fde840f94c5d649e4a24

commit 48ffd4bcc77ced05d6808a41c7d85fc9324c46c4
Author: Joel Martin <github@martintribe.org>
Date:   Thu Jun 24 11:19:19 2010 -0500

    TODO: already got Arora 0.5 working.

commit 5d41cbb27818191586e7384e3f299b8706979ec9
Author: Joel Martin <github@martintribe.org>
Date:   Thu Jun 24 11:12:49 2010 -0500

    TODO (WebSockets version 76) and Opera/Arora.

commit 7325b930f28721ced4139deff5dd70a54d532432
Author: Joel Martin <github@martintribe.org>
Date:   Thu Jun 24 10:50:36 2010 -0500

    Add proxy functionality description.

commit d93d3e09ab0262e0f4378e69109bb9c59ce8de45
Author: Joel Martin <github@martintribe.org>
Date:   Wed Jun 23 16:08:36 2010 -0500

    Various cross-browser fixes.
    
    Now working under Arora 0.5.
    
    But not Konqueror 4.2.2 (WebSockets never connects).
    
    IE support with excanvas still pending.

commit 11bb7a4ae4078f08b250b9070dce18cf5c452e1d
Author: Joel Martin <github@martintribe.org>
Date:   Mon Jun 21 16:30:32 2010 -0500

    Fix browser detection code in IE.

commit 3915e5365e12aa5723326941d937f9e4c382e0e1
Author: Joel Martin <github@martintribe.org>
Date:   Mon Jun 21 13:20:57 2010 -0500

    Update README.md with browser support.

commit 3b7575b219f4cf7c4c2a5fdd59d5af735e45aa50
Author: Joel Martin <github@martintribe.org>
Date:   Sun Jun 20 15:10:34 2010 -0500

    Better support console debug under Opera (DragonFly).

commit 2a4e7d8a930a84b8ff7d593bdb1e9cd9e8611d73
Author: Joel Martin <github@martintribe.org>
Date:   Fri Jun 18 15:18:41 2010 -0500

    Timeout connection.

commit 146071161f9a1ccd26f53ee10398671620bb45b6
Author: Joel Martin <github@martintribe.org>
Date:   Thu Jun 17 17:50:15 2010 -0500

    Update usage and README.md.

commit 5c34ce4bebae6022c4d1f69b9857dee870842684
Author: Joel Martin <github@martintribe.org>
Date:   Thu Jun 17 17:24:54 2010 -0500

    More arg processing fixes.

commit ee26cbf24de7c11807475ce6a55b80b2ecbd7033
Author: Joel Martin <github@martintribe.org>
Date:   Thu Jun 17 17:05:33 2010 -0500

    Argument processing fixes. Misc proxy fixes.

commit 6ee61a4cf6c5cbe788b94b43e1dbc7223a74dbd3
Author: Joel Martin <github@martintribe.org>
Date:   Thu Jun 17 16:06:18 2010 -0500

    Add daemonization support to wsproxy.*.
    
    Refactor how settings are passed around.

commit b2fd1bc374d755e146eb10ce4a427cdeef28f6f8
Author: Joel Martin <github@martintribe.org>
Date:   Thu Jun 17 09:31:13 2010 -0500

    Update TODO.

commit 459b2578b25716a820520d9b2d5dbf1ab6b7fbd5
Author: Joel Martin <github@martintribe.org>
Date:   Wed Jun 16 13:58:00 2010 -0500

    Force SSL option to proxies. Use getopt_long.

commit 8ef9ae8c96545ca252bc0cabce145c0c38242ae5
Author: Joel Martin <github@martintribe.org>
Date:   Wed Jun 16 13:57:10 2010 -0500

    Update TODO.

commit b0696c4473f7a0d0d6ee2349868e2c8bbfaef05e
Author: Joel Martin <github@martintribe.org>
Date:   Wed Jun 16 13:11:07 2010 -0500

    Better C proxy host resolution.
    
    Use getaddrinfo instead of gethostbyname.

commit f2898eabd30af3f1eb81136f5b74c4ebe956cea1
Author: Joel Martin <github@martintribe.org>
Date:   Wed Jun 16 12:37:03 2010 -0500

    Add listen address to proxy (C and python).
    
    This allows forwarding from an external port to the same port on
    localhost (loopback). I.e.
    
    ./utils/wsproxy `hostname -f`:5901 localhost:5901

commit f755ca96319cccbfeec3acd1e76ad087604cd60b
Author: Joel Martin <github@martintribe.org>
Date:   Wed Jun 16 09:48:49 2010 -0500

    Remove debug sendCtrlC function.

commit 160fabf65c63d7339a8ba36d80825e0b27cf7ab1
Author: Joel Martin <github@martintribe.org>
Date:   Tue Jun 15 17:56:38 2010 -0500

    Disabled ctrlAltDel button when N/A.

commit 63708ff5a87be1574d96331a376351b5eff098e7
Author: Joel Martin <github@martintribe.org>
Date:   Tue Jun 15 17:47:01 2010 -0500

    Add CtrlAltDel send button to status bar.
    
    Some default_controls.js jslinting.
    
    Needs to be some modularity between controls you probably always want
    (like sending CtrlAltDel) and how the interface is presented and
    controlled.

commit 15046f0042b6e14ccae44e0e813a929232b05101
Author: Joel Martin <github@martintribe.org>
Date:   Tue Jun 15 15:21:41 2010 -0500

    No mootools dep outside of default_controls.js.
    
    Some basic functions from mootools implemented in util.js.
    
    Also, some more DOM separation. Move clipboard focus logic into
    default_controls and canvas and out of vnc.js.
    
    JSLint cleanup.

commit 61dd52c983c47a140ba54ef4d94fbf605a2254fd
Author: Joel Martin <github@martintribe.org>
Date:   Tue Jun 15 11:10:18 2010 -0500

    Add mouse position routines to util.js.
    
    On path towards removing dependency on mootools in non-UI code.

commit e2e7c224942aaa03af1d05f6c198d39f29f88768
Author: Joel Martin <github@martintribe.org>
Date:   Tue Jun 15 09:36:23 2010 -0500

    Move DOM event handling from vnc.js to canvas.js.

commit 96a6eaadbc647cf769b74840ccc81fb50301af29
Author: Joel Martin <github@martintribe.org>
Date:   Mon Jun 14 14:56:19 2010 -0500

    Move vnc.js into include directory.
    
    Also, allow 'include/' to be overridden in VNC_uri_prefix.

commit 2152a88f5c9dc2e2cafcd58f85895626c73a6028
Author: Joel Martin <github@martintribe.org>
Date:   Mon Jun 14 14:43:21 2010 -0500

    Add summary timing info on disconnect.
    
    Also, move Frame Buffer Update code out of normal_msg into separate
    function.

commit 30e5396326fd7cc1932e0c2350b6940553e2bcaf
Author: Joel Martin <github@martintribe.org>
Date:   Mon Jun 14 14:42:34 2010 -0500

    Less debug output.

commit a4807656a2ee39bb06a52c96f0eabc72cf8b2a63
Author: Joel Martin <github@martintribe.org>
Date:   Mon Jun 14 14:34:05 2010 -0500

    Move cert gen to Usage section of README.md.

commit 6a52558dd87e681137986bded3485dd8fefba0ff
Author: Joel Martin <github@martintribe.org>
Date:   Sun Jun 13 11:00:12 2010 -0500

    Render PNG images in order. Update TODO.

commit 3954ae149a6d734146e2e71a32f34ad3d45aa3b8
Author: Joel Martin <github@martintribe.org>
Date:   Sun Jun 13 10:57:23 2010 -0500

    Fix mouse focus issues.

commit 888d5813eda0002b2562b90d3ff5dc1cb505db5e
Author: Joel Martin <github@martintribe.org>
Date:   Thu Jun 10 16:05:15 2010 -0500

    Fix scrolled mouse position.

commit 4b4496ad6735cc9a0b9d85dc113a05d57c407e35
Author: Joel Martin <github@martintribe.org>
Date:   Thu Jun 10 15:44:42 2010 -0500

    DesktopResize and compression level pseudo-encodings.
    
    - Implement resizing of desktop pseudo-encoding.
    
    - Also send lowest (fastest) compression level pseudo-encoding.
      Ought be user tweakable.

commit 8a8370060eb1ddc44f4ff80459b066959c3f06ba
Author: Joel Martin <github@martintribe.org>
Date:   Thu Jun 10 12:11:13 2010 -0500

    More dynamic encoding list handling.

commit c3d28aabe4c248b6020bf3122ce48970b4f1c716
Author: Joel Martin <github@martintribe.org>
Date:   Wed Jun 9 17:50:06 2010 -0500

    base64 encode instead of escaping images.

commit 0664669ce9db012fe8e86e8ea2a0aae3604e9500
Author: Joel Martin <github@martintribe.org>
Date:   Wed Jun 9 15:40:46 2010 -0500

    Almost double firefox tight_png render performance.
    
    When extracting the data URI info, much more efficient in firefox to
    iterate and push onto an array, then to generate the whole array at
    once using the map function.
    
    Chrome is mostly unaffected by this change (might be slightly better).

commit 29cb15f9caf3130260dc5d3e64235f77e21d89dc
Author: Joel Martin <github@martintribe.org>
Date:   Wed Jun 9 15:00:32 2010 -0500

    TIGHT_PNG encoding and timing refactor.
    
    Also, generate encodings array to send from a list of encodings
    instead of being hardcoded generator function.

commit af183e63f558478d102cb6d68103b66ce0e44b4b
Author: Joel Martin <github@martintribe.org>
Date:   Tue Jun 8 11:20:03 2010 -0500

    update failed state on WS onerror.
    
    Also, slightly faster non-base64 (UTF-8) decode.

commit 97df09b9f18c95660c344e2091d82804c67952a8
Author: Joel Martin <github@martintribe.org>
Date:   Mon Jun 7 14:36:26 2010 -0500

    Output count for multi-packet decodes.

commit 9a09b636e748a62e43ce908333819ac967941eb1
Author: Joel Martin <github@martintribe.org>
Date:   Mon Jun 7 13:47:44 2010 -0500

    Add UTF-8 wire encoding support to C wsproxy.

commit 7210e79e04b5cedbef455438f2e93819dcea2cd1
Author: Joel Martin <github@martintribe.org>
Date:   Mon Jun 7 12:47:02 2010 -0500

    Move wsproxy and web utils into utils/ subdir.

commit 9e61a9c6f0ac8381b8197ce68f2a570fd6f52dfd
Author: Joel Martin <github@martintribe.org>
Date:   Mon Jun 7 12:44:02 2010 -0500

    C wsproxy: seq numbers and decode multiple frames.

commit 8e1aa95ba31b9b7596df604a97a06bebc14da279
Author: Joel Martin <github@martintribe.org>
Date:   Fri Jun 4 17:10:06 2010 -0500

    First pass at working C wsproxy.
    
    No sequence numbering and only support b64encoding at the moment.

commit 14355cb212fe690f8192f41aa4f67ea9a91d2ddd
Author: Joel Martin <github@martintribe.org>
Date:   Fri Jun 4 13:51:21 2010 -0500

    Give better exception feedback in message handler.

commit 30298582d0f77b3d81455fed3acec1804abf5e68
Author: Joel Martin <github@martintribe.org>
Date:   Thu Jun 3 16:11:21 2010 -0500

    Add 'tight' encoding to TODO list. Add rfb proto link.

commit 2e041cf225637c19a82822747362c145fe8ed824
Author: Joel Martin <github@martintribe.org>
Date:   Thu Jun 3 09:28:44 2010 -0500

    Fix Alt keysym.
    
    From kevinychan/vnc-html5 ebfffdc36.

commit 4f0da9ef84876007c817a383435ed562c0651560
Author: Joel Martin <github@martintribe.org>
Date:   Thu Jun 3 08:39:42 2010 -0500

    Clarify examples.

commit 1aa950625121e4db4bdb9f0ae71d1e40e22a87eb
Author: Joel Martin <github@martintribe.org>
Date:   Wed Jun 2 17:28:28 2010 -0500

    Explain VNC_uri_prefix in README.md.

commit d0e01e064ca4c6f6dac3eb4602cb840483b049d3
Author: Joel Martin <github@martintribe.org>
Date:   Wed Jun 2 17:18:46 2010 -0500

    Update README.md to reflect separate default controls file.

commit 913083993baa211510d3e4cd9b16ca9c97703950
Author: Joel Martin <github@martintribe.org>
Date:   Wed Jun 2 17:08:25 2010 -0500

    Direct example. Move all DOM code default_controls.js.
    
    Move DOM manipulation into include/default_controls.js and update
    vnc.html to use it.
    
    Add an example vnc_auto.html which automatically connects using
    parameters from the query string and doesn't use default_controls.js.
    
    Reorder functions in vnc.js to put external interface functions at the
    top of the RFB namespace.

commit 325d9eb7f39ed4fdc8b0c275bccee94773563ae1
Author: Joel Martin <github@martintribe.org>
Date:   Tue Jun 1 17:58:14 2010 -0500

    Add --record option to wsproxy.py.

commit d41c33e4b7b3a20784c26c93927b9c864498e4e5
Author: Joel Martin <jmartin@sentryds.com>
Date:   Tue Jun 1 14:34:27 2010 -0500

    Add colour map support (non-true-color).
    
    In colourMap mode there are 256 colours in a colour palette sent from
    the server via the SetColourMapEntries message. This reduces the
    bandwidth by about 1/4. However, appearance can be somewhat less than
    ideal (pinks instead of gray, etc).
    
    It also increases client side rendering performance especially on
    firefox. Rendering a full 800x600 update takes about 950ms in
    firefox on my system compared to about 1400ms. Round-trip time for
    a full frame buffer update is even better on firefox (due to
    performance of the flash WebSocket emulator). Reduced from about
    1800ms to 1100ms on firefox (for 800x600 full update).

commit 507b473a2e6eff399ec5dbf805746c14d34aeff5
Author: Joel Martin <jmartin@sentryds.com>
Date:   Fri May 28 15:39:38 2010 -0500

    Test non-base64 (straight UTF-8) encoding.
    
    Also add a wsencoding test client/server program to test send a set of
    values between client and server and vice-versa to test encodings.
    
    Not turned on by default.
    
    Add support for encode/decode of UTF-8 in the proxy. This leverages
    the browser for decoding the WebSocket stream directly instead of
    doing base64 decode in the browser itself.
    
    Unfortunately, in Chrome this has negligible impact (round-trip time
    is increased slightly likely due to extra python processing).
    
    In firefox, due to the use of the flash WebSocket emulator the
    performance is even worse. This is because it's really annoying to get
    the flash WebSocket emulator to properly decode a UTF-8 bytestream.
    The problem is that the readUTFBytes and readMultiByte methods of an
    ActionScript ByteArray don't treat 0x00 correctly. They return
    a string that ends at the first 0x00, but the index into the ByteArray
    has been advanced by however much you requested.
    
    This is very silly for two reasons: ActionScript (and Javascript)
    strings can contain 0x00 (they are not null terminated) and second,
    UTF-8 can legitimately contain 0x00 values. Since UTF-8 is not
    constant width there isn't a great way to determine if those methods
    in fact did encounter a 0x00 or they just read the number of bytes
    requested.
    
    Doing manual decoding using readUTFByte one character at a time slows
    things down quite a bit. And to top it all off, those methods don't
    support the alternate UTF-8 encoding for 0x00 ("\xc0\x80"). They also
    just treat that encoding as the end of string too.
    
    So to get around this, for now I'm encoding zero as 256 ("\xc4\x80")
    and then doing mod 256 in Javascript. Still doesn't result in much
    benefit in firefox.
    
    But, it's an interesting approach that could use some more exploration
    so I'm leaving in the code in both places.

commit c3996e24f56fc6a7055afca5a6fb8cf07e6bafb0
Author: Joel Martin <jmartin@sentryds.com>
Date:   Fri May 28 15:29:36 2010 -0500

    Round-trip timing for first full FBU.

commit d38406e6b5f4517714f02bc0d0f81eb44e6dc6f7
Author: Joel Martin <jmartin@sentryds.com>
Date:   Fri May 28 14:10:57 2010 -0500

    Fix web-socket-js: encode sent data across FABridge.

commit af6b17ce06622abf41573017e2163746f6ac1d7d
Author: Joel Martin <github@martintribe.org>
Date:   Wed May 26 15:43:00 2010 -0500

    Change license to LGPL-3 and add some implementation notes.
    
    The purpose of the code is to be incorporated into other web projects
    (whether those are free or not). AGPL prevents combination with other
    HTML and javascript that is under a weaker (or proprietary) license.
    Better would be a lesser AGPL, but there is not GNU standard for that.
    So LGPL-3 meets most of my requirements. If somebody modifies the
    actual client code and conveys it, then they must release the changes
    under LGPL-3 also.
    
    Add some implementation notes in docs/notes.

commit 32eb5d7cb0985b0fddf4727ce4fd2ca269a90153
Author: Joel Martin <github@martintribe.org>
Date:   Tue May 25 11:09:34 2010 -0500

    Use relative include path in tests.

commit a575a383fb4c7c5e6912e5bbf02f4dc4e19ba12e
Author: Joel Martin <github@martintribe.org>
Date:   Tue May 25 11:05:55 2010 -0500

    Add mouse wheel support and input test page.

commit 7f4f41b0c7d936d6938b803163984da8b21ab30a
Author: Joel Martin <github@martintribe.org>
Date:   Thu May 20 17:13:59 2010 -0500

    Don't shift off subencoding in hextile.

commit 8fe2c2f91523a165daab89358e13424251da82d8
Author: Joel Martin <github@martintribe.org>
Date:   Mon May 17 17:11:13 2010 -0500

    Fix web-socket-js loading issue.

commit 97763d0eb8ee0610b818506327481c11a0397ebb
Author: Joel Martin <github@martintribe.org>
Date:   Mon May 17 10:18:37 2010 -0500

    Double Chrome hextile perf again. Add canvas test.
    
    - By dereferencing the 'data' field of the imageData object before the
      loop, the hextile performance on Chrome is down to 140ms or so for
      a full 800x600 update. Still have to fall back to Canvas operations
      for firefox.
    
    - Fix RQ empty after reorder bug.

commit 3c1bead9a0d2c1e7427f6ab1815df7f009e595ab
Author: Joel Martin <github@martintribe.org>
Date:   Sun May 16 19:58:51 2010 -0500

    Add styling classes for status line state.

commit b92e282ad73da06aa87dca0be854653ee062ea01
Author: Joel Martin <github@martintribe.org>
Date:   Sun May 16 19:23:44 2010 -0500

    Add back canvas.html test page to tests subdir.

commit af180155a8c997bfc5e353bf9a696457405b2b79
Author: Joel Martin <github@martintribe.org>
Date:   Sun May 16 19:21:21 2010 -0500

    Create FABridge tester. Move wstest into tests subdir.

commit 8acfc8cf52ba6be83b19217fe7da479abb820ffa
Author: Joel Martin <github@martintribe.org>
Date:   Sun May 16 17:51:00 2010 -0500

    Change wstest.html 'cnt' to 'seq'.

commit f9583f1f98516f153349bca5494fc456fd38a2c7
Author: Joel Martin <github@martintribe.org>
Date:   Sat May 15 15:45:09 2010 -0500

    Move canvas.js to include/canvas.js.

commit 67b24a90200f2361ef638134e93769625459655c
Author: Joel Martin <github@martintribe.org>
Date:   Sat May 15 15:25:10 2010 -0500

    Support 3.7.

commit 56ec48bec816a62b33d40bf899aa66a394665a74
Author: Joel Martin <github@martintribe.org>
Date:   Sat May 15 14:55:33 2010 -0500

    Move vars into RFB namespace. Extend array in util.js.

commit c4164bda1d1d2ddb3e9589e1e99ee1e53f934a05
Author: Joel Martin <github@martintribe.org>
Date:   Sat May 15 14:28:55 2010 -0500

    JSLint and "use strict".

commit 753bde8f538c450cb4f5d3b66b4b7d57d64b089d
Author: Joel Martin <github@martintribe.org>
Date:   Sat May 15 12:38:50 2010 -0500

    Cleanup output, trap exceptions, timing output, fixes.
    
    Fixes:
    - Make sure that failed state messages stay around until next connect.
    - Get status message font colors working.
    - Clear RQ_reorder list on re-connect.

commit 3875f847f1a321c86c9e37d4739a6189bd3b15fa
Author: Joel Martin <github@martintribe.org>
Date:   Sat May 15 12:27:44 2010 -0500

    Double hextile rendering performance in Chrome.
    
    - For webkit engines, do array manipulation for each tile subrectangle
      and only use the array for putImageData after rendering is finished.
    
    In Chrome 5.0.375.29 beta, the time to render a full 800x600 hextile
    image dropped from 500ms to 250ms or so. Firefox 3.5.3 rendering of
    a full 800x600 hextile image is about 2300ms.

commit 0a72cf90267ba3e2278633db5e33451061155b03
Author: Joel Martin <github@martintribe.org>
Date:   Sat May 15 12:14:30 2010 -0500

    Reset client_settings on connect.
    
    - Otherwise client_setting carry over from other connections.

commit 71d2426a8e9993a1793828cf06290d446dfd2cdc
Author: Joel Martin <github@martintribe.org>
Date:   Wed May 12 09:39:38 2010 -0500

    Rename HTML5-VNC to noVNC.

commit dcd950a044ad888f6880d53ef66ba4785b67f8bb
Author: Joel Martin <github@martintribe.org>
Date:   Tue May 11 15:04:07 2010 -0700

    Mark include/plain.css as code.

commit 1c91712f84106d206d2232c9eb887ba7b9963514
Author: Joel Martin <github@martintribe.org>
Date:   Tue May 11 17:00:42 2010 -0500

    Add some links to related project sites.

commit 3a5ddcf73751618cea06d3e2cbd53e1c56c55c26
Author: Joel Martin <github@martintribe.org>
Date:   Tue May 11 16:58:36 2010 -0500

    Pull and modify stylesheet from kevinykchan/vnc-html5.
    
    Pull and modify vnc.css version
    b747e284c0e417df1599b1d95724518b07be8df6 to include/black.css

commit db504ade0c87be366f1d29dd34a614d9d89a0a87
Author: Joel Martin <github@martintribe.org>
Date:   Tue May 11 16:39:17 2010 -0500

    Isolate DOM references in load() and connect().
    
    - Other misc cleanups.

commit ded9dfae10198ea143c6143e063921d166fbebd1
Author: Joel Martin <github@martintribe.org>
Date:   Tue May 11 16:13:52 2010 -0500

    Styling/integration refactoring.
    
    - Instead of onload override, move to RFB.load function that takes
      a parameter for the target DOM ID. This allows the user to have
      their own onload function.
    
    - Add "VNC_" prefix to all element ID names. Only create DOM elements
      if they don't already exist on the page, otherwise use the existing
      elements.
    
    - Move all styling to separate stylesheet.
    
    - Use list model for control styling.

commit 3a2fafac9b6475cb2674b03764fd43e3e31ae9bc
Author: Joel Martin <github@martintribe.org>
Date:   Tue May 11 10:01:21 2010 -0500

    Add and clarify licensing.

commit 92f572a2491348a4dee4cab7081903e6c4b08695
Author: Joel Martin <github@martintribe.org>
Date:   Tue May 11 09:25:29 2010 -0500

    Fix wsproxy CPU usage without affecting latency.
    
    Instead of selecting on everything every time, only select the writers
    that we have items queued for. Most of the time the writers are ready
    so if we select on them even when we don't have anything to send we
    will fall into a tight loop.

commit 4ce2696d52f8599bef23cf1805581e4e1770c94f
Merge: 2cec49d 3ec5d7c
Author: Joel Martin <github@martintribe.org>
Date:   Tue May 11 09:23:55 2010 -0500

    Merge branch 'merge_kevinykchan'
    
    Conflicts:
    	wsproxy.py
    
    Fix auth mode selection typo.

commit 3ec5d7c0a3c74cf123cbfa68747f66c917eb5e1f
Author: Kevin Chan <kevin@yinkei.com>
Date:   Tue May 11 04:45:46 2010 +0800

    Addresses issue where wsproxy utilizes 100% CPU. The process now rarely goes over 2%

commit 2cec49d4392cae67d04af2e2b48645e4ccfd5500
Author: Kevin Chan <kevin@yinkei.com>
Date:   Tue May 11 04:55:47 2010 +0800

    If no password is provided, defaults to use no auth

commit 97bfe5ba25fee6894aa0bf157b493b62870a4d48
Author: Joel Martin <github@martintribe.org>
Date:   Thu May 6 17:08:53 2010 -0500

    Move controls to vnc.js, make vnc.html very simple.

commit fc7d416ee4b3663dd22e3942084ce198c3da80f7
Author: Joel Martin <github@martintribe.org>
Date:   Thu May 6 10:57:16 2010 -0500

    Ignore python bytecode files.

commit 05e5cb7da0f4e52308b07caf67eefbc71ae37cb4
Author: Joel Martin <github@martintribe.org>
Date:   Thu May 6 10:54:36 2010 -0500

    Fix same for server side (no expected count complaint).

commit 0340f8b6b1ae1ee2d44cea876a195cdfa28bc724
Author: Joel Martin <github@martintribe.org>
Date:   Thu May 6 10:53:09 2010 -0500

    Don't complain about expected count on stop.

commit f8ee7b489df25ab3df492ebbf02b1a7e185b606f
Author: Joel Martin <github@martintribe.org>
Date:   Thu May 6 10:52:04 2010 -0500

    Encryption suppport for wstest.

commit 95ef30a16771832775545e0316ad1d4f362aa0f1
Author: Joel Martin <github@martintribe.org>
Date:   Thu May 6 10:32:07 2010 -0500

    websocket.py: generic code from wsproxy and wstest.

commit c539e4dcdadc79819ed56a57b5a70c3c4c4e31a7
Author: Joel Martin <github@martintribe.org>
Date:   Wed May 5 15:40:05 2010 -0500

    DES that works with KVM's VNC. RFB 3.8 fixes.

commit ef764d3b9baa8f5385f3ce218a2590d663d4781c
Author: Joel Martin <github@martintribe.org>
Date:   Sun May 2 14:19:13 2010 -0500

    Support for RFB 3.8 handshake.

commit 5aca52e18d92d45946774861a69265608a79dba6
Author: Joel Martin <github@martintribe.org>
Date:   Sat May 1 15:59:52 2010 -0500

    Cleanup. Move note files into docs/.

commit adfe6ac16619e9f4f34a08c34972a8f9d1a43564
Author: Joel Martin <github@martintribe.org>
Date:   Fri Apr 30 16:41:09 2010 -0500

    Support for SSL/TLS ('wss://') on both sides.
    
    On the client side, this adds the as3crypto library to web-socket-js
    so that the WebSocket 'wss://' scheme is supported which is WebSocket
    over SSL/TLS.
    
    Couple of downsides to the fall-back method:
    
        - This balloons the size of the web-socket-js object from about 12K to 172K.
    
        - Getting it working required disabling RFC2718 web proxy support
          in web-socket-js.
    
        - It makes the web-socket-js fallback even slower with the
          encryption overhead.
    
    The server side (wsproxy.py) uses python SSL support. The proxy
    automatically detects the type of incoming connection whether flash
    policy request, SSL/TLS handshake ('wss://') or plain socket
    ('ws://').
    
    Also added a check-box to the web page to enable/disabled 'wss://'
    encryption.

commit ca5785f5701d9b1fe0ccd53fc9adcc8ef61d4e1b
Author: Joel Martin <github@martintribe.org>
Date:   Fri Apr 30 15:54:59 2010 -0500

    Automatically detect TLS/SSL during handshake.
    
    Use MSG_PEEK flag on recv to detect whether we are getting a flash
    policy request, an SSL/TLS header, or a plain socket connection.

commit 0e486e1ba01c9933c72f535305228068f0243bfa
Author: Joel Martin <github@martintribe.org>
Date:   Fri Apr 30 14:13:32 2010 -0500

    Import as3crypto_patch: ffda6e9cd8b1d74f45472c676afda8360ae1e5aa
    
    as3crypto is actionscript 3 crypto library with TLS engine support.
    
    From: http://github.com/lyokato/as3crypto_patched
    
    Which was forked from: http://code.google.com/p/as3crypto/

commit 7b99f70bd09c0e751a8459ead2731da8e9444f0e
Author: Joel Martin <github@martintribe.org>
Date:   Mon Apr 19 10:46:48 2010 -0500

    Don't erase failed state error messages on disconnect.

commit 0166284a64eedc164a90c863880e70d4b1261425
Author: Joel Martin <github@martintribe.org>
Date:   Mon Apr 19 10:43:21 2010 -0500

    Also send errors to console.error

commit 1e633bc8eeef5e92f134ec0cf705a1f7644b9f93
Author: Joel Martin <github@martintribe.org>
Date:   Mon Apr 19 10:41:06 2010 -0500

    wstest*. Fix Opera problems. Flash policy. Misc bugs.
    
    Lame. Opera doesn't support javascript reduce().
    
    Also, Opera seems to just plain be pathetic when it comes to
    delivering the web-socket-js events. Around 1/5 to 1/3 of all received
    packets are never received as an event at all.
    
    - Change default delay for send side to 10ms.
    
    - Use a textarea for errors so that even without console.* support
      (ala firebug) we still see the errors that are happening.

commit 9e12c1a941ddb0b00f3ee975e54720bbfe568678
Author: Joel Martin <github@martintribe.org>
Date:   Sun Apr 18 20:57:34 2010 -0500

    README.md typo and clarify.

commit 1626e0f8f80c8ffdc334edcb1a44fd86caeee0d6
Author: Joel Martin <github@martintribe.org>
Date:   Sun Apr 18 20:53:54 2010 -0500

    Update README.md and TODO.

commit 07287cfd89d16f8fedbd619cebf7b9e50d025d74
Author: Joel Martin <github@martintribe.org>
Date:   Sun Apr 18 20:35:43 2010 -0500

    Send seq nums and b64 encode based on query string.
    
    Query string variable 'b64encode' determine if wsproxy b64 encodes the
    results. Variable 'seq_num' determines if sequence numbers are
    prepended. This way, sequence numbers are only used with the flash
    WebSocket proxy.

commit 8759ea6f90f5cdd00d86714990968a13b0947757
Author: Joel Martin <github@martintribe.org>
Date:   Sun Apr 18 18:43:03 2010 -0500

    Status/error refactor. Fix firefox bugs.
    
    - All state/status updates go through updateState routine which
      updates the status line also.
    
    - Old firefox (and opera) don't support canvas createImageData, so use
      getImageData as replacement.
    
    - Add console.warn and console.error stubs so that firefox without
      firebug doesn't crap out.
    
    - If no WebSockets then error if no flash or if URL is location (flash
      will refuse to load the object for security reasons).

commit 07f6ca751d6c4966735bc63ab756292eb6e122fc
Author: Joel Martin <github@martintribe.org>
Date:   Sun Apr 18 16:28:54 2010 -0500

    Remove mootools-more references.

commit 9fec75c08feda638f3c62f6979f7276cf0d37b30
Author: Joel Martin <github@martintribe.org>
Date:   Sun Apr 18 16:19:10 2010 -0500

    Fix firefox '-' key mapping.

commit d1616107c3f5dc970ccbf51e4839432fd714db5f
Author: Joel Martin <github@martintribe.org>
Date:   Sun Apr 18 16:17:27 2010 -0500

    Add fixing firefox '-' key mapping issue to TODO.

commit 10ae1427f81f752718d072c82eabea5dc9711e49
Author: Joel Martin <github@martintribe.org>
Date:   Sat Apr 17 17:53:28 2010 -0500

    Handle socket policy response in proxy itself.

commit 5d8e7ec0681bab89a54817f20e54916e6287dcdb
Author: Joel Martin <github@martintribe.org>
Date:   Sat Apr 17 17:16:08 2010 -0500

    Add web-socket-js support with packet re-ordering.
    
    - web-socket-js is from http://github.com/gimite/web-socket-js. It is
      a flash object that emultates WebSockets.
    
    Unfortunately, events (or packets) from the web-socket-js object can
    get re-ordered so we need to know the packet order.
    
    - So wsproxy.py prepends the sequence number of the packet when
      sending.
    
    - If the client receives packets out of order it queues them up and
      scans the queue for the sequence number it's looking for until
      things are back on track. Gross, but hey: It works!
    
    - Also, add packet sequence checking to wstest.*

commit d920595453ee6f1174d2e3ba598b2e82d013b637
Author: Joel Martin <github@martintribe.org>
Date:   Sat Apr 17 17:14:33 2010 -0500

    Import web-socket-js: a0fb3933ce5c824bcb882f5a1cf87e46de773ea8
    
    web-socket-js is a flash based WebSockets emulator.
    
    From: http://github.com/gimite/web-socket-js

commit 5d2c38640015ad09c4073937ff15dd8c15aef3bc
Author: Joel Martin <github@martintribe.org>
Date:   Fri Apr 16 16:34:19 2010 -0500

    Reassemble partial client packets in wsproxy.py

commit af7a3193878f13e7300366239248418a830c5e6e
Author: Joel Martin <github@martintribe.org>
Date:   Fri Apr 16 15:53:59 2010 -0500

    Assemble partial received frames.
    
    Apparently both native and flash WebSockets implementations can send
    partial packets.

commit 89fbd66fa99ee484dacb7f9b1c9f38fe79a8f3ce
Author: Joel Martin <github@martintribe.org>
Date:   Fri Apr 16 13:58:08 2010 -0500

    Add WebSockets test frontend and backend.

commit 14b665f1da72288424b3251d360ad69da6102bc3
Author: Joel Martin <github@martintribe.org>
Date:   Thu Apr 15 12:28:53 2010 -0500

    Remove uneeded mootools functions and used compressed version.

commit 7345dba44c029d513f28079f0f45f0555b60a58c
Author: Joel Martin <github@martintribe.org>
Date:   Thu Apr 15 11:14:42 2010 -0500

    Clarify DES code origination.

commit b5537b60b040b804060b9e5cc46a85f1132f840e
Author: Joel Martin <github@martintribe.org>
Date:   Thu Apr 15 11:01:40 2010 -0500

    Switch to MPL/GPL base64 from Mozilla.
    
    - Also slightly better performance.

commit 1a623f75024ea237266258722c6827b40ffe9b09
Author: Joel Martin <github@martintribe.org>
Date:   Thu Apr 15 10:16:30 2010 -0500

    Update TODO and small perf cleanups.

commit 30059bdf247afac47b47f89fdb29a35bef5875c6
Author: Joel Martin <github@martintribe.org>
Date:   Thu Apr 15 01:40:03 2010 -0500

    Add cut and paste support.
    
    - A textarea below the VNC area represents the state of the current
      VNC clipboard. If there is a server cut event, the textarea will be
      updated. If the user updates the contents of the textarea, the new
      data will be sent as a client paste (cut) event.
    
    - One important change was to detect if the clipboard is focused and
      allow the user to type in the clipboard instead of in the VNC area.

commit 66a529d70aa7177a9ea8af6f0d1aa0eba9945aea
Author: Joel Martin <github@martintribe.org>
Date:   Wed Apr 14 23:42:38 2010 -0500

    In TODO: RRE framing bug fixed in prev refactor.

commit 1098b5bf016d3d0fa38ad13b0084ae5f6c25288b
Author: Joel Martin <github@martintribe.org>
Date:   Wed Apr 14 23:41:12 2010 -0500

    Refactor FBU.bytes handling to simplify.
    
    - raw encoding displays horizontal lines as they arrive for better
      feedback and less time hanging waiting for something.

commit 6321aff0cf657596facbdfe9d2d84486ea847873
Author: Joel Martin <github@martintribe.org>
Date:   Wed Apr 14 23:40:29 2010 -0500

    stop routine stops mouseMove events too.

commit 9e5065ab83c4add141cb68105d4f8dae8b6fb791
Author: Joel Martin <github@martintribe.org>
Date:   Wed Apr 14 13:33:27 2010 -0500

    Note WSS/SSL and C wsproxy in TODO.

commit 503c6c5be907cd00e8136e0f060bd250e65d7ffd
Author: Joel Martin <github@martintribe.org>
Date:   Wed Apr 14 13:03:18 2010 -0500

    Add TODO.

commit 8cf206154cbcac6163498f295cdd7afd6e6f2f7f
Author: Joel Martin <github@martintribe.org>
Date:   Wed Apr 14 12:44:47 2010 -0500

    Working VNC client! Add mouse movement support.
    
    - Mouse movements are accumulated and sent about 5 times a second.
    - Normal polling happens at about 1.5 seconds intervals.
    
    This commit represents a very functional VNC client under Google
    Chrome.
    
    Remaining work:
    
        - Cut and paste support.
    
        - Framing bugs when using RRE encoding.
    
        - Better status and error feedback.
    
        - Get working in firefox using flash web-socket-js:
            http://github.com/gimite/web-socket-js
    
        - Version without mootools (but test cross-browser).

commit 48ebcdb1104362840560e8b65034208c9f6ef72a
Author: Joel Martin <github@martintribe.org>
Date:   Wed Apr 14 12:22:47 2010 -0500

    Rename canvas.js routines to not have "rfb" prefix.
    
    - Also, try making set fillStyle called less often.

commit 31af85b99659da0072271ae5a8a7213e2605c86b
Author: Joel Martin <github@martintribe.org>
Date:   Wed Apr 14 12:13:59 2010 -0500

    Don't clear canvas if debug mode

commit 28a5f293573a28426a86c46a68fd73eb847423e0
Author: Joel Martin <github@martintribe.org>
Date:   Wed Apr 14 12:10:23 2010 -0500

    Re-order routines, no functional changes.

commit fb99d81cccc469b0457c877cd726ffb15c3179b6
Author: Joel Martin <github@martintribe.org>
Date:   Wed Apr 14 12:03:01 2010 -0500

    Better hextile performance: index subrects instead of slicing/shifting.
    
    - Many times better performance. Before this, browser was spending all
      it's time garbage collecting or doing something. Now the bottleneck
      is in set fillStyle and fillRect which is probably where it should
      be.

commit 410960bac8167d9b9e5ae9d1a3275e24684440b0
Author: Joel Martin <github@martintribe.org>
Date:   Wed Apr 14 11:28:29 2010 -0500

    Fix some framing bugs. Cleanup console logs.

commit 484a4696aaf2bb4281e63ab6508cbc034dde3998
Author: Joel Martin <github@martintribe.org>
Date:   Wed Apr 14 09:48:46 2010 -0500

    Refactor data processing. Ignore other server messages.
    
    - Refactor to pull off all the data received into RFB.d array and then
      process it. This allows a bit more flexibility in handling
      data that isn't sent in frame boundary packets.
    
    - Properly ignore these server messages: SetColourMapEntries, Bell,
      ServerCutText.

commit d064769ccf6ce891e27c23b9b8a2e0b3d3b1766b
Author: Joel Martin <github@martintribe.org>
Date:   Tue Apr 13 17:39:01 2010 -0500

    Initial mouse support. Down and Up only.

commit 9f4af5a72268aefec684368e35e233585ade6f3d
Author: Joel Martin <github@martintribe.org>
Date:   Tue Apr 13 12:59:11 2010 -0500

    Hextile working. Improve latency by coallescing sends.
    
    - Hextile has an undocumented weirdness where RAW frames are often
      followed by a 0 byte that should be ignored.
    
    - Coallesce client messages that are one after another. Without
      this the server seems to often ignore frames that are send right
      after another frame has been sent. This fixes a reconnect issue
      where setEncodings seems to be ignored. Also results in a huge
      performance increase after key strokes (by adding a update request
      to the key event message) because the server always sends an update
      instead of sometimes waiting for the next poll to be sent.

commit 2bcb2d5b15237489fa905ce9293d3ed1af925b33
Author: Joel Martin <github@martintribe.org>
Date:   Tue Apr 13 09:39:29 2010 -0500

    Remove event handlers on disconnect.

commit b7ec54870aa910975b18c5b164ad0564adece34d
Author: Joel Martin <github@martintribe.org>
Date:   Tue Apr 13 09:28:53 2010 -0500

    Switch to much faster console.log and separate utils into util.js.

commit 0f628064990c823d5c77cb7750f08ac473cb879e
Author: Joel Martin <github@martintribe.org>
Date:   Mon Apr 12 13:21:44 2010 -0500

    Refactor processing to allow hextile processing.
    
    With hextile you can't know how many bytes are pending. So restructure
    so that all the received data so far is passed to the processsing
    routines.

commit f7618085405c3198ff2433fa96e88bed6322a7a1
Author: Joel Martin <github@martintribe.org>
Date:   Mon Apr 12 11:46:43 2010 -0500

    Process RRE in chunks instead of 1 at a time.

commit cf67217cbf4be43c05ef3efbd88a3ad8b47744b4
Author: Joel Martin <github@martintribe.org>
Date:   Mon Apr 12 11:21:03 2010 -0500

    Change to RGB ordering.

commit 6dab56f91447c818bb6e5751a777da43a6f28321
Author: Joel Martin <github@martintribe.org>
Date:   Mon Apr 12 11:08:40 2010 -0500

    Working RRE implementation.

commit ed7e776db24b0d97768f2f5a19915f9ee3da381e
Author: Joel Martin <github@martintribe.org>
Date:   Sun Apr 11 23:11:21 2010 -0500

    First pass at RRE encoding

commit d628147bca6bbfd879ad2d5b60417c83683bf685
Author: Joel Martin <github@martintribe.org>
Date:   Sat Apr 10 15:52:27 2010 -0400

    WebWorkers example with two way messages.
    
    - Prime number background worker that can be started, stopped and
      reset that calculates prime numbers and sends them back to the main
      page/thread.

commit 85b7a7d4113e6019345a20edb8847e28bebee709
Author: Joel Martin <github@martintribe.org>
Date:   Sat Apr 10 15:52:08 2010 -0400

    Handle undefined URL values correctly.

commit 4b835baeb95b0d4ed93c273748157035fb70a40c
Author: Joel Martin <github@martintribe.org>
Date:   Sat Apr 10 12:00:35 2010 -0400

    Change depth to count down correctly. Trim long lines.

commit 48617e27bc6ea699d64806dfc0a91c3420472685
Author: Joel Martin <github@martintribe.org>
Date:   Tue Apr 6 22:44:12 2010 -0500

    Fix Copy-Rect encoding.

commit f6515e3e35d41d8f02e8809ad78db9f9cc222251
Author: Joel Martin <github@martintribe.org>
Date:   Tue Apr 6 21:50:26 2010 -0500

    Make web.py match README. Remove unused ws_echo.py.

commit d63e1462099af41262ca1273b74f5597e2f59ef3
Author: Joel Martin <github@martintribe.org>
Date:   Tue Apr 6 21:37:35 2010 -0500

    List for proxy reasons.

commit 5aeb98801bafe847d844df9481726f229c909186
Author: Joel Martin <github@martintribe.org>
Date:   Tue Apr 6 21:34:56 2010 -0500

    Change to markdown README.md.
    
    - Semi-colon missing.

commit 0dddd6e47e64f6fada592d61f81267b2a40c34be
Author: Joel Martin <github@martintribe.org>
Date:   Tue Apr 6 21:06:46 2010 -0500

    Add README.

commit 0385e011710253521b20f61ffc2d05b407885a27
Author: Joel Martin <github@martintribe.org>
Date:   Tue Apr 6 20:14:11 2010 -0500

    Remove old test files.

commit cc0410a39ba7d764d5f42bc601bb26f4ca9dac79
Author: Joel Martin <github@martintribe.org>
Date:   Tue Apr 6 16:44:45 2010 -0500

    Cleanup of files and vnc.js namespace.
    
    - Trim unused code in base64.js

commit d9cbdc7d85bf406bf70b1ba32f59766955328bc2
Author: Joel Martin <github@martintribe.org>
Date:   Tue Apr 6 16:24:09 2010 -0500

    Create getKeysym to lookup keysym from keyCode.
    
    - Most of the keyboard is now functional.

commit 71085485e747c1996fd218c4a003852a57ce119b
Author: Joel Martin <github@martintribe.org>
Date:   Tue Apr 6 13:58:06 2010 -0500

    Fix canvas.html.

commit 532a9fd92e7e10cd16380824465e3d7e17637014
Author: Joel Martin <github@martintribe.org>
Date:   Tue Apr 6 13:49:49 2010 -0500

    Better interface, support user provided VNC password.
    
    - host, port and password input boxes (populated by URL values).
    - clear canvas on disconnect.
    - Dotted border around VNC area.
    - mirror bits for VNC password.

commit 8580b9897935133efe1529167506134d6a4a7a55
Author: Joel Martin <github@martintribe.org>
Date:   Tue Apr 6 10:35:25 2010 -0500

    Got DES encryption of password working and colors corrected.
    
    - DES encryption for VNC bit mirrors every bytes of the password. This
      commit has a hard-coded mirrored password. Need to ask user and bit
      mirror it.
    
    - With image data across the wire it's Blue,Green,Red, so twiddle
      things around a bit.

commit 64ab5c4ded8d25fd39bb6a8b9f6fa8362c2b32b6
Author: Joel Martin <github@martintribe.org>
Date:   Mon Apr 5 23:54:30 2010 -0500

    Working with Raw rectangles and capital letter keys.

commit c8460b0310941f15484daf8505770df59ed71b14
Author: Joel Martin <github@martintribe.org>
Date:   Sun Apr 4 16:08:55 2010 -0500

    Cleanup canvas and vnc code so they can be used together.

commit f272267bf7a7af3d33679fd8991f982a34932130
Author: Joel Martin <github@martintribe.org>
Date:   Sun Apr 4 15:46:39 2010 -0500

    Add Canvas and event experiments.
    
    Correctly handles all three mouse buttons and key presses on firefox
    and Chrome.
    
    Has a decent obj properties lister (dirObj).

commit 489d167643f6dbdb6cf1351da22760dc1c421355
Author: Joel Martin <github@martintribe.org>
Date:   Fri Apr 2 19:17:46 2010 -0500

    Do base64 encode/decode of stream. Send SetEncoding and FB update request.

commit a793fa460f1ee32c947950737fcca4d60d3481f5
Author: Joel Martin <github@martintribe.org>
Date:   Fri Apr 2 19:17:01 2010 -0500

    Base64 Javascript encode/decode library.
    
    From http://www.webtoolkit.info/

commit 9ec97d86351171a79ddb99a5c70caef8d68143a5
Author: Joel Martin <github@martintribe.org>
Date:   Fri Apr 2 19:16:25 2010 -0500

    Base64 encode/decode for client Javascript.

commit 65e27ddd4c439b2e5cf27d9a410a84ba62b3b98d
Author: Joel Martin <github@martintribe.org>
Date:   Thu Apr 1 11:36:22 2010 -0500

    First RFB protocol stub implementation.
    
    - Requires wsproxy to proxy to the VNC server.

commit f9d45665470f8742c26be211bfc82bf9e37f97b6
Author: Joel Martin <github@martintribe.org>
Date:   Wed Mar 31 19:44:48 2010 -0500

    Add minimal python directory web server.

commit 8b945f2a94043e9c16205bd0092869371bf8a9de
Author: Joel Martin <github@martintribe.org>
Date:   Wed Mar 31 19:43:09 2010 -0500

    Add RFB specs and move *.js files into include/

commit ce0e28c7d9e359c1244e4e0d9073d2b93949aba9
Author: Joel Martin <github@martintribe.org>
Date:   Wed Mar 31 19:37:49 2010 -0500

    Some wsproxy simplifications.

commit 3292c4a995b68052adc6da81b1e0e87666c0ee74
Author: Joel Martin <github@martintribe.org>
Date:   Wed Mar 31 18:21:03 2010 -0500

    Web Socket to TCP socket proxy and HTML interface.
    
    - wsproxy.py: creates a web sockets to TCP socket proxy.
    - interact.html: prints received Web Sockets data and has text box to
      send strings.

commit feb4e5f801885b4d14d0ebeac7fcf6bc8873b0b6
Author: Joel Martin <github@martintribe.org>
Date:   Wed Mar 31 18:20:48 2010 -0500

    Simplify ws_echo.py code.

commit 033df68db1bc4df5f49ffe17ae63174acd907ce6
Author: Joel Martin <github@martintribe.org>
Date:   Wed Mar 31 15:25:13 2010 -0500

    Simpler non-threaded ws_echo.py

commit 5505589604ea61215977c63218223aeabbd3ff33
Author: Joel Martin <github@martintribe.org>
Date:   Wed Mar 31 15:24:43 2010 -0500

    Note enter into ws onclose.

commit 77c58e19ad9567c68d0812b6c933842b37e848f1
Author: Joel Martin <github@martintribe.org>
Date:   Wed Feb 17 14:54:38 2010 -0600

    Add server and client HTML echo test and mootools library
