Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
Toggle navigation
N
noVNC
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
rasky
noVNC
Commits
9aaf26e8
Commit
9aaf26e8
authored
Jan 07, 2011
by
Joel Martin
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' of git@github.com:kanaka/noVNC
parents
96bc3d30
02a7dd2c
Changes
5
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
72 additions
and
61 deletions
+72
-61
TODO
docs/TODO
+17
-13
notes
docs/notes
+5
-32
README.md
utils/README.md
+40
-12
wswrapper.c
utils/wswrapper.c
+2
-0
wswrapper.h
utils/wswrapper.h
+8
-4
No files found.
docs/TODO
View file @
9aaf26e8
Short Term:
- Playback/demo on website.
- VNC performance and regression playback suite.
- Keyboard layout/internationalization support
- convert keyCode into proper charCode
- Test on IE 9 preview 3.
- Fix cursor URI detection in Arora:
- allows data URI, but doesn't actually work
Medium Term:
- Viewport support
- Status bar menu/buttons:
- Explanatory hover text over buttons
...
...
@@ -29,7 +20,20 @@ Medium Term:
- Clipboard button -> popup:
- text, clear and send buttons
- wswrapper:
- Flash policy request support.
- SSL/TLS support.
- Tests suite:
- test pselect/poll/ppoll
Medium Term:
- VNC performance and regression playback suite.
- Viewport support
- Touchscreen testing/support.
Longer Term:
- wswrapper:
- epoll_* support
- Get web-socket-js RFC2817 proxying working again.
docs/notes
View file @
9aaf26e8
...
...
@@ -4,39 +4,12 @@ There is an included flash object (web-socket-js) that is used to
emulate websocket support on browsers without websocket support
(currently only Chrome has WebSocket support).
The performance on Chrome is great. It only takes about 150ms on my
system to render a complete 800x600 hextile frame. Most updates are
partial or use copyrect which is much faster.
When using the flash websocket emulator, packets event aren't always
delivered in order. This may be a bug in the way I'm using the
FABridge interface. Or a bug in FABridge itself, or just a browser
event delivery issue. Anyways, to get around this problem, when the
flash emulator is being used, the client issues the WebSocket GET
request with the "seq_num" variable. This switches on in-band sequence
numbering of the packets in the proxy, and the client has a queue of
out-of-order packets (20 deep currently) that it uses to re-order.
Gross!
The performance on firefox 3.5 is usable. It takes 2.3 seconds to
render a 800x600 hextile frame on my system (the initial connect).
Once the initial first update is done though, it's quite usable (as
above, most updates are partial or copyrect). I haven't tested firefox
3.7 yet, it might be a lot faster.
Opera sucks big time. The flash websocket emulator fails to deliver as
many as 40% of packet events when used on Opera. It may or not be
Opera's fault, but something goes badly wrong at the FABridge
boundary.
Javascript doesn't have a bytearray type, so what you get out of
a WebSocket object is just Javascript strings. I believe that
Javascript has UTF-16 unicode strings and anything sent through the
WebSocket gets converted to UTF-8 and vice-versa. So, one additional
(and necessary) function of the proxy is base64 encoding/decoding what
is sent to/from the browser. Another option that I want to explore is
UTF-8 encoding in the proxy.
a WebSocket object is just Javascript strings. Javascript has UTF-16
unicode strings and anything sent through the WebSocket gets converted
to UTF-8 and vice-versa. So, one additional (and necessary) function
of wsproxy is base64 encoding/decoding what is sent to/from the
browser.
Building web-socket-js emulator:
...
...
utils/README.md
View file @
9aaf26e8
##
wsproxy: WebSockets to TCP P
roxy
##
WebSockets Utilities: wswrapper and wsp
roxy
### How it works
### wswrapper
wswrapper is an LD_PRELOAD library that converts a TCP listen socket
of an existing program to a be a WebSockets socket. The
`wswrap`
script can be used to easily launch a program using wswrapper. Here is
an example of using wswrapper with vncserver. wswrapper will convert
the socket listening on port 5901 to be a WebSockets port:
`cd noVNC/utils`
`./wswrap 5901 vncserver -geometry 640x480 :1`
### wsproxy
At the most basic level, wsproxy just translates WebSockets traffic
to normal socket traffic. wsproxy accepts the WebSockets handshake,
...
...
@@ -15,7 +28,7 @@ case the data from the client is not a full WebSockets frame (i.e.
does not end in 255).
###
Additional
features
###
# Additional wsproxy
features
These are not necessary for the basic operation.
...
...
@@ -38,34 +51,38 @@ These are not necessary for the basic operation.
option.
###
Implementations
###
# Implementations of wsproxy
There are three implementations of wsproxy
included: python, C, and
Node (node.js)
.
There are three implementations of wsproxy
: python, C, and Node
(node.js). wswrapper is only implemented in C
.
Here is the feature support matrix for the wsproxy implementations:
Here is the feature support matrix for the the wsproxy implementations
and wswrapper:
<table>
<tr>
<th>
Implementation
</th>
<th>
Basic Proxying
</th>
<th>
Application
</th>
<th>
Language
</th>
<th>
Proxy or Interposer
</th>
<th>
Multi-process
</th>
<th>
Daemonizing
</th>
<th>
SSL/wss
</th>
<th>
Flash Policy Server
</th>
<th>
Session Recording
</th>
</tr>
<tr>
<td>
wsproxy
</td>
<td>
python
</td>
<td>
yes
</td>
<td>
proxy
</td>
<td>
yes
</td>
<td>
yes
</td>
<td>
yes 1
</td>
<td>
yes
</td>
<td>
yes
</td>
</tr>
<tr>
<td>
wsproxy
</td>
<td>
C
</td>
<td>
yes
</td>
<td>
proxy
</td>
<td>
yes
</td>
<td>
yes
</td>
<td>
yes
</td>
...
...
@@ -73,14 +90,25 @@ Here is the feature support matrix for the wsproxy implementations:
<td>
no
</td>
</tr>
</tr>
<tr>
<td>
wsproxy
</td>
<td>
Node (node.js)
</td>
<td>
proxy
</td>
<td>
yes
</td>
<td>
yes
</td>
<td>
no
</td>
<td>
no
</td>
<td>
no
</td>
<td>
no
</td>
</tr>
</tr>
<tr>
<td>
wswrapper
</td>
<td>
C
</td>
<td>
interposer
</td>
<td>
indirectly
</td>
<td>
indirectly
</td>
<td>
no
</td>
<td>
no
</td>
<td>
no
</td>
</tr>
</table>
*
Note 1: to use SSL/wss with python 2.5 or older, see the following
...
...
utils/wswrapper.c
View file @
9aaf26e8
...
...
@@ -13,6 +13,7 @@
* - programs using ppoll or epoll will not work correctly
*/
#define DO_MSG 1
//#define DO_DEBUG 1
//#define DO_TRACE 1
...
...
@@ -828,6 +829,7 @@ int _WS_poll(int mode, struct pollfd *fds, nfds_t nfds, int timeout,
return
ret
;
}
/*
* Overload (LD_PRELOAD) standard library network routines
*/
...
...
utils/wswrapper.h
View file @
9aaf26e8
...
...
@@ -7,6 +7,14 @@
* wswrapper.so.
*/
#ifdef DO_MSG
#define MSG(...) \
fprintf(stderr, "wswrapper: "); \
fprintf(stderr, __VA_ARGS__);
#else
#define MSG(...)
#endif
#ifdef DO_DEBUG
#define DEBUG(...) \
if (DO_DEBUG) { \
...
...
@@ -27,10 +35,6 @@
#define TRACE(...)
#endif
#define MSG(...) \
fprintf(stderr, "wswrapper: "); \
fprintf(stderr, __VA_ARGS__);
#define RET_ERROR(eno, ...) \
fprintf(stderr, "wswrapper error: "); \
fprintf(stderr, __VA_ARGS__); \
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment