1. 29 Sep, 2010 1 commit
    • Joel Martin's avatar
      des.js: remove decrypt and simplify. · 12d2e7c1
      Joel Martin authored
      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.
      12d2e7c1
  2. 25 Sep, 2010 1 commit
    • Joel Martin's avatar
      Show rect/enc counts, add vnc_perf.html test. · a679a97d
      Joel Martin authored
      - 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.
      a679a97d
  3. 24 Sep, 2010 1 commit
  4. 23 Sep, 2010 4 commits
    • Joel Martin's avatar
      Refactor settings object, add connectTimeout setting. · ff36b127
      Joel Martin authored
      - 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.
      ff36b127
    • Joel Martin's avatar
      rfb.js: wait for SecurityResult failure reason bytes. · aa787069
      Joel Martin authored
      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.
      aa787069
    • Joel Martin's avatar
      Misc cleanup: debug logging, record filename, etc. · 005d9ee9
      Joel Martin authored
      - 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.
      005d9ee9
    • Joel Martin's avatar
      util.js: detect firefox 4.X correctly. · 8787e49b
      Joel Martin authored
      Update the browser detection code (from mootools) with a fix that
      detects firefox 4.0 correctly.
      8787e49b
  5. 22 Sep, 2010 2 commits
  6. 20 Sep, 2010 1 commit
    • Joel Martin's avatar
      No local cursor by default due to issues #27, #29. · 31a837d5
      Joel Martin authored
      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.
      31a837d5
  7. 15 Sep, 2010 1 commit
  8. 11 Sep, 2010 3 commits
    • Joel Martin's avatar
      rfb.js: state refactor, add 'disconnect' state. · e3efeb32
      Joel Martin authored
      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).
      e3efeb32
    • Joel Martin's avatar
      web-socket-js (issue #37): close() when connecting · ac7bdbc2
      Joel Martin authored
      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.
      ac7bdbc2
    • Joel Martin's avatar
      gimite/web-socket-js issue #35: async onclose. · 071f2818
      Joel Martin authored
      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.
      071f2818
  9. 08 Sep, 2010 4 commits
    • Joel Martin's avatar
      License header cleanup. · 5f409eee
      Joel Martin authored
      5f409eee
    • Joel Martin's avatar
      web-socket-js: 9e7663771 build and remove source. · 2a6018df
      Joel Martin authored
      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.
      2a6018df
    • Joel Martin's avatar
      default_controls.js: Fix cursor setting init. · b5087acc
      Joel Martin authored
      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.
      b5087acc
    • Joel Martin's avatar
      JSLint. · d595e656
      Joel Martin authored
      d595e656
  10. 01 Sep, 2010 1 commit
  11. 31 Aug, 2010 2 commits
  12. 30 Aug, 2010 3 commits
  13. 27 Aug, 2010 3 commits
  14. 26 Aug, 2010 1 commit
    • Joel Martin's avatar
      Indexed receive queue. Up to 2X speedup in Chrome. · 67b4e987
      Joel Martin authored
      Generally, most servers send hextile updates as single updates
      containing many rects. Some servers send hextile updates as many small
      framebuffer updates with a few rects each (such as QEMU). This latter
      cases revealed that shifting off the beginning of the receive queue
      (which happens after each hextile FBU) performs poorly.
      
      This change switches to using an indexed receive queue (instead of
      actually shifting off the array). When the receive queue has grown to
      a certain size, then it is compacted all at once.
      
      The code is not as clean, but this change results in more than 2X
      speedup under Chrome for the pessimal case and 10-20% in firefox.
      67b4e987
  15. 11 Aug, 2010 1 commit
    • Joel Martin's avatar
      Treat RFB 3.6 as 3.3. · 1a5dd77d
      Joel Martin authored
      Apparently there are versions of UltraVNC that report version 3.6.
      This is not a legal version according to the spec, but we'll just
      force version 3.3 if we receive it. Thanks to Larry Rowe for the info.
      1a5dd77d
  16. 06 Aug, 2010 1 commit
    • Joel Martin's avatar
      Scroll render test and perf speedup. · 4ed717ad
      Joel Martin authored
      Turns out when Windows is running in QEMU and a window scroll happens,
      there are lots of little hextile rects sent. This is slow in noVNC.
      
      - Some recording/playback improvement.
      - Add test harness to drive playback of recordings.
      - By pulling off the rect header in one chunk we get a 3X speedup in
        Chrome and a 20% speedup in firefox (specifically for the scroll
        test).
      - Also, get rid of some noise from creating timers for handle_message.
        Check to make sure there isn't already a pending timer first.
      4ed717ad
  17. 04 Aug, 2010 3 commits
  18. 03 Aug, 2010 1 commit
  19. 02 Aug, 2010 2 commits
    • Joel Martin's avatar
      New API. Refactor Canvas and RFB objects. · 8db09746
      Joel Martin authored
      New API:
      
      To use the RFB object, you now must instantiate it (this allows more
      than one instance of it on the same page).
      
          rfb = new RFB(settings);
      
      The 'settings' variable is a namespace that contains initial default
      settings. These can also be set and read using 'rfb.set_FOO()' and
      'rfb.get_FOO()' where FOO is the setting name. The current settings
      are (and defaults) are:
          - target: the DOM Canvas element to use ('VNC_canvas').
          - encrypt: whether to encrypt the connection (false)
          - true_color: true_color or palette (true)
          - b64encode: base64 encode the WebSockets data (true)
          - local_cursor: use local cursor rendering (true if supported)
          - connectTimeout: milliseconds to wait for connect (2000)
          - updateState: callback when RFB state changes (none)
          - clipboardReceive: callback when clipboard data received (none)
      
      The parameters to the updateState callback have also changed. The
      function spec is now updateState(rfb, state, oldstate, msg):
          - rfb: the RFB object that this state change is for.
          - state: the new state
          - oldstate: the previous state
          - msg: a message associate with the state (not always set).
      
      The clipboardReceive spec is clipboardReceive(rfb, text):
          - rfb: the RFB object that this text is from.
          - text: the clipboard text received.
      
      Changes:
      
      - The RFB and Canvas namespaces are now more proper objects. Private
        implementation is no longer exposed and the public API has been made
        explicit. Also, instantiation allows more than one VNC connection
        on the same page (to complete this, DefaultControls will also need
        this same refactoring).
      
      - Added 'none' logging level.
      
      - Removed automatic stylesheet selection workaround in util.js and
        move it to defaultcontrols so that it doesn't interfere with
        intergration.
      
      - Also, some major JSLinting.
      
      - Fix input, canvas, and cursor tests to work with new model.
      8db09746
    • Joel Martin's avatar
      Catch exceptions in cursor detection. · 8171f4d8
      Joel Martin authored
      If cursor Data URI scheme detection threw an exception, it would cause
      canvas initialization to fail. cursor detection exceptions should just
      disable local cursor change support, not cause canvas init to fail.
      8171f4d8
  20. 30 Jul, 2010 1 commit
    • Joel Martin's avatar
      Preliminary scaling code (deactivated). · 125d8bbb
      Joel Martin authored
      Uses the CSS "scale()" operation. The main problem is that the DOM
      container is not rescaled, only the size of the displayed content
      within it so there will need to be some sort of mechanism to handle
      this better so other elements reflow to the new size. Or it might just
      not work and be removed later. The zoom property seems to do the right
      behavior, but it's not widely supported. Worth exploring though.
      125d8bbb
  21. 29 Jul, 2010 1 commit
    • Joel Martin's avatar
      Give other events chance to fire. · 29ad96c5
      Joel Martin authored
      After each complete framebufferUpdate, set a short timer to continue
      processing the receive queue. This gives other events a chance to
      fire. Especially important when noVNC is integrated into another
      website.
      29ad96c5
  22. 23 Jul, 2010 1 commit
    • Joel Martin's avatar
      Issue #15: noVNC falls behind. · 42b2246c
      Joel Martin authored
      noVNC was never processing more than one framebufferUpdate message per
      onmessage event. If noVNC receives an incomplete framebufferUpdate and
      then receives the rest of the framebufferUpdate plus another complete
      framebufferUpdate, then it will fall permanently behind.
      
      If there is more to process after a completed framebufferUpdate, then
      execute normal_msg again.
      
      All the render routines must return false if there is not enough data
      in the receive queue to process their current update, and true
      otherwise.
      42b2246c
  23. 22 Jul, 2010 1 commit