Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
Toggle navigation
L
libvncserver
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
libvncserver
Commits
5c3eae92
Commit
5c3eae92
authored
Sep 26, 2001
by
dscho
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
API corrections
parent
d6082b69
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
169 additions
and
41 deletions
+169
-41
Makefile
Makefile
+1
-2
README
README
+112
-12
TODO
TODO
+1
-0
example.c
example.c
+9
-7
httpd.c
httpd.c
+2
-4
main.c
main.c
+25
-9
pnmshow.c
pnmshow.c
+10
-4
rfb.h
rfb.h
+9
-3
No files found.
Makefile
View file @
5c3eae92
...
@@ -4,14 +4,13 @@ CFLAGS=-g -Wall
...
@@ -4,14 +4,13 @@ CFLAGS=-g -Wall
RANLIB
=
ranlib
RANLIB
=
ranlib
INCLUDES
=
-I
.
-Iinclude
INCLUDES
=
-I
.
-Iinclude
VNCAUTHLIB
=
VNCSERVERLIB
=
-L
.
-lvncserver
-lz
-ljpeg
VNCSERVERLIB
=
-L
.
-lvncserver
-lz
-ljpeg
# These two lines enable useage of PThreads
# These two lines enable useage of PThreads
#CFLAGS += -DHAVE_PTHREADS
#CFLAGS += -DHAVE_PTHREADS
#VNCSERVERLIB += -lpthread
#VNCSERVERLIB += -lpthread
LIBS
=
$(LDFLAGS)
$(VNCSERVERLIB)
$(VNCAUTHLIB)
LIBS
=
$(LDFLAGS)
$(VNCSERVERLIB)
# for Mac OS X
# for Mac OS X
OSX_LIBS
=
-framework
ApplicationServices
-framework
Carbon
OSX_LIBS
=
-framework
ApplicationServices
-framework
Carbon
...
...
README
View file @
5c3eae92
...
@@ -23,37 +23,134 @@ How to use
...
@@ -23,37 +23,134 @@ How to use
To make a server, you just have to initialise a server structure using the
To make a server, you just have to initialise a server structure using the
function rfbDefaultScreenInit, like
function rfbDefaultScreenInit, like
rfbScreenInfoPtr rfbScreen =
rfbScreenInfoPtr rfbScreen =
rfb
DefaultScreenInit
(argc,argv,maxx,maxy,8,3,bpp);
rfb
GetScreen
(argc,argv,maxx,maxy,8,3,bpp);
You then can set hooks and io functions (see below).
You then can set hooks and io functions (see below) or other
options (see below).
After that, you initialize the server, like
rfbInitServer(rfbScreen);
You can use a blocking event loop, a background (pthread based) event loop,
You can use a blocking event loop, a background (pthread based) event loop,
or implement your own using the processEvents function.
or implement your own using the rfbProcessEvents function.
Making it interactive
---------------------
Input is handled by IO functions (see below).
Whenever you change something in the frame buffer, call rfbMarkRectAsModified.
You should make sure that the cursor is not drawn before drawing yourself
by calling rfbUndrawCursor. You can also draw the cursor using rfbDrawCursor,
but it hardly seems necessary. For cursor details, see below.
Utility functions
-----------------
Whenever you draw something, you have to call
rfbMarkRectAsModified(screen,x1,y1,x2,y2).
This tells LibVNCServer to send updates to all connected clients.
Before you draw something, be sure to call
rfbUndrawCursor(cl).
This tells LibVNCServer to hide the cursor.
Remark: There are vncviewers out there, which know a cursor encoding, so
that network traffic is low, and also the cursor doesn't need to be
drawn the cursor everytime an update is sent. LibVNCServer handles
all the details. Just set the cursor and don't bother any more.
What is the difference between rfbScreenInfoPtr and rfbClientPtr?
-----------------------------------------------------------------
The rfbScreenInfoPtr is a pointer to a rfbScreenInfo structure, which
holds information about the server, like pixel format, io functions,
frame buffer etc.
The rfbClientPtr is a pointer to an rfbClientRec structure, which holds
information about a client, like pixel format, socket of the
connection, etc.
A server can have several clients, but needn't have any. So, if you
have a server and three clients are connected, you have one instance
of a rfbScreenInfo and three instances of rfbClientRec's.
Also, there is functionality included to draw a cursor (see below).
The rfbClientRec structure holds a member
rfbScreenInfoPtr screen
which points to the server and a member
rfbClientPtr next
to the next client.
To start also an HTTP server (running on port 5800+display_number), you have
The rfbScreenInfo structure holds a member
rfbClientPtr rfbClientHead
which points to the first client.
So, to access the server from the client structure, you use client->screen.
To access all clients from a server, get screen->rfbClientHead and
iterate using client->next.
If you change client settings, be sure to use the provided iterator
rfbGetClientIterator(rfbScreen)
with
rfbClientIteratorNext(iterator)
and
rfbReleaseClientIterator
to prevent thread clashes.
Other options
-------------
These options have to be set between rfbGetScreen and rfbInitServer.
If you already have a socket to talk to, just set rfbScreen->inetdSock
(originally this is for inetd handling, but why not use it for your purpose?).
To also start an HTTP server (running on port 5800+display_number), you have
to set rfbScreen->httpdDir to a directory containing vncviewer.jar and
to set rfbScreen->httpdDir to a directory containing vncviewer.jar and
index.vnc (like the included "classes" directory).
index.vnc (like the included "classes" directory).
Hooks and IO functions
Hooks and IO functions
----------------------
----------------------
TODO
There exist the following IO functions as members of rfbScreen:
kbdAddEvent, kbdReleaseAllKeys, ptrAddEvent and setXCutText
kbdAddEvent(Bool down,KeySym key,rfbClientPtr cl)
is called when a key is pressed.
kbdReleaseAllKeys(rfbClientPtr cl)
is not called at all (maybe in the future).
ptrAddEvent(int buttonMask,int x,int y,rfbClientPtr cl)
is called when the mouse moves or a button is pressed.
setXCutText(char* str,int len,rfbClientPtr cl)
is called when the selection changes.
There is only one hook:
newClientHook(rfbClientPtr cl)
is called when a new client has connected.
You can also override the following method:
getCursorPtr(rfbClientPtr cl)
This could be used to make an animated cursor (if you really want ...)
Cursor handling
Cursor handling
---------------
---------------
The screen holds a pointer
rfbCursorPtr cursor
to the current cursor. Whenever you set it, remember that any dynamically
created cursor (like return value from rfbMakeXCursor) is not free'd!
The rfbCursor structure consists mainly of a mask and a source. The mask
The rfbCursor structure consists mainly of a mask and a source. The mask
describes, which pixels are drawn for the cursor (a cursor needn't be
describes, which pixels are drawn for the cursor (a cursor needn't be
rectangular). The source describes, which colour those pixels should have.
rectangular). The source describes, which colour those pixels should have.
The standard is an XCursor: a cursor with a foreground and a background
The standard is an XCursor: a cursor with a foreground and a background
colour (stored in backRed and similar with a range from 0-0xffff). The
colour (stored in backRed,backGreen,backBlue and the same for foreground
arrays "mask" and "source" consist of byte padded rows in MSB order (i.e. a
in a range from 0-0xffff). Therefore, the arrays "mask" and "source"
10x4 cursor's mask has 2x4 bytes, because 2 bytes are needed to hold 10 bits).
contain pixels as single bits stored in bytes in MSB order. The rows are
padded, such that each row begins with a new byte (i.e. a 10x4
cursor's mask has 2x4 bytes, because 2 bytes are needed to hold 10 bits).
It is very easy to make a cursor like this:
It is
however
very easy to make a cursor like this:
char* cur=" "
char* cur=" "
" xx "
" xx "
...
@@ -66,10 +163,11 @@ char* mask="xxxx"
...
@@ -66,10 +163,11 @@ char* mask="xxxx"
rfbCursorPtr c=rfbMakeXCursor(4,4,cur,mask);
rfbCursorPtr c=rfbMakeXCursor(4,4,cur,mask);
You can even set "mask" to NULL in this call and LibVNCServer will calculate
You can even set "mask" to NULL in this call and LibVNCServer will calculate
a mask for you.
a mask for you
(dynamically, so you have to free it yourself)
.
There is also an array named "richSource" for colourful cursors. They have
There is also an array named "richSource" for colourful cursors. They have
the same format as the frameBuffer.
the same format as the frameBuffer (i.e. if the server is 32 bit,
a 10x4 cursor has 4x10x4 bytes).
History
History
-------
-------
...
@@ -77,6 +175,8 @@ History
...
@@ -77,6 +175,8 @@ History
LibVNCServer is based on Tridia VNC and OSXvnc, which in turn are based on
LibVNCServer is based on Tridia VNC and OSXvnc, which in turn are based on
the original code from ORL/AT&T.
the original code from ORL/AT&T.
VNC fascinated me from t
License
License
-------
-------
...
...
TODO
View file @
5c3eae92
...
@@ -9,6 +9,7 @@ in the works:
...
@@ -9,6 +9,7 @@ in the works:
adapt rdp2vnc (rdesktop)
adapt rdp2vnc (rdesktop)
optionally dont draw rich cursors as xcursors
optionally dont draw rich cursors as xcursors
use sraRegion from rdp2vnc instead of miregion, because it is much smaller
later:
later:
------
------
...
...
example.c
View file @
5c3eae92
...
@@ -30,8 +30,8 @@
...
@@ -30,8 +30,8 @@
#include "rfb.h"
#include "rfb.h"
#include "keysym.h"
#include "keysym.h"
const
int
maxx
=
64
1
,
maxy
=
480
,
bpp
=
4
;
const
int
maxx
=
64
0
,
maxy
=
480
,
bpp
=
4
;
/* TODO: odd maxx doesn't work */
/* TODO: odd maxx doesn't work
(vncviewer bug)
*/
/* This initializes a nice (?) background */
/* This initializes a nice (?) background */
...
@@ -288,7 +288,7 @@ void MakeRichCursor(rfbScreenInfoPtr rfbScreen)
...
@@ -288,7 +288,7 @@ void MakeRichCursor(rfbScreenInfoPtr rfbScreen)
int
main
(
int
argc
,
char
**
argv
)
int
main
(
int
argc
,
char
**
argv
)
{
{
rfbScreenInfoPtr
rfbScreen
=
rfbScreenInfoPtr
rfbScreen
=
rfb
DefaultScreenInit
(
argc
,
argv
,
maxx
,
maxy
,
8
,
3
,
bpp
);
rfb
GetScreen
(
argc
,
argv
,
maxx
,
maxy
,
8
,
3
,
bpp
);
rfbScreen
->
desktopName
=
"LibVNCServer Example"
;
rfbScreen
->
desktopName
=
"LibVNCServer Example"
;
rfbScreen
->
frameBuffer
=
(
char
*
)
malloc
(
maxx
*
maxy
*
bpp
);
rfbScreen
->
frameBuffer
=
(
char
*
)
malloc
(
maxx
*
maxy
*
bpp
);
rfbScreen
->
rfbAlwaysShared
=
TRUE
;
rfbScreen
->
rfbAlwaysShared
=
TRUE
;
...
@@ -307,15 +307,17 @@ int main(int argc,char** argv)
...
@@ -307,15 +307,17 @@ int main(int argc,char** argv)
MakeRichCursor
(
rfbScreen
);
MakeRichCursor
(
rfbScreen
);
/* initialize the server */
rfbInitServer
(
rfbScreen
);
/* this is the blocking event loop, i.e. it never returns */
/* this is the blocking event loop, i.e. it never returns */
/* 40000 are the microseconds, i.e. 0.04 seconds */
/* 40000 are the microseconds, i.e. 0.04 seconds */
runEventLoop
(
rfbScreen
,
40000
,
FALSE
);
r
fbR
unEventLoop
(
rfbScreen
,
40000
,
FALSE
);
/* this is the non-blocking event loop; a background thread is started */
/* this is the non-blocking event loop; a background thread is started */
runEventLoop
(
rfbScreen
,
40000
,
TRUE
);
rfbRunEventLoop
(
rfbScreen
,
40000
,
TRUE
);
/* now we could do some cool things like rendering */
/* now we could do some cool things like rendering */
while
(
1
);
while
(
1
)
/* render() */
;
return
(
0
);
return
(
0
);
}
}
httpd.c
View file @
5c3eae92
...
@@ -66,12 +66,10 @@ static char buf[BUF_SIZE];
...
@@ -66,12 +66,10 @@ static char buf[BUF_SIZE];
void
void
httpInitSockets
(
rfbScreenInfoPtr
rfbScreen
)
httpInitSockets
(
rfbScreenInfoPtr
rfbScreen
)
{
{
static
Bool
done
=
FALSE
;
if
(
rfbScreen
->
httpInitDone
)
if
(
done
)
return
;
return
;
d
one
=
TRUE
;
rfbScreen
->
httpInitD
one
=
TRUE
;
if
(
!
rfbScreen
->
httpDir
)
if
(
!
rfbScreen
->
httpDir
)
return
;
return
;
...
...
main.c
View file @
5c3eae92
...
@@ -340,7 +340,9 @@ void doNothingWithClient(rfbClientPtr cl)
...
@@ -340,7 +340,9 @@ void doNothingWithClient(rfbClientPtr cl)
{
{
}
}
rfbScreenInfoPtr
rfbDefaultScreenInit
(
int
argc
,
char
**
argv
,
int
width
,
int
height
,
int
bitsPerSample
,
int
samplesPerPixel
,
int
bytesPerPixel
)
rfbScreenInfoPtr
rfbGetScreen
(
int
argc
,
char
**
argv
,
int
width
,
int
height
,
int
bitsPerSample
,
int
samplesPerPixel
,
int
bytesPerPixel
)
{
{
rfbScreenInfoPtr
rfbScreen
=
malloc
(
sizeof
(
rfbScreenInfo
));
rfbScreenInfoPtr
rfbScreen
=
malloc
(
sizeof
(
rfbScreenInfo
));
rfbPixelFormat
*
format
=&
rfbScreen
->
rfbServerFormat
;
rfbPixelFormat
*
format
=&
rfbScreen
->
rfbServerFormat
;
...
@@ -350,18 +352,24 @@ rfbScreenInfoPtr rfbDefaultScreenInit(int argc,char** argv,int width,int height,
...
@@ -350,18 +352,24 @@ rfbScreenInfoPtr rfbDefaultScreenInit(int argc,char** argv,int width,int height,
rfbScreen
->
rfbPort
=
5900
;
rfbScreen
->
rfbPort
=
5900
;
rfbScreen
->
socketInitDone
=
FALSE
;
rfbScreen
->
socketInitDone
=
FALSE
;
rfbScreen
->
inetdInitDone
=
FALSE
;
rfbScreen
->
inetdSock
=-
1
;
rfbScreen
->
inetdSock
=-
1
;
rfbScreen
->
udpSock
=-
1
;
rfbScreen
->
udpSock
=-
1
;
rfbScreen
->
udpSockConnected
=
FALSE
;
rfbScreen
->
udpSockConnected
=
FALSE
;
rfbScreen
->
udpPort
=
0
;
rfbScreen
->
maxFd
=
0
;
rfbScreen
->
maxFd
=
0
;
rfbScreen
->
rfbListenSock
=-
1
;
rfbScreen
->
rfbListenSock
=-
1
;
rfbScreen
->
udpPort
=
0
;
rfbScreen
->
httpInitDone
=
FALSE
;
rfbScreen
->
httpPort
=
0
;
rfbScreen
->
httpPort
=
0
;
rfbScreen
->
httpDir
=
NULL
;
rfbScreen
->
httpDir
=
NULL
;
rfbScreen
->
httpListenSock
=-
1
;
rfbScreen
->
httpListenSock
=-
1
;
rfbScreen
->
httpSock
=-
1
;
rfbScreen
->
httpSock
=-
1
;
rfbScreen
->
httpFP
=
NULL
;
rfbScreen
->
httpFP
=
NULL
;
rfbScreen
->
inetdInitDone
=
FALSE
;
rfbScreen
->
desktopName
=
"LibVNCServer"
;
rfbScreen
->
desktopName
=
"LibVNCServer"
;
rfbScreen
->
rfbAlwaysShared
=
FALSE
;
rfbScreen
->
rfbAlwaysShared
=
FALSE
;
rfbScreen
->
rfbNeverShared
=
FALSE
;
rfbScreen
->
rfbNeverShared
=
FALSE
;
...
@@ -421,11 +429,20 @@ rfbScreenInfoPtr rfbDefaultScreenInit(int argc,char** argv,int width,int height,
...
@@ -421,11 +429,20 @@ rfbScreenInfoPtr rfbDefaultScreenInit(int argc,char** argv,int width,int height,
rfbScreen
->
cursor
=
&
myCursor
;
rfbScreen
->
cursor
=
&
myCursor
;
rfbScreen
->
newClientHook
=
doNothingWithClient
;
rfbScreen
->
newClientHook
=
doNothingWithClient
;
/* initialize client list and iterator mutex */
rfbClientListInit
(
rfbScreen
);
return
(
rfbScreen
);
return
(
rfbScreen
);
}
}
void
rfbInitServer
(
rfbScreenInfoPtr
rfbScreen
)
{
rfbInitSockets
(
rfbScreen
);
httpInitSockets
(
rfbScreen
);
}
void
void
p
rocessEvents
(
rfbScreenInfoPtr
rfbScreen
,
long
usec
)
rfbP
rocessEvents
(
rfbScreenInfoPtr
rfbScreen
,
long
usec
)
{
{
rfbCheckFds
(
rfbScreen
,
usec
);
rfbCheckFds
(
rfbScreen
,
usec
);
httpCheckFds
(
rfbScreen
);
httpCheckFds
(
rfbScreen
);
...
@@ -445,13 +462,14 @@ processEvents(rfbScreenInfoPtr rfbScreen,long usec)
...
@@ -445,13 +462,14 @@ processEvents(rfbScreenInfoPtr rfbScreen,long usec)
}
}
}
}
void
runEventLoop
(
rfbScreenInfoPtr
rfbScreen
,
long
usec
,
Bool
runInBackground
)
void
r
fbR
unEventLoop
(
rfbScreenInfoPtr
rfbScreen
,
long
usec
,
Bool
runInBackground
)
{
{
rfbInitServer
(
rfbScreen
);
if
(
runInBackground
)
{
if
(
runInBackground
)
{
#ifdef HAVE_PTHREADS
#ifdef HAVE_PTHREADS
pthread_t
listener_thread
;
pthread_t
listener_thread
;
rfbClientListInit
(
rfbScreen
);
//pthread_mutex_init(&logMutex, NULL);
//pthread_mutex_init(&logMutex, NULL);
pthread_create
(
&
listener_thread
,
NULL
,
listenerRun
,
rfbScreen
);
pthread_create
(
&
listener_thread
,
NULL
,
listenerRun
,
rfbScreen
);
return
;
return
;
...
@@ -460,8 +478,6 @@ void runEventLoop(rfbScreenInfoPtr rfbScreen, long usec, Bool runInBackground)
...
@@ -460,8 +478,6 @@ void runEventLoop(rfbScreenInfoPtr rfbScreen, long usec, Bool runInBackground)
#endif
#endif
}
}
rfbInitSockets
(
rfbScreen
);
httpInitSockets
(
rfbScreen
);
while
(
1
)
while
(
1
)
p
rocessEvents
(
rfbScreen
,
usec
);
rfbP
rocessEvents
(
rfbScreen
,
usec
);
}
}
pnmshow.c
View file @
5c3eae92
...
@@ -45,7 +45,7 @@ int main(int argc,char** argv)
...
@@ -45,7 +45,7 @@ int main(int argc,char** argv)
paddedWidth
+=
4
-
(
width
&
3
);
paddedWidth
+=
4
-
(
width
&
3
);
/* initialize data for vnc server */
/* initialize data for vnc server */
rfbScreen
=
rfb
DefaultScreenInit
(
argc
,
argv
,
w
idth
,
height
,
8
,
3
,
4
);
rfbScreen
=
rfb
GetScreen
(
argc
,
argv
,
paddedW
idth
,
height
,
8
,
3
,
4
);
if
(
argc
>
1
)
if
(
argc
>
1
)
rfbScreen
->
desktopName
=
argv
[
1
];
rfbScreen
->
desktopName
=
argv
[
1
];
else
else
...
@@ -57,19 +57,25 @@ int main(int argc,char** argv)
...
@@ -57,19 +57,25 @@ int main(int argc,char** argv)
rfbScreen
->
httpDir
=
"./classes"
;
rfbScreen
->
httpDir
=
"./classes"
;
/* allocate picture and read it */
/* allocate picture and read it */
rfbScreen
->
frameBuffer
=
(
char
*
)
calloc
(
paddedWidth
*
4
,
height
);
rfbScreen
->
frameBuffer
=
(
char
*
)
malloc
(
paddedWidth
*
4
*
height
);
fread
(
rfbScreen
->
frameBuffer
,
width
*
3
,
height
,
in
);
fread
(
rfbScreen
->
frameBuffer
,
width
*
3
,
height
,
in
);
fclose
(
in
);
fclose
(
in
);
/* correct the format to 4 bytes instead of 3 (and pad to paddedWidth) */
/* correct the format to 4 bytes instead of 3 (and pad to paddedWidth) */
for
(
j
=
height
-
1
;
j
>=
0
;
j
--
)
for
(
j
=
height
-
1
;
j
>=
0
;
j
--
)
{
for
(
i
=
width
-
1
;
i
>=
0
;
i
--
)
for
(
i
=
width
-
1
;
i
>=
0
;
i
--
)
for
(
k
=
2
;
k
>=
0
;
k
--
)
for
(
k
=
2
;
k
>=
0
;
k
--
)
rfbScreen
->
frameBuffer
[(
j
*
paddedWidth
+
i
)
*
4
+
k
]
=
rfbScreen
->
frameBuffer
[(
j
*
paddedWidth
+
i
)
*
4
+
k
]
=
rfbScreen
->
frameBuffer
[(
j
*
width
+
i
)
*
3
+
k
];
rfbScreen
->
frameBuffer
[(
j
*
width
+
i
)
*
3
+
k
];
for
(
i
=
width
*
4
;
i
<
paddedWidth
*
4
;
i
++
)
rfbScreen
->
frameBuffer
[
j
*
paddedWidth
*
4
+
i
]
=
0
;
}
/* initialize server */
rfbInitServer
(
rfbScreen
);
/* run event loop */
/* run event loop */
runEventLoop
(
rfbScreen
,
40000
,
FALSE
);
r
fbR
unEventLoop
(
rfbScreen
,
40000
,
FALSE
);
return
(
0
);
return
(
0
);
}
}
rfb.h
View file @
5c3eae92
...
@@ -182,11 +182,14 @@ typedef struct
...
@@ -182,11 +182,14 @@ typedef struct
Bool
inetdInitDone
;
Bool
inetdInitDone
;
fd_set
allFds
;
fd_set
allFds
;
int
rfbMaxClientWait
;
int
rfbMaxClientWait
;
/* http stuff */
Bool
httpInitDone
;
int
httpPort
;
int
httpPort
;
char
*
httpDir
;
char
*
httpDir
;
int
httpListenSock
;
int
httpListenSock
;
int
httpSock
;
int
httpSock
;
FILE
*
httpFP
;
FILE
*
httpFP
;
char
*
rfbAuthPasswdFile
;
char
*
rfbAuthPasswdFile
;
int
rfbDeferUpdateTime
;
int
rfbDeferUpdateTime
;
char
*
rfbScreen
;
char
*
rfbScreen
;
...
@@ -601,12 +604,15 @@ void rfbMarkRegionAsModified(rfbScreenInfoPtr rfbScreen,RegionPtr modRegion);
...
@@ -601,12 +604,15 @@ void rfbMarkRegionAsModified(rfbScreenInfoPtr rfbScreen,RegionPtr modRegion);
void
doNothingWithClient
(
rfbClientPtr
cl
);
void
doNothingWithClient
(
rfbClientPtr
cl
);
/* functions to make a vnc server */
/* functions to make a vnc server */
extern
rfbScreenInfoPtr
rfbDefaultScreenInit
(
int
argc
,
char
**
argv
,
int
width
,
int
height
,
int
bitsPerSample
,
int
samplesPerPixel
,
int
bytesPerPixel
);
extern
rfbScreenInfoPtr
rfbGetScreen
(
int
argc
,
char
**
argv
,
int
width
,
int
height
,
int
bitsPerSample
,
int
samplesPerPixel
,
int
bytesPerPixel
);
extern
void
rfbInitServer
(
rfbScreenInfoPtr
rfbScreen
);
extern
void
rfbScreenCleanup
(
rfbScreenInfoPtr
screenInfo
);
extern
void
rfbScreenCleanup
(
rfbScreenInfoPtr
screenInfo
);
/* call one of these two functions to service the vnc clients.
/* call one of these two functions to service the vnc clients.
usec are the microseconds the select on the fds waits.
usec are the microseconds the select on the fds waits.
if you are using the event loop, set this to some value > 0. */
if you are using the event loop, set this to some value > 0. */
extern
void
runEventLoop
(
rfbScreenInfoPtr
screenInfo
,
long
usec
,
Bool
runInBackground
);
extern
void
r
fbR
unEventLoop
(
rfbScreenInfoPtr
screenInfo
,
long
usec
,
Bool
runInBackground
);
extern
void
p
rocessEvents
(
rfbScreenInfoPtr
screenInfo
,
long
usec
);
extern
void
rfbP
rocessEvents
(
rfbScreenInfoPtr
screenInfo
,
long
usec
);
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