Who's Online

We have 1 guest online
Home
SDL_vnc PDF Print E-mail
Written by Andreas Schiffler   
Monday, 18 September 2006
SDL based VNC client library with a threaded renderer.

SDL_vnc

(c) A. Schiffler, aschiffler [at] ferzkopp.net, 2004, licensed under the LGPL

Downloads

README

Intro
-----

The SDL_vnc library was created to offer a VNC client system that:
- is LGPL licensed and can be used in commercial applications
- integrates with SDL (framebuffer is a SDL surface)
- IO and processing runs as a thread, so it does not interfere
with a traditional "game loop"


Supported Platforms
-------------------

The library compiles and is tested on a Linux target with a
TightVNC server running on windows.


Installation and Test
---------------------

To compile the library your need the SDL 1.2 installed from source or
installed with the 'devel' RPM package. For example on Mandrake, run:
urpmi libSDL1.2-devel

The run
./autogen.sh (optional)
./configure
make
make install
ldconfig

to compile and install the library. The default location for the
installation is /usr/local/lib and /usr/local/include. The libary
path /usr/local/lib might need to be added to the file
/etc/ld.so.conf
Then run ldconfig again.


API and Usage
-------------

int vncConnect(tSDL_vnc *vnc, char *host, int port, char *mode,
char *password, int framerate);

Connect to VNC server

Parameters
vnc = pointer to tSDL_vnc structure
host = hostname or hostip
port = port
mode = submode,submode,...
submode = raw |
copyrect |
rre |
corre(broken) |
hextile |
zrle(unimplemented) |
cursor |
desktop(unimplemented)
password = text
framerate = 1 to 100

Notes;
- Returns 1 if connection was established, 0 otherwise.
- This call will establish a connection to the VNC server requesting
a 32bit transfer.
- framerate is the rate in which update requests are send to the server.



int vncBlitFramebuffer(tSDL_vnc *vnc, SDL_Surface *target, SDL_Rect *urec);

Blit current framebuffer to target

Parameters
vnc = pointer to tSDL_vnc structure
target = target surface to blit framebuffer to
urec = pointer to SDL_Rect structure to receive updated area, can be NULL

Notes:
- Returns 1 if the blit occured, 0 otherwise.
- Only blits if framebuffer exists and was updated.
- Updated region is stored in urec if it is not NULL.
- Framebuffer is a RGB surface.



int vncBlitCursor(tSDL_vnc *vnc, SDL_Surface *target, SDL_Rect *trec);

Blit current cursor to target

Parameters
vnc = pointer to tSDL_vnc structure
target = target surface to blit cursoe to
trec = pointer to SDL_Rect structure to receive updated area, can be NULL

Notes
- Returns 1 if blit occured, 0 otherwise
- Blitting is at the trec position.
- Cursor image is a 32x32 RGBA image (with A set).




SDL_Rect vncCursorHotspot(tSDL_vnc *vnc);

Return cursor hotspot location

Parameters
vnc = pointer to tSDL_vnc structure

Notes:
- In the returned parameter, only .x and .y are used.



int vncClientKeyevent(tSDL_vnc *vnc, unsigned char downflag, unsigned int key);
int vncClientPointerevent(tSDL_vnc *vnc, unsigned char buttonmask,
unsigned short x, unsigned short y);

Send keyboard and pointer events to server

Parameters
vnc = pointer to tSDL_vnc structure
downflag = 1 for key is down, 0 for key is up
key = VNC keycode (basically X11/keysymdef.h plus some special codes)
buttonmask = VNC mousebutton bitmask 1=left, 2-=middle, 4=right, 8/16=wheel
x,y = mouse position

Notes:
- The client is responsible for key-code conversions into the VNC format.



void vncDisconnect(tSDL_vnc *vnc);

Disconnect from vnc server

Parameters
vnc = pointer to tSDL_vnc structure

Notes:
- Closes socket connection and kills client thread.


Test Program
------------

Change to the ./Test directory and run
./configure
make
to creates a VNC client program. Run
./TestVNC -help

Typically one connects to a VNC server like this:

./TestVNC -server myserver -password mypass


Also see the source code TestVNC.c for sample code on how to
create a simple VNC client.


Development and To-Do
---------------------

One can edit the SDL_vnc.c code to enable extensive debugging by setting the
DEBUG flag.

TODO:
- Add function to query server framebuffer size after connect.
- Fix CoRRE code
- Implement Desktop pseudoencoding
- Implement Bell (as callback)
- Implement ClientCutText
- Implement ZRLE protocol
- Implement tight protocol and options (zlib,tight,zlibhex)
(Anyone hve the specs for this?)
- Improved speed and interactive response
(Implement a threaded socket reader. Check all code for optimizations.)
('vncviewer' feels a lot faster and more interactive.)
- Create proper SDL_keysym --> VNC key conversion routine.
- Add local-cursor sample code to TestVNC program.


Thanks
------

Thanks to 'AppWares Development Group' for supporting this project - please
visit http://www.appwares.com for more information.


Contributors
------------

* None so far. Want to be the first one ...??? Get coding!
Last Updated ( Monday, 18 September 2006 )
 
Next >
© 2008 Home of Ferzkopp
Joomla! is Free Software released under the GNU/GPL License.