1. 13 Jan, 2011 1 commit
  2. 12 Jan, 2011 1 commit
    • Joel Martin's avatar
      wsproxy, wstelnet: wrap command, WS telnet client. · f2538f33
      Joel Martin authored
      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.
      f2538f33
  3. 27 Dec, 2010 1 commit
    • Joel Martin's avatar
      wswrapper: interpose select/pselect. Cleaup. · 6b900d25
      Joel Martin authored
      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.
      6b900d25
  4. 03 Dec, 2010 1 commit
    • Joel Martin's avatar
      wswrapper: wrap existing server using LD_PRELOAD. · 5b0bbd5c
      Joel Martin authored
      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.
      5b0bbd5c
  5. 06 Nov, 2010 1 commit
    • François Revol's avatar
      wsproxy: Mac OS X build fixes · f61274c8
      François Revol authored
      - 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: 's avatarFrançois Revol <revol@free.fr>
      f61274c8
  6. 04 Oct, 2010 1 commit
  7. 01 Jul, 2010 1 commit
    • Joel Martin's avatar
      Update C proxy to WS protocol version 76. · 1eba7b42
      Joel Martin authored
      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.
      1eba7b42
  8. 17 Jun, 2010 1 commit
  9. 07 Jun, 2010 1 commit
  10. 04 Jun, 2010 1 commit