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
97299606
Commit
97299606
authored
20 years ago
by
dscho
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
global structures/functions should have "rfb", "sra" or "zrle" as prefix,
while structure members should not
parent
0d3b958b
Changes
36
Hide whitespace changes
Inline
Side-by-side
Showing
36 changed files
with
589 additions
and
590 deletions
+589
-590
zippy.c
contrib/zippy.c
+4
-4
colourmaptest.c
examples/colourmaptest.c
+1
-1
example.c
examples/example.c
+2
-2
pnmshow.c
examples/pnmshow.c
+2
-2
pnmshow24.c
examples/pnmshow24.c
+1
-1
storepasswd.c
examples/storepasswd.c
+1
-1
vncev.c
examples/vncev.c
+1
-1
rfbproto.c
libvncclient/rfbproto.c
+10
-10
auth.c
libvncserver/auth.c
+6
-6
cargs.c
libvncserver/cargs.c
+8
-8
corre.c
libvncserver/corre.c
+3
-3
cursor.c
libvncserver/cursor.c
+17
-17
d3des.c
libvncserver/d3des.c
+5
-5
d3des.h
libvncserver/d3des.h
+4
-4
font.c
libvncserver/font.c
+2
-2
hextile.c
libvncserver/hextile.c
+6
-6
httpd.c
libvncserver/httpd.c
+29
-29
main.c
libvncserver/main.c
+149
-149
rfbserver.c
libvncserver/rfbserver.c
+51
-51
rre.c
libvncserver/rre.c
+3
-3
selbox.c
libvncserver/selbox.c
+4
-4
sockets.c
libvncserver/sockets.c
+22
-22
stats.c
libvncserver/stats.c
+38
-38
tight.c
libvncserver/tight.c
+42
-42
translate.c
libvncserver/translate.c
+18
-18
vncauth.c
libvncserver/vncauth.c
+10
-10
zlib.c
libvncserver/zlib.c
+3
-3
zrle.c
libvncserver/zrle.c
+3
-3
rfb.h
rfb/rfb.h
+58
-59
rfbproto.h
rfb/rfbproto.h
+4
-4
cargstest.c
test/cargstest.c
+2
-2
copyrecttest.c
test/copyrecttest.c
+1
-1
LinuxVNC.c
vncterm/LinuxVNC.c
+5
-5
VNConsole.c
vncterm/VNConsole.c
+28
-28
VNConsole.h
vncterm/VNConsole.h
+1
-1
x11vnc.c
x11vnc/x11vnc.c
+45
-45
No files found.
contrib/zippy.c
View file @
97299606
...
...
@@ -29,7 +29,7 @@ int main (int argc, char **argv)
server
=
rfbGetScreen
(
&
argc
,
argv
,
maxx
,
maxy
,
8
,
3
,
bpp
);
server
->
desktopName
=
"Zippy das wundersquirrel
\'
s VNC server"
;
server
->
frameBuffer
=
(
char
*
)
malloc
(
maxx
*
maxy
*
bpp
);
server
->
rfbA
lwaysShared
=
TRUE
;
server
->
a
lwaysShared
=
TRUE
;
server
->
kbdAddEvent
=
on_key_press
;
server
->
ptrAddEvent
=
on_mouse_event
;
...
...
@@ -76,7 +76,7 @@ void draw_primary_colors (char* frame_buffer, int x1, int y1, int x2, int y2)
/* Dscho's versions (slower, but works for bpp != 3 or 4) */
void
draw_primary_colours_generic
(
rfbScreenInfoPtr
s
,
int
x1
,
int
y1
,
int
x2
,
int
y2
)
{
rfbPixelFormat
f
=
s
->
rfbS
erverFormat
;
rfbPixelFormat
f
=
s
->
s
erverFormat
;
int
i
,
j
;
for
(
j
=
y1
;
j
<
y2
;
j
++
)
for
(
i
=
x1
;
i
<
x2
;
i
++
)
...
...
@@ -90,7 +90,7 @@ void draw_primary_colours_generic(rfbScreenInfoPtr s,int x1,int y1,int x2,int y2
void
draw_primary_colours_generic_fast
(
rfbScreenInfoPtr
s
,
int
x1
,
int
y1
,
int
x2
,
int
y2
)
{
rfbPixelFormat
f
=
s
->
rfbS
erverFormat
;
rfbPixelFormat
f
=
s
->
s
erverFormat
;
int
i
,
j
,
y3
=
(
y1
*
2
+
y2
)
/
3
,
y4
=
(
y1
+
y2
*
2
)
/
3
;
/* draw first pixel */
rfbDrawPixel
(
s
,
x1
,
y1
,
f
.
redMax
<<
f
.
redShift
);
...
...
@@ -108,7 +108,7 @@ void draw_primary_colours_generic_fast(rfbScreenInfoPtr s,int x1,int y1,int x2,i
void
draw_primary_colours_generic_ultrafast
(
rfbScreenInfoPtr
s
,
int
x1
,
int
y1
,
int
x2
,
int
y2
)
{
rfbPixelFormat
f
=
s
->
rfbS
erverFormat
;
rfbPixelFormat
f
=
s
->
s
erverFormat
;
int
y3
=
(
y1
*
2
+
y2
)
/
3
,
y4
=
(
y1
+
y2
*
2
)
/
3
;
/* fill rectangles */
rfbFillRect
(
s
,
x1
,
y1
,
x2
,
y3
,
f
.
redMax
<<
f
.
redShift
);
...
...
This diff is collapsed.
Click to expand it.
examples/colourmaptest.c
View file @
97299606
...
...
@@ -8,7 +8,7 @@ int main(int argc,char** argv)
rfbScreenInfoPtr
server
=
rfbGetScreen
(
&
argc
,
argv
,
256
,
256
,
8
,
1
,
1
);
server
->
rfbS
erverFormat
.
trueColour
=
FALSE
;
server
->
s
erverFormat
.
trueColour
=
FALSE
;
server
->
colourMap
.
count
=
256
;
server
->
colourMap
.
is16
=
FALSE
;
for
(
i
=
0
;
i
<
256
;
i
++
)
{
...
...
This diff is collapsed.
Click to expand it.
examples/example.c
View file @
97299606
...
...
@@ -157,7 +157,7 @@ void doptr(int buttonMask,int x,int y,rfbClientPtr cl)
cd
->
oldx
=
x
;
cd
->
oldy
=
y
;
cd
->
oldButton
=
buttonMask
;
}
d
efaultPtrAddEvent
(
buttonMask
,
x
,
y
,
cl
);
rfbD
efaultPtrAddEvent
(
buttonMask
,
x
,
y
,
cl
);
}
/* aux function to draw a character to x, y */
...
...
@@ -277,7 +277,7 @@ int main(int argc,char** argv)
rfbGetScreen
(
&
argc
,
argv
,
maxx
,
maxy
,
8
,
3
,
bpp
);
rfbScreen
->
desktopName
=
"LibVNCServer Example"
;
rfbScreen
->
frameBuffer
=
(
char
*
)
malloc
(
maxx
*
maxy
*
bpp
);
rfbScreen
->
rfbA
lwaysShared
=
TRUE
;
rfbScreen
->
a
lwaysShared
=
TRUE
;
rfbScreen
->
ptrAddEvent
=
doptr
;
rfbScreen
->
kbdAddEvent
=
dokey
;
rfbScreen
->
newClientHook
=
newclient
;
...
...
This diff is collapsed.
Click to expand it.
examples/pnmshow.c
View file @
97299606
...
...
@@ -64,7 +64,7 @@ int main(int argc,char** argv)
rfbScreen
->
desktopName
=
argv
[
1
];
else
rfbScreen
->
desktopName
=
"Picture"
;
rfbScreen
->
rfbA
lwaysShared
=
TRUE
;
rfbScreen
->
a
lwaysShared
=
TRUE
;
rfbScreen
->
kbdAddEvent
=
HandleKey
;
/* enable http */
...
...
@@ -76,7 +76,7 @@ int main(int argc,char** argv)
fclose
(
in
);
if
(
picType
!=
TRUECOLOUR
)
{
rfbScreen
->
rfbS
erverFormat
.
trueColour
=
FALSE
;
rfbScreen
->
s
erverFormat
.
trueColour
=
FALSE
;
rfbScreen
->
colourMap
.
count
=
256
;
rfbScreen
->
colourMap
.
is16
=
FALSE
;
rfbScreen
->
colourMap
.
data
.
bytes
=
malloc
(
256
*
3
);
...
...
This diff is collapsed.
Click to expand it.
examples/pnmshow24.c
View file @
97299606
...
...
@@ -57,7 +57,7 @@ int main(int argc,char** argv)
rfbScreen
->
desktopName
=
argv
[
1
];
else
rfbScreen
->
desktopName
=
"Picture"
;
rfbScreen
->
rfbA
lwaysShared
=
TRUE
;
rfbScreen
->
a
lwaysShared
=
TRUE
;
rfbScreen
->
kbdAddEvent
=
HandleKey
;
/* enable http */
...
...
This diff is collapsed.
Click to expand it.
examples/storepasswd.c
View file @
97299606
...
...
@@ -36,7 +36,7 @@ int main(int argc, char *argv[])
if
(
argc
!=
3
)
usage
();
if
(
vnc
EncryptAndStorePasswd
(
argv
[
1
],
argv
[
2
])
!=
0
)
{
if
(
rfb
EncryptAndStorePasswd
(
argv
[
1
],
argv
[
2
])
!=
0
)
{
printf
(
"storing password failed.
\n
"
);
return
1
;
}
else
{
...
...
This diff is collapsed.
Click to expand it.
examples/vncev.c
View file @
97299606
...
...
@@ -105,7 +105,7 @@ int main(int argc,char** argv)
s
->
colourMap
.
is16
=
FALSE
;
s
->
colourMap
.
count
=
2
;
s
->
colourMap
.
data
.
bytes
=
(
unsigned
char
*
)
"
\xd0\xd0\xd0\x30\x01\xe0
"
;
s
->
rfbS
erverFormat
.
trueColour
=
FALSE
;
s
->
s
erverFormat
.
trueColour
=
FALSE
;
s
->
frameBuffer
=
f
;
s
->
kbdAddEvent
=
dokey
;
s
->
ptrAddEvent
=
doptr
;
...
...
This diff is collapsed.
Click to expand it.
libvncclient/rfbproto.c
View file @
97299606
...
...
@@ -246,7 +246,7 @@ ConnectToRFBServer(rfbClient* client,const char *hostname, int port)
return
SetNonBlocking
(
client
->
sock
);
}
static
void
rfbEncryptBytes
(
unsigned
char
*
bytes
,
char
*
passwd
);
extern
void
rfbClientEncryptBytes
(
unsigned
char
*
bytes
,
char
*
passwd
);
/*
* InitialiseRFBConnection.
...
...
@@ -327,7 +327,7 @@ InitialiseRFBConnection(rfbClient* client)
passwd
[
8
]
=
'\0'
;
}
rfbEncryptBytes
(
challenge
,
passwd
);
rfb
Client
EncryptBytes
(
challenge
,
passwd
);
/* Lose the password from memory */
for
(
i
=
strlen
(
passwd
);
i
>=
0
;
i
--
)
{
...
...
@@ -1136,14 +1136,14 @@ JpegSetSrcManager(j_decompress_ptr cinfo, uint8_t *compressedData,
/* avoid name clashes with LibVNCServer */
#define
vncEncryptBytes rfb
EncryptBytes
#define
vncEncryptAndStorePasswd rfb
EncryptAndStorePasswdUnused
#define
vncDecryptPasswdFromFile rfb
DecryptPasswdFromFileUnused
#define
vncRandomBytes rfb
RandomBytesUnused
#define
des rfbDES
#define
deskey rfbDES
Key
#define
usekey rfb
UseKey
#define
cpkey rfb
CPKey
#define
rfbEncryptBytes rfbClient
EncryptBytes
#define
rfbEncryptAndStorePasswd rfbClient
EncryptAndStorePasswdUnused
#define
rfbDecryptPasswdFromFile rfbClient
DecryptPasswdFromFileUnused
#define
rfbRandomBytes rfbClient
RandomBytesUnused
#define
rfbDes rfbClientDes
#define
rfbDesKey rfbClientDes
Key
#define
rfbUseKey rfbClient
UseKey
#define
rfbCPKey rfbClient
CPKey
#include "../libvncserver/vncauth.c"
#include "../libvncserver/d3des.c"
This diff is collapsed.
Click to expand it.
libvncserver/auth.c
View file @
97299606
...
...
@@ -43,9 +43,9 @@ rfbAuthNewClient(cl)
cl
->
state
=
RFB_AUTHENTICATION
;
if
(
cl
->
screen
->
rfbA
uthPasswdData
&&
!
cl
->
reverseConnection
)
{
if
(
cl
->
screen
->
a
uthPasswdData
&&
!
cl
->
reverseConnection
)
{
*
(
uint32_t
*
)
buf
=
Swap32IfLE
(
rfbVncAuth
);
vnc
RandomBytes
(
cl
->
authChallenge
);
rfb
RandomBytes
(
cl
->
authChallenge
);
memcpy
(
&
buf
[
4
],
(
char
*
)
cl
->
authChallenge
,
CHALLENGESIZE
);
len
=
4
+
CHALLENGESIZE
;
}
else
{
...
...
@@ -54,7 +54,7 @@ rfbAuthNewClient(cl)
cl
->
state
=
RFB_INITIALISATION
;
}
if
(
WriteExact
(
cl
,
buf
,
len
)
<
0
)
{
if
(
rfb
WriteExact
(
cl
,
buf
,
len
)
<
0
)
{
rfbLogPerror
(
"rfbAuthNewClient: write"
);
rfbCloseClient
(
cl
);
return
;
...
...
@@ -75,7 +75,7 @@ rfbAuthProcessClientMessage(cl)
uint8_t
response
[
CHALLENGESIZE
];
uint32_t
authResult
;
if
((
n
=
ReadExact
(
cl
,
(
char
*
)
response
,
CHALLENGESIZE
))
<=
0
)
{
if
((
n
=
rfb
ReadExact
(
cl
,
(
char
*
)
response
,
CHALLENGESIZE
))
<=
0
)
{
if
(
n
!=
0
)
rfbLogPerror
(
"rfbAuthProcessClientMessage: read"
);
rfbCloseClient
(
cl
);
...
...
@@ -85,7 +85,7 @@ rfbAuthProcessClientMessage(cl)
if
(
!
cl
->
screen
->
passwordCheck
(
cl
,(
const
char
*
)
response
,
CHALLENGESIZE
))
{
rfbErr
(
"rfbAuthProcessClientMessage: password check failed
\n
"
);
authResult
=
Swap32IfLE
(
rfbVncAuthFailed
);
if
(
WriteExact
(
cl
,
(
char
*
)
&
authResult
,
4
)
<
0
)
{
if
(
rfb
WriteExact
(
cl
,
(
char
*
)
&
authResult
,
4
)
<
0
)
{
rfbLogPerror
(
"rfbAuthProcessClientMessage: write"
);
}
rfbCloseClient
(
cl
);
...
...
@@ -94,7 +94,7 @@ rfbAuthProcessClientMessage(cl)
authResult
=
Swap32IfLE
(
rfbVncAuthOK
);
if
(
WriteExact
(
cl
,
(
char
*
)
&
authResult
,
4
)
<
0
)
{
if
(
rfb
WriteExact
(
cl
,
(
char
*
)
&
authResult
,
4
)
<
0
)
{
rfbLogPerror
(
"rfbAuthProcessClientMessage: write"
);
rfbCloseClient
(
cl
);
return
;
...
...
This diff is collapsed.
Click to expand it.
libvncserver/cargs.c
View file @
97299606
...
...
@@ -64,19 +64,19 @@ rfbProcessArguments(rfbScreenInfoPtr rfbScreen,int* argc, char *argv[])
rfbUsage
();
return
FALSE
;
}
rfbScreen
->
rfbP
ort
=
atoi
(
argv
[
++
i
]);
rfbScreen
->
p
ort
=
atoi
(
argv
[
++
i
]);
}
else
if
(
strcmp
(
argv
[
i
],
"-rfbwait"
)
==
0
)
{
/* -rfbwait ms */
if
(
i
+
1
>=
*
argc
)
{
rfbUsage
();
return
FALSE
;
}
rfbScreen
->
rfbM
axClientWait
=
atoi
(
argv
[
++
i
]);
rfbScreen
->
m
axClientWait
=
atoi
(
argv
[
++
i
]);
}
else
if
(
strcmp
(
argv
[
i
],
"-rfbauth"
)
==
0
)
{
/* -rfbauth passwd-file */
if
(
i
+
1
>=
*
argc
)
{
rfbUsage
();
return
FALSE
;
}
rfbScreen
->
rfbA
uthPasswdData
=
argv
[
++
i
];
rfbScreen
->
a
uthPasswdData
=
argv
[
++
i
];
}
else
if
(
strcmp
(
argv
[
i
],
"-passwd"
)
==
0
)
{
/* -passwd password */
char
**
passwds
=
malloc
(
sizeof
(
char
**
)
*
2
);
if
(
i
+
1
>=
*
argc
)
{
...
...
@@ -85,14 +85,14 @@ rfbProcessArguments(rfbScreenInfoPtr rfbScreen,int* argc, char *argv[])
}
passwds
[
0
]
=
argv
[
++
i
];
passwds
[
1
]
=
0
;
rfbScreen
->
rfbA
uthPasswdData
=
(
void
*
)
passwds
;
rfbScreen
->
a
uthPasswdData
=
(
void
*
)
passwds
;
rfbScreen
->
passwordCheck
=
rfbCheckPasswordByList
;
}
else
if
(
strcmp
(
argv
[
i
],
"-deferupdate"
)
==
0
)
{
/* -deferupdate milliseconds */
if
(
i
+
1
>=
*
argc
)
{
rfbUsage
();
return
FALSE
;
}
rfbScreen
->
rfbD
eferUpdateTime
=
atoi
(
argv
[
++
i
]);
rfbScreen
->
d
eferUpdateTime
=
atoi
(
argv
[
++
i
]);
}
else
if
(
strcmp
(
argv
[
i
],
"-desktop"
)
==
0
)
{
/* -desktop desktop-name */
if
(
i
+
1
>=
*
argc
)
{
rfbUsage
();
...
...
@@ -100,11 +100,11 @@ rfbProcessArguments(rfbScreenInfoPtr rfbScreen,int* argc, char *argv[])
}
rfbScreen
->
desktopName
=
argv
[
++
i
];
}
else
if
(
strcmp
(
argv
[
i
],
"-alwaysshared"
)
==
0
)
{
rfbScreen
->
rfbA
lwaysShared
=
TRUE
;
rfbScreen
->
a
lwaysShared
=
TRUE
;
}
else
if
(
strcmp
(
argv
[
i
],
"-nevershared"
)
==
0
)
{
rfbScreen
->
rfbN
everShared
=
TRUE
;
rfbScreen
->
n
everShared
=
TRUE
;
}
else
if
(
strcmp
(
argv
[
i
],
"-dontdisconnect"
)
==
0
)
{
rfbScreen
->
rfbD
ontDisconnect
=
TRUE
;
rfbScreen
->
d
ontDisconnect
=
TRUE
;
}
else
if
(
strcmp
(
argv
[
i
],
"-httpdir"
)
==
0
)
{
/* -httpdir directory-path */
if
(
i
+
1
>=
*
argc
)
{
rfbUsage
();
...
...
This diff is collapsed.
Click to expand it.
libvncserver/corre.c
View file @
97299606
...
...
@@ -115,7 +115,7 @@ rfbSendSmallRectEncodingCoRRE(cl, x, y, w, h)
rreAfterBuf
=
(
char
*
)
realloc
(
rreAfterBuf
,
rreAfterBufSize
);
}
(
*
cl
->
translateFn
)(
cl
->
translateLookupTable
,
&
(
cl
->
screen
->
rfbS
erverFormat
),
(
*
cl
->
translateFn
)(
cl
->
translateLookupTable
,
&
(
cl
->
screen
->
s
erverFormat
),
&
cl
->
format
,
fbptr
,
rreBeforeBuf
,
cl
->
screen
->
paddedWidthInBytes
,
w
,
h
);
...
...
@@ -141,8 +141,8 @@ rfbSendSmallRectEncodingCoRRE(cl, x, y, w, h)
return
rfbSendRectEncodingRaw
(
cl
,
x
,
y
,
w
,
h
);
}
cl
->
r
fbR
ectanglesSent
[
rfbEncodingCoRRE
]
++
;
cl
->
rfbB
ytesSent
[
rfbEncodingCoRRE
]
+=
(
sz_rfbFramebufferUpdateRectHeader
cl
->
rectanglesSent
[
rfbEncodingCoRRE
]
++
;
cl
->
b
ytesSent
[
rfbEncodingCoRRE
]
+=
(
sz_rfbFramebufferUpdateRectHeader
+
sz_rfbRREHeader
+
rreAfterBufLen
);
if
(
cl
->
ublen
+
sz_rfbFramebufferUpdateRectHeader
+
sz_rfbRREHeader
...
...
This diff is collapsed.
Click to expand it.
libvncserver/cursor.c
View file @
97299606
...
...
@@ -46,11 +46,11 @@ rfbSendCursorShape(cl)
if
(
cl
->
useRichCursorEncoding
)
{
if
(
pCursor
&&
!
pCursor
->
richSource
)
MakeRichCursorFromXCursor
(
cl
->
screen
,
pCursor
);
rfb
MakeRichCursorFromXCursor
(
cl
->
screen
,
pCursor
);
rect
.
encoding
=
Swap32IfLE
(
rfbEncodingRichCursor
);
}
else
{
if
(
pCursor
&&
!
pCursor
->
source
)
MakeXCursorFromRichCursor
(
cl
->
screen
,
pCursor
);
rfb
MakeXCursorFromRichCursor
(
cl
->
screen
,
pCursor
);
rect
.
encoding
=
Swap32IfLE
(
rfbEncodingXCursor
);
}
...
...
@@ -73,8 +73,8 @@ rfbSendCursorShape(cl)
sz_rfbFramebufferUpdateRectHeader
);
cl
->
ublen
+=
sz_rfbFramebufferUpdateRectHeader
;
cl
->
rfbC
ursorShapeBytesSent
+=
sz_rfbFramebufferUpdateRectHeader
;
cl
->
rfbC
ursorShapeUpdatesSent
++
;
cl
->
c
ursorShapeBytesSent
+=
sz_rfbFramebufferUpdateRectHeader
;
cl
->
c
ursorShapeUpdatesSent
++
;
if
(
!
rfbSendUpdateBuf
(
cl
))
return
FALSE
;
...
...
@@ -139,10 +139,10 @@ rfbSendCursorShape(cl)
}
}
else
{
/* RichCursor encoding. */
int
bpp1
=
cl
->
screen
->
rfbS
erverFormat
.
bitsPerPixel
/
8
,
int
bpp1
=
cl
->
screen
->
s
erverFormat
.
bitsPerPixel
/
8
,
bpp2
=
cl
->
format
.
bitsPerPixel
/
8
;
(
*
cl
->
translateFn
)(
cl
->
translateLookupTable
,
&
(
cl
->
screen
->
rfbS
erverFormat
),
&
(
cl
->
screen
->
s
erverFormat
),
&
cl
->
format
,
(
char
*
)
pCursor
->
richSource
,
&
cl
->
updateBuf
[
cl
->
ublen
],
pCursor
->
width
*
bpp1
,
pCursor
->
width
,
pCursor
->
height
);
...
...
@@ -163,8 +163,8 @@ rfbSendCursorShape(cl)
/* Send everything we have prepared in the cl->updateBuf[]. */
cl
->
rfbC
ursorShapeBytesSent
+=
(
cl
->
ublen
-
saved_ublen
);
cl
->
rfbC
ursorShapeUpdatesSent
++
;
cl
->
c
ursorShapeBytesSent
+=
(
cl
->
ublen
-
saved_ublen
);
cl
->
c
ursorShapeUpdatesSent
++
;
if
(
!
rfbSendUpdateBuf
(
cl
))
return
FALSE
;
...
...
@@ -196,8 +196,8 @@ rfbSendCursorPos(rfbClientPtr cl)
sz_rfbFramebufferUpdateRectHeader
);
cl
->
ublen
+=
sz_rfbFramebufferUpdateRectHeader
;
cl
->
rfbC
ursorPosBytesSent
+=
sz_rfbFramebufferUpdateRectHeader
;
cl
->
rfbC
ursorPosUpdatesSent
++
;
cl
->
c
ursorPosBytesSent
+=
sz_rfbFramebufferUpdateRectHeader
;
cl
->
c
ursorPosUpdatesSent
++
;
if
(
!
rfbSendUpdateBuf
(
cl
))
return
FALSE
;
...
...
@@ -326,9 +326,9 @@ void rfbFreeCursor(rfbCursorPtr cursor)
}
/* background and foregroud colour have to be set beforehand */
void
MakeXCursorFromRichCursor
(
rfbScreenInfoPtr
rfbScreen
,
rfbCursorPtr
cursor
)
void
rfb
MakeXCursorFromRichCursor
(
rfbScreenInfoPtr
rfbScreen
,
rfbCursorPtr
cursor
)
{
rfbPixelFormat
*
format
=&
rfbScreen
->
rfbS
erverFormat
;
rfbPixelFormat
*
format
=&
rfbScreen
->
s
erverFormat
;
int
i
,
j
,
w
=
(
cursor
->
width
+
7
)
/
8
,
bpp
=
format
->
bitsPerPixel
/
8
,
width
=
cursor
->
width
*
bpp
;
uint32_t
background
;
...
...
@@ -352,9 +352,9 @@ void MakeXCursorFromRichCursor(rfbScreenInfoPtr rfbScreen,rfbCursorPtr cursor)
cursor
->
source
[
j
*
w
+
i
/
8
]
|=
bit
;
}
void
MakeRichCursorFromXCursor
(
rfbScreenInfoPtr
rfbScreen
,
rfbCursorPtr
cursor
)
void
rfb
MakeRichCursorFromXCursor
(
rfbScreenInfoPtr
rfbScreen
,
rfbCursorPtr
cursor
)
{
rfbPixelFormat
*
format
=&
rfbScreen
->
rfbS
erverFormat
;
rfbPixelFormat
*
format
=&
rfbScreen
->
s
erverFormat
;
int
i
,
j
,
w
=
(
cursor
->
width
+
7
)
/
8
,
bpp
=
format
->
bitsPerPixel
/
8
;
uint32_t
background
,
foreground
;
char
*
back
=
(
char
*
)
&
background
,
*
fore
=
(
char
*
)
&
foreground
;
...
...
@@ -387,7 +387,7 @@ void MakeRichCursorFromXCursor(rfbScreenInfoPtr rfbScreen,rfbCursorPtr cursor)
void
rfbUndrawCursor
(
rfbScreenInfoPtr
s
)
{
rfbCursorPtr
c
=
s
->
cursor
;
int
j
,
x1
,
x2
,
y1
,
y2
,
bpp
=
s
->
rfbS
erverFormat
.
bitsPerPixel
/
8
,
int
j
,
x1
,
x2
,
y1
,
y2
,
bpp
=
s
->
s
erverFormat
.
bitsPerPixel
/
8
,
rowstride
=
s
->
paddedWidthInBytes
;
LOCK
(
s
->
cursorMutex
);
if
(
!
s
->
cursorIsDrawn
||
!
c
)
{
...
...
@@ -429,7 +429,7 @@ void rfbUndrawCursor(rfbScreenInfoPtr s)
void
rfbDrawCursor
(
rfbScreenInfoPtr
s
)
{
rfbCursorPtr
c
=
s
->
cursor
;
int
i
,
j
,
x1
,
x2
,
y1
,
y2
,
i1
,
j1
,
bpp
=
s
->
rfbS
erverFormat
.
bitsPerPixel
/
8
,
int
i
,
j
,
x1
,
x2
,
y1
,
y2
,
i1
,
j1
,
bpp
=
s
->
s
erverFormat
.
bitsPerPixel
/
8
,
rowstride
=
s
->
paddedWidthInBytes
,
bufSize
,
w
;
rfbBool
wasChanged
=
FALSE
;
...
...
@@ -487,7 +487,7 @@ void rfbDrawCursor(rfbScreenInfoPtr s)
}
if
(
!
c
->
richSource
)
MakeRichCursorFromXCursor
(
s
,
c
);
rfb
MakeRichCursorFromXCursor
(
s
,
c
);
/* now the cursor has to be drawn */
for
(
j
=
0
;
j
<
y2
;
j
++
)
...
...
This diff is collapsed.
Click to expand it.
libvncserver/d3des.c
View file @
97299606
...
...
@@ -71,7 +71,7 @@ static unsigned char pc2[48] = {
40
,
51
,
30
,
36
,
46
,
54
,
29
,
39
,
50
,
44
,
32
,
47
,
43
,
48
,
38
,
55
,
33
,
52
,
45
,
41
,
49
,
35
,
28
,
31
};
void
desk
ey
(
key
,
edf
)
/* Thanks to James Gillogly & Phil Karn! */
void
rfbDesK
ey
(
key
,
edf
)
/* Thanks to James Gillogly & Phil Karn! */
unsigned
char
*
key
;
int
edf
;
{
...
...
@@ -127,11 +127,11 @@ register unsigned long *raw1;
*
cook
|=
(
*
raw1
&
0x0003f000L
)
>>
4
;
*
cook
++
|=
(
*
raw1
&
0x0000003fL
);
}
usek
ey
(
dough
);
rfbUseK
ey
(
dough
);
return
;
}
void
cpk
ey
(
into
)
void
rfbCPK
ey
(
into
)
register
unsigned
long
*
into
;
{
register
unsigned
long
*
from
,
*
endp
;
...
...
@@ -141,7 +141,7 @@ register unsigned long *into;
return
;
}
void
usek
ey
(
from
)
void
rfbUseK
ey
(
from
)
register
unsigned
long
*
from
;
{
register
unsigned
long
*
to
,
*
endp
;
...
...
@@ -151,7 +151,7 @@ register unsigned long *from;
return
;
}
void
d
es
(
inblock
,
outblock
)
void
rfbD
es
(
inblock
,
outblock
)
unsigned
char
*
inblock
,
*
outblock
;
{
unsigned
long
work
[
2
];
...
...
This diff is collapsed.
Click to expand it.
libvncserver/d3des.h
View file @
97299606
...
...
@@ -25,25 +25,25 @@
#define EN0 0
/* MODE == encrypt */
#define DE1 1
/* MODE == decrypt */
extern
void
desk
ey
(
unsigned
char
*
,
int
);
extern
void
rfbDesK
ey
(
unsigned
char
*
,
int
);
/* hexkey[8] MODE
* Sets the internal key register according to the hexadecimal
* key contained in the 8 bytes of hexkey, according to the DES,
* for encryption or decryption according to MODE.
*/
extern
void
usek
ey
(
unsigned
long
*
);
extern
void
rfbUseK
ey
(
unsigned
long
*
);
/* cookedkey[32]
* Loads the internal key register with the data in cookedkey.
*/
extern
void
cpk
ey
(
unsigned
long
*
);
extern
void
rfbCPK
ey
(
unsigned
long
*
);
/* cookedkey[32]
* Copies the contents of the internal key register into the storage
* located at &cookedkey[0].
*/
extern
void
d
es
(
unsigned
char
*
,
unsigned
char
*
);
extern
void
rfbD
es
(
unsigned
char
*
,
unsigned
char
*
);
/* from[8] to[8]
* Encrypts/Decrypts (according to the key currently loaded in the
* internal key register) one block of eight bytes at address 'from'
...
...
This diff is collapsed.
Click to expand it.
libvncserver/font.c
View file @
97299606
...
...
@@ -7,7 +7,7 @@ int rfbDrawChar(rfbScreenInfoPtr rfbScreen,rfbFontDataPtr font,
unsigned
char
*
data
=
font
->
data
+
font
->
metaData
[
c
*
5
];
unsigned
char
d
=*
data
;
int
rowstride
=
rfbScreen
->
paddedWidthInBytes
;
int
bpp
=
rfbScreen
->
rfbS
erverFormat
.
bitsPerPixel
/
8
;
int
bpp
=
rfbScreen
->
s
erverFormat
.
bitsPerPixel
/
8
;
char
*
colour
=
(
char
*
)
&
col
;
if
(
!
rfbEndianTest
)
...
...
@@ -52,7 +52,7 @@ int rfbDrawCharWithClip(rfbScreenInfoPtr rfbScreen,rfbFontDataPtr font,
unsigned
char
*
data
=
font
->
data
+
font
->
metaData
[
c
*
5
];
unsigned
char
d
;
int
rowstride
=
rfbScreen
->
paddedWidthInBytes
;
int
bpp
=
rfbScreen
->
rfbS
erverFormat
.
bitsPerPixel
/
8
,
extra_bytes
=
0
;
int
bpp
=
rfbScreen
->
s
erverFormat
.
bitsPerPixel
/
8
,
extra_bytes
=
0
;
char
*
colour
=
(
char
*
)
&
col
;
char
*
bcolour
=
(
char
*
)
&
bcol
;
...
...
This diff is collapsed.
Click to expand it.
libvncserver/hextile.c
View file @
97299606
...
...
@@ -58,8 +58,8 @@ rfbSendRectEncodingHextile(cl, x, y, w, h)
sz_rfbFramebufferUpdateRectHeader
);
cl
->
ublen
+=
sz_rfbFramebufferUpdateRectHeader
;
cl
->
r
fbR
ectanglesSent
[
rfbEncodingHextile
]
++
;
cl
->
rfbB
ytesSent
[
rfbEncodingHextile
]
+=
sz_rfbFramebufferUpdateRectHeader
;
cl
->
rectanglesSent
[
rfbEncodingHextile
]
++
;
cl
->
b
ytesSent
[
rfbEncodingHextile
]
+=
sz_rfbFramebufferUpdateRectHeader
;
switch
(
cl
->
format
.
bitsPerPixel
)
{
case
8
:
...
...
@@ -130,7 +130,7 @@ sendHextiles##bpp(cl, rx, ry, rw, rh)
fbptr = (cl->screen->frameBuffer + (cl->screen->paddedWidthInBytes * y) \
+ (x * (cl->screen->bitsPerPixel / 8))); \
\
(*cl->translateFn)(cl->translateLookupTable, &(cl->screen->
rfbS
erverFormat), \
(*cl->translateFn)(cl->translateLookupTable, &(cl->screen->
s
erverFormat), \
&cl->format, fbptr, (char *)clientPixelData, \
cl->screen->paddedWidthInBytes, w, h); \
\
...
...
@@ -149,7 +149,7 @@ sendHextiles##bpp(cl, rx, ry, rw, rh)
} \
\
if (solid) { \
cl->
rfbB
ytesSent[rfbEncodingHextile] += cl->ublen - startUblen; \
cl->
b
ytesSent[rfbEncodingHextile] += cl->ublen - startUblen; \
continue; \
} \
\
...
...
@@ -174,7 +174,7 @@ sendHextiles##bpp(cl, rx, ry, rw, rh)
cl->ublen = startUblen; \
cl->updateBuf[cl->ublen++] = rfbHextileRaw; \
(*cl->translateFn)(cl->translateLookupTable, \
&(cl->screen->
rfbS
erverFormat), &cl->format, fbptr, \
&(cl->screen->
s
erverFormat), &cl->format, fbptr, \
(char *)clientPixelData, \
cl->screen->paddedWidthInBytes, w, h); \
\
...
...
@@ -184,7 +184,7 @@ sendHextiles##bpp(cl, rx, ry, rw, rh)
cl->ublen += w * h * (bpp/8); \
} \
\
cl->
rfbB
ytesSent[rfbEncodingHextile] += cl->ublen - startUblen; \
cl->
b
ytesSent[rfbEncodingHextile] += cl->ublen - startUblen; \
} \
} \
\
...
...
This diff is collapsed.
Click to expand it.
libvncserver/httpd.c
View file @
97299606
...
...
@@ -84,7 +84,7 @@ static size_t buf_filled=0;
*/
void
h
ttpInitSockets
(
rfbScreenInfoPtr
rfbScreen
)
rfbH
ttpInitSockets
(
rfbScreenInfoPtr
rfbScreen
)
{
if
(
rfbScreen
->
httpInitDone
)
return
;
...
...
@@ -95,14 +95,14 @@ httpInitSockets(rfbScreenInfoPtr rfbScreen)
return
;
if
(
rfbScreen
->
httpPort
==
0
)
{
rfbScreen
->
httpPort
=
rfbScreen
->
rfbP
ort
-
100
;
rfbScreen
->
httpPort
=
rfbScreen
->
p
ort
-
100
;
}
rfbLog
(
"Listening for HTTP connections on TCP port %d
\n
"
,
rfbScreen
->
httpPort
);
rfbLog
(
" URL http://%s:%d
\n
"
,
rfbScreen
->
rfbT
hisHost
,
rfbScreen
->
httpPort
);
rfbLog
(
" URL http://%s:%d
\n
"
,
rfbScreen
->
t
hisHost
,
rfbScreen
->
httpPort
);
if
((
rfbScreen
->
httpListenSock
=
ListenOnTCPPort
(
rfbScreen
->
httpPort
))
<
0
)
{
if
((
rfbScreen
->
httpListenSock
=
rfb
ListenOnTCPPort
(
rfbScreen
->
httpPort
))
<
0
)
{
rfbLogPerror
(
"ListenOnTCPPort"
);
return
;
}
...
...
@@ -117,7 +117,7 @@ httpInitSockets(rfbScreenInfoPtr rfbScreen)
*/
void
h
ttpCheckFds
(
rfbScreenInfoPtr
rfbScreen
)
rfbH
ttpCheckFds
(
rfbScreenInfoPtr
rfbScreen
)
{
int
nfds
;
fd_set
fds
;
...
...
@@ -274,15 +274,15 @@ httpProcessInput(rfbScreenInfoPtr rfbScreen)
if
(
rfbScreen
->
httpEnableProxyConnect
)
{
const
static
char
*
PROXY_OK_STR
=
"HTTP/1.0 200 OK
\r\n
Content-Type: octet-stream
\r\n
Pragma: no-cache
\r\n\r\n
"
;
if
(
!
strncmp
(
buf
,
"CONNECT "
,
8
))
{
if
(
atoi
(
strchr
(
buf
,
':'
)
+
1
)
!=
rfbScreen
->
rfbP
ort
)
{
if
(
atoi
(
strchr
(
buf
,
':'
)
+
1
)
!=
rfbScreen
->
p
ort
)
{
rfbErr
(
"httpd: CONNECT format invalid.
\n
"
);
WriteExact
(
&
cl
,
INVALID_REQUEST_STR
,
strlen
(
INVALID_REQUEST_STR
));
rfb
WriteExact
(
&
cl
,
INVALID_REQUEST_STR
,
strlen
(
INVALID_REQUEST_STR
));
httpCloseSock
(
rfbScreen
);
return
;
}
/* proxy connection */
rfbLog
(
"httpd: client asked for CONNECT
\n
"
);
WriteExact
(
&
cl
,
PROXY_OK_STR
,
strlen
(
PROXY_OK_STR
));
rfb
WriteExact
(
&
cl
,
PROXY_OK_STR
,
strlen
(
PROXY_OK_STR
));
rfbNewClientConnection
(
rfbScreen
,
rfbScreen
->
httpSock
);
rfbScreen
->
httpSock
=
-
1
;
return
;
...
...
@@ -290,7 +290,7 @@ httpProcessInput(rfbScreenInfoPtr rfbScreen)
if
(
!
strncmp
(
buf
,
"GET "
,
4
)
&&
!
strncmp
(
strchr
(
buf
,
'/'
),
"/proxied.connection HTTP/1."
,
27
))
{
/* proxy connection */
rfbLog
(
"httpd: client asked for /proxied.connection
\n
"
);
WriteExact
(
&
cl
,
PROXY_OK_STR
,
strlen
(
PROXY_OK_STR
));
rfb
WriteExact
(
&
cl
,
PROXY_OK_STR
,
strlen
(
PROXY_OK_STR
));
rfbNewClientConnection
(
rfbScreen
,
rfbScreen
->
httpSock
);
rfbScreen
->
httpSock
=
-
1
;
return
;
...
...
@@ -320,14 +320,14 @@ httpProcessInput(rfbScreenInfoPtr rfbScreen)
if
(
fname
[
0
]
!=
'/'
)
{
rfbErr
(
"httpd: filename didn't begin with '/'
\n
"
);
WriteExact
(
&
cl
,
NOT_FOUND_STR
,
strlen
(
NOT_FOUND_STR
));
rfb
WriteExact
(
&
cl
,
NOT_FOUND_STR
,
strlen
(
NOT_FOUND_STR
));
httpCloseSock
(
rfbScreen
);
return
;
}
if
(
strchr
(
fname
+
1
,
'/'
)
!=
NULL
)
{
rfbErr
(
"httpd: asking for file in other directory
\n
"
);
WriteExact
(
&
cl
,
NOT_FOUND_STR
,
strlen
(
NOT_FOUND_STR
));
rfb
WriteExact
(
&
cl
,
NOT_FOUND_STR
,
strlen
(
NOT_FOUND_STR
));
httpCloseSock
(
rfbScreen
);
return
;
}
...
...
@@ -366,12 +366,12 @@ httpProcessInput(rfbScreenInfoPtr rfbScreen)
if
((
fd
=
fopen
(
fullFname
,
"r"
))
==
0
)
{
rfbLogPerror
(
"httpProcessInput: open"
);
WriteExact
(
&
cl
,
NOT_FOUND_STR
,
strlen
(
NOT_FOUND_STR
));
rfb
WriteExact
(
&
cl
,
NOT_FOUND_STR
,
strlen
(
NOT_FOUND_STR
));
httpCloseSock
(
rfbScreen
);
return
;
}
WriteExact
(
&
cl
,
OK_STR
,
strlen
(
OK_STR
));
rfb
WriteExact
(
&
cl
,
OK_STR
,
strlen
(
OK_STR
));
while
(
1
)
{
int
n
=
fread
(
buf
,
1
,
BUF_SIZE
-
1
,
fd
);
...
...
@@ -397,74 +397,74 @@ httpProcessInput(rfbScreenInfoPtr rfbScreen)
buf
[
n
]
=
0
;
/* make sure it's null-terminated */
while
((
dollar
=
strchr
(
ptr
,
'$'
))
!=
NULL
)
{
WriteExact
(
&
cl
,
ptr
,
(
dollar
-
ptr
));
rfb
WriteExact
(
&
cl
,
ptr
,
(
dollar
-
ptr
));
ptr
=
dollar
;
if
(
compareAndSkip
(
&
ptr
,
"$WIDTH"
))
{
sprintf
(
str
,
"%d"
,
rfbScreen
->
width
);
WriteExact
(
&
cl
,
str
,
strlen
(
str
));
rfb
WriteExact
(
&
cl
,
str
,
strlen
(
str
));
}
else
if
(
compareAndSkip
(
&
ptr
,
"$HEIGHT"
))
{
sprintf
(
str
,
"%d"
,
rfbScreen
->
height
);
WriteExact
(
&
cl
,
str
,
strlen
(
str
));
rfb
WriteExact
(
&
cl
,
str
,
strlen
(
str
));
}
else
if
(
compareAndSkip
(
&
ptr
,
"$APPLETWIDTH"
))
{
sprintf
(
str
,
"%d"
,
rfbScreen
->
width
);
WriteExact
(
&
cl
,
str
,
strlen
(
str
));
rfb
WriteExact
(
&
cl
,
str
,
strlen
(
str
));
}
else
if
(
compareAndSkip
(
&
ptr
,
"$APPLETHEIGHT"
))
{
sprintf
(
str
,
"%d"
,
rfbScreen
->
height
+
32
);
WriteExact
(
&
cl
,
str
,
strlen
(
str
));
rfb
WriteExact
(
&
cl
,
str
,
strlen
(
str
));
}
else
if
(
compareAndSkip
(
&
ptr
,
"$PORT"
))
{
sprintf
(
str
,
"%d"
,
rfbScreen
->
rfbP
ort
);
WriteExact
(
&
cl
,
str
,
strlen
(
str
));
sprintf
(
str
,
"%d"
,
rfbScreen
->
p
ort
);
rfb
WriteExact
(
&
cl
,
str
,
strlen
(
str
));
}
else
if
(
compareAndSkip
(
&
ptr
,
"$DESKTOP"
))
{
WriteExact
(
&
cl
,
rfbScreen
->
desktopName
,
strlen
(
rfbScreen
->
desktopName
));
rfb
WriteExact
(
&
cl
,
rfbScreen
->
desktopName
,
strlen
(
rfbScreen
->
desktopName
));
}
else
if
(
compareAndSkip
(
&
ptr
,
"$DISPLAY"
))
{
sprintf
(
str
,
"%s:%d"
,
rfbScreen
->
rfbThisHost
,
rfbScreen
->
rfbP
ort
-
5900
);
WriteExact
(
&
cl
,
str
,
strlen
(
str
));
sprintf
(
str
,
"%s:%d"
,
rfbScreen
->
thisHost
,
rfbScreen
->
p
ort
-
5900
);
rfb
WriteExact
(
&
cl
,
str
,
strlen
(
str
));
}
else
if
(
compareAndSkip
(
&
ptr
,
"$USER"
))
{
#ifndef WIN32
if
(
user
)
{
WriteExact
(
&
cl
,
user
,
rfb
WriteExact
(
&
cl
,
user
,
strlen
(
user
));
}
else
#endif
WriteExact
(
&
cl
,
"?"
,
1
);
rfb
WriteExact
(
&
cl
,
"?"
,
1
);
}
else
if
(
compareAndSkip
(
&
ptr
,
"$PARAMS"
))
{
if
(
params
[
0
]
!=
'\0'
)
WriteExact
(
&
cl
,
params
,
strlen
(
params
));
rfb
WriteExact
(
&
cl
,
params
,
strlen
(
params
));
}
else
{
if
(
!
compareAndSkip
(
&
ptr
,
"$$"
))
ptr
++
;
if
(
WriteExact
(
&
cl
,
"$"
,
1
)
<
0
)
{
if
(
rfb
WriteExact
(
&
cl
,
"$"
,
1
)
<
0
)
{
fclose
(
fd
);
httpCloseSock
(
rfbScreen
);
return
;
}
}
}
if
(
WriteExact
(
&
cl
,
ptr
,
(
&
buf
[
n
]
-
ptr
))
<
0
)
if
(
rfb
WriteExact
(
&
cl
,
ptr
,
(
&
buf
[
n
]
-
ptr
))
<
0
)
break
;
}
else
{
/* For files not ending .vnc, just write out the buffer */
if
(
WriteExact
(
&
cl
,
buf
,
n
)
<
0
)
if
(
rfb
WriteExact
(
&
cl
,
buf
,
n
)
<
0
)
break
;
}
}
...
...
This diff is collapsed.
Click to expand it.
libvncserver/main.c
View file @
97299606
...
...
@@ -159,22 +159,22 @@ void rfbScheduleCopyRegion(rfbScreenInfoPtr rfbScreen,sraRegionPtr copyRegion,in
rfbReleaseClientIterator
(
iterator
);
}
void
rfbDoCopyRegion
(
rfbScreenInfoPtr
rfbS
creen
,
sraRegionPtr
copyRegion
,
int
dx
,
int
dy
)
void
rfbDoCopyRegion
(
rfbScreenInfoPtr
s
creen
,
sraRegionPtr
copyRegion
,
int
dx
,
int
dy
)
{
sraRectangleIterator
*
i
;
sraRect
rect
;
int
j
,
widthInBytes
,
bpp
=
rfbScreen
->
rfbS
erverFormat
.
bitsPerPixel
/
8
,
rowstride
=
rfbS
creen
->
paddedWidthInBytes
;
int
j
,
widthInBytes
,
bpp
=
screen
->
s
erverFormat
.
bitsPerPixel
/
8
,
rowstride
=
s
creen
->
paddedWidthInBytes
;
char
*
in
,
*
out
;
rfbUndrawCursor
(
rfbS
creen
);
rfbUndrawCursor
(
s
creen
);
/* copy it, really */
i
=
sraRgnGetReverseIterator
(
copyRegion
,
dx
<
0
,
dy
<
0
);
while
(
sraRgnIteratorNext
(
i
,
&
rect
))
{
widthInBytes
=
(
rect
.
x2
-
rect
.
x1
)
*
bpp
;
out
=
rfbS
creen
->
frameBuffer
+
rect
.
x1
*
bpp
+
rect
.
y1
*
rowstride
;
in
=
rfbS
creen
->
frameBuffer
+
(
rect
.
x1
-
dx
)
*
bpp
+
(
rect
.
y1
-
dy
)
*
rowstride
;
out
=
s
creen
->
frameBuffer
+
rect
.
x1
*
bpp
+
rect
.
y1
*
rowstride
;
in
=
s
creen
->
frameBuffer
+
(
rect
.
x1
-
dx
)
*
bpp
+
(
rect
.
y1
-
dy
)
*
rowstride
;
if
(
dy
<
0
)
for
(
j
=
rect
.
y1
;
j
<
rect
.
y2
;
j
++
,
out
+=
rowstride
,
in
+=
rowstride
)
memmove
(
out
,
in
,
widthInBytes
);
...
...
@@ -186,27 +186,27 @@ void rfbDoCopyRegion(rfbScreenInfoPtr rfbScreen,sraRegionPtr copyRegion,int dx,i
}
}
rfbScheduleCopyRegion
(
rfbS
creen
,
copyRegion
,
dx
,
dy
);
rfbScheduleCopyRegion
(
s
creen
,
copyRegion
,
dx
,
dy
);
}
void
rfbDoCopyRect
(
rfbScreenInfoPtr
rfbS
creen
,
int
x1
,
int
y1
,
int
x2
,
int
y2
,
int
dx
,
int
dy
)
void
rfbDoCopyRect
(
rfbScreenInfoPtr
s
creen
,
int
x1
,
int
y1
,
int
x2
,
int
y2
,
int
dx
,
int
dy
)
{
sraRegionPtr
region
=
sraRgnCreateRect
(
x1
,
y1
,
x2
,
y2
);
rfbDoCopyRegion
(
rfbS
creen
,
region
,
dx
,
dy
);
rfbDoCopyRegion
(
s
creen
,
region
,
dx
,
dy
);
}
void
rfbScheduleCopyRect
(
rfbScreenInfoPtr
rfbS
creen
,
int
x1
,
int
y1
,
int
x2
,
int
y2
,
int
dx
,
int
dy
)
void
rfbScheduleCopyRect
(
rfbScreenInfoPtr
s
creen
,
int
x1
,
int
y1
,
int
x2
,
int
y2
,
int
dx
,
int
dy
)
{
sraRegionPtr
region
=
sraRgnCreateRect
(
x1
,
y1
,
x2
,
y2
);
rfbScheduleCopyRegion
(
rfbS
creen
,
region
,
dx
,
dy
);
rfbScheduleCopyRegion
(
s
creen
,
region
,
dx
,
dy
);
}
void
rfbMarkRegionAsModified
(
rfbScreenInfoPtr
rfbS
creen
,
sraRegionPtr
modRegion
)
void
rfbMarkRegionAsModified
(
rfbScreenInfoPtr
s
creen
,
sraRegionPtr
modRegion
)
{
rfbClientIteratorPtr
iterator
;
rfbClientPtr
cl
;
iterator
=
rfbGetClientIterator
(
rfbS
creen
);
iterator
=
rfbGetClientIterator
(
s
creen
);
while
((
cl
=
rfbClientIteratorNext
(
iterator
)))
{
LOCK
(
cl
->
updateMutex
);
sraRgnOr
(
cl
->
modifiedRegion
,
modRegion
);
...
...
@@ -217,23 +217,23 @@ void rfbMarkRegionAsModified(rfbScreenInfoPtr rfbScreen,sraRegionPtr modRegion)
rfbReleaseClientIterator
(
iterator
);
}
void
rfbMarkRectAsModified
(
rfbScreenInfoPtr
rfbS
creen
,
int
x1
,
int
y1
,
int
x2
,
int
y2
)
void
rfbMarkRectAsModified
(
rfbScreenInfoPtr
s
creen
,
int
x1
,
int
y1
,
int
x2
,
int
y2
)
{
sraRegionPtr
region
;
int
i
;
if
(
x1
>
x2
)
{
i
=
x1
;
x1
=
x2
;
x2
=
i
;
}
if
(
x1
<
0
)
x1
=
0
;
if
(
x2
>=
rfbScreen
->
width
)
x2
=
rfbS
creen
->
width
-
1
;
if
(
x2
>=
screen
->
width
)
x2
=
s
creen
->
width
-
1
;
if
(
x1
==
x2
)
return
;
if
(
y1
>
y2
)
{
i
=
y1
;
y1
=
y2
;
y2
=
i
;
}
if
(
y1
<
0
)
y1
=
0
;
if
(
y2
>=
rfbScreen
->
height
)
y2
=
rfbS
creen
->
height
-
1
;
if
(
y2
>=
screen
->
height
)
y2
=
s
creen
->
height
-
1
;
if
(
y1
==
y2
)
return
;
region
=
sraRgnCreateRect
(
x1
,
y1
,
x2
,
y2
);
rfbMarkRegionAsModified
(
rfbS
creen
,
region
);
rfbMarkRegionAsModified
(
s
creen
,
region
);
sraRgnDestroy
(
region
);
}
...
...
@@ -269,7 +269,7 @@ clientOutput(void *data)
/* OK, now, to save bandwidth, wait a little while for more
updates to come along. */
usleep
(
cl
->
screen
->
rfbD
eferUpdateTime
*
1000
);
usleep
(
cl
->
screen
->
d
eferUpdateTime
*
1000
);
/* Now, get the region we're going to update, and remove
it from cl->modifiedRegion _before_ we send the update.
...
...
@@ -319,7 +319,7 @@ clientInput(void *data)
static
void
*
listenerRun
(
void
*
data
)
{
rfbScreenInfoPtr
rfbS
creen
=
(
rfbScreenInfoPtr
)
data
;
rfbScreenInfoPtr
s
creen
=
(
rfbScreenInfoPtr
)
data
;
int
client_fd
;
struct
sockaddr_in
peer
;
rfbClientPtr
cl
;
...
...
@@ -328,9 +328,9 @@ listenerRun(void *data)
len
=
sizeof
(
peer
);
/* TODO: this thread wont die by restarting the server */
while
((
client_fd
=
accept
(
rfbScreen
->
rfbL
istenSock
,
while
((
client_fd
=
accept
(
screen
->
l
istenSock
,
(
struct
sockaddr
*
)
&
peer
,
&
len
))
>=
0
)
{
cl
=
rfbNewClient
(
rfbS
creen
,
client_fd
);
cl
=
rfbNewClient
(
s
creen
,
client_fd
);
len
=
sizeof
(
peer
);
if
(
cl
&&
!
cl
->
onHold
)
...
...
@@ -363,12 +363,12 @@ rfbRefuseOnHoldClient(rfbClientPtr cl)
}
static
void
d
efaultKbdAddEvent
(
rfbBool
down
,
rfbKeySym
keySym
,
rfbClientPtr
cl
)
rfbD
efaultKbdAddEvent
(
rfbBool
down
,
rfbKeySym
keySym
,
rfbClientPtr
cl
)
{
}
void
d
efaultPtrAddEvent
(
int
buttonMask
,
int
x
,
int
y
,
rfbClientPtr
cl
)
rfbD
efaultPtrAddEvent
(
int
buttonMask
,
int
x
,
int
y
,
rfbClientPtr
cl
)
{
rfbClientIteratorPtr
iterator
;
rfbClientPtr
other_client
;
...
...
@@ -398,7 +398,7 @@ defaultPtrAddEvent(int buttonMask, int x, int y, rfbClientPtr cl)
}
}
void
d
efaultSetXCutText
(
char
*
text
,
int
len
,
rfbClientPtr
cl
)
void
rfbD
efaultSetXCutText
(
char
*
text
,
int
len
,
rfbClientPtr
cl
)
{
}
...
...
@@ -431,23 +431,23 @@ static rfbCursor myCursor =
};
#endif
rfbCursorPtr
d
efaultGetCursorPtr
(
rfbClientPtr
cl
)
rfbCursorPtr
rfbD
efaultGetCursorPtr
(
rfbClientPtr
cl
)
{
return
(
cl
->
screen
->
cursor
);
}
/* response is cl->authChallenge vncEncrypted with passwd */
rfbBool
d
efaultPasswordCheck
(
rfbClientPtr
cl
,
const
char
*
response
,
int
len
)
rfbBool
rfbD
efaultPasswordCheck
(
rfbClientPtr
cl
,
const
char
*
response
,
int
len
)
{
int
i
;
char
*
passwd
=
vncDecryptPasswdFromFile
(
cl
->
screen
->
rfbA
uthPasswdData
);
char
*
passwd
=
rfbDecryptPasswdFromFile
(
cl
->
screen
->
a
uthPasswdData
);
if
(
!
passwd
)
{
rfbErr
(
"Couldn't read password file: %s
\n
"
,
cl
->
screen
->
rfbA
uthPasswdData
);
rfbErr
(
"Couldn't read password file: %s
\n
"
,
cl
->
screen
->
a
uthPasswdData
);
return
(
FALSE
);
}
vnc
EncryptBytes
(
cl
->
authChallenge
,
passwd
);
rfb
EncryptBytes
(
cl
->
authChallenge
,
passwd
);
/* Lose the password from memory */
for
(
i
=
strlen
(
passwd
);
i
>=
0
;
i
--
)
{
...
...
@@ -457,7 +457,7 @@ rfbBool defaultPasswordCheck(rfbClientPtr cl,const char* response,int len)
free
(
passwd
);
if
(
memcmp
(
cl
->
authChallenge
,
response
,
len
)
!=
0
)
{
rfbErr
(
"
rfbA
uthProcessClientMessage: authentication failed from %s
\n
"
,
rfbErr
(
"
a
uthProcessClientMessage: authentication failed from %s
\n
"
,
cl
->
host
);
return
(
FALSE
);
}
...
...
@@ -465,55 +465,55 @@ rfbBool defaultPasswordCheck(rfbClientPtr cl,const char* response,int len)
return
(
TRUE
);
}
/* for this method,
rfbA
uthPasswdData is really a pointer to an array
/* for this method,
a
uthPasswdData is really a pointer to an array
of char*'s, where the last pointer is 0. */
rfbBool
rfbCheckPasswordByList
(
rfbClientPtr
cl
,
const
char
*
response
,
int
len
)
{
char
**
passwds
;
int
i
=
0
;
for
(
passwds
=
(
char
**
)
cl
->
screen
->
rfbA
uthPasswdData
;
*
passwds
;
passwds
++
,
i
++
)
{
for
(
passwds
=
(
char
**
)
cl
->
screen
->
a
uthPasswdData
;
*
passwds
;
passwds
++
,
i
++
)
{
uint8_t
auth_tmp
[
CHALLENGESIZE
];
memcpy
((
char
*
)
auth_tmp
,
(
char
*
)
cl
->
authChallenge
,
CHALLENGESIZE
);
vnc
EncryptBytes
(
auth_tmp
,
*
passwds
);
rfb
EncryptBytes
(
auth_tmp
,
*
passwds
);
if
(
memcmp
(
auth_tmp
,
response
,
len
)
==
0
)
{
if
(
i
>=
cl
->
screen
->
rfbA
uthPasswdFirstViewOnly
)
if
(
i
>=
cl
->
screen
->
a
uthPasswdFirstViewOnly
)
cl
->
viewOnly
=
TRUE
;
return
(
TRUE
);
}
}
rfbErr
(
"
rfbA
uthProcessClientMessage: authentication failed from %s
\n
"
,
rfbErr
(
"
a
uthProcessClientMessage: authentication failed from %s
\n
"
,
cl
->
host
);
return
(
FALSE
);
}
void
d
oNothingWithClient
(
rfbClientPtr
cl
)
void
rfbD
oNothingWithClient
(
rfbClientPtr
cl
)
{
}
enum
rfbNewClientAction
d
efaultNewClientHook
(
rfbClientPtr
cl
)
enum
rfbNewClientAction
rfbD
efaultNewClientHook
(
rfbClientPtr
cl
)
{
return
RFB_CLIENT_ACCEPT
;
}
/*
* Update server's pixel format in
rfbS
creenInfo structure. This
* Update server's pixel format in
s
creenInfo structure. This
* function is called from rfbGetScreen() and rfbNewFramebuffer().
*/
static
void
rfbInitServerFormat
(
rfbScreenInfoPtr
rfbS
creen
,
int
bitsPerSample
)
static
void
rfbInitServerFormat
(
rfbScreenInfoPtr
s
creen
,
int
bitsPerSample
)
{
rfbPixelFormat
*
format
=&
rfbScreen
->
rfbS
erverFormat
;
rfbPixelFormat
*
format
=&
screen
->
s
erverFormat
;
format
->
bitsPerPixel
=
rfbS
creen
->
bitsPerPixel
;
format
->
depth
=
rfbS
creen
->
depth
;
format
->
bitsPerPixel
=
s
creen
->
bitsPerPixel
;
format
->
depth
=
s
creen
->
depth
;
format
->
bigEndian
=
rfbEndianTest
?
FALSE
:
TRUE
;
format
->
trueColour
=
TRUE
;
rfbS
creen
->
colourMap
.
count
=
0
;
rfbS
creen
->
colourMap
.
is16
=
0
;
rfbS
creen
->
colourMap
.
data
.
bytes
=
NULL
;
s
creen
->
colourMap
.
count
=
0
;
s
creen
->
colourMap
.
is16
=
0
;
s
creen
->
colourMap
.
data
.
bytes
=
NULL
;
if
(
format
->
bitsPerPixel
==
8
)
{
format
->
redMax
=
7
;
...
...
@@ -548,104 +548,104 @@ rfbScreenInfoPtr rfbGetScreen(int* argc,char** argv,
int
width
,
int
height
,
int
bitsPerSample
,
int
samplesPerPixel
,
int
bytesPerPixel
)
{
rfbScreenInfoPtr
rfbS
creen
=
malloc
(
sizeof
(
rfbScreenInfo
));
rfbScreenInfoPtr
s
creen
=
malloc
(
sizeof
(
rfbScreenInfo
));
INIT_MUTEX
(
logMutex
);
if
(
width
&
3
)
rfbErr
(
"WARNING: Width (%d) is not a multiple of 4. VncViewer has problems with that.
\n
"
,
width
);
rfbS
creen
->
autoPort
=
FALSE
;
rfbScreen
->
rfbC
lientHead
=
0
;
rfbScreen
->
rfbP
ort
=
5900
;
rfbS
creen
->
socketInitDone
=
FALSE
;
rfbS
creen
->
inetdInitDone
=
FALSE
;
rfbS
creen
->
inetdSock
=-
1
;
rfbS
creen
->
udpSock
=-
1
;
rfbS
creen
->
udpSockConnected
=
FALSE
;
rfbS
creen
->
udpPort
=
0
;
rfbS
creen
->
udpClient
=
0
;
rfbS
creen
->
maxFd
=
0
;
rfbScreen
->
rfbL
istenSock
=-
1
;
rfbS
creen
->
httpInitDone
=
FALSE
;
rfbS
creen
->
httpEnableProxyConnect
=
FALSE
;
rfbS
creen
->
httpPort
=
0
;
rfbS
creen
->
httpDir
=
NULL
;
rfbS
creen
->
httpListenSock
=-
1
;
rfbS
creen
->
httpSock
=-
1
;
rfbS
creen
->
desktopName
=
"LibVNCServer"
;
rfbScreen
->
rfbA
lwaysShared
=
FALSE
;
rfbScreen
->
rfbN
everShared
=
FALSE
;
rfbScreen
->
rfbD
ontDisconnect
=
FALSE
;
rfbScreen
->
rfbA
uthPasswdData
=
0
;
rfbScreen
->
rfbA
uthPasswdFirstViewOnly
=
1
;
s
creen
->
autoPort
=
FALSE
;
screen
->
c
lientHead
=
0
;
screen
->
p
ort
=
5900
;
s
creen
->
socketInitDone
=
FALSE
;
s
creen
->
inetdInitDone
=
FALSE
;
s
creen
->
inetdSock
=-
1
;
s
creen
->
udpSock
=-
1
;
s
creen
->
udpSockConnected
=
FALSE
;
s
creen
->
udpPort
=
0
;
s
creen
->
udpClient
=
0
;
s
creen
->
maxFd
=
0
;
screen
->
l
istenSock
=-
1
;
s
creen
->
httpInitDone
=
FALSE
;
s
creen
->
httpEnableProxyConnect
=
FALSE
;
s
creen
->
httpPort
=
0
;
s
creen
->
httpDir
=
NULL
;
s
creen
->
httpListenSock
=-
1
;
s
creen
->
httpSock
=-
1
;
s
creen
->
desktopName
=
"LibVNCServer"
;
screen
->
a
lwaysShared
=
FALSE
;
screen
->
n
everShared
=
FALSE
;
screen
->
d
ontDisconnect
=
FALSE
;
screen
->
a
uthPasswdData
=
0
;
screen
->
a
uthPasswdFirstViewOnly
=
1
;
rfbS
creen
->
width
=
width
;
rfbS
creen
->
height
=
height
;
rfbScreen
->
bitsPerPixel
=
rfbS
creen
->
depth
=
8
*
bytesPerPixel
;
s
creen
->
width
=
width
;
s
creen
->
height
=
height
;
screen
->
bitsPerPixel
=
s
creen
->
depth
=
8
*
bytesPerPixel
;
rfbScreen
->
passwordCheck
=
d
efaultPasswordCheck
;
screen
->
passwordCheck
=
rfbD
efaultPasswordCheck
;
rfbS
creen
->
ignoreSIGPIPE
=
TRUE
;
s
creen
->
ignoreSIGPIPE
=
TRUE
;
/* disable progressive updating per default */
rfbS
creen
->
progressiveSliceHeight
=
0
;
s
creen
->
progressiveSliceHeight
=
0
;
if
(
!
rfbProcessArguments
(
rfbS
creen
,
argc
,
argv
))
{
free
(
rfbS
creen
);
if
(
!
rfbProcessArguments
(
s
creen
,
argc
,
argv
))
{
free
(
s
creen
);
return
0
;
}
#ifdef WIN32
{
DWORD
dummy
=
255
;
GetComputerName
(
rfbScreen
->
rfbT
hisHost
,
&
dummy
);
GetComputerName
(
screen
->
t
hisHost
,
&
dummy
);
}
#else
gethostname
(
rfbScreen
->
rfbT
hisHost
,
255
);
gethostname
(
screen
->
t
hisHost
,
255
);
#endif
rfbS
creen
->
paddedWidthInBytes
=
width
*
bytesPerPixel
;
s
creen
->
paddedWidthInBytes
=
width
*
bytesPerPixel
;
/* format */
rfbInitServerFormat
(
rfbS
creen
,
bitsPerSample
);
rfbInitServerFormat
(
s
creen
,
bitsPerSample
);
/* cursor */
rfbS
creen
->
cursorIsDrawn
=
FALSE
;
rfbS
creen
->
dontSendFramebufferUpdate
=
FALSE
;
rfbScreen
->
cursorX
=
rfbScreen
->
cursorY
=
rfbS
creen
->
underCursorBufferLen
=
0
;
rfbS
creen
->
underCursorBuffer
=
NULL
;
rfbS
creen
->
dontConvertRichCursorToXCursor
=
FALSE
;
rfbS
creen
->
cursor
=
&
myCursor
;
INIT_MUTEX
(
rfbS
creen
->
cursorMutex
);
s
creen
->
cursorIsDrawn
=
FALSE
;
s
creen
->
dontSendFramebufferUpdate
=
FALSE
;
screen
->
cursorX
=
screen
->
cursorY
=
s
creen
->
underCursorBufferLen
=
0
;
s
creen
->
underCursorBuffer
=
NULL
;
s
creen
->
dontConvertRichCursorToXCursor
=
FALSE
;
s
creen
->
cursor
=
&
myCursor
;
INIT_MUTEX
(
s
creen
->
cursorMutex
);
IF_PTHREADS
(
rfbS
creen
->
backgroundLoop
=
FALSE
);
IF_PTHREADS
(
s
creen
->
backgroundLoop
=
FALSE
);
rfbScreen
->
rfbD
eferUpdateTime
=
5
;
rfbS
creen
->
maxRectsPerUpdate
=
50
;
screen
->
d
eferUpdateTime
=
5
;
s
creen
->
maxRectsPerUpdate
=
50
;
/* proc's and hook's */
rfbScreen
->
kbdAddEvent
=
d
efaultKbdAddEvent
;
rfbScreen
->
kbdReleaseAllKeys
=
d
oNothingWithClient
;
rfbScreen
->
ptrAddEvent
=
d
efaultPtrAddEvent
;
rfbScreen
->
setXCutText
=
d
efaultSetXCutText
;
rfbScreen
->
getCursorPtr
=
d
efaultGetCursorPtr
;
rfbS
creen
->
setTranslateFunction
=
rfbSetTranslateFunction
;
rfbScreen
->
newClientHook
=
d
efaultNewClientHook
;
rfbS
creen
->
displayHook
=
0
;
screen
->
kbdAddEvent
=
rfbD
efaultKbdAddEvent
;
screen
->
kbdReleaseAllKeys
=
rfbD
oNothingWithClient
;
screen
->
ptrAddEvent
=
rfbD
efaultPtrAddEvent
;
screen
->
setXCutText
=
rfbD
efaultSetXCutText
;
screen
->
getCursorPtr
=
rfbD
efaultGetCursorPtr
;
s
creen
->
setTranslateFunction
=
rfbSetTranslateFunction
;
screen
->
newClientHook
=
rfbD
efaultNewClientHook
;
s
creen
->
displayHook
=
0
;
/* initialize client list and iterator mutex */
rfbClientListInit
(
rfbS
creen
);
rfbClientListInit
(
s
creen
);
return
(
rfbS
creen
);
return
(
s
creen
);
}
/*
...
...
@@ -656,7 +656,7 @@ rfbScreenInfoPtr rfbGetScreen(int* argc,char** argv,
* the caller.
*/
void
rfbNewFramebuffer
(
rfbScreenInfoPtr
rfbS
creen
,
char
*
framebuffer
,
void
rfbNewFramebuffer
(
rfbScreenInfoPtr
s
creen
,
char
*
framebuffer
,
int
width
,
int
height
,
int
bitsPerSample
,
int
samplesPerPixel
,
int
bytesPerPixel
)
...
...
@@ -668,44 +668,44 @@ void rfbNewFramebuffer(rfbScreenInfoPtr rfbScreen, char *framebuffer,
/* Remove the pointer */
rfbUndrawCursor
(
rfbS
creen
);
rfbUndrawCursor
(
s
creen
);
/* Update information in the
rfbS
creenInfo structure */
/* Update information in the
s
creenInfo structure */
old_format
=
rfbScreen
->
rfbS
erverFormat
;
old_format
=
screen
->
s
erverFormat
;
if
(
width
&
3
)
rfbErr
(
"WARNING: New width (%d) is not a multiple of 4.
\n
"
,
width
);
rfbS
creen
->
width
=
width
;
rfbS
creen
->
height
=
height
;
rfbScreen
->
bitsPerPixel
=
rfbS
creen
->
depth
=
8
*
bytesPerPixel
;
rfbS
creen
->
paddedWidthInBytes
=
width
*
bytesPerPixel
;
s
creen
->
width
=
width
;
s
creen
->
height
=
height
;
screen
->
bitsPerPixel
=
s
creen
->
depth
=
8
*
bytesPerPixel
;
s
creen
->
paddedWidthInBytes
=
width
*
bytesPerPixel
;
rfbInitServerFormat
(
rfbS
creen
,
bitsPerSample
);
rfbInitServerFormat
(
s
creen
,
bitsPerSample
);
if
(
memcmp
(
&
rfbScreen
->
rfbS
erverFormat
,
&
old_format
,
if
(
memcmp
(
&
screen
->
s
erverFormat
,
&
old_format
,
sizeof
(
rfbPixelFormat
))
!=
0
)
{
format_changed
=
TRUE
;
}
rfbS
creen
->
frameBuffer
=
framebuffer
;
s
creen
->
frameBuffer
=
framebuffer
;
/* Adjust pointer position if necessary */
if
(
rfbS
creen
->
cursorX
>=
width
)
rfbS
creen
->
cursorX
=
width
-
1
;
if
(
rfbS
creen
->
cursorY
>=
height
)
rfbS
creen
->
cursorY
=
height
-
1
;
if
(
s
creen
->
cursorX
>=
width
)
s
creen
->
cursorX
=
width
-
1
;
if
(
s
creen
->
cursorY
>=
height
)
s
creen
->
cursorY
=
height
-
1
;
/* For each client: */
iterator
=
rfbGetClientIterator
(
rfbS
creen
);
iterator
=
rfbGetClientIterator
(
s
creen
);
while
((
cl
=
rfbClientIteratorNext
(
iterator
))
!=
NULL
)
{
/* Re-install color translation tables if necessary */
if
(
format_changed
)
rfbS
creen
->
setTranslateFunction
(
cl
);
s
creen
->
setTranslateFunction
(
cl
);
/* Mark the screen contents as changed, and schedule sending
NewFBSize message if supported by this client. */
...
...
@@ -730,9 +730,9 @@ void rfbNewFramebuffer(rfbScreenInfoPtr rfbScreen, char *framebuffer,
extern
void
TightCleanup
();
#endif
void
rfbScreenCleanup
(
rfbScreenInfoPtr
rfbS
creen
)
void
rfbScreenCleanup
(
rfbScreenInfoPtr
s
creen
)
{
rfbClientIteratorPtr
i
=
rfbGetClientIterator
(
rfbS
creen
);
rfbClientIteratorPtr
i
=
rfbGetClientIterator
(
s
creen
);
rfbClientPtr
cl
,
cl1
=
rfbClientIteratorNext
(
i
);
while
(
cl1
)
{
cl
=
rfbClientIteratorNext
(
i
);
...
...
@@ -742,27 +742,27 @@ void rfbScreenCleanup(rfbScreenInfoPtr rfbScreen)
rfbReleaseClientIterator
(
i
);
/* TODO: hang up on all clients and free all reserved memory */
#define FREE_IF(x) if(
rfbScreen->x) free(rfbS
creen->x)
#define FREE_IF(x) if(
screen->x) free(s
creen->x)
FREE_IF
(
colourMap
.
data
.
bytes
);
FREE_IF
(
underCursorBuffer
);
TINI_MUTEX
(
rfbS
creen
->
cursorMutex
);
if
(
rfbS
creen
->
cursor
)
rfbFreeCursor
(
rfbS
creen
->
cursor
);
free
(
rfbS
creen
);
TINI_MUTEX
(
s
creen
->
cursorMutex
);
if
(
s
creen
->
cursor
)
rfbFreeCursor
(
s
creen
->
cursor
);
free
(
s
creen
);
#ifdef LIBVNCSERVER_HAVE_LIBJPEG
TightCleanup
();
rfb
TightCleanup
();
#endif
}
void
rfbInitServer
(
rfbScreenInfoPtr
rfbS
creen
)
void
rfbInitServer
(
rfbScreenInfoPtr
s
creen
)
{
#ifdef WIN32
WSADATA
trash
;
int
i
=
WSAStartup
(
MAKEWORD
(
2
,
2
),
&
trash
);
#endif
rfbInitSockets
(
rfbS
creen
);
httpInitSockets
(
rfbS
creen
);
if
(
rfbS
creen
->
ignoreSIGPIPE
)
rfbInitSockets
(
s
creen
);
rfbHttpInitSockets
(
s
creen
);
if
(
s
creen
->
ignoreSIGPIPE
)
signal
(
SIGPIPE
,
SIG_IGN
);
}
...
...
@@ -784,27 +784,27 @@ void gettimeofday(struct timeval* tv,char* dummy)
rfbClientPtr
rfbClientIteratorHead
(
rfbClientIteratorPtr
i
);
void
rfbProcessEvents
(
rfbScreenInfoPtr
rfbS
creen
,
long
usec
)
rfbProcessEvents
(
rfbScreenInfoPtr
s
creen
,
long
usec
)
{
rfbClientIteratorPtr
i
;
rfbClientPtr
cl
,
clPrev
;
struct
timeval
tv
;
if
(
usec
<
0
)
usec
=
rfbScreen
->
rfbD
eferUpdateTime
*
1000
;
usec
=
screen
->
d
eferUpdateTime
*
1000
;
rfbCheckFds
(
rfbS
creen
,
usec
);
httpCheckFds
(
rfbS
creen
);
rfbCheckFds
(
s
creen
,
usec
);
rfbHttpCheckFds
(
s
creen
);
#ifdef CORBA
corbaCheckFds
(
rfbS
creen
);
corbaCheckFds
(
s
creen
);
#endif
i
=
rfbGetClientIterator
(
rfbS
creen
);
i
=
rfbGetClientIterator
(
s
creen
);
cl
=
rfbClientIteratorHead
(
i
);
while
(
cl
)
{
if
(
cl
->
sock
>=
0
&&
!
cl
->
onHold
&&
FB_UPDATE_PENDING
(
cl
)
&&
!
sraRgnEmpty
(
cl
->
requestedRegion
))
{
if
(
rfbScreen
->
rfbD
eferUpdateTime
==
0
)
{
if
(
screen
->
d
eferUpdateTime
==
0
)
{
rfbSendFramebufferUpdate
(
cl
,
cl
->
modifiedRegion
);
}
else
if
(
cl
->
startDeferring
.
tv_usec
==
0
)
{
gettimeofday
(
&
cl
->
startDeferring
,
NULL
);
...
...
@@ -815,7 +815,7 @@ rfbProcessEvents(rfbScreenInfoPtr rfbScreen,long usec)
if
(
tv
.
tv_sec
<
cl
->
startDeferring
.
tv_sec
/* at midnight */
||
((
tv
.
tv_sec
-
cl
->
startDeferring
.
tv_sec
)
*
1000
+
(
tv
.
tv_usec
-
cl
->
startDeferring
.
tv_usec
)
/
1000
)
>
rfbScreen
->
rfbD
eferUpdateTime
)
{
>
screen
->
d
eferUpdateTime
)
{
cl
->
startDeferring
.
tv_usec
=
0
;
rfbSendFramebufferUpdate
(
cl
,
cl
->
modifiedRegion
);
}
...
...
@@ -829,15 +829,15 @@ rfbProcessEvents(rfbScreenInfoPtr rfbScreen,long usec)
rfbReleaseClientIterator
(
i
);
}
void
rfbRunEventLoop
(
rfbScreenInfoPtr
rfbS
creen
,
long
usec
,
rfbBool
runInBackground
)
void
rfbRunEventLoop
(
rfbScreenInfoPtr
s
creen
,
long
usec
,
rfbBool
runInBackground
)
{
if
(
runInBackground
)
{
#ifdef LIBVNCSERVER_HAVE_LIBPTHREAD
pthread_t
listener_thread
;
rfbS
creen
->
backgroundLoop
=
TRUE
;
s
creen
->
backgroundLoop
=
TRUE
;
pthread_create
(
&
listener_thread
,
NULL
,
listenerRun
,
rfbS
creen
);
pthread_create
(
&
listener_thread
,
NULL
,
listenerRun
,
s
creen
);
return
;
#else
rfbErr
(
"Can't run in background, because I don't have PThreads!
\n
"
);
...
...
@@ -846,8 +846,8 @@ void rfbRunEventLoop(rfbScreenInfoPtr rfbScreen, long usec, rfbBool runInBackgro
}
if
(
usec
<
0
)
usec
=
rfbScreen
->
rfbD
eferUpdateTime
*
1000
;
usec
=
screen
->
d
eferUpdateTime
*
1000
;
while
(
1
)
rfbProcessEvents
(
rfbS
creen
,
usec
);
rfbProcessEvents
(
s
creen
,
usec
);
}
This diff is collapsed.
Click to expand it.
libvncserver/rfbserver.c
View file @
97299606
...
...
@@ -60,7 +60,7 @@
#define DEBUGPROTO(x)
#endif
rfbClientPtr
pointerClient
=
NULL
;
/* Mutex
for pointer events */
static
rfbClientPtr
pointerClient
=
NULL
;
/* "Mutex"
for pointer events */
static
void
rfbProcessClientProtocolVersion
(
rfbClientPtr
cl
);
static
void
rfbProcessClientNormalMessage
(
rfbClientPtr
cl
);
...
...
@@ -105,7 +105,7 @@ rfbClientListInit(rfbScreenInfoPtr rfbScreen)
/* we cannot continue, because rfbBool is supposed to be char everywhere */
exit
(
1
);
}
rfbScreen
->
rfbC
lientHead
=
NULL
;
rfbScreen
->
c
lientHead
=
NULL
;
INIT_MUTEX
(
rfbClientListMutex
);
}
...
...
@@ -125,11 +125,11 @@ rfbClientIteratorHead(rfbClientIteratorPtr i)
#ifdef LIBVNCSERVER_HAVE_LIBPTHREAD
if
(
i
->
next
!=
0
)
{
rfbDecrClientRef
(
i
->
next
);
rfbIncrClientRef
(
i
->
screen
->
rfbC
lientHead
);
rfbIncrClientRef
(
i
->
screen
->
c
lientHead
);
}
#endif
LOCK
(
rfbClientListMutex
);
i
->
next
=
i
->
screen
->
rfbC
lientHead
;
i
->
next
=
i
->
screen
->
c
lientHead
;
UNLOCK
(
rfbClientListMutex
);
return
i
->
next
;
}
...
...
@@ -139,7 +139,7 @@ rfbClientIteratorNext(rfbClientIteratorPtr i)
{
if
(
i
->
next
==
0
)
{
LOCK
(
rfbClientListMutex
);
i
->
next
=
i
->
screen
->
rfbC
lientHead
;
i
->
next
=
i
->
screen
->
c
lientHead
;
UNLOCK
(
rfbClientListMutex
);
}
else
{
IF_PTHREADS
(
rfbClientPtr
cl
=
i
->
next
);
...
...
@@ -298,19 +298,19 @@ rfbNewTCPOrUDPClient(rfbScreen,sock,isUDP)
cl
->
requestedRegion
=
sraRgnCreate
();
cl
->
format
=
cl
->
screen
->
rfbS
erverFormat
;
cl
->
format
=
cl
->
screen
->
s
erverFormat
;
cl
->
translateFn
=
rfbTranslateNone
;
cl
->
translateLookupTable
=
NULL
;
LOCK
(
rfbClientListMutex
);
IF_PTHREADS
(
cl
->
refCount
=
0
);
cl
->
next
=
rfbScreen
->
rfbC
lientHead
;
cl
->
next
=
rfbScreen
->
c
lientHead
;
cl
->
prev
=
NULL
;
if
(
rfbScreen
->
rfbC
lientHead
)
rfbScreen
->
rfbC
lientHead
->
prev
=
cl
;
if
(
rfbScreen
->
c
lientHead
)
rfbScreen
->
c
lientHead
->
prev
=
cl
;
rfbScreen
->
rfbC
lientHead
=
cl
;
rfbScreen
->
c
lientHead
=
cl
;
UNLOCK
(
rfbClientListMutex
);
#ifdef LIBVNCSERVER_HAVE_LIBJPEG
...
...
@@ -345,7 +345,7 @@ rfbNewTCPOrUDPClient(rfbScreen,sock,isUDP)
sprintf
(
pv
,
rfbProtocolVersionFormat
,
rfbProtocolMajorVersion
,
rfbProtocolMinorVersion
);
if
(
WriteExact
(
cl
,
pv
,
sz_rfbProtocolVersionMsg
)
<
0
)
{
if
(
rfb
WriteExact
(
cl
,
pv
,
sz_rfbProtocolVersionMsg
)
<
0
)
{
rfbLogPerror
(
"rfbNewClient: write"
);
rfbCloseClient
(
cl
);
/* TODO: memory leak here (cl is never freed)
...
...
@@ -357,7 +357,7 @@ rfbNewTCPOrUDPClient(rfbScreen,sock,isUDP)
}
cl
->
clientData
=
NULL
;
cl
->
clientGoneHook
=
d
oNothingWithClient
;
cl
->
clientGoneHook
=
rfbD
oNothingWithClient
;
switch
(
cl
->
screen
->
newClientHook
(
cl
))
{
case
RFB_CLIENT_ON_HOLD
:
cl
->
onHold
=
TRUE
;
...
...
@@ -406,7 +406,7 @@ rfbClientConnectionGone(cl)
if
(
cl
->
prev
)
cl
->
prev
->
next
=
cl
->
next
;
else
cl
->
screen
->
rfbC
lientHead
=
cl
->
next
;
cl
->
screen
->
c
lientHead
=
cl
->
next
;
if
(
cl
->
next
)
cl
->
next
->
prev
=
cl
->
prev
;
...
...
@@ -512,7 +512,7 @@ rfbProcessClientProtocolVersion(cl)
int
n
,
major_
,
minor_
;
char
failureReason
[
256
];
if
((
n
=
ReadExact
(
cl
,
pv
,
sz_rfbProtocolVersionMsg
))
<=
0
)
{
if
((
n
=
rfb
ReadExact
(
cl
,
pv
,
sz_rfbProtocolVersionMsg
))
<=
0
)
{
if
(
n
==
0
)
rfbLog
(
"rfbProcessClientProtocolVersion: client gone
\n
"
);
else
...
...
@@ -572,7 +572,7 @@ rfbClientConnFailed(cl, reason)
((
uint32_t
*
)
buf
)[
1
]
=
Swap32IfLE
(
len
);
memcpy
(
buf
+
8
,
reason
,
len
);
if
(
WriteExact
(
cl
,
buf
,
8
+
len
)
<
0
)
if
(
rfb
WriteExact
(
cl
,
buf
,
8
+
len
)
<
0
)
rfbLogPerror
(
"rfbClientConnFailed: write"
);
free
(
buf
);
rfbCloseClient
(
cl
);
...
...
@@ -595,7 +595,7 @@ rfbProcessClientInitMessage(cl)
rfbClientIteratorPtr
iterator
;
rfbClientPtr
otherCl
;
if
((
n
=
ReadExact
(
cl
,
(
char
*
)
&
ci
,
sz_rfbClientInitMsg
))
<=
0
)
{
if
((
n
=
rfb
ReadExact
(
cl
,
(
char
*
)
&
ci
,
sz_rfbClientInitMsg
))
<=
0
)
{
if
(
n
==
0
)
rfbLog
(
"rfbProcessClientInitMessage: client gone
\n
"
);
else
...
...
@@ -606,7 +606,7 @@ rfbProcessClientInitMessage(cl)
si
->
framebufferWidth
=
Swap16IfLE
(
cl
->
screen
->
width
);
si
->
framebufferHeight
=
Swap16IfLE
(
cl
->
screen
->
height
);
si
->
format
=
cl
->
screen
->
rfbS
erverFormat
;
si
->
format
=
cl
->
screen
->
s
erverFormat
;
si
->
format
.
redMax
=
Swap16IfLE
(
si
->
format
.
redMax
);
si
->
format
.
greenMax
=
Swap16IfLE
(
si
->
format
.
greenMax
);
si
->
format
.
blueMax
=
Swap16IfLE
(
si
->
format
.
blueMax
);
...
...
@@ -618,7 +618,7 @@ rfbProcessClientInitMessage(cl)
len
=
strlen
(
buf
+
sz_rfbServerInitMsg
);
si
->
nameLength
=
Swap32IfLE
(
len
);
if
(
WriteExact
(
cl
,
buf
,
sz_rfbServerInitMsg
+
len
)
<
0
)
{
if
(
rfb
WriteExact
(
cl
,
buf
,
sz_rfbServerInitMsg
+
len
)
<
0
)
{
rfbLogPerror
(
"rfbProcessClientInitMessage: write"
);
rfbCloseClient
(
cl
);
return
;
...
...
@@ -627,9 +627,9 @@ rfbProcessClientInitMessage(cl)
cl
->
state
=
RFB_NORMAL
;
if
(
!
cl
->
reverseConnection
&&
(
cl
->
screen
->
rfbNeverShared
||
(
!
cl
->
screen
->
rfbA
lwaysShared
&&
!
ci
.
shared
)))
{
(
cl
->
screen
->
neverShared
||
(
!
cl
->
screen
->
a
lwaysShared
&&
!
ci
.
shared
)))
{
if
(
cl
->
screen
->
rfbD
ontDisconnect
)
{
if
(
cl
->
screen
->
d
ontDisconnect
)
{
iterator
=
rfbGetClientIterator
(
cl
->
screen
);
while
((
otherCl
=
rfbClientIteratorNext
(
iterator
))
!=
NULL
)
{
if
((
otherCl
!=
cl
)
&&
(
otherCl
->
state
==
RFB_NORMAL
))
{
...
...
@@ -688,7 +688,7 @@ rfbProcessClientNormalMessage(cl)
rfbClientToServerMsg
msg
;
char
*
str
;
if
((
n
=
ReadExact
(
cl
,
(
char
*
)
&
msg
,
1
))
<=
0
)
{
if
((
n
=
rfb
ReadExact
(
cl
,
(
char
*
)
&
msg
,
1
))
<=
0
)
{
if
(
n
!=
0
)
rfbLogPerror
(
"rfbProcessClientNormalMessage: read"
);
rfbCloseClient
(
cl
);
...
...
@@ -699,7 +699,7 @@ rfbProcessClientNormalMessage(cl)
case
rfbSetPixelFormat
:
if
((
n
=
ReadExact
(
cl
,
((
char
*
)
&
msg
)
+
1
,
if
((
n
=
rfb
ReadExact
(
cl
,
((
char
*
)
&
msg
)
+
1
,
sz_rfbSetPixelFormatMsg
-
1
))
<=
0
)
{
if
(
n
!=
0
)
rfbLogPerror
(
"rfbProcessClientNormalMessage: read"
);
...
...
@@ -725,7 +725,7 @@ rfbProcessClientNormalMessage(cl)
case
rfbFixColourMapEntries
:
if
((
n
=
ReadExact
(
cl
,
((
char
*
)
&
msg
)
+
1
,
if
((
n
=
rfb
ReadExact
(
cl
,
((
char
*
)
&
msg
)
+
1
,
sz_rfbFixColourMapEntriesMsg
-
1
))
<=
0
)
{
if
(
n
!=
0
)
rfbLogPerror
(
"rfbProcessClientNormalMessage: read"
);
...
...
@@ -743,7 +743,7 @@ rfbProcessClientNormalMessage(cl)
int
i
;
uint32_t
enc
;
if
((
n
=
ReadExact
(
cl
,
((
char
*
)
&
msg
)
+
1
,
if
((
n
=
rfb
ReadExact
(
cl
,
((
char
*
)
&
msg
)
+
1
,
sz_rfbSetEncodingsMsg
-
1
))
<=
0
)
{
if
(
n
!=
0
)
rfbLogPerror
(
"rfbProcessClientNormalMessage: read"
);
...
...
@@ -761,7 +761,7 @@ rfbProcessClientNormalMessage(cl)
cl
->
useNewFBSize
=
FALSE
;
for
(
i
=
0
;
i
<
msg
.
se
.
nEncodings
;
i
++
)
{
if
((
n
=
ReadExact
(
cl
,
(
char
*
)
&
enc
,
4
))
<=
0
)
{
if
((
n
=
rfb
ReadExact
(
cl
,
(
char
*
)
&
enc
,
4
))
<=
0
)
{
if
(
n
!=
0
)
rfbLogPerror
(
"rfbProcessClientNormalMessage: read"
);
rfbCloseClient
(
cl
);
...
...
@@ -915,7 +915,7 @@ rfbProcessClientNormalMessage(cl)
{
sraRegionPtr
tmpRegion
;
if
((
n
=
ReadExact
(
cl
,
((
char
*
)
&
msg
)
+
1
,
if
((
n
=
rfb
ReadExact
(
cl
,
((
char
*
)
&
msg
)
+
1
,
sz_rfbFramebufferUpdateRequestMsg
-
1
))
<=
0
)
{
if
(
n
!=
0
)
rfbLogPerror
(
"rfbProcessClientNormalMessage: read"
);
...
...
@@ -962,9 +962,9 @@ rfbProcessClientNormalMessage(cl)
case
rfbKeyEvent
:
cl
->
rfbK
eyEventsRcvd
++
;
cl
->
k
eyEventsRcvd
++
;
if
((
n
=
ReadExact
(
cl
,
((
char
*
)
&
msg
)
+
1
,
if
((
n
=
rfb
ReadExact
(
cl
,
((
char
*
)
&
msg
)
+
1
,
sz_rfbKeyEventMsg
-
1
))
<=
0
)
{
if
(
n
!=
0
)
rfbLogPerror
(
"rfbProcessClientNormalMessage: read"
);
...
...
@@ -981,9 +981,9 @@ rfbProcessClientNormalMessage(cl)
case
rfbPointerEvent
:
cl
->
rfbP
ointerEventsRcvd
++
;
cl
->
p
ointerEventsRcvd
++
;
if
((
n
=
ReadExact
(
cl
,
((
char
*
)
&
msg
)
+
1
,
if
((
n
=
rfb
ReadExact
(
cl
,
((
char
*
)
&
msg
)
+
1
,
sz_rfbPointerEventMsg
-
1
))
<=
0
)
{
if
(
n
!=
0
)
rfbLogPerror
(
"rfbProcessClientNormalMessage: read"
);
...
...
@@ -1009,7 +1009,7 @@ rfbProcessClientNormalMessage(cl)
case
rfbClientCutText
:
if
((
n
=
ReadExact
(
cl
,
((
char
*
)
&
msg
)
+
1
,
if
((
n
=
rfb
ReadExact
(
cl
,
((
char
*
)
&
msg
)
+
1
,
sz_rfbClientCutTextMsg
-
1
))
<=
0
)
{
if
(
n
!=
0
)
rfbLogPerror
(
"rfbProcessClientNormalMessage: read"
);
...
...
@@ -1021,7 +1021,7 @@ rfbProcessClientNormalMessage(cl)
str
=
(
char
*
)
malloc
(
msg
.
cct
.
length
);
if
((
n
=
ReadExact
(
cl
,
str
,
msg
.
cct
.
length
))
<=
0
)
{
if
((
n
=
rfb
ReadExact
(
cl
,
str
,
msg
.
cct
.
length
))
<=
0
)
{
if
(
n
!=
0
)
rfbLogPerror
(
"rfbProcessClientNormalMessage: read"
);
free
(
str
);
...
...
@@ -1081,7 +1081,7 @@ rfbSendFramebufferUpdate(cl, givenUpdateRegion)
LOCK
(
cl
->
updateMutex
);
cl
->
newFBSizePending
=
FALSE
;
UNLOCK
(
cl
->
updateMutex
);
cl
->
rfbF
ramebufferUpdateMessagesSent
++
;
cl
->
f
ramebufferUpdateMessagesSent
++
;
fu
->
type
=
rfbFramebufferUpdate
;
fu
->
nRects
=
Swap16IfLE
(
1
);
cl
->
ublen
=
sz_rfbFramebufferUpdateMsg
;
...
...
@@ -1211,7 +1211,7 @@ rfbSendFramebufferUpdate(cl, givenUpdateRegion)
* Now send the update.
*/
cl
->
rfbF
ramebufferUpdateMessagesSent
++
;
cl
->
f
ramebufferUpdateMessagesSent
++
;
if
(
cl
->
preferredEncoding
==
rfbEncodingCoRRE
)
{
nUpdateRegionRects
=
0
;
...
...
@@ -1315,7 +1315,7 @@ rfbSendFramebufferUpdate(cl, givenUpdateRegion)
int
w
=
rect
.
x2
-
x
;
int
h
=
rect
.
y2
-
y
;
cl
->
r
fbR
awBytesEquivalent
+=
(
sz_rfbFramebufferUpdateRectHeader
cl
->
rawBytesEquivalent
+=
(
sz_rfbFramebufferUpdateRectHeader
+
w
*
(
cl
->
format
.
bitsPerPixel
/
8
)
*
h
);
switch
(
cl
->
preferredEncoding
)
{
...
...
@@ -1438,8 +1438,8 @@ rfbSendCopyRegion(cl, reg, dx, dy)
memcpy
(
&
cl
->
updateBuf
[
cl
->
ublen
],
(
char
*
)
&
cr
,
sz_rfbCopyRect
);
cl
->
ublen
+=
sz_rfbCopyRect
;
cl
->
r
fbR
ectanglesSent
[
rfbEncodingCopyRect
]
++
;
cl
->
rfbB
ytesSent
[
rfbEncodingCopyRect
]
cl
->
rectanglesSent
[
rfbEncodingCopyRect
]
++
;
cl
->
b
ytesSent
[
rfbEncodingCopyRect
]
+=
sz_rfbFramebufferUpdateRectHeader
+
sz_rfbCopyRect
;
}
...
...
@@ -1477,8 +1477,8 @@ rfbSendRectEncodingRaw(cl, x, y, w, h)
memcpy
(
&
cl
->
updateBuf
[
cl
->
ublen
],
(
char
*
)
&
rect
,
sz_rfbFramebufferUpdateRectHeader
);
cl
->
ublen
+=
sz_rfbFramebufferUpdateRectHeader
;
cl
->
r
fbR
ectanglesSent
[
rfbEncodingRaw
]
++
;
cl
->
rfbB
ytesSent
[
rfbEncodingRaw
]
cl
->
rectanglesSent
[
rfbEncodingRaw
]
++
;
cl
->
b
ytesSent
[
rfbEncodingRaw
]
+=
sz_rfbFramebufferUpdateRectHeader
+
bytesPerLine
*
h
;
nlines
=
(
UPDATE_BUF_SIZE
-
cl
->
ublen
)
/
bytesPerLine
;
...
...
@@ -1488,7 +1488,7 @@ rfbSendRectEncodingRaw(cl, x, y, w, h)
nlines
=
h
;
(
*
cl
->
translateFn
)(
cl
->
translateLookupTable
,
&
(
cl
->
screen
->
rfbS
erverFormat
),
&
(
cl
->
screen
->
s
erverFormat
),
&
cl
->
format
,
fbptr
,
&
cl
->
updateBuf
[
cl
->
ublen
],
cl
->
screen
->
paddedWidthInBytes
,
w
,
nlines
);
...
...
@@ -1544,8 +1544,8 @@ rfbSendLastRectMarker(cl)
memcpy
(
&
cl
->
updateBuf
[
cl
->
ublen
],
(
char
*
)
&
rect
,
sz_rfbFramebufferUpdateRectHeader
);
cl
->
ublen
+=
sz_rfbFramebufferUpdateRectHeader
;
cl
->
rfbL
astRectMarkersSent
++
;
cl
->
rfbL
astRectBytesSent
+=
sz_rfbFramebufferUpdateRectHeader
;
cl
->
l
astRectMarkersSent
++
;
cl
->
l
astRectBytesSent
+=
sz_rfbFramebufferUpdateRectHeader
;
return
TRUE
;
}
...
...
@@ -1578,8 +1578,8 @@ rfbSendNewFBSize(cl, w, h)
sz_rfbFramebufferUpdateRectHeader
);
cl
->
ublen
+=
sz_rfbFramebufferUpdateRectHeader
;
cl
->
rfbL
astRectMarkersSent
++
;
cl
->
rfbL
astRectBytesSent
+=
sz_rfbFramebufferUpdateRectHeader
;
cl
->
l
astRectMarkersSent
++
;
cl
->
l
astRectBytesSent
+=
sz_rfbFramebufferUpdateRectHeader
;
return
TRUE
;
}
...
...
@@ -1597,7 +1597,7 @@ rfbSendUpdateBuf(cl)
if
(
cl
->
sock
<
0
)
return
FALSE
;
if
(
WriteExact
(
cl
,
cl
->
updateBuf
,
cl
->
ublen
)
<
0
)
{
if
(
rfb
WriteExact
(
cl
,
cl
->
updateBuf
,
cl
->
ublen
)
<
0
)
{
rfbLogPerror
(
"rfbSendUpdateBuf: write"
);
rfbCloseClient
(
cl
);
return
FALSE
;
...
...
@@ -1648,7 +1648,7 @@ rfbSendSetColourMapEntries(cl, firstColour, nColours)
len
+=
nColours
*
3
*
2
;
if
(
WriteExact
(
cl
,
buf
,
len
)
<
0
)
{
if
(
rfb
WriteExact
(
cl
,
buf
,
len
)
<
0
)
{
rfbLogPerror
(
"rfbSendSetColourMapEntries: write"
);
rfbCloseClient
(
cl
);
return
FALSE
;
...
...
@@ -1670,7 +1670,7 @@ rfbSendBell(rfbScreenInfoPtr rfbScreen)
i
=
rfbGetClientIterator
(
rfbScreen
);
while
((
cl
=
rfbClientIteratorNext
(
i
)))
{
b
.
type
=
rfbBell
;
if
(
WriteExact
(
cl
,
(
char
*
)
&
b
,
sz_rfbBellMsg
)
<
0
)
{
if
(
rfb
WriteExact
(
cl
,
(
char
*
)
&
b
,
sz_rfbBellMsg
)
<
0
)
{
rfbLogPerror
(
"rfbSendBell: write"
);
rfbCloseClient
(
cl
);
}
...
...
@@ -1694,13 +1694,13 @@ rfbSendServerCutText(rfbScreenInfoPtr rfbScreen,char *str, int len)
while
((
cl
=
rfbClientIteratorNext
(
iterator
))
!=
NULL
)
{
sct
.
type
=
rfbServerCutText
;
sct
.
length
=
Swap32IfLE
(
len
);
if
(
WriteExact
(
cl
,
(
char
*
)
&
sct
,
if
(
rfb
WriteExact
(
cl
,
(
char
*
)
&
sct
,
sz_rfbServerCutTextMsg
)
<
0
)
{
rfbLogPerror
(
"rfbSendServerCutText: write"
);
rfbCloseClient
(
cl
);
continue
;
}
if
(
WriteExact
(
cl
,
str
,
len
)
<
0
)
{
if
(
rfb
WriteExact
(
cl
,
str
,
len
)
<
0
)
{
rfbLogPerror
(
"rfbSendServerCutText: write"
);
rfbCloseClient
(
cl
);
}
...
...
@@ -1793,13 +1793,13 @@ void rfbSendBackChannel(rfbScreenInfoPtr rfbScreen,char* str,int len)
if
(
cl
->
enableBackChannel
)
{
sct
.
type
=
rfbBackChannel
;
sct
.
length
=
Swap32IfLE
(
len
);
if
(
WriteExact
(
cl
,
(
char
*
)
&
sct
,
if
(
rfb
WriteExact
(
cl
,
(
char
*
)
&
sct
,
sz_rfbBackChannelMsg
)
<
0
)
{
rfbLogPerror
(
"rfbSendBackChannel: write"
);
rfbCloseClient
(
cl
);
continue
;
}
if
(
WriteExact
(
cl
,
str
,
len
)
<
0
)
{
if
(
rfb
WriteExact
(
cl
,
str
,
len
)
<
0
)
{
rfbLogPerror
(
"rfbSendBackChannel: write"
);
rfbCloseClient
(
cl
);
}
...
...
This diff is collapsed.
Click to expand it.
libvncserver/rre.c
View file @
97299606
...
...
@@ -84,7 +84,7 @@ rfbSendRectEncodingRRE(cl, x, y, w, h)
}
(
*
cl
->
translateFn
)(
cl
->
translateLookupTable
,
&
(
cl
->
screen
->
rfbS
erverFormat
),
&
(
cl
->
screen
->
s
erverFormat
),
&
cl
->
format
,
fbptr
,
rreBeforeBuf
,
cl
->
screen
->
paddedWidthInBytes
,
w
,
h
);
...
...
@@ -110,8 +110,8 @@ rfbSendRectEncodingRRE(cl, x, y, w, h)
return
rfbSendRectEncodingRaw
(
cl
,
x
,
y
,
w
,
h
);
}
cl
->
r
fbR
ectanglesSent
[
rfbEncodingRRE
]
++
;
cl
->
rfbB
ytesSent
[
rfbEncodingRRE
]
+=
(
sz_rfbFramebufferUpdateRectHeader
cl
->
rectanglesSent
[
rfbEncodingRRE
]
++
;
cl
->
b
ytesSent
[
rfbEncodingRRE
]
+=
(
sz_rfbFramebufferUpdateRectHeader
+
sz_rfbRREHeader
+
rreAfterBufLen
);
if
(
cl
->
ublen
+
sz_rfbFramebufferUpdateRectHeader
+
sz_rfbRREHeader
...
...
This diff is collapsed.
Click to expand it.
libvncserver/selbox.c
View file @
97299606
...
...
@@ -209,10 +209,10 @@ int rfbSelectBox(rfbScreenInfoPtr rfbScreen,rfbFontDataPtr font,
int
bpp
=
rfbScreen
->
bitsPerPixel
/
8
;
char
*
frameBufferBackup
;
void
*
screenDataBackup
=
rfbScreen
->
screenData
;
KbdAddEventProcPtr
kbdAddEventBackup
=
rfbScreen
->
kbdAddEvent
;
PtrAddEventProcPtr
ptrAddEventBackup
=
rfbScreen
->
ptrAddEvent
;
GetCursorProcPtr
getCursorPtrBackup
=
rfbScreen
->
getCursorPtr
;
DisplayHookPtr
displayHookBackup
=
rfbScreen
->
displayHook
;
rfb
KbdAddEventProcPtr
kbdAddEventBackup
=
rfbScreen
->
kbdAddEvent
;
rfb
PtrAddEventProcPtr
ptrAddEventBackup
=
rfbScreen
->
ptrAddEvent
;
rfb
GetCursorProcPtr
getCursorPtrBackup
=
rfbScreen
->
getCursorPtr
;
rfb
DisplayHookPtr
displayHookBackup
=
rfbScreen
->
displayHook
;
rfbSelectData
selData
;
int
i
,
j
,
k
;
int
fx1
,
fy1
,
fx2
,
fy2
;
/* for font bbox */
...
...
This diff is collapsed.
Click to expand it.
libvncserver/sockets.c
View file @
97299606
...
...
@@ -139,8 +139,8 @@ rfbInitSockets(rfbScreenInfoPtr rfbScreen)
rfbLog
(
"Autoprobing TCP port
\n
"
);
for
(
i
=
5900
;
i
<
6000
;
i
++
)
{
if
((
rfbScreen
->
rfbListenSock
=
ListenOnTCPPort
(
i
))
>=
0
)
{
rfbScreen
->
rfbP
ort
=
i
;
if
((
rfbScreen
->
listenSock
=
rfb
ListenOnTCPPort
(
i
))
>=
0
)
{
rfbScreen
->
p
ort
=
i
;
break
;
}
}
...
...
@@ -150,28 +150,28 @@ rfbInitSockets(rfbScreenInfoPtr rfbScreen)
return
;
}
rfbLog
(
"Autoprobing selected port %d
\n
"
,
rfbScreen
->
rfbP
ort
);
rfbLog
(
"Autoprobing selected port %d
\n
"
,
rfbScreen
->
p
ort
);
FD_ZERO
(
&
(
rfbScreen
->
allFds
));
FD_SET
(
rfbScreen
->
rfbL
istenSock
,
&
(
rfbScreen
->
allFds
));
rfbScreen
->
maxFd
=
rfbScreen
->
rfbL
istenSock
;
FD_SET
(
rfbScreen
->
l
istenSock
,
&
(
rfbScreen
->
allFds
));
rfbScreen
->
maxFd
=
rfbScreen
->
l
istenSock
;
}
else
if
(
rfbScreen
->
rfbP
ort
>
0
)
{
rfbLog
(
"Listening for VNC connections on TCP port %d
\n
"
,
rfbScreen
->
rfbP
ort
);
else
if
(
rfbScreen
->
p
ort
>
0
)
{
rfbLog
(
"Listening for VNC connections on TCP port %d
\n
"
,
rfbScreen
->
p
ort
);
if
((
rfbScreen
->
rfbListenSock
=
ListenOnTCPPort
(
rfbScreen
->
rfbP
ort
))
<
0
)
{
if
((
rfbScreen
->
listenSock
=
rfbListenOnTCPPort
(
rfbScreen
->
p
ort
))
<
0
)
{
rfbLogPerror
(
"ListenOnTCPPort"
);
return
;
}
FD_ZERO
(
&
(
rfbScreen
->
allFds
));
FD_SET
(
rfbScreen
->
rfbL
istenSock
,
&
(
rfbScreen
->
allFds
));
rfbScreen
->
maxFd
=
rfbScreen
->
rfbL
istenSock
;
FD_SET
(
rfbScreen
->
l
istenSock
,
&
(
rfbScreen
->
allFds
));
rfbScreen
->
maxFd
=
rfbScreen
->
l
istenSock
;
}
if
(
rfbScreen
->
udpPort
!=
0
)
{
rfbLog
(
"rfbInitSockets: listening for input on UDP port %d
\n
"
,
rfbScreen
->
udpPort
);
if
((
rfbScreen
->
udpSock
=
ListenOnUDPPort
(
rfbScreen
->
udpPort
))
<
0
)
{
if
((
rfbScreen
->
udpSock
=
rfb
ListenOnUDPPort
(
rfbScreen
->
udpPort
))
<
0
)
{
rfbLogPerror
(
"ListenOnUDPPort"
);
return
;
}
...
...
@@ -223,9 +223,9 @@ rfbCheckFds(rfbScreenInfoPtr rfbScreen,long usec)
return
;
}
if
(
rfbScreen
->
rfbListenSock
!=
-
1
&&
FD_ISSET
(
rfbScreen
->
rfbL
istenSock
,
&
fds
))
{
if
(
rfbScreen
->
listenSock
!=
-
1
&&
FD_ISSET
(
rfbScreen
->
l
istenSock
,
&
fds
))
{
if
((
sock
=
accept
(
rfbScreen
->
rfbL
istenSock
,
if
((
sock
=
accept
(
rfbScreen
->
l
istenSock
,
(
struct
sockaddr
*
)
&
addr
,
&
addrlen
))
<
0
)
{
rfbLogPerror
(
"rfbCheckFds: accept"
);
return
;
...
...
@@ -260,7 +260,7 @@ rfbCheckFds(rfbScreenInfoPtr rfbScreen,long usec)
rfbNewClient
(
rfbScreen
,
sock
);
FD_CLR
(
rfbScreen
->
rfbL
istenSock
,
&
fds
);
FD_CLR
(
rfbScreen
->
l
istenSock
,
&
fds
);
if
(
--
nfds
==
0
)
return
;
}
...
...
@@ -359,7 +359,7 @@ rfbConnect(rfbScreen, host, port)
rfbLog
(
"Making connection to client on host %s port %d
\n
"
,
host
,
port
);
if
((
sock
=
ConnectToTcpAddr
(
host
,
port
))
<
0
)
{
if
((
sock
=
rfb
ConnectToTcpAddr
(
host
,
port
))
<
0
)
{
rfbLogPerror
(
"connection failed"
);
return
-
1
;
}
...
...
@@ -393,7 +393,7 @@ rfbConnect(rfbScreen, host, port)
*/
int
ReadExactTimeout
(
rfbClientPtr
cl
,
char
*
buf
,
int
len
,
int
timeout
)
rfb
ReadExactTimeout
(
rfbClientPtr
cl
,
char
*
buf
,
int
len
,
int
timeout
)
{
int
sock
=
cl
->
sock
;
int
n
;
...
...
@@ -441,9 +441,9 @@ ReadExactTimeout(rfbClientPtr cl, char* buf, int len, int timeout)
return
1
;
}
int
ReadExact
(
rfbClientPtr
cl
,
char
*
buf
,
int
len
)
int
rfb
ReadExact
(
rfbClientPtr
cl
,
char
*
buf
,
int
len
)
{
return
(
ReadExactTimeout
(
cl
,
buf
,
len
,
rfbMaxClientWait
));
return
(
rfb
ReadExactTimeout
(
cl
,
buf
,
len
,
rfbMaxClientWait
));
}
/*
...
...
@@ -453,7 +453,7 @@ int ReadExact(rfbClientPtr cl,char* buf,int len)
*/
int
WriteExact
(
cl
,
buf
,
len
)
rfb
WriteExact
(
cl
,
buf
,
len
)
rfbClientPtr
cl
;
const
char
*
buf
;
int
len
;
...
...
@@ -531,7 +531,7 @@ WriteExact(cl, buf, len)
}
int
ListenOnTCPPort
(
port
)
rfb
ListenOnTCPPort
(
port
)
int
port
;
{
struct
sockaddr_in
addr
;
...
...
@@ -565,7 +565,7 @@ ListenOnTCPPort(port)
}
int
ConnectToTcpAddr
(
host
,
port
)
rfb
ConnectToTcpAddr
(
host
,
port
)
char
*
host
;
int
port
;
{
...
...
@@ -599,7 +599,7 @@ ConnectToTcpAddr(host, port)
}
int
ListenOnUDPPort
(
port
)
rfb
ListenOnUDPPort
(
port
)
int
port
;
{
struct
sockaddr_in
addr
;
...
...
This diff is collapsed.
Click to expand it.
libvncserver/stats.c
View file @
97299606
...
...
@@ -44,19 +44,19 @@ rfbResetStats(rfbClientPtr cl)
{
int
i
;
for
(
i
=
0
;
i
<
MAX_ENCODINGS
;
i
++
)
{
cl
->
rfbB
ytesSent
[
i
]
=
0
;
cl
->
r
fbR
ectanglesSent
[
i
]
=
0
;
cl
->
b
ytesSent
[
i
]
=
0
;
cl
->
rectanglesSent
[
i
]
=
0
;
}
cl
->
rfbL
astRectMarkersSent
=
0
;
cl
->
rfbL
astRectBytesSent
=
0
;
cl
->
rfbC
ursorShapeBytesSent
=
0
;
cl
->
rfbC
ursorShapeUpdatesSent
=
0
;
cl
->
rfbC
ursorPosBytesSent
=
0
;
cl
->
rfbC
ursorPosUpdatesSent
=
0
;
cl
->
rfbF
ramebufferUpdateMessagesSent
=
0
;
cl
->
r
fbR
awBytesEquivalent
=
0
;
cl
->
rfbK
eyEventsRcvd
=
0
;
cl
->
rfbP
ointerEventsRcvd
=
0
;
cl
->
l
astRectMarkersSent
=
0
;
cl
->
l
astRectBytesSent
=
0
;
cl
->
c
ursorShapeBytesSent
=
0
;
cl
->
c
ursorShapeUpdatesSent
=
0
;
cl
->
c
ursorPosBytesSent
=
0
;
cl
->
c
ursorPosUpdatesSent
=
0
;
cl
->
f
ramebufferUpdateMessagesSent
=
0
;
cl
->
rawBytesEquivalent
=
0
;
cl
->
k
eyEventsRcvd
=
0
;
cl
->
p
ointerEventsRcvd
=
0
;
}
void
...
...
@@ -68,52 +68,52 @@ rfbPrintStats(rfbClientPtr cl)
rfbLog
(
"Statistics:
\n
"
);
if
((
cl
->
rfbKeyEventsRcvd
!=
0
)
||
(
cl
->
rfbP
ointerEventsRcvd
!=
0
))
if
((
cl
->
keyEventsRcvd
!=
0
)
||
(
cl
->
p
ointerEventsRcvd
!=
0
))
rfbLog
(
" key events received %d, pointer events %d
\n
"
,
cl
->
rfbKeyEventsRcvd
,
cl
->
rfbP
ointerEventsRcvd
);
cl
->
keyEventsRcvd
,
cl
->
p
ointerEventsRcvd
);
for
(
i
=
0
;
i
<
MAX_ENCODINGS
;
i
++
)
{
totalRectanglesSent
+=
cl
->
r
fbR
ectanglesSent
[
i
];
totalBytesSent
+=
cl
->
rfbB
ytesSent
[
i
];
totalRectanglesSent
+=
cl
->
rectanglesSent
[
i
];
totalBytesSent
+=
cl
->
b
ytesSent
[
i
];
}
totalRectanglesSent
+=
(
cl
->
rfbC
ursorShapeUpdatesSent
+
cl
->
rfbC
ursorPosUpdatesSent
+
cl
->
rfbL
astRectMarkersSent
);
totalBytesSent
+=
(
cl
->
rfbC
ursorShapeBytesSent
+
cl
->
rfbC
ursorPosBytesSent
+
cl
->
rfbL
astRectBytesSent
);
totalRectanglesSent
+=
(
cl
->
c
ursorShapeUpdatesSent
+
cl
->
c
ursorPosUpdatesSent
+
cl
->
l
astRectMarkersSent
);
totalBytesSent
+=
(
cl
->
c
ursorShapeBytesSent
+
cl
->
c
ursorPosBytesSent
+
cl
->
l
astRectBytesSent
);
rfbLog
(
" framebuffer updates %d, rectangles %d, bytes %d
\n
"
,
cl
->
rfbF
ramebufferUpdateMessagesSent
,
totalRectanglesSent
,
cl
->
f
ramebufferUpdateMessagesSent
,
totalRectanglesSent
,
totalBytesSent
);
if
(
cl
->
rfbL
astRectMarkersSent
!=
0
)
if
(
cl
->
l
astRectMarkersSent
!=
0
)
rfbLog
(
" LastRect and NewFBSize markers %d, bytes %d
\n
"
,
cl
->
rfbLastRectMarkersSent
,
cl
->
rfbL
astRectBytesSent
);
cl
->
lastRectMarkersSent
,
cl
->
l
astRectBytesSent
);
if
(
cl
->
rfbC
ursorShapeUpdatesSent
!=
0
)
if
(
cl
->
c
ursorShapeUpdatesSent
!=
0
)
rfbLog
(
" cursor shape updates %d, bytes %d
\n
"
,
cl
->
rfbCursorShapeUpdatesSent
,
cl
->
rfbC
ursorShapeBytesSent
);
cl
->
cursorShapeUpdatesSent
,
cl
->
c
ursorShapeBytesSent
);
if
(
cl
->
rfbC
ursorPosUpdatesSent
!=
0
)
if
(
cl
->
c
ursorPosUpdatesSent
!=
0
)
rfbLog
(
" cursor position updates %d, bytes %d
\n
"
,
cl
->
rfbCursorPosUpdatesSent
,
cl
->
rfbC
ursorPosBytesSent
);
cl
->
cursorPosUpdatesSent
,
cl
->
c
ursorPosBytesSent
);
for
(
i
=
0
;
i
<
MAX_ENCODINGS
;
i
++
)
{
if
(
cl
->
r
fbR
ectanglesSent
[
i
]
!=
0
)
if
(
cl
->
rectanglesSent
[
i
]
!=
0
)
rfbLog
(
" %s rectangles %d, bytes %d
\n
"
,
encNames
[
i
],
cl
->
r
fbRectanglesSent
[
i
],
cl
->
rfbB
ytesSent
[
i
]);
encNames
[
i
],
cl
->
r
ectanglesSent
[
i
],
cl
->
b
ytesSent
[
i
]);
}
if
((
totalBytesSent
-
cl
->
rfbB
ytesSent
[
rfbEncodingCopyRect
])
!=
0
)
{
if
((
totalBytesSent
-
cl
->
b
ytesSent
[
rfbEncodingCopyRect
])
!=
0
)
{
rfbLog
(
" raw bytes equivalent %d, compression ratio %f
\n
"
,
cl
->
r
fbR
awBytesEquivalent
,
(
double
)
cl
->
r
fbR
awBytesEquivalent
cl
->
rawBytesEquivalent
,
(
double
)
cl
->
rawBytesEquivalent
/
(
double
)(
totalBytesSent
-
cl
->
rfbB
ytesSent
[
rfbEncodingCopyRect
]
-
cl
->
rfbC
ursorShapeBytesSent
-
cl
->
rfbC
ursorPosBytesSent
-
cl
->
rfbL
astRectBytesSent
));
-
cl
->
b
ytesSent
[
rfbEncodingCopyRect
]
-
cl
->
c
ursorShapeBytesSent
-
cl
->
c
ursorPosBytesSent
-
cl
->
l
astRectBytesSent
));
}
}
This diff is collapsed.
Click to expand it.
libvncserver/tight.c
View file @
97299606
...
...
@@ -112,7 +112,7 @@ static char *tightAfterBuf = NULL;
static
int
*
prevRowBuf
=
NULL
;
void
TightCleanup
()
void
rfb
TightCleanup
()
{
if
(
tightBeforeBufSize
)
{
free
(
tightBeforeBuf
);
...
...
@@ -330,7 +330,7 @@ rfbSendRectEncodingTight(cl, x, y, w, h)
(
cl
->
screen
->
paddedWidthInBytes
*
y_best
)
+
(
x_best
*
(
cl
->
screen
->
bitsPerPixel
/
8
)));
(
*
cl
->
translateFn
)(
cl
->
translateLookupTable
,
&
cl
->
screen
->
rfbS
erverFormat
,
(
*
cl
->
translateFn
)(
cl
->
translateLookupTable
,
&
cl
->
screen
->
s
erverFormat
,
&
cl
->
format
,
fbptr
,
tightBeforeBuf
,
cl
->
screen
->
paddedWidthInBytes
,
1
,
1
);
...
...
@@ -451,7 +451,7 @@ ExtendSolidArea(cl, x, y, w, h, colorValue, x_ptr, y_ptr, w_ptr, h_ptr)
static
rfbBool
CheckSolidTile
(
rfbClientPtr
cl
,
int
x
,
int
y
,
int
w
,
int
h
,
uint32_t
*
colorPtr
,
rfbBool
needSameColor
)
{
switch
(
cl
->
screen
->
rfbS
erverFormat
.
bitsPerPixel
)
{
switch
(
cl
->
screen
->
s
erverFormat
.
bitsPerPixel
)
{
case
32
:
return
CheckSolidTile32
(
cl
,
x
,
y
,
w
,
h
,
colorPtr
,
needSameColor
);
case
16
:
...
...
@@ -568,7 +568,7 @@ SendSubrect(cl, x, y, w, h)
fbptr
=
(
cl
->
screen
->
frameBuffer
+
(
cl
->
screen
->
paddedWidthInBytes
*
y
)
+
(
x
*
(
cl
->
screen
->
bitsPerPixel
/
8
)));
(
*
cl
->
translateFn
)(
cl
->
translateLookupTable
,
&
cl
->
screen
->
rfbS
erverFormat
,
(
*
cl
->
translateFn
)(
cl
->
translateLookupTable
,
&
cl
->
screen
->
s
erverFormat
,
&
cl
->
format
,
fbptr
,
tightBeforeBuf
,
cl
->
screen
->
paddedWidthInBytes
,
w
,
h
);
...
...
@@ -646,8 +646,8 @@ SendTightHeader(cl, x, y, w, h)
sz_rfbFramebufferUpdateRectHeader
);
cl
->
ublen
+=
sz_rfbFramebufferUpdateRectHeader
;
cl
->
r
fbR
ectanglesSent
[
rfbEncodingTight
]
++
;
cl
->
rfbB
ytesSent
[
rfbEncodingTight
]
+=
sz_rfbFramebufferUpdateRectHeader
;
cl
->
rectanglesSent
[
rfbEncodingTight
]
++
;
cl
->
b
ytesSent
[
rfbEncodingTight
]
+=
sz_rfbFramebufferUpdateRectHeader
;
return
TRUE
;
}
...
...
@@ -677,7 +677,7 @@ SendSolidRect(cl)
memcpy
(
&
cl
->
updateBuf
[
cl
->
ublen
],
tightBeforeBuf
,
len
);
cl
->
ublen
+=
len
;
cl
->
rfbB
ytesSent
[
rfbEncodingTight
]
+=
len
+
1
;
cl
->
b
ytesSent
[
rfbEncodingTight
]
+=
len
+
1
;
return
TRUE
;
}
...
...
@@ -720,7 +720,7 @@ SendMonoRect(cl, w, h)
memcpy
(
&
cl
->
updateBuf
[
cl
->
ublen
],
tightAfterBuf
,
paletteLen
);
cl
->
ublen
+=
paletteLen
;
cl
->
rfbB
ytesSent
[
rfbEncodingTight
]
+=
3
+
paletteLen
;
cl
->
b
ytesSent
[
rfbEncodingTight
]
+=
3
+
paletteLen
;
break
;
case
16
:
...
...
@@ -731,7 +731,7 @@ SendMonoRect(cl, w, h)
memcpy
(
&
cl
->
updateBuf
[
cl
->
ublen
],
tightAfterBuf
,
4
);
cl
->
ublen
+=
4
;
cl
->
rfbB
ytesSent
[
rfbEncodingTight
]
+=
7
;
cl
->
b
ytesSent
[
rfbEncodingTight
]
+=
7
;
break
;
default
:
...
...
@@ -739,7 +739,7 @@ SendMonoRect(cl, w, h)
cl
->
updateBuf
[
cl
->
ublen
++
]
=
(
char
)
monoBackground
;
cl
->
updateBuf
[
cl
->
ublen
++
]
=
(
char
)
monoForeground
;
cl
->
rfbB
ytesSent
[
rfbEncodingTight
]
+=
5
;
cl
->
b
ytesSent
[
rfbEncodingTight
]
+=
5
;
}
return
CompressData
(
cl
,
streamId
,
dataLen
,
...
...
@@ -785,7 +785,7 @@ SendIndexedRect(cl, w, h)
memcpy
(
&
cl
->
updateBuf
[
cl
->
ublen
],
tightAfterBuf
,
paletteNumColors
*
entryLen
);
cl
->
ublen
+=
paletteNumColors
*
entryLen
;
cl
->
rfbB
ytesSent
[
rfbEncodingTight
]
+=
3
+
paletteNumColors
*
entryLen
;
cl
->
b
ytesSent
[
rfbEncodingTight
]
+=
3
+
paletteNumColors
*
entryLen
;
break
;
case
16
:
...
...
@@ -798,7 +798,7 @@ SendIndexedRect(cl, w, h)
memcpy
(
&
cl
->
updateBuf
[
cl
->
ublen
],
tightAfterBuf
,
paletteNumColors
*
2
);
cl
->
ublen
+=
paletteNumColors
*
2
;
cl
->
rfbB
ytesSent
[
rfbEncodingTight
]
+=
3
+
paletteNumColors
*
2
;
cl
->
b
ytesSent
[
rfbEncodingTight
]
+=
3
+
paletteNumColors
*
2
;
break
;
default
:
...
...
@@ -824,7 +824,7 @@ SendFullColorRect(cl, w, h)
}
cl
->
updateBuf
[
cl
->
ublen
++
]
=
0x00
;
/* stream id = 0, no flushing, no filter */
cl
->
rfbB
ytesSent
[
rfbEncodingTight
]
++
;
cl
->
b
ytesSent
[
rfbEncodingTight
]
++
;
if
(
usePixelFormat24
)
{
Pack24
(
cl
,
tightBeforeBuf
,
&
cl
->
format
,
w
*
h
);
...
...
@@ -858,7 +858,7 @@ SendGradientRect(cl, w, h)
cl
->
updateBuf
[
cl
->
ublen
++
]
=
(
streamId
|
rfbTightExplicitFilter
)
<<
4
;
cl
->
updateBuf
[
cl
->
ublen
++
]
=
rfbTightFilterGradient
;
cl
->
rfbB
ytesSent
[
rfbEncodingTight
]
+=
2
;
cl
->
b
ytesSent
[
rfbEncodingTight
]
+=
2
;
if
(
usePixelFormat24
)
{
FilterGradient24
(
cl
,
tightBeforeBuf
,
&
cl
->
format
,
w
,
h
);
...
...
@@ -887,7 +887,7 @@ CompressData(cl, streamId, dataLen, zlibLevel, zlibStrategy)
if
(
dataLen
<
TIGHT_MIN_TO_COMPRESS
)
{
memcpy
(
&
cl
->
updateBuf
[
cl
->
ublen
],
tightBeforeBuf
,
dataLen
);
cl
->
ublen
+=
dataLen
;
cl
->
rfbB
ytesSent
[
rfbEncodingTight
]
+=
dataLen
;
cl
->
b
ytesSent
[
rfbEncodingTight
]
+=
dataLen
;
return
TRUE
;
}
...
...
@@ -938,15 +938,15 @@ static rfbBool SendCompressedData(cl, compressedLen)
int
i
,
portionLen
;
cl
->
updateBuf
[
cl
->
ublen
++
]
=
compressedLen
&
0x7F
;
cl
->
rfbB
ytesSent
[
rfbEncodingTight
]
++
;
cl
->
b
ytesSent
[
rfbEncodingTight
]
++
;
if
(
compressedLen
>
0x7F
)
{
cl
->
updateBuf
[
cl
->
ublen
-
1
]
|=
0x80
;
cl
->
updateBuf
[
cl
->
ublen
++
]
=
compressedLen
>>
7
&
0x7F
;
cl
->
rfbB
ytesSent
[
rfbEncodingTight
]
++
;
cl
->
b
ytesSent
[
rfbEncodingTight
]
++
;
if
(
compressedLen
>
0x3FFF
)
{
cl
->
updateBuf
[
cl
->
ublen
-
1
]
|=
0x80
;
cl
->
updateBuf
[
cl
->
ublen
++
]
=
compressedLen
>>
14
&
0xFF
;
cl
->
rfbB
ytesSent
[
rfbEncodingTight
]
++
;
cl
->
b
ytesSent
[
rfbEncodingTight
]
++
;
}
}
...
...
@@ -962,7 +962,7 @@ static rfbBool SendCompressedData(cl, compressedLen)
memcpy
(
&
cl
->
updateBuf
[
cl
->
ublen
],
&
tightAfterBuf
[
i
],
portionLen
);
cl
->
ublen
+=
portionLen
;
}
cl
->
rfbB
ytesSent
[
rfbEncodingTight
]
+=
compressedLen
;
cl
->
b
ytesSent
[
rfbEncodingTight
]
+=
compressedLen
;
return
TRUE
;
}
...
...
@@ -1181,7 +1181,7 @@ static void Pack24(cl, buf, fmt, count)
buf32
=
(
uint32_t
*
)
buf
;
if
(
!
cl
->
screen
->
rfbS
erverFormat
.
bigEndian
==
!
fmt
->
bigEndian
)
{
if
(
!
cl
->
screen
->
s
erverFormat
.
bigEndian
==
!
fmt
->
bigEndian
)
{
r_shift
=
fmt
->
redShift
;
g_shift
=
fmt
->
greenShift
;
b_shift
=
fmt
->
blueShift
;
...
...
@@ -1323,7 +1323,7 @@ FilterGradient24(cl, buf, fmt, w, h)
buf32
=
(
uint32_t
*
)
buf
;
memset
(
prevRowBuf
,
0
,
w
*
3
*
sizeof
(
int
));
if
(
!
cl
->
screen
->
rfbS
erverFormat
.
bigEndian
==
!
fmt
->
bigEndian
)
{
if
(
!
cl
->
screen
->
s
erverFormat
.
bigEndian
==
!
fmt
->
bigEndian
)
{
shiftBits
[
0
]
=
fmt
->
redShift
;
shiftBits
[
1
]
=
fmt
->
greenShift
;
shiftBits
[
2
]
=
fmt
->
blueShift
;
...
...
@@ -1384,7 +1384,7 @@ FilterGradient##bpp(cl, buf, fmt, w, h) \
\
memset (prevRowBuf, 0, w * 3 * sizeof(int)); \
\
endianMismatch = (!cl->screen->
rfbS
erverFormat.bigEndian != !fmt->bigEndian); \
endianMismatch = (!cl->screen->
s
erverFormat.bigEndian != !fmt->bigEndian); \
\
maxColor[0] = fmt->redMax; \
maxColor[1] = fmt->greenMax; \
...
...
@@ -1452,7 +1452,7 @@ DetectSmoothImage (cl, fmt, w, h)
{
long
avgError
;
if
(
cl
->
screen
->
rfbS
erverFormat
.
bitsPerPixel
==
8
||
fmt
->
bitsPerPixel
==
8
||
if
(
cl
->
screen
->
s
erverFormat
.
bitsPerPixel
==
8
||
fmt
->
bitsPerPixel
==
8
||
w
<
DETECT_MIN_WIDTH
||
h
<
DETECT_MIN_HEIGHT
)
{
return
0
;
}
...
...
@@ -1564,7 +1564,7 @@ DetectSmoothImage##bpp (cl, fmt, w, h)
int sample, sum, left[3]; \
unsigned long avgError; \
\
endianMismatch = (!cl->screen->
rfbS
erverFormat.bigEndian != !fmt->bigEndian); \
endianMismatch = (!cl->screen->
s
erverFormat.bigEndian != !fmt->bigEndian); \
\
maxColor[0] = fmt->redMax; \
maxColor[1] = fmt->greenMax; \
...
...
@@ -1652,7 +1652,7 @@ SendJpegRect(cl, x, y, w, h, quality)
JSAMPROW
rowPointer
[
1
];
int
dy
;
if
(
cl
->
screen
->
rfbS
erverFormat
.
bitsPerPixel
==
8
)
if
(
cl
->
screen
->
s
erverFormat
.
bitsPerPixel
==
8
)
return
SendFullColorRect
(
cl
,
w
,
h
);
srcBuf
=
(
uint8_t
*
)
malloc
(
w
*
3
);
...
...
@@ -1698,7 +1698,7 @@ SendJpegRect(cl, x, y, w, h, quality)
}
cl
->
updateBuf
[
cl
->
ublen
++
]
=
(
char
)(
rfbTightJpeg
<<
4
);
cl
->
rfbB
ytesSent
[
rfbEncodingTight
]
++
;
cl
->
b
ytesSent
[
rfbEncodingTight
]
++
;
return
SendCompressedData
(
cl
,
jpegDstDataLen
);
}
...
...
@@ -1709,10 +1709,10 @@ PrepareRowForJpeg(cl, dst, x, y, count)
uint8_t
*
dst
;
int
x
,
y
,
count
;
{
if
(
cl
->
screen
->
rfbS
erverFormat
.
bitsPerPixel
==
32
)
{
if
(
cl
->
screen
->
rfbS
erverFormat
.
redMax
==
0xFF
&&
cl
->
screen
->
rfbS
erverFormat
.
greenMax
==
0xFF
&&
cl
->
screen
->
rfbS
erverFormat
.
blueMax
==
0xFF
)
{
if
(
cl
->
screen
->
s
erverFormat
.
bitsPerPixel
==
32
)
{
if
(
cl
->
screen
->
s
erverFormat
.
redMax
==
0xFF
&&
cl
->
screen
->
s
erverFormat
.
greenMax
==
0xFF
&&
cl
->
screen
->
s
erverFormat
.
blueMax
==
0xFF
)
{
PrepareRowForJpeg24
(
cl
,
dst
,
x
,
y
,
count
);
}
else
{
PrepareRowForJpeg32
(
cl
,
dst
,
x
,
y
,
count
);
...
...
@@ -1737,9 +1737,9 @@ PrepareRowForJpeg24(cl, dst, x, y, count)
while
(
count
--
)
{
pix
=
*
fbptr
++
;
*
dst
++
=
(
uint8_t
)(
pix
>>
cl
->
screen
->
rfbS
erverFormat
.
redShift
);
*
dst
++
=
(
uint8_t
)(
pix
>>
cl
->
screen
->
rfbS
erverFormat
.
greenShift
);
*
dst
++
=
(
uint8_t
)(
pix
>>
cl
->
screen
->
rfbS
erverFormat
.
blueShift
);
*
dst
++
=
(
uint8_t
)(
pix
>>
cl
->
screen
->
s
erverFormat
.
redShift
);
*
dst
++
=
(
uint8_t
)(
pix
>>
cl
->
screen
->
s
erverFormat
.
greenShift
);
*
dst
++
=
(
uint8_t
)(
pix
>>
cl
->
screen
->
s
erverFormat
.
blueShift
);
}
}
...
...
@@ -1763,18 +1763,18 @@ PrepareRowForJpeg##bpp(cl, dst, x, y, count)
pix = *fbptr++; \
\
inRed = (int) \
(pix >> cl->screen->
rfbServerFormat.redShift & cl->screen->rfbS
erverFormat.redMax); \
(pix >> cl->screen->
serverFormat.redShift & cl->screen->s
erverFormat.redMax); \
inGreen = (int) \
(pix >> cl->screen->
rfbServerFormat.greenShift & cl->screen->rfbS
erverFormat.greenMax); \
(pix >> cl->screen->
serverFormat.greenShift & cl->screen->s
erverFormat.greenMax); \
inBlue = (int) \
(pix >> cl->screen->
rfbServerFormat.blueShift & cl->screen->rfbS
erverFormat.blueMax); \
(pix >> cl->screen->
serverFormat.blueShift & cl->screen->s
erverFormat.blueMax); \
\
*dst++ = (uint8_t)((inRed * 255 + cl->screen->
rfbS
erverFormat.redMax / 2) / \
cl->screen->
rfbS
erverFormat.redMax); \
*dst++ = (uint8_t)((inGreen * 255 + cl->screen->
rfbS
erverFormat.greenMax / 2) / \
cl->screen->
rfbS
erverFormat.greenMax); \
*dst++ = (uint8_t)((inBlue * 255 + cl->screen->
rfbS
erverFormat.blueMax / 2) / \
cl->screen->
rfbS
erverFormat.blueMax); \
*dst++ = (uint8_t)((inRed * 255 + cl->screen->
s
erverFormat.redMax / 2) / \
cl->screen->
s
erverFormat.redMax); \
*dst++ = (uint8_t)((inGreen * 255 + cl->screen->
s
erverFormat.greenMax / 2) / \
cl->screen->
s
erverFormat.greenMax); \
*dst++ = (uint8_t)((inBlue * 255 + cl->screen->
s
erverFormat.blueMax / 2) / \
cl->screen->
s
erverFormat.blueMax); \
} \
}
...
...
This diff is collapsed.
Click to expand it.
libvncserver/translate.c
View file @
97299606
...
...
@@ -252,16 +252,16 @@ rfbSetTranslateFunction(cl)
* Check that bits per pixel values are valid
*/
if
((
cl
->
screen
->
rfbS
erverFormat
.
bitsPerPixel
!=
8
)
&&
(
cl
->
screen
->
rfbS
erverFormat
.
bitsPerPixel
!=
16
)
&&
if
((
cl
->
screen
->
s
erverFormat
.
bitsPerPixel
!=
8
)
&&
(
cl
->
screen
->
s
erverFormat
.
bitsPerPixel
!=
16
)
&&
#ifdef LIBVNCSERVER_ALLOW24BPP
(
cl
->
screen
->
rfbS
erverFormat
.
bitsPerPixel
!=
24
)
&&
(
cl
->
screen
->
s
erverFormat
.
bitsPerPixel
!=
24
)
&&
#endif
(
cl
->
screen
->
rfbS
erverFormat
.
bitsPerPixel
!=
32
))
(
cl
->
screen
->
s
erverFormat
.
bitsPerPixel
!=
32
))
{
rfbErr
(
"%s: server bits per pixel not 8, 16 or 32 (is %d)
\n
"
,
"rfbSetTranslateFunction"
,
cl
->
screen
->
rfbS
erverFormat
.
bitsPerPixel
);
cl
->
screen
->
s
erverFormat
.
bitsPerPixel
);
rfbCloseClient
(
cl
);
return
FALSE
;
}
...
...
@@ -307,7 +307,7 @@ rfbSetTranslateFunction(cl)
/* truecolour -> truecolour */
if
(
PF_EQ
(
cl
->
format
,
cl
->
screen
->
rfbS
erverFormat
))
{
if
(
PF_EQ
(
cl
->
format
,
cl
->
screen
->
s
erverFormat
))
{
/* client & server the same */
...
...
@@ -316,36 +316,36 @@ rfbSetTranslateFunction(cl)
return
TRUE
;
}
if
((
cl
->
screen
->
rfbS
erverFormat
.
bitsPerPixel
<
16
)
||
((
!
cl
->
screen
->
rfbS
erverFormat
.
trueColour
||
!
rfbEconomicTranslate
)
&&
(
cl
->
screen
->
rfbS
erverFormat
.
bitsPerPixel
==
16
)))
{
if
((
cl
->
screen
->
s
erverFormat
.
bitsPerPixel
<
16
)
||
((
!
cl
->
screen
->
s
erverFormat
.
trueColour
||
!
rfbEconomicTranslate
)
&&
(
cl
->
screen
->
s
erverFormat
.
bitsPerPixel
==
16
)))
{
/* we can use a single lookup table for <= 16 bpp */
cl
->
translateFn
=
rfbTranslateWithSingleTableFns
[
BPP2OFFSET
(
cl
->
screen
->
rfbS
erverFormat
.
bitsPerPixel
)]
[
BPP2OFFSET
(
cl
->
screen
->
s
erverFormat
.
bitsPerPixel
)]
[
BPP2OFFSET
(
cl
->
format
.
bitsPerPixel
)];
if
(
cl
->
screen
->
rfbS
erverFormat
.
trueColour
)
if
(
cl
->
screen
->
s
erverFormat
.
trueColour
)
(
*
rfbInitTrueColourSingleTableFns
[
BPP2OFFSET
(
cl
->
format
.
bitsPerPixel
)])
(
&
cl
->
translateLookupTable
,
&
(
cl
->
screen
->
rfbS
erverFormat
),
&
cl
->
format
);
&
(
cl
->
screen
->
s
erverFormat
),
&
cl
->
format
);
else
(
*
rfbInitColourMapSingleTableFns
[
BPP2OFFSET
(
cl
->
format
.
bitsPerPixel
)])
(
&
cl
->
translateLookupTable
,
&
(
cl
->
screen
->
rfbS
erverFormat
),
&
cl
->
format
,
&
cl
->
screen
->
colourMap
);
&
(
cl
->
screen
->
s
erverFormat
),
&
cl
->
format
,
&
cl
->
screen
->
colourMap
);
}
else
{
/* otherwise we use three separate tables for red, green and blue */
cl
->
translateFn
=
rfbTranslateWithRGBTablesFns
[
BPP2OFFSET
(
cl
->
screen
->
rfbS
erverFormat
.
bitsPerPixel
)]
[
BPP2OFFSET
(
cl
->
screen
->
s
erverFormat
.
bitsPerPixel
)]
[
BPP2OFFSET
(
cl
->
format
.
bitsPerPixel
)];
(
*
rfbInitTrueColourRGBTablesFns
[
BPP2OFFSET
(
cl
->
format
.
bitsPerPixel
)])
(
&
cl
->
translateLookupTable
,
&
(
cl
->
screen
->
rfbS
erverFormat
),
&
cl
->
format
);
&
(
cl
->
screen
->
s
erverFormat
),
&
cl
->
format
);
}
return
TRUE
;
...
...
@@ -396,7 +396,7 @@ rfbSetClientColourMapBGR233(cl)
len
+=
256
*
3
*
2
;
if
(
WriteExact
(
cl
,
buf
,
len
)
<
0
)
{
if
(
rfb
WriteExact
(
cl
,
buf
,
len
)
<
0
)
{
rfbLogPerror
(
"rfbSetClientColourMapBGR233: write"
);
rfbCloseClient
(
cl
);
return
FALSE
;
...
...
@@ -419,7 +419,7 @@ rfbSetClientColourMap(cl, firstColour, nColours)
int
firstColour
;
int
nColours
;
{
if
(
cl
->
screen
->
rfbS
erverFormat
.
trueColour
||
!
cl
->
readyForSetColourMapEntries
)
{
if
(
cl
->
screen
->
s
erverFormat
.
trueColour
||
!
cl
->
readyForSetColourMapEntries
)
{
return
TRUE
;
}
...
...
@@ -430,7 +430,7 @@ rfbSetClientColourMap(cl, firstColour, nColours)
if
(
cl
->
format
.
trueColour
)
{
(
*
rfbInitColourMapSingleTableFns
[
BPP2OFFSET
(
cl
->
format
.
bitsPerPixel
)])
(
&
cl
->
translateLookupTable
,
&
cl
->
screen
->
rfbS
erverFormat
,
&
cl
->
format
,
&
cl
->
screen
->
colourMap
);
&
cl
->
screen
->
s
erverFormat
,
&
cl
->
format
,
&
cl
->
screen
->
colourMap
);
sraRgnDestroy
(
cl
->
modifiedRegion
);
cl
->
modifiedRegion
=
...
...
This diff is collapsed.
Click to expand it.
libvncserver/vncauth.c
View file @
97299606
...
...
@@ -62,7 +62,7 @@ static unsigned char fixedkey[8] = {23,82,107,6,35,78,88,7};
*/
int
vnc
EncryptAndStorePasswd
(
char
*
passwd
,
char
*
fname
)
rfb
EncryptAndStorePasswd
(
char
*
passwd
,
char
*
fname
)
{
FILE
*
fp
;
unsigned
int
i
;
...
...
@@ -88,8 +88,8 @@ vncEncryptAndStorePasswd(char *passwd, char *fname)
/* Do encryption in-place - this way we overwrite our copy of the plaintext
password */
desk
ey
(
fixedkey
,
EN0
);
d
es
(
encryptedPasswd
,
encryptedPasswd
);
rfbDesK
ey
(
fixedkey
,
EN0
);
rfbD
es
(
encryptedPasswd
,
encryptedPasswd
);
for
(
i
=
0
;
i
<
8
;
i
++
)
{
putc
(
encryptedPasswd
[
i
],
fp
);
...
...
@@ -107,7 +107,7 @@ vncEncryptAndStorePasswd(char *passwd, char *fname)
*/
char
*
vnc
DecryptPasswdFromFile
(
char
*
fname
)
rfb
DecryptPasswdFromFile
(
char
*
fname
)
{
FILE
*
fp
;
int
i
,
ch
;
...
...
@@ -126,8 +126,8 @@ vncDecryptPasswdFromFile(char *fname)
fclose
(
fp
);
desk
ey
(
fixedkey
,
DE1
);
d
es
(
passwd
,
passwd
);
rfbDesK
ey
(
fixedkey
,
DE1
);
rfbD
es
(
passwd
,
passwd
);
passwd
[
8
]
=
0
;
...
...
@@ -141,7 +141,7 @@ vncDecryptPasswdFromFile(char *fname)
*/
void
vnc
RandomBytes
(
unsigned
char
*
bytes
)
rfb
RandomBytes
(
unsigned
char
*
bytes
)
{
int
i
;
static
rfbBool
s_srandom_called
=
FALSE
;
...
...
@@ -162,7 +162,7 @@ vncRandomBytes(unsigned char *bytes)
*/
void
vnc
EncryptBytes
(
unsigned
char
*
bytes
,
char
*
passwd
)
rfb
EncryptBytes
(
unsigned
char
*
bytes
,
char
*
passwd
)
{
unsigned
char
key
[
8
];
unsigned
int
i
;
...
...
@@ -177,9 +177,9 @@ vncEncryptBytes(unsigned char *bytes, char *passwd)
}
}
desk
ey
(
key
,
EN0
);
rfbDesK
ey
(
key
,
EN0
);
for
(
i
=
0
;
i
<
CHALLENGESIZE
;
i
+=
8
)
{
d
es
(
bytes
+
i
,
bytes
+
i
);
rfbD
es
(
bytes
+
i
,
bytes
+
i
);
}
}
This diff is collapsed.
Click to expand it.
libvncserver/zlib.c
View file @
97299606
...
...
@@ -122,7 +122,7 @@ rfbSendOneRectEncodingZlib(cl, x, y, w, h)
/*
* Convert pixel data to client format.
*/
(
*
cl
->
translateFn
)(
cl
->
translateLookupTable
,
&
cl
->
screen
->
rfbS
erverFormat
,
(
*
cl
->
translateFn
)(
cl
->
translateLookupTable
,
&
cl
->
screen
->
s
erverFormat
,
&
cl
->
format
,
fbptr
,
zlibBeforeBuf
,
cl
->
screen
->
paddedWidthInBytes
,
w
,
h
);
...
...
@@ -174,8 +174,8 @@ rfbSendOneRectEncodingZlib(cl, x, y, w, h)
*/
/* Update statics */
cl
->
r
fbR
ectanglesSent
[
rfbEncodingZlib
]
++
;
cl
->
rfbB
ytesSent
[
rfbEncodingZlib
]
+=
(
sz_rfbFramebufferUpdateRectHeader
cl
->
rectanglesSent
[
rfbEncodingZlib
]
++
;
cl
->
b
ytesSent
[
rfbEncodingZlib
]
+=
(
sz_rfbFramebufferUpdateRectHeader
+
sz_rfbZlibHeader
+
zlibAfterBufLen
);
if
(
cl
->
ublen
+
sz_rfbFramebufferUpdateRectHeader
+
sz_rfbZlibHeader
...
...
This diff is collapsed.
Click to expand it.
libvncserver/zrle.c
View file @
97299606
...
...
@@ -33,7 +33,7 @@
+ (cl->screen->paddedWidthInBytes * ty) \
+ (tx * (cl->screen->bitsPerPixel / 8))); \
\
(*cl->translateFn)(cl->translateLookupTable, &cl->screen->
rfbS
erverFormat,\
(*cl->translateFn)(cl->translateLookupTable, &cl->screen->
s
erverFormat,\
&cl->format, fbptr, (char*)buf, \
cl->screen->paddedWidthInBytes, tw, th); }
...
...
@@ -123,8 +123,8 @@ rfbBool rfbSendRectEncodingZRLE(rfbClientPtr cl, int x, int y, int w, int h)
break
;
}
cl
->
r
fbR
ectanglesSent
[
rfbEncodingZRLE
]
++
;
cl
->
rfbB
ytesSent
[
rfbEncodingZRLE
]
+=
(
sz_rfbFramebufferUpdateRectHeader
cl
->
rectanglesSent
[
rfbEncodingZRLE
]
++
;
cl
->
b
ytesSent
[
rfbEncodingZRLE
]
+=
(
sz_rfbFramebufferUpdateRectHeader
+
sz_rfbZRLEHeader
+
ZRLE_BUFFER_LENGTH
(
&
zos
->
out
));
if
(
cl
->
ublen
+
sz_rfbFramebufferUpdateRectHeader
+
sz_rfbZRLEHeader
...
...
This diff is collapsed.
Click to expand it.
rfb/rfb.h
View file @
97299606
...
...
@@ -112,15 +112,15 @@ enum rfbNewClientAction {
RFB_CLIENT_REFUSE
};
typedef
void
(
*
KbdAddEventProcPtr
)
(
rfbBool
down
,
rfbKeySym
keySym
,
struct
_rfbClientRec
*
cl
);
typedef
void
(
*
KbdReleaseAllKeysProcPtr
)
(
struct
_rfbClientRec
*
cl
);
typedef
void
(
*
PtrAddEventProcPtr
)
(
int
buttonMask
,
int
x
,
int
y
,
struct
_rfbClientRec
*
cl
);
typedef
void
(
*
SetXCutTextProcPtr
)
(
char
*
str
,
int
len
,
struct
_rfbClientRec
*
cl
);
typedef
struct
rfbCursor
*
(
*
GetCursorProcPtr
)
(
struct
_rfbClientRec
*
pScreen
);
typedef
rfbBool
(
*
SetTranslateFunctionProcPtr
)(
struct
_rfbClientRec
*
cl
);
typedef
rfbBool
(
*
PasswordCheckProcPtr
)(
struct
_rfbClientRec
*
cl
,
const
char
*
encryptedPassWord
,
int
len
);
typedef
enum
rfbNewClientAction
(
*
NewClientHookPtr
)(
struct
_rfbClientRec
*
cl
);
typedef
void
(
*
DisplayHookPtr
)(
struct
_rfbClientRec
*
cl
);
typedef
void
(
*
rfb
KbdAddEventProcPtr
)
(
rfbBool
down
,
rfbKeySym
keySym
,
struct
_rfbClientRec
*
cl
);
typedef
void
(
*
rfb
KbdReleaseAllKeysProcPtr
)
(
struct
_rfbClientRec
*
cl
);
typedef
void
(
*
rfb
PtrAddEventProcPtr
)
(
int
buttonMask
,
int
x
,
int
y
,
struct
_rfbClientRec
*
cl
);
typedef
void
(
*
rfb
SetXCutTextProcPtr
)
(
char
*
str
,
int
len
,
struct
_rfbClientRec
*
cl
);
typedef
struct
rfbCursor
*
(
*
rfb
GetCursorProcPtr
)
(
struct
_rfbClientRec
*
pScreen
);
typedef
rfbBool
(
*
rfb
SetTranslateFunctionProcPtr
)(
struct
_rfbClientRec
*
cl
);
typedef
rfbBool
(
*
rfb
PasswordCheckProcPtr
)(
struct
_rfbClientRec
*
cl
,
const
char
*
encryptedPassWord
,
int
len
);
typedef
enum
rfbNewClientAction
(
*
rfb
NewClientHookPtr
)(
struct
_rfbClientRec
*
cl
);
typedef
void
(
*
rfb
DisplayHookPtr
)(
struct
_rfbClientRec
*
cl
);
typedef
struct
{
uint32_t
count
;
...
...
@@ -198,14 +198,14 @@ typedef struct _rfbScreenInfo
/* additions by libvncserver */
rfbPixelFormat
rfbS
erverFormat
;
rfbPixelFormat
s
erverFormat
;
rfbColourMap
colourMap
;
/* set this if rfbServerFormat.trueColour==FALSE */
const
char
*
desktopName
;
char
rfbT
hisHost
[
255
];
char
t
hisHost
[
255
];
rfbBool
autoPort
;
int
rfbP
ort
;
SOCKET
rfbL
istenSock
;
int
p
ort
;
SOCKET
l
istenSock
;
int
maxSock
;
int
maxFd
;
fd_set
allFds
;
...
...
@@ -220,7 +220,7 @@ typedef struct _rfbScreenInfo
rfbBool
udpSockConnected
;
struct
sockaddr_in
udpRemoteAddr
;
int
rfbM
axClientWait
;
int
m
axClientWait
;
/* http stuff */
rfbBool
httpInitDone
;
...
...
@@ -230,22 +230,24 @@ typedef struct _rfbScreenInfo
SOCKET
httpListenSock
;
SOCKET
httpSock
;
PasswordCheckProcPtr
passwordCheck
;
void
*
rfbA
uthPasswdData
;
rfb
PasswordCheckProcPtr
passwordCheck
;
void
*
a
uthPasswdData
;
/* If rfbAuthPasswdData is given a list, this is the first
view only password. */
int
rfbA
uthPasswdFirstViewOnly
;
int
a
uthPasswdFirstViewOnly
;
/* send only this many rectangles in one update */
int
maxRectsPerUpdate
;
/* this is the amount of milliseconds to wait at least before sending
* an update. */
int
rfbDeferUpdateTime
;
char
*
rfbScreen
;
rfbBool
rfbAlwaysShared
;
rfbBool
rfbNeverShared
;
rfbBool
rfbDontDisconnect
;
struct
_rfbClientRec
*
rfbClientHead
;
int
deferUpdateTime
;
#ifdef TODELETE
char
*
screen
;
#endif
rfbBool
alwaysShared
;
rfbBool
neverShared
;
rfbBool
dontDisconnect
;
struct
_rfbClientRec
*
clientHead
;
/* cursor */
int
cursorX
,
cursorY
,
oldCursorX
,
oldCursorY
,
underCursorBufferLen
;
...
...
@@ -257,17 +259,17 @@ typedef struct _rfbScreenInfo
* The buffer will not be freed by
*/
char
*
frameBuffer
;
KbdAddEventProcPtr
kbdAddEvent
;
KbdReleaseAllKeysProcPtr
kbdReleaseAllKeys
;
PtrAddEventProcPtr
ptrAddEvent
;
SetXCutTextProcPtr
setXCutText
;
GetCursorProcPtr
getCursorPtr
;
SetTranslateFunctionProcPtr
setTranslateFunction
;
rfb
KbdAddEventProcPtr
kbdAddEvent
;
rfb
KbdReleaseAllKeysProcPtr
kbdReleaseAllKeys
;
rfb
PtrAddEventProcPtr
ptrAddEvent
;
rfb
SetXCutTextProcPtr
setXCutText
;
rfb
GetCursorProcPtr
getCursorPtr
;
rfb
SetTranslateFunctionProcPtr
setTranslateFunction
;
/* newClientHook is called just after a new client is created */
NewClientHookPtr
newClientHook
;
rfb
NewClientHookPtr
newClientHook
;
/* displayHook is called just before a frame buffer update */
DisplayHookPtr
displayHook
;
rfb
DisplayHookPtr
displayHook
;
#ifdef LIBVNCSERVER_HAVE_LIBPTHREAD
MUTEX
(
cursorMutex
);
...
...
@@ -409,18 +411,18 @@ typedef struct _rfbClientRec {
/* statistics */
int
rfbB
ytesSent
[
MAX_ENCODINGS
];
int
r
fbR
ectanglesSent
[
MAX_ENCODINGS
];
int
rfbL
astRectMarkersSent
;
int
rfbL
astRectBytesSent
;
int
rfbC
ursorShapeBytesSent
;
int
rfbC
ursorShapeUpdatesSent
;
int
rfbC
ursorPosBytesSent
;
int
rfbC
ursorPosUpdatesSent
;
int
rfbF
ramebufferUpdateMessagesSent
;
int
r
fbR
awBytesEquivalent
;
int
rfbK
eyEventsRcvd
;
int
rfbP
ointerEventsRcvd
;
int
b
ytesSent
[
MAX_ENCODINGS
];
int
rectanglesSent
[
MAX_ENCODINGS
];
int
l
astRectMarkersSent
;
int
l
astRectBytesSent
;
int
c
ursorShapeBytesSent
;
int
c
ursorShapeUpdatesSent
;
int
c
ursorPosBytesSent
;
int
c
ursorPosUpdatesSent
;
int
f
ramebufferUpdateMessagesSent
;
int
rawBytesEquivalent
;
int
k
eyEventsRcvd
;
int
p
ointerEventsRcvd
;
#ifdef LIBVNCSERVER_HAVE_LIBZ
/* zlib encoding -- necessary compression state info per client */
...
...
@@ -520,20 +522,17 @@ extern int rfbMaxClientWait;
extern
void
rfbInitSockets
(
rfbScreenInfoPtr
rfbScreen
);
extern
void
rfbDisconnectUDPSock
(
rfbScreenInfoPtr
rfbScreen
);
extern
void
rfbCloseClient
(
rfbClientPtr
cl
);
extern
int
ReadExact
(
rfbClientPtr
cl
,
char
*
buf
,
int
len
);
extern
int
ReadExactTimeout
(
rfbClientPtr
cl
,
char
*
buf
,
int
len
,
int
timeout
);
extern
int
WriteExact
(
rfbClientPtr
cl
,
const
char
*
buf
,
int
len
);
extern
int
rfb
ReadExact
(
rfbClientPtr
cl
,
char
*
buf
,
int
len
);
extern
int
rfb
ReadExactTimeout
(
rfbClientPtr
cl
,
char
*
buf
,
int
len
,
int
timeout
);
extern
int
rfb
WriteExact
(
rfbClientPtr
cl
,
const
char
*
buf
,
int
len
);
extern
void
rfbCheckFds
(
rfbScreenInfoPtr
rfbScreen
,
long
usec
);
extern
int
rfbConnect
(
rfbScreenInfoPtr
rfbScreen
,
char
*
host
,
int
port
);
extern
int
ConnectToTcpAddr
(
char
*
host
,
int
port
);
extern
int
ListenOnTCPPort
(
int
port
);
extern
int
ListenOnUDPPort
(
int
port
);
extern
int
rfb
ConnectToTcpAddr
(
char
*
host
,
int
port
);
extern
int
rfb
ListenOnTCPPort
(
int
port
);
extern
int
rfb
ListenOnUDPPort
(
int
port
);
/* rfbserver.c */
extern
rfbClientPtr
pointerClient
;
/* Routines to iterate over the client list in a thread-safe way.
Only a single iterator can be in use at a time process-wide. */
typedef
struct
rfbClientIterator
*
rfbClientIteratorPtr
;
...
...
@@ -583,8 +582,8 @@ extern void rfbSetClientColourMaps(rfbScreenInfoPtr rfbScreen, int firstColour,
/* httpd.c */
extern
void
h
ttpInitSockets
(
rfbScreenInfoPtr
rfbScreen
);
extern
void
h
ttpCheckFds
(
rfbScreenInfoPtr
rfbScreen
);
extern
void
rfbH
ttpInitSockets
(
rfbScreenInfoPtr
rfbScreen
);
extern
void
rfbH
ttpCheckFds
(
rfbScreenInfoPtr
rfbScreen
);
...
...
@@ -660,20 +659,20 @@ extern rfbBool rfbSendCursorPos(rfbClientPtr cl);
extern
void
rfbConvertLSBCursorBitmapOrMask
(
int
width
,
int
height
,
unsigned
char
*
bitmap
);
extern
rfbCursorPtr
rfbMakeXCursor
(
int
width
,
int
height
,
char
*
cursorString
,
char
*
maskString
);
extern
char
*
rfbMakeMaskForXCursor
(
int
width
,
int
height
,
char
*
cursorString
);
extern
void
MakeXCursorFromRichCursor
(
rfbScreenInfoPtr
rfbScreen
,
rfbCursorPtr
cursor
);
extern
void
MakeRichCursorFromXCursor
(
rfbScreenInfoPtr
rfbScreen
,
rfbCursorPtr
cursor
);
extern
void
rfb
MakeXCursorFromRichCursor
(
rfbScreenInfoPtr
rfbScreen
,
rfbCursorPtr
cursor
);
extern
void
rfb
MakeRichCursorFromXCursor
(
rfbScreenInfoPtr
rfbScreen
,
rfbCursorPtr
cursor
);
extern
void
rfbFreeCursor
(
rfbCursorPtr
cursor
);
extern
void
rfbDrawCursor
(
rfbScreenInfoPtr
rfbScreen
);
extern
void
rfbUndrawCursor
(
rfbScreenInfoPtr
rfbScreen
);
extern
void
rfbSetCursor
(
rfbScreenInfoPtr
rfbScreen
,
rfbCursorPtr
c
,
rfbBool
freeOld
);
/* cursor handling for the pointer */
extern
void
d
efaultPtrAddEvent
(
int
buttonMask
,
int
x
,
int
y
,
rfbClientPtr
cl
);
extern
void
rfbD
efaultPtrAddEvent
(
int
buttonMask
,
int
x
,
int
y
,
rfbClientPtr
cl
);
/* zrle.c */
#ifdef LIBVNCSERVER_HAVE_LIBZ
extern
rfbBool
rfbSendRectEncodingZRLE
(
rfbClientPtr
cl
,
int
x
,
int
y
,
int
w
,
int
h
);
extern
void
FreeZrleData
(
rfbClientPtr
cl
);
extern
void
rfb
FreeZrleData
(
rfbClientPtr
cl
);
#endif
/* stats.c */
...
...
@@ -751,7 +750,7 @@ void rfbDoCopyRegion(rfbScreenInfoPtr rfbScreen,sraRegionPtr copyRegion,int dx,i
void
rfbMarkRectAsModified
(
rfbScreenInfoPtr
rfbScreen
,
int
x1
,
int
y1
,
int
x2
,
int
y2
);
void
rfbMarkRegionAsModified
(
rfbScreenInfoPtr
rfbScreen
,
sraRegionPtr
modRegion
);
void
d
oNothingWithClient
(
rfbClientPtr
cl
);
void
rfbD
oNothingWithClient
(
rfbClientPtr
cl
);
enum
rfbNewClientAction
defaultNewClientHook
(
rfbClientPtr
cl
);
/* to check against plain passwords */
...
...
This diff is collapsed.
Click to expand it.
rfb/rfbproto.h
View file @
97299606
...
...
@@ -991,10 +991,10 @@ typedef union {
#define MAXPWLEN 8
#define CHALLENGESIZE 16
extern
int
vnc
EncryptAndStorePasswd
(
char
*
passwd
,
char
*
fname
);
extern
char
*
vnc
DecryptPasswdFromFile
(
char
*
fname
);
extern
void
vnc
RandomBytes
(
unsigned
char
*
bytes
);
extern
void
vnc
EncryptBytes
(
unsigned
char
*
bytes
,
char
*
passwd
);
extern
int
rfb
EncryptAndStorePasswd
(
char
*
passwd
,
char
*
fname
);
extern
char
*
rfb
DecryptPasswdFromFile
(
char
*
fname
);
extern
void
rfb
RandomBytes
(
unsigned
char
*
bytes
);
extern
void
rfb
EncryptBytes
(
unsigned
char
*
bytes
,
char
*
passwd
);
#endif
This diff is collapsed.
Click to expand it.
test/cargstest.c
View file @
97299606
...
...
@@ -13,9 +13,9 @@ int main(int argc,char** argv)
#define CHECK(a,b) if(screen->a!=b) { fprintf(stderr,#a " is %d (should be " #b ")\n",screen->a); ret=1; }
CHECK
(
width
,
1024
);
CHECK
(
height
,
768
);
CHECK
(
rfbA
lwaysShared
,
TRUE
);
CHECK
(
a
lwaysShared
,
TRUE
);
CHECK
(
httpPort
,
3002
);
CHECK
(
rfbD
ontDisconnect
,
TRUE
);
CHECK
(
d
ontDisconnect
,
TRUE
);
if
(
fake_argc
!=
2
)
{
fprintf
(
stderr
,
"fake_argc is %d (should be 2)
\n
"
,
fake_argc
);
ret
=
1
;
...
...
This diff is collapsed.
Click to expand it.
test/copyrecttest.c
View file @
97299606
...
...
@@ -21,7 +21,7 @@ int main(int argc,char** argv)
rfbScreenInfoPtr
server
=
rfbGetScreen
(
&
argc
,
argv
,
width
,
height
,
8
,
3
,
4
);
server
->
frameBuffer
=
(
char
*
)
malloc
(
width
*
height
*
4
);
initBackground
(
server
);
server
->
rfbD
eferUpdateTime
=
0
;
server
->
d
eferUpdateTime
=
0
;
rfbInitServer
(
server
);
r
=
0
;
...
...
This diff is collapsed.
Click to expand it.
vncterm/LinuxVNC.c
View file @
97299606
...
...
@@ -114,12 +114,12 @@ int main(int argc,char **argv)
/* console init */
console
=
vcGetConsole
(
&
argc
,
argv
,
width
,
height
,
&
vgaFont
,
TRUE
);
for
(
i
=
0
;
i
<
16
;
i
++
)
{
console
->
rfbS
creen
->
colourMap
.
data
.
bytes
[
i
*
3
+
0
]
=
default_red
[
color_table
[
i
]];
console
->
rfbS
creen
->
colourMap
.
data
.
bytes
[
i
*
3
+
1
]
=
default_grn
[
color_table
[
i
]];
console
->
rfbS
creen
->
colourMap
.
data
.
bytes
[
i
*
3
+
2
]
=
default_blu
[
color_table
[
i
]];
console
->
s
creen
->
colourMap
.
data
.
bytes
[
i
*
3
+
0
]
=
default_red
[
color_table
[
i
]];
console
->
s
creen
->
colourMap
.
data
.
bytes
[
i
*
3
+
1
]
=
default_grn
[
color_table
[
i
]];
console
->
s
creen
->
colourMap
.
data
.
bytes
[
i
*
3
+
2
]
=
default_blu
[
color_table
[
i
]];
}
console
->
rfbS
creen
->
desktopName
=
title
;
console
->
rfbS
creen
->
kbdAddEvent
=
do_key
;
console
->
s
creen
->
desktopName
=
title
;
console
->
s
creen
->
kbdAddEvent
=
do_key
;
console
->
selectTimeOut
=
100000
;
console
->
wrapBottomToTop
=
TRUE
;
#ifdef USE_OLD_VCS
...
...
This diff is collapsed.
Click to expand it.
vncterm/VNConsole.c
View file @
97299606
...
...
@@ -25,24 +25,24 @@ unsigned char colourMap16[16*3]={
void
MakeColourMap16
(
vncConsolePtr
c
)
{
int
i
,
j
;
rfbColourMap
*
colourMap
=&
(
c
->
rfbS
creen
->
colourMap
);
rfbColourMap
*
colourMap
=&
(
c
->
s
creen
->
colourMap
);
if
(
colourMap
->
count
)
free
(
colourMap
->
data
.
bytes
);
colourMap
->
data
.
bytes
=
malloc
(
16
*
3
);
memcpy
(
colourMap
->
data
.
bytes
,
colourMap16
,
16
*
3
);
colourMap
->
count
=
16
;
colourMap
->
is16
=
FALSE
;
c
->
rfbScreen
->
rfbS
erverFormat
.
trueColour
=
FALSE
;
c
->
screen
->
s
erverFormat
.
trueColour
=
FALSE
;
}
void
vcDrawOrHideCursor
(
vncConsolePtr
c
)
{
int
i
,
j
,
w
=
c
->
rfbS
creen
->
paddedWidthInBytes
;
char
*
b
=
c
->
rfbS
creen
->
frameBuffer
+
c
->
y
*
c
->
cHeight
*
w
+
c
->
x
*
c
->
cWidth
;
int
i
,
j
,
w
=
c
->
s
creen
->
paddedWidthInBytes
;
char
*
b
=
c
->
s
creen
->
frameBuffer
+
c
->
y
*
c
->
cHeight
*
w
+
c
->
x
*
c
->
cWidth
;
for
(
j
=
c
->
cy1
;
j
<
c
->
cy2
;
j
++
)
for
(
i
=
c
->
cx1
;
i
<
c
->
cx2
;
i
++
)
b
[
j
*
w
+
i
]
^=
0x0f
;
rfbMarkRectAsModified
(
c
->
rfbS
creen
,
rfbMarkRectAsModified
(
c
->
s
creen
,
c
->
x
*
c
->
cWidth
+
c
->
cx1
,
c
->
y
*
c
->
cHeight
+
c
->
cy1
,
c
->
x
*
c
->
cWidth
+
c
->
cx2
,
c
->
y
*
c
->
cHeight
+
c
->
cy2
);
c
->
cursorIsDrawn
=
c
->
cursorIsDrawn
?
FALSE
:
TRUE
;
...
...
@@ -50,7 +50,7 @@ void vcDrawOrHideCursor(vncConsolePtr c)
void
vcDrawCursor
(
vncConsolePtr
c
)
{
rfbDrawCursor
(
c
->
rfbS
creen
);
rfbDrawCursor
(
c
->
s
creen
);
if
(
c
->
cursorActive
&&
!
c
->
cursorIsDrawn
&&
c
->
y
<
c
->
height
&&
c
->
x
<
c
->
width
)
{
/* rfbLog("DrawCursor: %d,%d\n",c->x,c->y); */
vcDrawOrHideCursor
(
c
);
...
...
@@ -59,7 +59,7 @@ void vcDrawCursor(vncConsolePtr c)
void
vcHideCursor
(
vncConsolePtr
c
)
{
rfbUndrawCursor
(
c
->
rfbS
creen
);
rfbUndrawCursor
(
c
->
s
creen
);
if
(
c
->
currentlyMarking
)
vcUnmark
(
c
);
if
(
c
->
cursorIsDrawn
)
{
...
...
@@ -126,23 +126,23 @@ vncConsolePtr vcGetConsole(int *argc,char **argv,
if
(
c
->
cy1
<
0
)
c
->
cy2
=
0
;
c
->
rfbS
creen
=
c
->
s
creen
=
rfbGetScreen
(
argc
,
argv
,
c
->
cWidth
*
c
->
width
,
c
->
cHeight
*
c
->
height
,
8
,
1
,
1
);
c
->
rfbS
creen
->
screenData
=
(
void
*
)
c
;
c
->
rfbS
creen
->
displayHook
=
vcMakeSureCursorIsDrawn
;
c
->
rfbS
creen
->
frameBuffer
=
(
char
*
)
malloc
(
c
->
rfbScreen
->
width
*
c
->
rfbS
creen
->
height
);
memset
(
c
->
rfbS
creen
->
frameBuffer
,
c
->
backColour
,
c
->
rfbScreen
->
width
*
c
->
rfbS
creen
->
height
);
c
->
rfbS
creen
->
kbdAddEvent
=
vcKbdAddEventProc
;
c
->
rfbS
creen
->
ptrAddEvent
=
vcPtrAddEventProc
;
c
->
rfbS
creen
->
setXCutText
=
vcSetXCutTextProc
;
c
->
s
creen
->
screenData
=
(
void
*
)
c
;
c
->
s
creen
->
displayHook
=
vcMakeSureCursorIsDrawn
;
c
->
s
creen
->
frameBuffer
=
(
char
*
)
malloc
(
c
->
screen
->
width
*
c
->
s
creen
->
height
);
memset
(
c
->
s
creen
->
frameBuffer
,
c
->
backColour
,
c
->
screen
->
width
*
c
->
s
creen
->
height
);
c
->
s
creen
->
kbdAddEvent
=
vcKbdAddEventProc
;
c
->
s
creen
->
ptrAddEvent
=
vcPtrAddEventProc
;
c
->
s
creen
->
setXCutText
=
vcSetXCutTextProc
;
MakeColourMap16
(
c
);
c
->
foreColour
=
0x7
;
c
->
backColour
=
0
;
rfbInitServer
(
c
->
rfbS
creen
);
rfbInitServer
(
c
->
s
creen
);
return
(
c
);
}
...
...
@@ -153,7 +153,7 @@ vncConsolePtr vcGetConsole(int *argc,char **argv,
void
vcScroll
(
vncConsolePtr
c
,
int
lineCount
)
{
int
y1
,
y2
;
rfbScreenInfoPtr
s
=
c
->
rfbS
creen
;
rfbScreenInfoPtr
s
=
c
->
s
creen
;
if
(
lineCount
==
0
)
return
;
...
...
@@ -232,7 +232,7 @@ void vcPutChar(vncConsolePtr c,unsigned char ch)
void
vcPutCharColour
(
vncConsolePtr
c
,
unsigned
char
ch
,
unsigned
char
foreColour
,
unsigned
char
backColour
)
{
rfbScreenInfoPtr
s
=
c
->
rfbS
creen
;
rfbScreenInfoPtr
s
=
c
->
s
creen
;
int
j
,
x
,
y
;
vcHideCursor
(
c
);
...
...
@@ -394,15 +394,15 @@ void vcPtrAddEventProc(int buttonMask,int x,int y,rfbClientPtr cl)
{
vncConsolePtr
c
=
(
vncConsolePtr
)
cl
->
screen
->
screenData
;
rfbUndrawCursor
(
c
->
rfbS
creen
);
rfbUndrawCursor
(
c
->
s
creen
);
if
(
c
->
wasRightButtonDown
)
{
if
((
buttonMask
&
4
)
==
0
)
{
if
(
c
->
selection
)
{
char
*
s
;
for
(
s
=
c
->
selection
;
*
s
;
s
++
)
{
c
->
rfbS
creen
->
kbdAddEvent
(
1
,
*
s
,
cl
);
c
->
rfbS
creen
->
kbdAddEvent
(
0
,
*
s
,
cl
);
c
->
s
creen
->
kbdAddEvent
(
1
,
*
s
,
cl
);
c
->
s
creen
->
kbdAddEvent
(
0
,
*
s
,
cl
);
}
}
c
->
wasRightButtonDown
=
0
;
...
...
@@ -455,9 +455,9 @@ void vcPtrAddEventProc(int buttonMask,int x,int y,rfbClientPtr cl)
memcpy
(
c
->
selection
,
c
->
screenBuffer
+
i
,
j
-
i
);
c
->
selection
[
j
-
i
]
=
0
;
vcUnmark
(
c
);
rfbGotXCutText
(
c
->
rfbS
creen
,
c
->
selection
,
j
-
i
);
rfbGotXCutText
(
c
->
s
creen
,
c
->
selection
,
j
-
i
);
}
d
efaultPtrAddEvent
(
buttonMask
,
x
,
y
,
cl
);
rfbD
efaultPtrAddEvent
(
buttonMask
,
x
,
y
,
cl
);
}
void
vcSetXCutTextProc
(
char
*
str
,
int
len
,
struct
_rfbClientRec
*
cl
)
...
...
@@ -475,12 +475,12 @@ void vcToggleMarkCell(vncConsolePtr c,int pos)
int
x
=
(
pos
%
c
->
width
)
*
c
->
cWidth
,
y
=
(
pos
/
c
->
width
)
*
c
->
cHeight
;
int
i
,
j
;
rfbScreenInfoPtr
s
=
c
->
rfbS
creen
;
rfbScreenInfoPtr
s
=
c
->
s
creen
;
char
*
b
=
s
->
frameBuffer
+
y
*
s
->
width
+
x
;
for
(
j
=
0
;
j
<
c
->
cHeight
;
j
++
)
for
(
i
=
0
;
i
<
c
->
cWidth
;
i
++
)
b
[
j
*
s
->
width
+
i
]
^=
0x0f
;
rfbMarkRectAsModified
(
c
->
rfbS
creen
,
x
,
y
,
x
+
c
->
cWidth
,
y
+
c
->
cHeight
);
rfbMarkRectAsModified
(
c
->
s
creen
,
x
,
y
,
x
+
c
->
cWidth
,
y
+
c
->
cHeight
);
}
void
vcUnmark
(
vncConsolePtr
c
)
...
...
@@ -498,6 +498,6 @@ void vcUnmark(vncConsolePtr c)
void
vcProcessEvents
(
vncConsolePtr
c
)
{
rfbProcessEvents
(
c
->
rfbS
creen
,
c
->
selectTimeOut
);
rfbProcessEvents
(
c
->
s
creen
,
c
->
selectTimeOut
);
}
This diff is collapsed.
Click to expand it.
vncterm/VNConsole.h
View file @
97299606
...
...
@@ -52,7 +52,7 @@ typedef struct vncConsole {
rfbBool
dontDrawCursor
;
/* for example, while scrolling */
rfbFontDataPtr
font
;
rfbScreenInfoPtr
rfbS
creen
;
rfbScreenInfoPtr
s
creen
;
}
vncConsole
,
*
vncConsolePtr
;
#ifdef USE_ATTRIBUTE_BUFFER
...
...
This diff is collapsed.
Click to expand it.
x11vnc/x11vnc.c
View file @
97299606
...
...
@@ -1904,7 +1904,7 @@ enum rfbNewClientAction new_client(rfbClientPtr client) {
}
if
(
connect_once
)
{
if
(
screen
->
rfbDontDisconnect
&&
screen
->
rfbN
everShared
)
{
if
(
screen
->
dontDisconnect
&&
screen
->
n
everShared
)
{
if
(
!
shared
&&
accepted_client
)
{
rfbLog
(
"denying additional client: %s
\n
"
,
client
->
host
);
...
...
@@ -4247,7 +4247,7 @@ void check_xevents(void) {
static
int
first
=
1
,
sent_some_sel
=
0
;
static
time_t
last_request
=
0
;
time_t
now
=
time
(
0
);
int
have_clients
=
screen
->
rfbC
lientHead
?
1
:
0
;
int
have_clients
=
screen
->
c
lientHead
?
1
:
0
;
X_LOCK
;
if
(
first
&&
(
watch_selection
||
vnc_connect
))
{
...
...
@@ -5161,7 +5161,7 @@ void set_colormap(void) {
if
(
first
)
{
screen
->
colourMap
.
count
=
NCOLOR
;
screen
->
rfbS
erverFormat
.
trueColour
=
FALSE
;
screen
->
s
erverFormat
.
trueColour
=
FALSE
;
screen
->
colourMap
.
is16
=
TRUE
;
screen
->
colourMap
.
data
.
shorts
=
(
unsigned
short
*
)
malloc
(
3
*
sizeof
(
short
)
*
NCOLOR
);
...
...
@@ -5477,15 +5477,15 @@ void initialize_screen(int *argc, char **argv, XImage *fb) {
#endif
screen
->
paddedWidthInBytes
=
rfb_bytes_per_line
;
screen
->
rfbS
erverFormat
.
bitsPerPixel
=
fb
->
bits_per_pixel
;
screen
->
rfbS
erverFormat
.
depth
=
fb
->
depth
;
screen
->
rfbS
erverFormat
.
trueColour
=
(
uint8_t
)
TRUE
;
screen
->
s
erverFormat
.
bitsPerPixel
=
fb
->
bits_per_pixel
;
screen
->
s
erverFormat
.
depth
=
fb
->
depth
;
screen
->
s
erverFormat
.
trueColour
=
(
uint8_t
)
TRUE
;
have_masks
=
((
fb
->
red_mask
|
fb
->
green_mask
|
fb
->
blue_mask
)
!=
0
);
if
(
force_indexed_color
)
{
have_masks
=
0
;
}
if
(
!
have_masks
&&
screen
->
rfbS
erverFormat
.
bitsPerPixel
==
8
if
(
!
have_masks
&&
screen
->
s
erverFormat
.
bitsPerPixel
==
8
&&
CellsOfScreen
(
ScreenOfDisplay
(
dpy
,
scr
))
)
{
/* indexed colour */
if
(
!
quiet
)
{
...
...
@@ -5513,41 +5513,41 @@ void initialize_screen(int *argc, char **argv, XImage *fb) {
}
/* convert masks to bit shifts and max # colors */
screen
->
rfbS
erverFormat
.
redShift
=
0
;
screen
->
s
erverFormat
.
redShift
=
0
;
if
(
fb
->
red_mask
)
{
while
(
!
(
fb
->
red_mask
&
(
1
<<
screen
->
rfbS
erverFormat
.
redShift
)
)
)
{
screen
->
rfbS
erverFormat
.
redShift
++
;
&
(
1
<<
screen
->
s
erverFormat
.
redShift
)
)
)
{
screen
->
s
erverFormat
.
redShift
++
;
}
}
screen
->
rfbS
erverFormat
.
greenShift
=
0
;
screen
->
s
erverFormat
.
greenShift
=
0
;
if
(
fb
->
green_mask
)
{
while
(
!
(
fb
->
green_mask
&
(
1
<<
screen
->
rfbS
erverFormat
.
greenShift
)
)
)
{
screen
->
rfbS
erverFormat
.
greenShift
++
;
&
(
1
<<
screen
->
s
erverFormat
.
greenShift
)
)
)
{
screen
->
s
erverFormat
.
greenShift
++
;
}
}
screen
->
rfbS
erverFormat
.
blueShift
=
0
;
screen
->
s
erverFormat
.
blueShift
=
0
;
if
(
fb
->
blue_mask
)
{
while
(
!
(
fb
->
blue_mask
&
(
1
<<
screen
->
rfbS
erverFormat
.
blueShift
)
)
)
{
screen
->
rfbS
erverFormat
.
blueShift
++
;
&
(
1
<<
screen
->
s
erverFormat
.
blueShift
)
)
)
{
screen
->
s
erverFormat
.
blueShift
++
;
}
}
screen
->
rfbS
erverFormat
.
redMax
=
fb
->
red_mask
>>
screen
->
rfbS
erverFormat
.
redShift
;
screen
->
rfbS
erverFormat
.
greenMax
=
fb
->
green_mask
>>
screen
->
rfbS
erverFormat
.
greenShift
;
screen
->
rfbS
erverFormat
.
blueMax
=
fb
->
blue_mask
>>
screen
->
rfbS
erverFormat
.
blueShift
;
screen
->
s
erverFormat
.
redMax
=
fb
->
red_mask
>>
screen
->
s
erverFormat
.
redShift
;
screen
->
s
erverFormat
.
greenMax
=
fb
->
green_mask
>>
screen
->
s
erverFormat
.
greenShift
;
screen
->
s
erverFormat
.
blueMax
=
fb
->
blue_mask
>>
screen
->
s
erverFormat
.
blueShift
;
main_red_max
=
screen
->
rfbS
erverFormat
.
redMax
;
main_green_max
=
screen
->
rfbS
erverFormat
.
greenMax
;
main_blue_max
=
screen
->
rfbS
erverFormat
.
blueMax
;
main_red_max
=
screen
->
s
erverFormat
.
redMax
;
main_green_max
=
screen
->
s
erverFormat
.
greenMax
;
main_blue_max
=
screen
->
s
erverFormat
.
blueMax
;
main_red_shift
=
screen
->
rfbS
erverFormat
.
redShift
;
main_green_shift
=
screen
->
rfbS
erverFormat
.
greenShift
;
main_blue_shift
=
screen
->
rfbS
erverFormat
.
blueShift
;
main_red_shift
=
screen
->
s
erverFormat
.
redShift
;
main_green_shift
=
screen
->
s
erverFormat
.
greenShift
;
main_blue_shift
=
screen
->
s
erverFormat
.
blueShift
;
}
if
(
overlay
&&
!
quiet
)
{
rfbLog
(
"
\n
"
);
...
...
@@ -5587,7 +5587,7 @@ void initialize_screen(int *argc, char **argv, XImage *fb) {
fclose
(
stdout
);
/* we keep stderr for logging */
screen
->
inetdSock
=
fd
;
screen
->
rfbP
ort
=
0
;
screen
->
p
ort
=
0
;
}
else
if
(
!
got_rfbport
)
{
screen
->
autoPort
=
TRUE
;
...
...
@@ -5595,16 +5595,16 @@ void initialize_screen(int *argc, char **argv, XImage *fb) {
if
(
!
got_nevershared
&&
!
got_alwaysshared
)
{
if
(
shared
)
{
screen
->
rfbA
lwaysShared
=
TRUE
;
screen
->
a
lwaysShared
=
TRUE
;
}
else
{
screen
->
rfbD
ontDisconnect
=
TRUE
;
screen
->
rfbN
everShared
=
TRUE
;
screen
->
d
ontDisconnect
=
TRUE
;
screen
->
n
everShared
=
TRUE
;
}
}
/* XXX the following is based on libvncserver defaults. */
if
(
screen
->
rfbD
eferUpdateTime
==
5
)
{
if
(
screen
->
d
eferUpdateTime
==
5
)
{
/* XXX will be fixed someday */
screen
->
rfbD
eferUpdateTime
=
defer_update
;
screen
->
d
eferUpdateTime
=
defer_update
;
}
/* event callbacks: */
...
...
@@ -5625,8 +5625,8 @@ void initialize_screen(int *argc, char **argv, XImage *fb) {
rfbInitServer
(
screen
);
bpp
=
screen
->
rfbS
erverFormat
.
bitsPerPixel
;
depth
=
screen
->
rfbS
erverFormat
.
depth
;
bpp
=
screen
->
s
erverFormat
.
bitsPerPixel
;
depth
=
screen
->
s
erverFormat
.
depth
;
if
(
scaling
)
{
mark_rect_as_modified
(
0
,
0
,
dpy_x
,
dpy_y
,
0
);
...
...
@@ -5635,11 +5635,11 @@ void initialize_screen(int *argc, char **argv, XImage *fb) {
if
(
viewonly_passwd
)
{
/* append the view only passwd after the normal passwd */
char
**
passwds_new
=
malloc
(
3
*
sizeof
(
char
**
));
char
**
passwds_old
=
(
char
**
)
screen
->
rfbA
uthPasswdData
;
char
**
passwds_old
=
(
char
**
)
screen
->
a
uthPasswdData
;
passwds_new
[
0
]
=
passwds_old
[
0
];
passwds_new
[
1
]
=
viewonly_passwd
;
passwds_new
[
2
]
=
NULL
;
screen
->
rfbA
uthPasswdData
=
(
void
*
)
passwds_new
;
screen
->
a
uthPasswdData
=
(
void
*
)
passwds_new
;
}
}
...
...
@@ -6564,7 +6564,7 @@ static void scale_and_mark_rect(int X1, int Y1, int X2, int Y2) {
shrink
=
0
;
}
if
(
!
screen
->
rfbS
erverFormat
.
trueColour
)
{
if
(
!
screen
->
s
erverFormat
.
trueColour
)
{
/*
* PseudoColor colormap... blending leads to random colors.
*/
...
...
@@ -8265,7 +8265,7 @@ static void watch_loop(void) {
check_xevents
();
check_connect_inputs
();
if
(
!
screen
->
rfbC
lientHead
)
{
/* waiting for a client */
if
(
!
screen
->
c
lientHead
)
{
/* waiting for a client */
usleep
(
200
*
1000
);
continue
;
}
...
...
@@ -9176,7 +9176,7 @@ int main(int argc, char* argv[]) {
CHECK_ARGC
passwdfile
=
argv
[
++
i
];
}
else
if
(
!
strcmp
(
arg
,
"-storepasswd"
))
{
if
(
i
+
2
>=
argc
||
vnc
EncryptAndStorePasswd
(
argv
[
i
+
1
],
if
(
i
+
2
>=
argc
||
rfb
EncryptAndStorePasswd
(
argv
[
i
+
1
],
argv
[
i
+
2
])
!=
0
)
{
fprintf
(
stderr
,
"-storepasswd failed
\n
"
);
exit
(
1
);
...
...
@@ -10020,7 +10020,7 @@ int main(int argc, char* argv[]) {
}
if
(
!
inetd
)
{
if
(
!
screen
->
rfbPort
||
screen
->
rfbL
istenSock
<
0
)
{
if
(
!
screen
->
port
||
screen
->
l
istenSock
<
0
)
{
rfbLog
(
"Error: could not obtain listening port.
\n
"
);
clean_up_exit
(
1
);
}
...
...
@@ -10028,9 +10028,9 @@ int main(int argc, char* argv[]) {
if
(
!
quiet
)
{
rfbLog
(
"screen setup finished.
\n
"
);
}
if
(
screen
->
rfbP
ort
)
{
if
(
screen
->
p
ort
)
{
char
*
host
=
this_host
();
int
port
=
screen
->
rfbP
ort
;
int
port
=
screen
->
p
ort
;
if
(
host
!=
NULL
)
{
/* note that vncviewer special cases 5900-5999 */
if
(
inetd
)
{
...
...
@@ -10061,7 +10061,7 @@ int main(int argc, char* argv[]) {
if
(
inetd
)
{
;
/* should not occur (rfbPort) */
}
else
{
fprintf
(
stdout
,
"PORT=%d
\n
"
,
screen
->
rfbP
ort
);
fprintf
(
stdout
,
"PORT=%d
\n
"
,
screen
->
p
ort
);
}
fflush
(
stdout
);
}
...
...
This diff is collapsed.
Click to expand it.
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