1. 17 Sep, 2012 1 commit
    • Joel Martin's avatar
      Update websockify/websock.js. · 204675c8
      Joel Martin authored
      This change pulls websockify 6d9deda9c5.
      
      Most note worthy changes:
      - Pulls in web-socket-js 7677e7a954 which updates to IETF 6455 (from
        Hixie)
      - Binary support detection and use in include/websock.js
      - Add ssl and unix target support
      - Add multiple target support via config file/dir.
      - Idle timeout exit
      204675c8
  2. 08 Jun, 2012 1 commit
  3. 14 Jul, 2011 1 commit
  4. 16 Mar, 2011 1 commit
    • Joel Martin's avatar
      Update web-socket-js to bb5797cad. · bbd21ca7
      Joel Martin authored
      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).
      bbd21ca7
  5. 19 Jan, 2011 1 commit
  6. 17 Jan, 2011 1 commit
    • Joel Martin's avatar
      Update gimite/web-socket-js build. · 24d01a5a
      Joel Martin authored
      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.
      24d01a5a
  7. 11 Sep, 2010 2 commits
    • 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
  8. 08 Sep, 2010 1 commit
    • 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
  9. 02 Jul, 2010 3 commits
  10. 01 Jul, 2010 5 commits
    • Joel Martin's avatar
      Update web-socket-js binary build and README.md · 2b71a4db
      Joel Martin authored
      Brings it up to date with the most recent web-socket-js event handling
      fixes.
      2b71a4db
    • Joel Martin's avatar
      Opera fixes and big Opera performance boost. · bc8e3d4d
      Joel Martin authored
      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.
      bc8e3d4d
    • Joel Martin's avatar
      Better web-socket-js dataQueue reset. · 4a961783
      Joel Martin authored
      At connect and close time instead of initialization time.
      4a961783
    • Joel Martin's avatar
      web-socket-js event fixes. · 9479c720
      Joel Martin authored
      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).
      9479c720
    • Joel Martin's avatar
      Opera works! Fix message event drops/reorders. · a93c9555
      Joel Martin authored
      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.
      a93c9555
  11. 24 Jun, 2010 6 commits
  12. 28 May, 2010 2 commits
    • Joel Martin's avatar
      Test non-base64 (straight UTF-8) encoding. · 507b473a
      Joel Martin authored
      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.
      507b473a
    • Joel Martin's avatar
      d38406e6
  13. 17 May, 2010 1 commit
  14. 30 Apr, 2010 1 commit
    • Joel Martin's avatar
      Support for SSL/TLS ('wss://') on both sides. · adfe6ac1
      Joel Martin authored
      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.
      adfe6ac1
  15. 17 Apr, 2010 1 commit