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
521f0338
Commit
521f0338
authored
18 years ago
by
runge
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
x11vnc: -rotate option
parent
901729e3
Changes
24
Hide whitespace changes
Inline
Side-by-side
Showing
24 changed files
with
1989 additions
and
1176 deletions
+1989
-1176
ssl_vncviewer
classes/ssl/ssl_vncviewer
+31
-3
ChangeLog
x11vnc/ChangeLog
+4
-0
README
x11vnc/README
+1146
-1073
cursor.c
x11vnc/cursor.c
+34
-0
help.c
x11vnc/help.c
+44
-11
params.h
x11vnc/params.h
+9
-0
pointer.c
x11vnc/pointer.c
+4
-0
rates.c
x11vnc/rates.c
+1
-1
remote.c
x11vnc/remote.c
+15
-1
scan.c
x11vnc/scan.c
+375
-6
screen.c
x11vnc/screen.c
+131
-31
screen.h
x11vnc/screen.h
+2
-1
solid.c
x11vnc/solid.c
+7
-1
sslcmds.c
x11vnc/sslcmds.c
+1
-1
sslhelper.c
x11vnc/sslhelper.c
+10
-15
tkx11vnc
x11vnc/tkx11vnc
+1
-0
tkx11vnc.h
x11vnc/tkx11vnc.h
+1
-0
unixpw.c
x11vnc/unixpw.c
+63
-19
user.c
x11vnc/user.c
+6
-0
userinput.c
x11vnc/userinput.c
+43
-2
x11vnc.1
x11vnc/x11vnc.1
+43
-8
x11vnc.c
x11vnc/x11vnc.c
+4
-1
x11vnc.h
x11vnc/x11vnc.h
+7
-1
x11vnc_defs.c
x11vnc/x11vnc_defs.c
+7
-1
No files found.
classes/ssl/ssl_vncviewer
View file @
521f0338
...
...
@@ -30,9 +30,19 @@
# to reach the VNC server (e.g. your firewall requires a proxy).
# For the "double proxy" case use -proxy host1:port1,host2:port2
#
# A couple other args (not related to certs):
#
# -alpha turn on cursor alphablending hack if you are using the
# enhanced tightvnc vncviewer.
#
# -grab turn on XGrabServer hack if you are using the enhanced tightvnc
# vncviewer (e.g. for fullscreen mode in some windowmanagers like
# fvwm that do not otherwise work in fullscreen mode)
#
#
# set VNCVIEWERCMD to whatever vncviewer command you want to use:
#
VNCIPCMD
=
${
VNCVIEWERCMD
:-
vncip
}
VNCVIEWERCMD
=
${
VNCVIEWERCMD
:-
vncviewer
}
#
# Same for STUNNEL, e.g. /path/to/stunnel or stunnel4, etc.
...
...
@@ -53,6 +63,8 @@ help() {
head
-39
$0
|
tail
+2
}
gotalpha
=
""
# grab our cmdline options:
while
[
"X
$1
"
!=
"X"
]
do
...
...
@@ -63,6 +75,10 @@ do
;;
"-proxy"
)
shift
;
proxy
=
"
$1
"
;;
"-alpha"
)
gotalpha
=
1
;;
"-grab"
)
VNCVIEWER_GRAB_SERVER
=
1
;
export
VNCVIEWER_GRAB_SERVER
;;
"-h"
*
)
help
;
exit
0
;;
*
)
break
...
...
@@ -71,16 +87,26 @@ do
shift
done
if
[
"X
$gotalpha
"
!=
"X1"
]
;
then
NO_ALPHABLEND
=
1
export
NO_ALPHABLEND
fi
orig
=
"
$1
"
shift
# play around with host:display port:
if
!
echo
"
$orig
"
|
grep
':'
>
/dev/null
;
then
if
echo
"
$orig
"
|
grep
':'
>
/dev/null
;
then
:
else
orig
=
"
$orig
:0"
fi
host
=
`
echo
"
$orig
"
|
awk
-F
:
'{print $1}'
`
disp
=
`
echo
"
$orig
"
|
awk
-F
:
'{print $2}'
`
if
[
"X
$host
"
=
"X"
]
;
then
host
=
localhost
fi
if
[
$disp
-lt
200
]
;
then
port
=
`
expr
$disp
+ 5900
`
else
...
...
@@ -99,7 +125,9 @@ if [ "x$inuse" != "x" ]; then
try
=
5920
while
[
$try
-lt
6000
]
do
if
!
echo
"
$inuse
"
|
grep
-w
$try
>
/dev/null
;
then
if
echo
"
$inuse
"
|
grep
-w
$try
>
/dev/null
;
then
:
else
use
=
$try
break
fi
...
...
@@ -305,7 +333,7 @@ fi
if
echo
"
$0
"
|
grep
vncip
>
/dev/null
;
then
# hack for runge's special wrapper script vncip.
vncip
"
$@
"
localhost:
$n
$VNCIPCMD
"
$@
"
localhost:
$n
else
$VNCVIEWERCMD
"
$@
"
localhost:
$n
fi
...
...
This diff is collapsed.
Click to expand it.
x11vnc/ChangeLog
View file @
521f0338
2006-07-28 Karl Runge <runge@karlrunge.com>
* ssl_vncviewer: remove some bashisms.
* x11vnc: -rotate option (e.g. handheld), fix FPE on tru64.
2006-07-17 Karl Runge <runge@karlrunge.com>
* x11vnc: enable --without-x builds for -rawfb only (NO_X11)
...
...
This diff is collapsed.
Click to expand it.
x11vnc/README
View file @
521f0338
This source diff could not be displayed because it is too large. You can
view the blob
instead.
This diff is collapsed.
Click to expand it.
x11vnc/cursor.c
View file @
521f0338
...
...
@@ -82,6 +82,19 @@ static void curs_copy(cursor_info_t *dest, cursor_info_t *src) {
dest
->
sy
=
src
->
sy
;
dest
->
reverse
=
src
->
reverse
;
dest
->
rfb
=
src
->
rfb
;
if
(
rotating
&&
rotating_cursors
&&
dest
->
data
!=
NULL
)
{
int
tx
,
ty
;
rotate_curs
(
dest
->
data
,
src
->
data
,
src
->
wx
,
src
->
wy
,
1
);
rotate_curs
(
dest
->
mask
,
src
->
mask
,
src
->
wx
,
src
->
wy
,
1
);
rotate_coords
(
dest
->
sx
,
dest
->
sy
,
&
tx
,
&
ty
,
src
->
wx
,
src
->
wy
);
dest
->
sx
=
tx
;
dest
->
sy
=
ty
;
if
(
!
rotating_same
)
{
dest
->
wx
=
src
->
wy
;
dest
->
wy
=
src
->
wx
;
}
}
}
/* empty cursor */
...
...
@@ -1317,6 +1330,27 @@ static int get_xfixes_cursor(int init) {
cursors
[
use
]
->
rfb
=
NULL
;
}
if
(
rotating
&&
rotating_cursors
)
{
char
*
dst
;
int
tx
,
ty
;
int
w
=
xfc
->
width
;
int
h
=
xfc
->
height
;
dst
=
(
char
*
)
malloc
(
w
*
h
*
4
);
rotate_curs
(
dst
,
(
char
*
)
xfc
->
pixels
,
w
,
h
,
4
);
memcpy
(
xfc
->
pixels
,
dst
,
w
*
h
*
4
);
free
(
dst
);
rotate_coords
(
xfc
->
xhot
,
xfc
->
yhot
,
&
tx
,
&
ty
,
w
,
h
);
xfc
->
xhot
=
tx
;
xfc
->
yhot
=
ty
;
if
(
!
rotating_same
)
{
xfc
->
width
=
h
;
xfc
->
height
=
w
;
}
}
/* place cursor into our collection */
cursors
[
use
]
->
rfb
=
pixels2curs
(
xfc
->
pixels
,
xfc
->
width
,
xfc
->
height
,
xfc
->
xhot
,
xfc
->
yhot
,
bpp
/
8
);
...
...
This diff is collapsed.
Click to expand it.
x11vnc/help.c
View file @
521f0338
...
...
@@ -326,7 +326,7 @@ void print_help(int mode) {
" to the program location and in standard locations
\n
"
" (/usr/local/share/x11vnc/classes, etc). Under -ssl or
\n
"
" -stunnel the ssl classes subdirectory is sought.
\n
"
#ifndef
REL8x
#ifndef
NO_SSL_OR_UNIXPW
"-http_ssl As -http, but force lookup for ssl classes subdir.
\n
"
#endif
"
\n
"
...
...
@@ -458,7 +458,7 @@ void print_help(int mode) {
" and last line be
\"
__BEGIN_VIEWONLY__
\"
to have 2
\n
"
" full-access passwords)
\n
"
"
\n
"
#ifndef
REL8x
#ifndef
NO_SSL_OR_UNIXPW
"-unixpw [list] Use Unix username and password authentication. x11vnc
\n
"
" uses the su(1) program to verify the user's password.
\n
"
" [list] is an optional comma separated list of allowed
\n
"
...
...
@@ -615,7 +615,7 @@ void print_help(int mode) {
" of the form XAUTHORITY=<file> or raw xauthority data for
\n
"
" the display (e.g.
\"
xauth extract - $DISPLAY
\"
output).
\n
"
"
\n
"
#ifndef
REL8x
#ifndef
NO_SSL_OR_UNIXPW
" In the case of -unixpw (but not -unixpw_nis), then the
\n
"
" above command is run as the user who just authenticated
\n
"
" via the login and password prompt.
\n
"
...
...
@@ -624,8 +624,8 @@ void print_help(int mode) {
" can place a colon at the end of his username and
\n
"
" supply a few options: scale=, scale_cursor= (or sc=),
\n
"
" solid (or so), id=, clear_mods (or cm), clear_keys
\n
"
" (or ck), repeat, speeds= (or sp=),
or
readtimeout=
\n
"
" (or rd=) separated by commas if there is more than one.
\n
"
" (or ck), repeat, speeds= (or sp=), readtimeout=
\n
"
" (or rd=)
, or rotate= (or ro=)
separated by commas if there is more than one.
\n
"
" After the user logs in successfully, these options will
\n
"
" be applied to the VNC screen. For example,
\n
"
"
\n
"
...
...
@@ -682,7 +682,7 @@ void print_help(int mode) {
" the VNC client first attaches to since some VNC viewers
\n
"
" will not automatically adjust to a new framebuffer size.
\n
"
"
\n
"
#ifndef
REL8x
#ifndef
NO_SSL_OR_UNIXPW
"-ssl [pem] Use the openssl library (www.openssl.org) to provide a
\n
"
" built-in encrypted SSL tunnel between VNC viewers and
\n
"
" x11vnc. This requires libssl support to be compiled
\n
"
...
...
@@ -1450,6 +1450,38 @@ void print_help(int mode) {
" encoding, and then resize the framebuffer.
\"
exit
\"\n
"
" means disconnect all viewer clients, and then terminate
\n
"
" x11vnc.
\n
"
"
\n
"
"-rotate string Rotate and/or flip the framebuffer view exported by VNC.
\n
"
" This transformation is independent of XRANDR and is
\n
"
" done in software in main memory and so may be slower.
\n
"
" This mode could be useful on a handheld with portrait or
\n
"
" landscape modes that do not correspond to the scanline
\n
"
" order of the actual framebuffer.
\"
string
\"
can be:
\n
"
"
\n
"
" x flip along x-axis
\n
"
" y flip along y-axis
\n
"
" xy flip along x- and y-axes
\n
"
" +90 rotate 90 degrees clockwise
\n
"
" -90 rotate 90 degrees counter-clockwise
\n
"
" +90x rotate 90 degrees CW, then flip along x
\n
"
" +90y rotate 90 degrees CW, then flip along y
\n
"
"
\n
"
" these give all possible rotations and reflections.
\n
"
"
\n
"
" Aliases: same as xy: yx, +180, -180, 180
\n
"
" same as -90: +270, 270
\n
"
" same as +90: 90, (ditto for 90x, 90y)
\n
"
"
\n
"
" Like -scale, this transformation is applied at the very
\n
"
" end of any chain of framebuffer transformations and so
\n
"
" any options with geometries, e.g. -blackout, -clip, etc.
\n
"
" are relative to the original X (or -rawfb) framebuffer,
\n
"
" not the final one sent to VNC viewers.
\n
"
"
\n
"
" If you do not want the cursor shape to be rotated
\n
"
" prefix
\"
string
\"
with
\"
nc:
\"
, e.g.
\"
nc:+90
\"
,
\n
"
"
\"
nc:xy
\"
, etc.
\n
"
"
\n
"
"-padgeom WxH Whenever a new vncviewer connects, the framebuffer is
\n
"
" replaced with a fake, solid black one of geometry WxH.
\n
"
" Shortly afterwards the framebuffer is replaced with the
\n
"
...
...
@@ -2565,7 +2597,7 @@ void print_help(int mode) {
"
\n
"
" If you do not want x11vnc to guess the framebuffer's
\n
"
" WxHxB and masks automatically (sometimes the kernel
\n
"
" give
n
inaccurate information), specify them with a
\n
"
" give
s
inaccurate information), specify them with a
\n
"
" @WxHxB at the end of the string.
\n
"
"
\n
"
" Examples:
\n
"
...
...
@@ -2923,6 +2955,7 @@ void print_help(int mode) {
" xrandr enable -xrandr mode. (if applicable)
\n
"
" noxrandr disable -xrandr mode.
\n
"
" xrandr_mode:mode set the -xrandr mode to
\"
mode
\"
.
\n
"
" rotate:mode set the -rotate mode to
\"
mode
\"
.
\n
"
" padgeom:WxH set -padgeom to WxH (empty to disable)
\n
"
" If WxH is
\"
force
\"
or
\"
do
\"
the padded
\n
"
" geometry fb is immediately applied.
\n
"
...
...
@@ -3126,7 +3159,7 @@ void print_help(int mode) {
" listen lookup nolookup accept afteraccept gone shm
\n
"
" noshm flipbyteorder noflipbyteorder onetile noonetile
\n
"
" solid_color solid nosolid blackout xinerama noxinerama
\n
"
" xtrap noxtrap xrandr noxrandr xrandr_mode padgeom
\n
"
" xtrap noxtrap xrandr noxrandr xrandr_mode
rotate
padgeom
\n
"
" quiet q noquiet modtweak nomodtweak xkb noxkb capslock
\n
"
" nocapslock skip_lockkeys noskip_lockkeys skip_keycodes
\n
"
" sloppy_keys nosloppy_keys skip_dups noskip_dups
\n
"
...
...
@@ -3149,9 +3182,9 @@ void print_help(int mode) {
" nograbkbd grabptr nograbptr client_input speeds wmdt
\n
"
" debug_pointer dp nodebug_pointer nodp debug_keyboard
\n
"
" dk nodebug_keyboard nodk deferupdate defer wait_ui
\n
"
" wait_bog nowait_bog slow_fb wait readtimeout nap
\n
"
"
nonap sb screen_blank fbpm nofbpm fs gaps grow
\n
"
"
fuzz snapfb nosnapfb rawfb uinput_accel
uinput_reset
\n
"
" wait_bog nowait_bog slow_fb wait readtimeout nap
nonap
\n
"
"
sb screen_blank fbpm nofbpm fs gaps grow fuzz snapfb
\n
"
"
nosnapfb rawfb uinput_accel uinput_thresh
uinput_reset
\n
"
" uinput_always progressive rfbport http nohttp httpport
\n
"
" httpdir enablehttpproxy noenablehttpproxy alwaysshared
\n
"
" noalwaysshared nevershared noalwaysshared dontdisconnect
\n
"
...
...
This diff is collapsed.
Click to expand it.
x11vnc/params.h
View file @
521f0338
...
...
@@ -42,4 +42,13 @@
#define MAX_BUTTONS 5
#define ROTATE_NONE 0
#define ROTATE_X 1
#define ROTATE_Y 2
#define ROTATE_XY 3
#define ROTATE_90 4
#define ROTATE_90X 5
#define ROTATE_90Y 6
#define ROTATE_270 7
#endif
/* _X11VNC_PARAMS_H */
This diff is collapsed.
Click to expand it.
x11vnc/pointer.c
View file @
521f0338
...
...
@@ -646,6 +646,10 @@ void pointer(int mask, int x, int y, rfbClientPtr client) {
return
;
}
if
(
rotating
)
{
rotate_coords_inverse
(
x
,
y
,
&
x
,
&
y
,
-
1
,
-
1
);
}
if
(
scaling
)
{
/* map from rfb size to X11 size: */
x
=
((
double
)
x
/
scaled_x
)
*
dpy_x
;
...
...
This diff is collapsed.
Click to expand it.
x11vnc/rates.c
View file @
521f0338
...
...
@@ -536,7 +536,7 @@ if (db) fprintf(stderr, "dt3 calc: num rects req: %d/%d mod: %d/%d "
}
else
if
(
got_t3
==
2
)
{
dt3
=
dts
[
1
];
}
else
{
if
(
dts
[
2
]
>
=
0
.
0
)
{
if
(
dts
[
2
]
>
0
.
0
)
{
double
rat
=
dts
[
1
]
/
dts
[
2
];
if
(
rat
>
0
.
5
&&
rat
<
2
.
0
)
{
dt3
=
dts
[
1
]
+
dts
[
2
];
...
...
This diff is collapsed.
Click to expand it.
x11vnc/remote.c
View file @
521f0338
...
...
@@ -1897,6 +1897,20 @@ char *process_remote_cmd(char *cmd, int stringonly) {
rfbLog
(
"remote_cmd: XRANDR ext. not present.
\n
"
);
}
}
else
if
(
strstr
(
p
,
"rotate"
)
==
p
)
{
COLON_CHECK
(
"rotate:"
)
if
(
query
)
{
snprintf
(
buf
,
bufn
,
"ans=%s%s%s"
,
p
,
co
,
NONUL
(
rotating_str
));
goto
qry
;
}
p
+=
strlen
(
"rotate:"
);
if
(
rotating_str
)
free
(
rotating_str
);
rotating_str
=
strdup
(
p
);
rfbLog
(
"remote_cmd: set rotate to
\"
%s
\"\n
"
,
rotating_str
);
do_new_fb
(
0
);
}
else
if
(
strstr
(
p
,
"padgeom"
)
==
p
)
{
COLON_CHECK
(
"padgeom:"
)
if
(
query
)
{
...
...
@@ -4035,7 +4049,7 @@ char *process_remote_cmd(char *cmd, int stringonly) {
snprintf
(
buf
,
bufn
,
"aro=%s:%d"
,
p
,
no_external_cmds
);
}
else
if
(
!
strcmp
(
p
,
"passwdfile"
))
{
snprintf
(
buf
,
bufn
,
"aro=%s:%s"
,
p
,
NONUL
(
passwdfile
));
#ifndef
REL8x
#ifndef
NO_SSL_OR_UNIXPW
}
else
if
(
!
strcmp
(
p
,
"unixpw"
))
{
snprintf
(
buf
,
bufn
,
"aro=%s:%d"
,
p
,
unixpw
);
}
else
if
(
!
strcmp
(
p
,
"unixpw_nis"
))
{
...
...
This diff is collapsed.
Click to expand it.
x11vnc/scan.c
View file @
521f0338
...
...
@@ -1181,9 +1181,78 @@ void scale_rect(double factor, int blend, int interpolate, int Bpp,
}
}
/*
Framebuffers data flow:
General case:
-------- -------- -------- --------
----- |8to24_fb| |main_fb | |snap_fb | | X |
|rfbfb| <== | | <== | | <== | | <== | Server |
----- -------- -------- -------- --------
(to vnc) (optional) (usu = rfbfb) (optional) (read only)
8to24_fb mode will create side fbs: poll24_fb and poll8_fb for
bookkeepping the different regions (merged into 8to24_fb).
Normal case:
-------- --------
|main_fb | | X |
|= rfb_fb| <== | Server |
-------- --------
Scaling case:
-------- --------
----- |main_fb | | X |
|rfbfb| <== | | <== | Server |
----- -------- --------
Webcam/video case:
-------- -------- --------
|main_fb | |snap_fb | | Video |
| | <== | | <== | device |
-------- -------- --------
If we ever do a -rr rotation/reflection tran, it probably should
be done after any scaling (need a rr_fb for intermediate results)
-rr option: transformation:
none x -> x;
y -> y;
x x -> w - x - 1;
y -> y;
y x -> x;
x -> h - y - 1;
xy x -> w - x - 1;
y -> h - y - 1;
+90 x -> h - y - 1;
y -> x;
+90x x -> y;
y -> x;
+90y x -> h - y - 1;
y -> w - x - 1;
-90 x -> y;
y -> w - x - 1;
some aliases:
xy: yx, +180, -180, 180
+90: 90
+90x: 90x
+90y: 90y
-90: +270, 270
*/
void
scale_and_mark_rect
(
int
X1
,
int
Y1
,
int
X2
,
int
Y2
)
{
char
*
src_fb
=
main_fb
;
int
Bpp
=
bpp
/
8
,
fac
=
1
;
char
*
dst_fb
,
*
src_fb
=
main_fb
;
int
dst_bpl
,
Bpp
=
bpp
/
8
,
fac
=
1
;
if
(
!
screen
||
!
rfb_fb
||
!
main_fb
)
{
return
;
...
...
@@ -1213,10 +1282,309 @@ void scale_and_mark_rect(int X1, int Y1, int X2, int Y2) {
fac
=
4
;
}
}
dst_fb
=
rfb_fb
;
dst_bpl
=
rfb_bytes_per_line
;
scale_rect
(
scale_fac
,
scaling_blend
,
scaling_interpolate
,
fac
*
Bpp
,
src_fb
,
fac
*
main_bytes_per_line
,
rfb_fb
,
rfb_bytes_per_line
,
dpy_x
,
dpy_y
,
scaled_x
,
scaled_y
,
X1
,
Y1
,
X2
,
Y2
,
1
);
src_fb
,
fac
*
main_bytes_per_line
,
dst_fb
,
dst_bpl
,
dpy_x
,
dpy_y
,
scaled_x
,
scaled_y
,
X1
,
Y1
,
X2
,
Y2
,
1
);
}
void
rotate_coords
(
int
x
,
int
y
,
int
*
xo
,
int
*
yo
,
int
dxi
,
int
dyi
)
{
int
xi
=
x
,
yi
=
y
;
int
Dx
,
Dy
;
if
(
dxi
>=
0
)
{
Dx
=
dxi
;
Dy
=
dyi
;
}
else
if
(
scaling
)
{
Dx
=
scaled_x
;
Dy
=
scaled_y
;
}
else
{
Dx
=
dpy_x
;
Dy
=
dpy_y
;
}
if
(
rotating
==
ROTATE_NONE
)
{
*
xo
=
xi
;
*
yo
=
yi
;
}
else
if
(
rotating
==
ROTATE_X
)
{
*
xo
=
Dx
-
xi
-
1
;
*
yo
=
yi
;
}
else
if
(
rotating
==
ROTATE_Y
)
{
*
xo
=
xi
;
*
yo
=
Dy
-
yi
-
1
;
}
else
if
(
rotating
==
ROTATE_XY
)
{
*
xo
=
Dx
-
xi
-
1
;
*
yo
=
Dy
-
yi
-
1
;
}
else
if
(
rotating
==
ROTATE_90
)
{
*
xo
=
Dy
-
yi
-
1
;
*
yo
=
xi
;
}
else
if
(
rotating
==
ROTATE_90X
)
{
*
xo
=
yi
;
*
yo
=
xi
;
}
else
if
(
rotating
==
ROTATE_90Y
)
{
*
xo
=
Dy
-
yi
-
1
;
*
yo
=
Dx
-
xi
-
1
;
}
else
if
(
rotating
==
ROTATE_270
)
{
*
xo
=
yi
;
*
yo
=
Dx
-
xi
-
1
;
}
}
void
rotate_coords_inverse
(
int
x
,
int
y
,
int
*
xo
,
int
*
yo
,
int
dxi
,
int
dyi
)
{
int
xi
=
x
,
yi
=
y
;
int
Dx
,
Dy
;
if
(
dxi
>=
0
)
{
Dx
=
dxi
;
Dy
=
dyi
;
}
else
if
(
scaling
)
{
Dx
=
scaled_x
;
Dy
=
scaled_y
;
}
else
{
Dx
=
dpy_x
;
Dy
=
dpy_y
;
}
if
(
!
rotating_same
)
{
int
t
=
Dx
;
Dx
=
Dy
;
Dy
=
t
;
}
if
(
rotating
==
ROTATE_NONE
)
{
*
xo
=
xi
;
*
yo
=
yi
;
}
else
if
(
rotating
==
ROTATE_X
)
{
*
xo
=
Dx
-
xi
-
1
;
*
yo
=
yi
;
}
else
if
(
rotating
==
ROTATE_Y
)
{
*
xo
=
xi
;
*
yo
=
Dy
-
yi
-
1
;
}
else
if
(
rotating
==
ROTATE_XY
)
{
*
xo
=
Dx
-
xi
-
1
;
*
yo
=
Dy
-
yi
-
1
;
}
else
if
(
rotating
==
ROTATE_90
)
{
*
xo
=
yi
;
*
yo
=
Dx
-
xi
-
1
;
}
else
if
(
rotating
==
ROTATE_90X
)
{
*
xo
=
yi
;
*
yo
=
xi
;
}
else
if
(
rotating
==
ROTATE_90Y
)
{
*
xo
=
Dy
-
yi
-
1
;
*
yo
=
Dx
-
xi
-
1
;
}
else
if
(
rotating
==
ROTATE_270
)
{
*
xo
=
Dy
-
yi
-
1
;
*
yo
=
xi
;
}
}
/* unroll the Bpp loop to be used in each case: */
#define ROT_COPY \
src = src_0 + fbl*y + Bpp*x; \
dst = dst_0 + rbl*yn + Bpp*xn; \
if (Bpp == 1) { \
*(dst) = *(src); \
} else if (Bpp == 2) { \
*(dst+0) = *(src+0); \
*(dst+1) = *(src+1); \
} else if (Bpp == 3) { \
*(dst+0) = *(src+0); \
*(dst+1) = *(src+1); \
*(dst+2) = *(src+2); \
} else if (Bpp == 4) { \
*(dst+0) = *(src+0); \
*(dst+1) = *(src+1); \
*(dst+2) = *(src+2); \
*(dst+3) = *(src+3); \
}
void
rotate_fb
(
int
x1
,
int
y1
,
int
x2
,
int
y2
)
{
int
x
,
y
,
xn
,
yn
,
r_x1
,
r_y1
,
r_x2
,
r_y2
,
Bpp
=
bpp
/
8
;
int
fbl
=
rfb_bytes_per_line
;
int
rbl
=
rot_bytes_per_line
;
int
Dx
,
Dy
;
char
*
src
,
*
dst
;
char
*
src_0
=
rfb_fb
;
char
*
dst_0
=
rot_fb
;
if
(
!
rotating
||
!
rot_fb
)
{
return
;
}
if
(
scaling
)
{
Dx
=
scaled_x
;
Dy
=
scaled_y
;
}
else
{
Dx
=
dpy_x
;
Dy
=
dpy_y
;
}
rotate_coords
(
x1
,
y1
,
&
r_x1
,
&
r_y1
,
-
1
,
-
1
);
rotate_coords
(
x2
,
y2
,
&
r_x2
,
&
r_y2
,
-
1
,
-
1
);
dst
=
rot_fb
;
if
(
rotating
==
ROTATE_X
)
{
for
(
y
=
y1
;
y
<
y2
;
y
++
)
{
for
(
x
=
x1
;
x
<
x2
;
x
++
)
{
xn
=
Dx
-
x
-
1
;
yn
=
y
;
ROT_COPY
}
}
}
else
if
(
rotating
==
ROTATE_Y
)
{
for
(
y
=
y1
;
y
<
y2
;
y
++
)
{
for
(
x
=
x1
;
x
<
x2
;
x
++
)
{
xn
=
x
;
yn
=
Dy
-
y
-
1
;
ROT_COPY
}
}
}
else
if
(
rotating
==
ROTATE_XY
)
{
for
(
y
=
y1
;
y
<
y2
;
y
++
)
{
for
(
x
=
x1
;
x
<
x2
;
x
++
)
{
xn
=
Dx
-
x
-
1
;
yn
=
Dy
-
y
-
1
;
ROT_COPY
}
}
}
else
if
(
rotating
==
ROTATE_90
)
{
for
(
y
=
y1
;
y
<
y2
;
y
++
)
{
for
(
x
=
x1
;
x
<
x2
;
x
++
)
{
xn
=
Dy
-
y
-
1
;
yn
=
x
;
ROT_COPY
}
}
}
else
if
(
rotating
==
ROTATE_90X
)
{
for
(
y
=
y1
;
y
<
y2
;
y
++
)
{
for
(
x
=
x1
;
x
<
x2
;
x
++
)
{
xn
=
y
;
yn
=
x
;
ROT_COPY
}
}
}
else
if
(
rotating
==
ROTATE_90Y
)
{
for
(
y
=
y1
;
y
<
y2
;
y
++
)
{
for
(
x
=
x1
;
x
<
x2
;
x
++
)
{
xn
=
Dy
-
y
-
1
;
yn
=
Dx
-
x
-
1
;
ROT_COPY
}
}
}
else
if
(
rotating
==
ROTATE_270
)
{
for
(
y
=
y1
;
y
<
y2
;
y
++
)
{
for
(
x
=
x1
;
x
<
x2
;
x
++
)
{
xn
=
y
;
yn
=
Dx
-
x
-
1
;
ROT_COPY
}
}
}
}
void
rotate_curs
(
char
*
dst_0
,
char
*
src_0
,
int
Dx
,
int
Dy
,
int
Bpp
)
{
int
x
,
y
,
xn
,
yn
;
char
*
src
,
*
dst
;
int
fbl
,
rbl
;
if
(
!
rotating
)
{
return
;
}
fbl
=
Dx
*
Bpp
;
if
(
rotating_same
)
{
rbl
=
Dx
*
Bpp
;
}
else
{
rbl
=
Dy
*
Bpp
;
}
if
(
rotating
==
ROTATE_X
)
{
for
(
y
=
0
;
y
<
Dy
;
y
++
)
{
for
(
x
=
0
;
x
<
Dx
;
x
++
)
{
xn
=
Dx
-
x
-
1
;
yn
=
y
;
ROT_COPY
if
(
0
)
fprintf
(
stderr
,
"rcurs: %d %d %d %d
\n
"
,
x
,
y
,
xn
,
yn
);
}
}
}
else
if
(
rotating
==
ROTATE_Y
)
{
for
(
y
=
0
;
y
<
Dy
;
y
++
)
{
for
(
x
=
0
;
x
<
Dx
;
x
++
)
{
xn
=
x
;
yn
=
Dy
-
y
-
1
;
ROT_COPY
}
}
}
else
if
(
rotating
==
ROTATE_XY
)
{
for
(
y
=
0
;
y
<
Dy
;
y
++
)
{
for
(
x
=
0
;
x
<
Dx
;
x
++
)
{
xn
=
Dx
-
x
-
1
;
yn
=
Dy
-
y
-
1
;
ROT_COPY
}
}
}
else
if
(
rotating
==
ROTATE_90
)
{
for
(
y
=
0
;
y
<
Dy
;
y
++
)
{
for
(
x
=
0
;
x
<
Dx
;
x
++
)
{
xn
=
Dy
-
y
-
1
;
yn
=
x
;
ROT_COPY
}
}
}
else
if
(
rotating
==
ROTATE_90X
)
{
for
(
y
=
0
;
y
<
Dy
;
y
++
)
{
for
(
x
=
0
;
x
<
Dx
;
x
++
)
{
xn
=
y
;
yn
=
x
;
ROT_COPY
}
}
}
else
if
(
rotating
==
ROTATE_90Y
)
{
for
(
y
=
0
;
y
<
Dy
;
y
++
)
{
for
(
x
=
0
;
x
<
Dx
;
x
++
)
{
xn
=
Dy
-
y
-
1
;
yn
=
Dx
-
x
-
1
;
ROT_COPY
}
}
}
else
if
(
rotating
==
ROTATE_270
)
{
for
(
y
=
0
;
y
<
Dy
;
y
++
)
{
for
(
x
=
0
;
x
<
Dx
;
x
++
)
{
xn
=
y
;
yn
=
Dx
-
x
-
1
;
ROT_COPY
}
}
}
}
void
mark_wrapper
(
int
x1
,
int
y1
,
int
x2
,
int
y2
)
{
int
t
,
r_x1
=
x1
,
r_y1
=
y1
,
r_x2
=
x2
,
r_y2
=
y2
;
if
(
rotating
)
{
/* well we hope rot_fb will always be the last one... */
rotate_coords
(
x1
,
y1
,
&
r_x1
,
&
r_y1
,
-
1
,
-
1
);
rotate_coords
(
x2
,
y2
,
&
r_x2
,
&
r_y2
,
-
1
,
-
1
);
rotate_fb
(
x1
,
y1
,
x2
,
y2
);
if
(
r_x1
>
r_x2
)
{
t
=
r_x1
;
r_x1
=
r_x2
;
r_x2
=
t
;
}
if
(
r_y1
>
r_y2
)
{
t
=
r_y1
;
r_y1
=
r_y2
;
r_y2
=
t
;
}
/* painting errors */
r_x1
--
;
r_x2
++
;
r_y1
--
;
r_y2
++
;
}
rfbMarkRectAsModified
(
screen
,
r_x1
,
r_y1
,
r_x2
,
r_y2
);
}
void
mark_rect_as_modified
(
int
x1
,
int
y1
,
int
x2
,
int
y2
,
int
force
)
{
...
...
@@ -1243,8 +1611,9 @@ void mark_rect_as_modified(int x1, int y1, int x2, int y2, int force) {
}
}
if
(
rfb_fb
==
main_fb
||
force
)
{
rfbMarkRectAsModified
(
screen
,
x1
,
y1
,
x2
,
y2
);
mark_wrapper
(
x1
,
y1
,
x2
,
y2
);
return
;
}
...
...
@@ -1255,7 +1624,7 @@ void mark_rect_as_modified(int x1, int y1, int x2, int y2, int force) {
if
(
scaling
)
{
scale_and_mark_rect
(
x1
,
y1
,
x2
,
y2
);
}
else
{
rfbMarkRectAsModified
(
screen
,
x1
,
y1
,
x2
,
y2
);
mark_wrapper
(
x1
,
y1
,
x2
,
y2
);
}
}
...
...
This diff is collapsed.
Click to expand it.
x11vnc/screen.c
View file @
521f0338
...
...
@@ -29,12 +29,13 @@ void set_colormap(int reset);
void
set_nofb_params
(
int
restore
);
void
set_raw_fb_params
(
int
restore
);
void
do_new_fb
(
int
reset_mem
);
void
free_old_fb
(
char
*
old_main
,
char
*
old_rfb
,
char
*
old_8to24
,
char
*
old_snap_fb
);
void
free_old_fb
(
void
);
void
check_padded_fb
(
void
);
void
install_padded_fb
(
char
*
geom
);
XImage
*
initialize_xdisplay_fb
(
void
);
void
parse_scale_string
(
char
*
str
,
double
*
factor
,
int
*
scaling
,
int
*
blend
,
int
*
nomult4
,
int
*
pad
,
int
*
interpolate
,
int
*
numer
,
int
*
denom
);
int
parse_rotate_string
(
char
*
str
,
int
*
mode
);
int
scale_round
(
int
len
,
double
fac
);
void
initialize_screen
(
int
*
argc
,
char
**
argv
,
XImage
*
fb
);
void
set_vnc_desktop_name
(
void
);
...
...
@@ -657,24 +658,34 @@ static void nofb_hook(rfbClientPtr cl) {
screen
->
displayHook
=
NULL
;
}
void
free_old_fb
(
char
*
old_main
,
char
*
old_rfb
,
char
*
old_8to24
,
char
*
old_snap_fb
)
{
if
(
old_main
)
{
free
(
old_main
);
}
if
(
old_rfb
)
{
if
(
old_rfb
!=
old_main
)
{
free
(
old_rfb
);
void
free_old_fb
(
void
)
{
char
*
fbs
[
16
];
int
i
,
j
,
nfb
=
0
,
db
=
0
;
fbs
[
nfb
++
]
=
main_fb
;
main_fb
=
NULL
;
fbs
[
nfb
++
]
=
rfb_fb
;
rfb_fb
=
NULL
;
fbs
[
nfb
++
]
=
cmap8to24_fb
;
cmap8to24_fb
=
NULL
;
fbs
[
nfb
++
]
=
snap_fb
;
snap_fb
=
NULL
;
fbs
[
nfb
++
]
=
rot_fb
;
rot_fb
=
NULL
;
fbs
[
nfb
++
]
=
raw_fb
;
raw_fb
=
NULL
;
for
(
i
=
0
;
i
<
nfb
;
i
++
)
{
char
*
fb
=
fbs
[
i
];
int
freeit
=
1
;
if
(
!
fb
||
fb
<
(
char
*
)
0x10
)
{
continue
;
}
}
if
(
old_8to24
)
{
if
(
old_8to24
!=
old_main
&&
old_8to24
!=
old_rfb
)
{
free
(
old_8to24
);
for
(
j
=
0
;
j
<
i
;
j
++
)
{
if
(
fb
==
fbs
[
j
])
{
freeit
=
0
;
break
;
}
}
}
if
(
old_snap_fb
)
{
if
(
old_snap_fb
!=
old_main
&&
old_snap_fb
!=
old_rfb
&&
old_snap_fb
!=
old_8to24
)
{
free
(
old_snap_
fb
);
if
(
freeit
)
{
if
(
db
)
fprintf
(
stderr
,
"free: %i %p
\n
"
,
i
,
fb
);
free
(
fb
);
}
else
{
if
(
db
)
fprintf
(
stderr
,
"skip: %i %p
\n
"
,
i
,
fb
);
}
}
}
...
...
@@ -694,15 +705,7 @@ void do_new_fb(int reset_mem) {
free_tiles
();
}
free_old_fb
(
main_fb
,
rfb_fb
,
cmap8to24_fb
,
snap_fb
);
if
(
raw_fb
==
main_fb
||
raw_fb
==
rfb_fb
)
{
raw_fb
=
NULL
;
}
main_fb
=
NULL
;
rfb_fb
=
NULL
;
cmap8to24_fb
=
NULL
;
snap_fb
=
NULL
;
free_old_fb
();
fb
=
initialize_xdisplay_fb
();
...
...
@@ -1766,6 +1769,35 @@ void parse_scale_string(char *str, double *factor, int *scaling, int *blend,
free
(
tstr
);
}
int
parse_rotate_string
(
char
*
str
,
int
*
mode
)
{
int
m
=
ROTATE_NONE
;
if
(
str
==
NULL
||
!
strcmp
(
str
,
""
)
||
!
strcmp
(
str
,
"0"
))
{
m
=
ROTATE_NONE
;
}
else
if
(
!
strcmp
(
str
,
"x"
))
{
m
=
ROTATE_X
;
}
else
if
(
!
strcmp
(
str
,
"y"
))
{
m
=
ROTATE_Y
;
}
else
if
(
!
strcmp
(
str
,
"xy"
)
||
!
strcmp
(
str
,
"yx"
)
||
!
strcmp
(
str
,
"+180"
)
||
!
strcmp
(
str
,
"-180"
)
||
!
strcmp
(
str
,
"180"
))
{
m
=
ROTATE_XY
;
}
else
if
(
!
strcmp
(
str
,
"+90"
)
||
!
strcmp
(
str
,
"90"
))
{
m
=
ROTATE_90
;
}
else
if
(
!
strcmp
(
str
,
"+90x"
)
||
!
strcmp
(
str
,
"90x"
))
{
m
=
ROTATE_90X
;
}
else
if
(
!
strcmp
(
str
,
"+90y"
)
||
!
strcmp
(
str
,
"90y"
))
{
m
=
ROTATE_90Y
;
}
else
if
(
!
strcmp
(
str
,
"-90"
)
||
!
strcmp
(
str
,
"270"
)
||
!
strcmp
(
str
,
"+270"
))
{
m
=
ROTATE_270
;
}
else
{
rfbLog
(
"invalid -rotate mode: %s
\n
"
,
str
);
}
if
(
mode
)
{
*
mode
=
m
;
}
return
m
;
}
int
scale_round
(
int
len
,
double
fac
)
{
double
eps
=
0
.
000001
;
...
...
@@ -1837,6 +1869,28 @@ static void setup_scaling(int *width_in, int *height_in) {
}
}
static
void
setup_rotating
(
void
)
{
char
*
rs
=
rotating_str
;
rotating_cursors
=
1
;
if
(
rs
&&
strstr
(
rs
,
"nc:"
)
==
rs
)
{
rs
+=
strlen
(
"nc:"
);
rotating_cursors
=
0
;
}
rotating
=
parse_rotate_string
(
rs
,
NULL
);
if
(
!
rotating
)
{
rotating_cursors
=
0
;
}
if
(
rotating
==
ROTATE_90
||
rotating
==
ROTATE_90X
||
rotating
==
ROTATE_90Y
||
rotating
==
ROTATE_270
)
{
rotating_same
=
0
;
}
else
{
rotating_same
=
1
;
}
}
/*
* initialize the rfb framebuffer/screen
*/
...
...
@@ -1892,8 +1946,27 @@ void initialize_screen(int *argc, char **argv, XImage *fb) {
rfb_bytes_per_line
=
main_bytes_per_line
;
}
setup_rotating
();
if
(
rotating
)
{
if
(
!
rotating_same
)
{
int
t
,
b
=
main_bytes_per_line
/
fb
->
width
;
if
(
scaling
)
{
rot_bytes_per_line
=
b
*
height
;
}
else
{
rot_bytes_per_line
=
b
*
fb
->
height
;
}
t
=
width
;
width
=
height
;
/* The big swap... */
height
=
t
;
}
else
{
rot_bytes_per_line
=
rfb_bytes_per_line
;
}
}
if
(
cmap8to24
&&
depth
==
8
)
{
rfb_bytes_per_line
*=
4
;
rot_bytes_per_line
*=
4
;
}
/*
...
...
@@ -1965,7 +2038,11 @@ void initialize_screen(int *argc, char **argv, XImage *fb) {
}
/* set up format from scratch: */
screen
->
paddedWidthInBytes
=
rfb_bytes_per_line
;
if
(
rotating
&&
!
rotating_same
)
{
screen
->
paddedWidthInBytes
=
rot_bytes_per_line
;
}
else
{
screen
->
paddedWidthInBytes
=
rfb_bytes_per_line
;
}
screen
->
serverFormat
.
bitsPerPixel
=
fb_bpp
;
screen
->
serverFormat
.
depth
=
fb_depth
;
screen
->
serverFormat
.
trueColour
=
TRUE
;
...
...
@@ -2155,6 +2232,8 @@ void initialize_screen(int *argc, char **argv, XImage *fb) {
main_bytes_per_line
);
fprintf
(
stderr
,
" rfb_fb_bytes_per_line: %d
\n
"
,
rfb_bytes_per_line
);
fprintf
(
stderr
,
" rot_fb_bytes_per_line: %d
\n
"
,
rot_bytes_per_line
);
switch
(
fb
->
format
)
{
case
XYBitmap
:
fprintf
(
stderr
,
" format: XYBitmap
\n
"
);
break
;
...
...
@@ -2201,11 +2280,13 @@ void initialize_screen(int *argc, char **argv, XImage *fb) {
main_fb
=
NULL
;
rfb_fb
=
main_fb
;
cmap8to24_fb
=
NULL
;
rot_fb
=
NULL
;
screen
->
displayHook
=
nofb_hook
;
}
else
{
main_fb
=
fb
->
data
;
rfb_fb
=
NULL
;
cmap8to24_fb
=
NULL
;
rot_fb
=
NULL
;
if
(
cmap8to24
)
{
int
n
=
main_bytes_per_line
*
fb
->
height
;
...
...
@@ -2215,20 +2296,39 @@ void initialize_screen(int *argc, char **argv, XImage *fb) {
cmap8to24_fb
=
(
char
*
)
malloc
(
n
);
memset
(
cmap8to24_fb
,
0
,
n
);
}
if
(
rotating
)
{
int
n
=
rot_bytes_per_line
*
height
;
rot_fb
=
(
char
*
)
malloc
(
n
);
memset
(
rot_fb
,
0
,
n
);
}
if
(
scaling
)
{
rfb_fb
=
(
char
*
)
malloc
(
rfb_bytes_per_line
*
height
);
memset
(
rfb_fb
,
0
,
rfb_bytes_per_line
*
height
);
int
n
=
rfb_bytes_per_line
*
height
;
if
(
rotating
&&
!
rotating_same
)
{
n
=
rot_bytes_per_line
*
height
;
}
rfb_fb
=
(
char
*
)
malloc
(
n
);
memset
(
rfb_fb
,
0
,
n
);
}
else
if
(
cmap8to24
)
{
rfb_fb
=
cmap8to24_fb
;
}
else
{
rfb_fb
=
main_fb
;
}
}
screen
->
frameBuffer
=
rfb_fb
;
if
(
rot_fb
)
{
screen
->
frameBuffer
=
rot_fb
;
}
else
{
screen
->
frameBuffer
=
rfb_fb
;
}
if
(
!
quiet
)
{
fprintf
(
stderr
,
" rfb_fb: %p
\n
"
,
rfb_fb
);
fprintf
(
stderr
,
" main_fb: %p
\n
"
,
main_fb
);
fprintf
(
stderr
,
" 8to24_fb: %p
\n
"
,
cmap8to24_fb
);
fprintf
(
stderr
,
" rot_fb: %p
\n
"
,
rot_fb
);
fprintf
(
stderr
,
" snap_fb: %p
\n
"
,
snap_fb
);
fprintf
(
stderr
,
" raw_fb: %p
\n
"
,
raw_fb
);
fprintf
(
stderr
,
" fake_fb: %p
\n
"
,
fake_fb
);
...
...
@@ -2241,7 +2341,7 @@ void initialize_screen(int *argc, char **argv, XImage *fb) {
setup_cursors_and_push
();
if
(
scaling
||
cmap8to24
)
{
if
(
scaling
||
rotating
||
cmap8to24
)
{
mark_rect_as_modified
(
0
,
0
,
dpy_x
,
dpy_y
,
0
);
}
...
...
This diff is collapsed.
Click to expand it.
x11vnc/screen.h
View file @
521f0338
...
...
@@ -10,13 +10,14 @@ extern void set_colormap(int reset);
extern
void
set_nofb_params
(
int
restore
);
extern
void
set_raw_fb_params
(
int
restore
);
extern
void
do_new_fb
(
int
reset_mem
);
extern
void
free_old_fb
(
char
*
old_main
,
char
*
old_rfb
,
char
*
old_8to24
,
char
*
old_snap_fb
);
extern
void
free_old_fb
(
void
);
extern
void
check_padded_fb
(
void
);
extern
void
install_padded_fb
(
char
*
geom
);
extern
XImage
*
initialize_xdisplay_fb
(
void
);
extern
XImage
*
initialize_raw_fb
(
int
);
extern
void
parse_scale_string
(
char
*
str
,
double
*
factor
,
int
*
scaling
,
int
*
blend
,
int
*
nomult4
,
int
*
pad
,
int
*
interpolate
,
int
*
numer
,
int
*
denom
);
extern
int
parse_rotate_string
(
char
*
str
,
int
*
mode
);
extern
int
scale_round
(
int
len
,
double
fac
);
extern
void
initialize_screen
(
int
*
argc
,
char
**
argv
,
XImage
*
fb
);
extern
void
set_vnc_desktop_name
(
void
);
...
...
This diff is collapsed.
Click to expand it.
x11vnc/solid.c
View file @
521f0338
...
...
@@ -673,7 +673,13 @@ char *guess_desktop(void) {
if
(
prop
!=
None
)
return
"gnome"
;
prop
=
XInternAtom
(
dpy
,
"KWIN_RUNNING"
,
True
);
if
(
prop
!=
None
)
return
"kde"
;
if
(
prop
!=
None
)
{
prop
=
XInternAtom
(
dpy
,
"_KDE_RUNNING"
,
True
);
if
(
prop
!=
None
)
{
prop
=
XInternAtom
(
dpy
,
"KDE_DESKTOP_WINDOW"
,
True
);
if
(
prop
!=
None
)
return
"kde"
;
}
}
prop
=
XInternAtom
(
dpy
,
"_MOTIF_WM_INFO"
,
True
);
if
(
prop
!=
None
)
{
...
...
This diff is collapsed.
Click to expand it.
x11vnc/sslcmds.c
View file @
521f0338
...
...
@@ -15,7 +15,7 @@
#endif
#endif
#ifdef
REL8x
#ifdef
NO_SSL_OR_UNIXPW
#undef SSLCMDS
#endif
...
...
This diff is collapsed.
Click to expand it.
x11vnc/sslhelper.c
View file @
521f0338
...
...
@@ -20,7 +20,7 @@
#endif
#endif
#ifdef
REL8x
#ifdef
NO_SSL_OR_UNIXPW
#undef FORK_OK
#undef LIBVNCSERVER_HAVE_LIBSSL
#define LIBVNCSERVER_HAVE_LIBSSL 0
...
...
@@ -923,14 +923,7 @@ static void lose_ram(void) {
* without doing exec(). we really should re-exec, but a pain
* to redo all SSL ctx.
*/
free_old_fb
(
main_fb
,
rfb_fb
,
cmap8to24_fb
,
snap_fb
);
if
(
raw_fb
==
main_fb
||
raw_fb
==
rfb_fb
)
{
raw_fb
=
NULL
;
}
main_fb
=
NULL
;
rfb_fb
=
NULL
;
cmap8to24_fb
=
NULL
;
snap_fb
=
NULL
;
free_old_fb
();
free_tiles
();
}
...
...
@@ -1406,6 +1399,8 @@ void accept_openssl(int mode) {
int
f_in
=
fileno
(
stdin
);
int
f_out
=
fileno
(
stdout
);
if
(
db
)
fprintf
(
stderr
,
"helper pid in: %d %d %d %d
\n
"
,
f_in
,
f_out
,
sock
,
listen
);
/* reset all handlers to default (no interrupted() calls) */
unset_signals
();
...
...
@@ -1442,6 +1437,7 @@ void accept_openssl(int mode) {
" back to: %d
\n
"
,
getpid
(),
cport
);
exit
(
1
);
}
if
(
db
)
fprintf
(
stderr
,
"vncsock %d
\n
"
,
vncsock
);
/* try to initialize SSL with the remote client */
...
...
@@ -2370,10 +2366,9 @@ static void init_prng(void) {
void
raw_xfer
(
int
csock
,
int
s_in
,
int
s_out
)
{
char
buf
[
8192
];
int
sz
=
8192
,
n
,
m
,
status
;
int
sz
=
8192
,
n
,
m
,
status
,
db
=
1
;
#ifdef FORK_OK
pid_t
pid
=
fork
();
int
db
=
1
;
/* this is for testing, no SSL just socket redir */
if
(
pid
<
0
)
{
...
...
@@ -2389,7 +2384,7 @@ void raw_xfer(int csock, int s_in, int s_out) {
}
else
if
(
n
>
0
)
{
int
len
=
n
;
char
*
src
=
buf
;
if
(
db
>
1
)
write
(
2
,
buf
,
n
);
if
(
db
>
1
)
write
(
2
,
buf
,
n
);
while
(
len
>
0
)
{
m
=
write
(
s_out
,
src
,
len
);
if
(
m
>
0
)
{
...
...
@@ -2400,7 +2395,7 @@ if (db > 1) write(2, buf, n);
if
(
m
<
0
&&
(
errno
==
EINTR
||
errno
==
EAGAIN
))
{
continue
;
}
if
(
db
)
fprintf
(
stderr
,
"raw_xfer bad write: %d -> %d | %d/%d errno=%d
\n
"
,
csock
,
s_out
,
m
,
n
,
errno
);
if
(
db
)
fprintf
(
stderr
,
"raw_xfer bad write: %d -> %d | %d/%d errno=%d
\n
"
,
csock
,
s_out
,
m
,
n
,
errno
);
break
;
}
}
...
...
@@ -2419,7 +2414,7 @@ if (db > 1) write(2, buf, n);
}
else
if
(
n
>
0
)
{
int
len
=
n
;
char
*
src
=
buf
;
if
(
db
>
1
)
write
(
2
,
buf
,
n
);
if
(
db
>
1
)
write
(
2
,
buf
,
n
);
while
(
len
>
0
)
{
m
=
write
(
csock
,
src
,
len
);
if
(
m
>
0
)
{
...
...
@@ -2441,6 +2436,6 @@ if (db > 1) write(2, buf, n);
close
(
csock
);
close
(
s_in
);
close
(
s_out
);
#endif
#endif
/* FORK_OK */
}
This diff is collapsed.
Click to expand it.
x11vnc/tkx11vnc
View file @
521f0338
...
...
@@ -166,6 +166,7 @@ Screen
=GAL ResizeRotate::
= xrandr
=-C:resize,newfbsize,exit xrandr_mode:
rotate:
padgeom:
=GAL LOFF
=GAL Clipping::
...
...
This diff is collapsed.
Click to expand it.
x11vnc/tkx11vnc.h
View file @
521f0338
...
...
@@ -177,6 +177,7 @@ char gui_code[] = "";
" =GAL ResizeRotate::
\n
"
" = xrandr
\n
"
" =-C:resize,newfbsize,exit xrandr_mode:
\n
"
" rotate:
\n
"
" padgeom:
\n
"
" =GAL LOFF
\n
"
" =GAL Clipping::
\n
"
...
...
This diff is collapsed.
Click to expand it.
x11vnc/unixpw.c
View file @
521f0338
...
...
@@ -51,7 +51,7 @@ extern char *crypt(const char*, const char *);
#define IS_BSD
#endif
#ifdef
REL8x
#ifdef
NO_SSL_OR_UNIXPW
#undef UNIXPW_SU
#undef UNIXPW_CRYPT
#endif
...
...
@@ -117,6 +117,9 @@ static int text_y(void) {
return
char_y
+
char_row
*
char_h
;
}
static
rfbScreenInfo
fscreen
;
static
rfbScreenInfoPtr
pscreen
;
void
unixpw_screen
(
int
init
)
{
if
(
unixpw_nis
)
{
#ifndef UNIXPW_CRYPT
...
...
@@ -143,9 +146,20 @@ void unixpw_screen(int init) {
if
(
scaling
)
{
x
=
(
int
)
(
x
*
scale_fac
);
y
=
(
int
)
(
y
*
scale_fac
);
x
=
nfix
(
x
,
scaled_x
);
y
=
nfix
(
y
,
scaled_y
);
}
if
(
rotating
)
{
fscreen
.
serverFormat
.
bitsPerPixel
=
bpp
;
fscreen
.
paddedWidthInBytes
=
rfb_bytes_per_line
;
fscreen
.
frameBuffer
=
rfb_fb
;
pscreen
=
&
fscreen
;
}
else
{
pscreen
=
screen
;
}
rfbDrawString
(
screen
,
&
default8x16Font
,
x
,
y
,
log
,
white
());
rfbDrawString
(
p
screen
,
&
default8x16Font
,
x
,
y
,
log
,
white
());
char_x
=
x
;
char_y
=
y
;
...
...
@@ -156,7 +170,7 @@ void unixpw_screen(int init) {
}
if
(
scaling
)
{
mark_rect_as_modified
(
0
,
0
,
dpy_x
,
dpy
_y
,
1
);
mark_rect_as_modified
(
0
,
0
,
scaled_x
,
scaled
_y
,
1
);
}
else
{
mark_rect_as_modified
(
0
,
0
,
dpy_x
,
dpy_y
,
0
);
}
...
...
@@ -895,18 +909,18 @@ if (db) fprintf(stderr, "unixpw_verify: '%s' '%s'\n", user, db > 1 ? pass : "***
x
=
text_x
();
y
=
text_y
();
rfbDrawString
(
screen
,
&
default8x16Font
,
x
,
y
,
li
,
white
());
rfbDrawString
(
p
screen
,
&
default8x16Font
,
x
,
y
,
li
,
white
());
char_row
+=
2
;
x
=
text_x
();
y
=
text_y
();
rfbDrawString
(
screen
,
&
default8x16Font
,
x
,
y
,
log
,
white
());
rfbDrawString
(
p
screen
,
&
default8x16Font
,
x
,
y
,
log
,
white
());
char_col
=
strlen
(
log
);
if
(
scaling
)
{
mark_rect_as_modified
(
0
,
0
,
dpy_x
,
dpy
_y
,
1
);
mark_rect_as_modified
(
0
,
0
,
scaled_x
,
scaled
_y
,
1
);
}
else
{
mark_rect_as_modified
(
0
,
0
,
dpy_x
,
dpy_y
,
0
);
}
...
...
@@ -927,7 +941,7 @@ static void set_db(void) {
void
unixpw_keystroke
(
rfbBool
down
,
rfbKeySym
keysym
,
int
init
)
{
int
x
,
y
,
i
,
nmax
=
100
;
static
char
user
[
100
],
pass
[
100
];
static
char
user
_r
[
100
],
user
[
100
],
pass
[
100
];
static
int
u_cnt
=
0
,
p_cnt
=
0
,
first
=
1
;
char
keystr
[
100
];
char
*
str
;
...
...
@@ -935,6 +949,9 @@ void unixpw_keystroke(rfbBool down, rfbKeySym keysym, int init) {
if
(
first
)
{
set_db
();
first
=
0
;
for
(
i
=
0
;
i
<
nmax
;
i
++
)
{
user_r
[
i
]
=
'\0'
;
}
}
if
(
init
)
{
...
...
@@ -1005,6 +1022,9 @@ void unixpw_keystroke(rfbBool down, rfbKeySym keysym, int init) {
int
y2
=
y
/
scale_fac
;
int
w2
=
char_w
/
scale_fac
;
int
h2
=
char_h
/
scale_fac
;
x2
=
nfix
(
x2
,
dpy_x
);
y2
=
nfix
(
y2
,
dpy_y
);
zero_fb
(
x2
-
w2
,
y2
-
h2
,
x2
,
y2
);
mark_rect_as_modified
(
x2
-
w2
,
...
...
@@ -1038,17 +1058,42 @@ void unixpw_keystroke(rfbBool down, rfbKeySym keysym, int init) {
x
=
text_x
();
y
=
text_y
();
rfbDrawString
(
screen
,
&
default8x16Font
,
x
,
y
,
pw
,
rfbDrawString
(
p
screen
,
&
default8x16Font
,
x
,
y
,
pw
,
white
());
char_col
=
strlen
(
pw
);
if
(
scaling
)
{
mark_rect_as_modified
(
0
,
0
,
dpy_x
,
dpy_y
,
1
);
mark_rect_as_modified
(
0
,
0
,
scaled_x
,
scaled_y
,
1
);
}
else
{
mark_rect_as_modified
(
0
,
0
,
dpy_x
,
dpy_y
,
0
);
}
return
;
}
if
(
u_cnt
==
0
&&
keysym
==
XK_Up
)
{
/*
* Allow user to hit Up arrow at beginning to
* regain their username plus any options.
*/
int
i
;
for
(
i
=
0
;
i
<
nmax
;
i
++
)
{
user
[
u_cnt
++
]
=
user_r
[
i
];
if
(
user_r
[
i
]
==
'\0'
)
{
break
;
}
keystr
[
0
]
=
(
char
)
user_r
[
i
];
keystr
[
1
]
=
'\0'
;
x
=
text_x
();
y
=
text_y
();
rfbDrawString
(
pscreen
,
&
default8x16Font
,
x
,
y
,
keystr
,
white
());
mark_rect_as_modified
(
x
,
y
-
char_h
,
x
+
char_w
,
y
,
scaling
);
char_col
++
;
usleep
(
10
*
1000
);
}
return
;
}
if
(
keysym
<=
' '
||
keysym
>=
0x7f
)
{
return
;
}
...
...
@@ -1066,6 +1111,9 @@ void unixpw_keystroke(rfbBool down, rfbKeySym keysym, int init) {
user[u_cnt++] = keystr[0];
#else
user
[
u_cnt
++
]
=
(
char
)
keysym
;
for
(
i
=
0
;
i
<
nmax
;
i
++
)
{
user_r
[
i
]
=
user
[
i
];
}
keystr
[
0
]
=
(
char
)
keysym
;
#endif
...
...
@@ -1075,13 +1123,9 @@ void unixpw_keystroke(rfbBool down, rfbKeySym keysym, int init) {
if
(
db
&&
db
<=
2
)
fprintf
(
stderr
,
"u_cnt: %d %d/%d ks: 0x%x %s
\n
"
,
u_cnt
,
x
,
y
,
keysym
,
keystr
);
keystr
[
1
]
=
'\0'
;
rfbDrawString
(
screen
,
&
default8x16Font
,
x
,
y
,
keystr
,
white
());
rfbDrawString
(
p
screen
,
&
default8x16Font
,
x
,
y
,
keystr
,
white
());
if
(
scaling
)
{
mark_rect_as_modified
(
x
,
y
-
char_h
,
x
+
char_w
,
y
,
1
);
}
else
{
mark_rect_as_modified
(
x
,
y
-
char_h
,
x
+
char_w
,
y
,
0
);
}
mark_rect_as_modified
(
x
,
y
-
char_h
,
x
+
char_w
,
y
,
scaling
);
char_col
++
;
}
else
if
(
in_passwd
)
{
...
...
@@ -1272,9 +1316,9 @@ void unixpw_deny(void) {
x
=
char_x
+
char_col
*
char_w
;
y
=
char_y
+
char_row
*
char_h
;
rfbDrawString
(
screen
,
&
default8x16Font
,
x
,
y
,
pd
,
white
());
rfbDrawString
(
p
screen
,
&
default8x16Font
,
x
,
y
,
pd
,
white
());
if
(
scaling
)
{
mark_rect_as_modified
(
0
,
0
,
dpy_x
,
dpy
_y
,
1
);
mark_rect_as_modified
(
0
,
0
,
scaled_x
,
scaled
_y
,
1
);
}
else
{
mark_rect_as_modified
(
0
,
0
,
dpy_x
,
dpy_y
,
0
);
}
...
...
@@ -1304,9 +1348,9 @@ void unixpw_msg(char *msg, int delay) {
x
=
char_x
+
char_col
*
char_w
;
y
=
char_y
+
char_row
*
char_h
;
rfbDrawString
(
screen
,
&
default8x16Font
,
x
,
y
,
msg
,
white
());
rfbDrawString
(
p
screen
,
&
default8x16Font
,
x
,
y
,
msg
,
white
());
if
(
scaling
)
{
mark_rect_as_modified
(
0
,
0
,
dpy_x
,
dpy
_y
,
1
);
mark_rect_as_modified
(
0
,
0
,
scaled_x
,
scaled
_y
,
1
);
}
else
{
mark_rect_as_modified
(
0
,
0
,
dpy_x
,
dpy_y
,
0
);
}
...
...
This diff is collapsed.
Click to expand it.
x11vnc/user.c
View file @
521f0338
...
...
@@ -1041,6 +1041,7 @@ void user_supplied_opts(char *opts) {
"scale"
,
"scale_cursor"
,
"sc"
,
"solid"
,
"so"
,
"id"
,
"clear_mods"
,
"cm"
,
"clear_keys"
,
"ck"
,
"repeat"
,
"speeds"
,
"sp"
,
"readtimeout"
,
"rd"
,
"rotate"
,
"ro"
,
NULL
};
...
...
@@ -1089,6 +1090,11 @@ void user_supplied_opts(char *opts) {
if
(
scale_cursor_str
)
free
(
scale_cursor_str
);
q
=
strchr
(
p
,
'='
)
+
1
;
scale_cursor_str
=
strdup
(
q
);
}
else
if
(
strstr
(
p
,
"rotate="
)
==
p
||
strstr
(
p
,
"ro="
)
==
p
)
{
if
(
rotating_str
)
free
(
rotating_str
);
q
=
strchr
(
p
,
'='
)
+
1
;
rotating_str
=
strdup
(
q
);
}
else
if
(
!
strcmp
(
p
,
"solid"
)
||
!
strcmp
(
p
,
"so"
))
{
use_solid_bg
=
1
;
if
(
!
solid_str
)
{
...
...
This diff is collapsed.
Click to expand it.
x11vnc/userinput.c
View file @
521f0338
...
...
@@ -1760,7 +1760,7 @@ static void do_copyregion(sraRegionPtr region, int dx, int dy) {
last_copyrect
=
dnow
();
if
(
rfb_fb
==
main_fb
)
{
if
(
rfb_fb
==
main_fb
&&
!
rotating
)
{
/* normal case, no -scale or -8to24 */
get_client_regions
(
&
req
,
&
mod
,
&
cpy
,
&
ncli
);
if
(
debug_scroll
>
1
)
fprintf
(
stderr
,
"<<<-rfbDoCopyRect req: %d mod: %d cpy: %d
\n
"
,
req
,
mod
,
cpy
);
...
...
@@ -1777,7 +1777,7 @@ if (debug_scroll > 1) fprintf(stderr, ">>>-rfbDoCopyRect req: %d mod: %d cpy: %d
iter
=
sraRgnGetReverseIterator
(
region
,
dx
<
0
,
dy
<
0
);
while
(
sraRgnIteratorNext
(
iter
,
&
rect
))
{
int
j
,
c
;
int
j
,
c
,
t
;
x1
=
rect
.
x1
;
y1
=
rect
.
y1
;
...
...
@@ -1825,6 +1825,7 @@ if (debug_scroll > 1) fprintf(stderr, ">>>-rfbDoCopyRect req: %d mod: %d cpy: %d
}
}
if
(
scaling
)
{
sx1
=
((
double
)
x1
/
dpy_x
)
*
scaled_x
;
sy1
=
((
double
)
y1
/
dpy_y
)
*
scaled_y
;
...
...
@@ -1840,6 +1841,46 @@ if (debug_scroll > 1) fprintf(stderr, ">>>-rfbDoCopyRect req: %d mod: %d cpy: %d
sdx
=
dx
;
sdy
=
dy
;
}
if
(
0
)
fprintf
(
stderr
,
"s... %d %d %d %d %d %d
\n
"
,
sx1
,
sy1
,
sx2
,
sy2
,
sdx
,
sdy
);
if
(
rotating
)
{
rotate_coords
(
sx1
,
sy1
,
&
sx1
,
&
sy1
,
-
1
,
-
1
);
rotate_coords
(
sx2
,
sy2
,
&
sx2
,
&
sy2
,
-
1
,
-
1
);
if
(
rotating
==
ROTATE_X
)
{
sdx
=
-
sdx
;
}
else
if
(
rotating
==
ROTATE_Y
)
{
sdy
=
-
sdy
;
}
else
if
(
rotating
==
ROTATE_XY
)
{
sdx
=
-
sdx
;
sdy
=
-
sdy
;
}
else
if
(
rotating
==
ROTATE_90
)
{
t
=
sdx
;
sdx
=
-
sdy
;
sdy
=
t
;
}
else
if
(
rotating
==
ROTATE_90X
)
{
t
=
sdx
;
sdx
=
sdy
;
sdy
=
t
;
}
else
if
(
rotating
==
ROTATE_90Y
)
{
t
=
sdx
;
sdx
=
-
sdy
;
sdy
=
-
t
;
}
else
if
(
rotating
==
ROTATE_270
)
{
t
=
sdx
;
sdx
=
sdy
;
sdy
=
-
t
;
}
}
if
(
sx2
<
sx1
)
{
t
=
sx1
;
sx1
=
sx2
;
sx2
=
t
;
}
if
(
sy2
<
sy1
)
{
t
=
sy1
;
sy1
=
sy2
;
sy2
=
t
;
}
if
(
0
)
fprintf
(
stderr
,
"s... %d %d %d %d %d %d
\n
"
,
sx1
,
sy1
,
sx2
,
sy2
,
sdx
,
sdy
);
rfbDoCopyRect
(
screen
,
sx1
,
sy1
,
sx2
,
sy2
,
sdx
,
sdy
);
}
...
...
This diff is collapsed.
Click to expand it.
x11vnc/x11vnc.1
View file @
521f0338
...
...
@@ -2,7 +2,7 @@
.TH X11VNC "1" "July 2006" "x11vnc " "User Commands"
.SH NAME
x11vnc - allow VNC connections to real X11 displays
version: 0.8.3, lastmod: 2006-07-
17
version: 0.8.3, lastmod: 2006-07-
28
.SH SYNOPSIS
.B x11vnc
[OPTION]...
...
...
@@ -744,8 +744,8 @@ Also in the case of \fB-unixpw,\fR the user logging in
can place a colon at the end of his username and
supply a few options: scale=, scale_cursor= (or sc=),
solid (or so), id=, clear_mods (or cm), clear_keys
(or ck), repeat, speeds= (or sp=),
or
readtimeout=
(or rd=) separated by commas if there is more than one.
(or ck), repeat, speeds= (or sp=), readtimeout=
(or rd=)
, or rotate= (or ro=)
separated by commas if there is more than one.
After the user logs in successfully, these options will
be applied to the VNC screen. For example,
.IP
...
...
@@ -1666,6 +1666,39 @@ encoding, and then resize the framebuffer. "exit"
means disconnect all viewer clients, and then terminate
x11vnc.
.PP
\fB-rotate\fR \fIstring\fR
.IP
Rotate and/or flip the framebuffer view exported by VNC.
This transformation is independent of XRANDR and is
done in software in main memory and so may be slower.
This mode could be useful on a handheld with portrait or
landscape modes that do not correspond to the scanline
order of the actual framebuffer. \fIstring\fR can be:
.IP
x flip along x-axis
y flip along y-axis
xy flip along x- and y-axes
+90 rotate 90 degrees clockwise
\fB-90\fR rotate 90 degrees counter-clockwise
+90x rotate 90 degrees CW, then flip along x
+90y rotate 90 degrees CW, then flip along y
.IP
these give all possible rotations and reflections.
.IP
Aliases: same as xy: yx, +180, \fB-180,\fR 180
same as \fB-90:\fR +270, 270
same as +90: 90, (ditto for 90x, 90y)
.IP
Like \fB-scale,\fR this transformation is applied at the very
end of any chain of framebuffer transformations and so
any options with geometries, e.g. \fB-blackout,\fR \fB-clip,\fR etc.
are relative to the original X (or \fB-rawfb)\fR framebuffer,
not the final one sent to VNC viewers.
.IP
If you do not want the cursor shape to be rotated
prefix \fIstring\fR with "nc:", e.g. "nc:+90",
"nc:xy", etc.
.PP
\fB-padgeom\fR \fIWxH\fR
.IP
Whenever a new vncviewer connects, the framebuffer is
...
...
@@ -3024,7 +3057,7 @@ nonstandard, use "console:/dev/foofb"
.IP
If you do not want x11vnc to guess the framebuffer's
WxHxB and masks automatically (sometimes the kernel
give
n
inaccurate information), specify them with a
give
s
inaccurate information), specify them with a
@WxHxB at the end of the string.
.IP
Examples:
...
...
@@ -3460,6 +3493,8 @@ noxrandr disable \fB-xrandr\fR mode.
.IP
xrandr_mode:mode set the \fB-xrandr\fR mode to "mode".
.IP
rotate:mode set the \fB-rotate\fR mode to "mode".
.IP
padgeom:WxH set \fB-padgeom\fR to WxH (empty to disable)
If WxH is "force" or "do" the padded
geometry fb is immediately applied.
...
...
@@ -3823,7 +3858,7 @@ unlock connect allowonce allow localhost nolocalhost
listen lookup nolookup accept afteraccept gone shm
noshm flipbyteorder noflipbyteorder onetile noonetile
solid_color solid nosolid blackout xinerama noxinerama
xtrap noxtrap xrandr noxrandr xrandr_mode padgeom
xtrap noxtrap xrandr noxrandr xrandr_mode
rotate
padgeom
quiet q noquiet modtweak nomodtweak xkb noxkb capslock
nocapslock skip_lockkeys noskip_lockkeys skip_keycodes
sloppy_keys nosloppy_keys skip_dups noskip_dups
...
...
@@ -3846,9 +3881,9 @@ pm input_skip allinput noallinput input grabkbd
nograbkbd grabptr nograbptr client_input speeds wmdt
debug_pointer dp nodebug_pointer nodp debug_keyboard
dk nodebug_keyboard nodk deferupdate defer wait_ui
wait_bog nowait_bog slow_fb wait readtimeout nap
nonap sb screen_blank fbpm nofbpm fs gaps grow
fuzz snapfb nosnapfb rawfb uinput_accel
uinput_reset
wait_bog nowait_bog slow_fb wait readtimeout nap
nonap
sb screen_blank fbpm nofbpm fs gaps grow fuzz snapfb
nosnapfb rawfb uinput_accel uinput_thresh
uinput_reset
uinput_always progressive rfbport http nohttp httpport
httpdir enablehttpproxy noenablehttpproxy alwaysshared
noalwaysshared nevershared noalwaysshared dontdisconnect
...
...
This diff is collapsed.
Click to expand it.
x11vnc/x11vnc.c
View file @
521f0338
...
...
@@ -1642,7 +1642,7 @@ int main(int argc, char* argv[]) {
CHECK_ARGC
passwdfile
=
strdup
(
argv
[
++
i
]);
got_passwdfile
=
1
;
#ifndef
REL8x
#ifndef
NO_SSL_OR_UNIXPW
}
else
if
(
strstr
(
arg
,
"-unixpw"
)
==
arg
)
{
unixpw
=
1
;
if
(
strstr
(
arg
,
"-unixpw_nis"
))
{
...
...
@@ -1826,6 +1826,9 @@ int main(int argc, char* argv[]) {
i
++
;
}
}
}
else
if
(
!
strcmp
(
arg
,
"-rotate"
))
{
CHECK_ARGC
rotating_str
=
strdup
(
argv
[
++
i
]);
}
else
if
(
!
strcmp
(
arg
,
"-padgeom"
)
||
!
strcmp
(
arg
,
"-padgeometry"
))
{
CHECK_ARGC
...
...
This diff is collapsed.
Click to expand it.
x11vnc/x11vnc.h
View file @
521f0338
...
...
@@ -131,7 +131,7 @@
#define PASSWD_UNLESS_NOPW 0
#endif
#define
noREL8x
#define
xxNO_SSL_OR_UNIXPW
/*
* Beginning of support for small binary footprint build for embedded
...
...
@@ -386,6 +386,7 @@ extern char *rfb_fb; /* same as main_fb unless transformation */
extern
char
*
fake_fb
;
/* used under -padgeom */
extern
char
*
snap_fb
;
/* used under -snapfb */
extern
char
*
cmap8to24_fb
;
/* used under -8to24 */
extern
char
*
rot_fb
;
/* used under -rotate */
extern
char
*
raw_fb
;
extern
char
*
raw_fb_addr
;
extern
int
raw_fb_offset
;
...
...
@@ -397,6 +398,7 @@ extern int raw_fb_back_to_X;
extern
int
rfb_bytes_per_line
;
extern
int
main_bytes_per_line
;
extern
int
rot_bytes_per_line
;
extern
unsigned
long
main_red_mask
,
main_green_mask
,
main_blue_mask
;
extern
unsigned
short
main_red_max
,
main_green_max
,
main_blue_max
;
extern
unsigned
short
main_red_shift
,
main_green_shift
,
main_blue_shift
;
...
...
@@ -411,6 +413,10 @@ extern int scaling_pad; /* pad out scaled sizes to fit denominator */
extern
int
scaling_interpolate
;
/* use interpolation scheme when shrinking */
extern
int
scaled_x
,
scaled_y
;
/* dimensions of scaled display */
extern
int
scale_numer
,
scale_denom
;
/* n/m */
extern
char
*
rotating_str
;
extern
int
rotating
;
extern
int
rotating_same
;
extern
int
rotating_cursors
;
/* scale cursor */
extern
char
*
scale_cursor_str
;
...
...
This diff is collapsed.
Click to expand it.
x11vnc/x11vnc_defs.c
View file @
521f0338
...
...
@@ -15,7 +15,7 @@ int xtrap_base_event_type = 0;
int
xdamage_base_event_type
=
0
;
/* date +'lastmod: %Y-%m-%d' */
char
lastmod
[]
=
"0.8.3 lastmod: 2006-07-
17
"
;
char
lastmod
[]
=
"0.8.3 lastmod: 2006-07-
28
"
;
/* X display info */
...
...
@@ -59,6 +59,7 @@ char *rfb_fb = NULL; /* same as main_fb unless transformation */
char
*
fake_fb
=
NULL
;
/* used under -padgeom */
char
*
snap_fb
=
NULL
;
/* used under -snapfb */
char
*
cmap8to24_fb
=
NULL
;
/* used under -8to24 */
char
*
rot_fb
=
NULL
;
char
*
raw_fb
=
NULL
;
/* when used should be main_fb */
char
*
raw_fb_addr
=
NULL
;
int
raw_fb_offset
=
0
;
...
...
@@ -70,6 +71,7 @@ int raw_fb_back_to_X = 0; /* kludge for testing rawfb -> X */
int
rfb_bytes_per_line
=
0
;
int
main_bytes_per_line
=
0
;
int
rot_bytes_per_line
=
0
;
unsigned
long
main_red_mask
=
0
,
main_green_mask
=
0
,
main_blue_mask
=
0
;
unsigned
short
main_red_max
=
0
,
main_green_max
=
0
,
main_blue_max
=
0
;
unsigned
short
main_red_shift
=
0
,
main_green_shift
=
0
,
main_blue_shift
=
0
;
...
...
@@ -84,6 +86,10 @@ int scaling_pad = 0; /* pad out scaled sizes to fit denominator */
int
scaling_interpolate
=
0
;
/* use interpolation scheme when shrinking */
int
scaled_x
=
0
,
scaled_y
=
0
;
/* dimensions of scaled display */
int
scale_numer
=
0
,
scale_denom
=
0
;
/* n/m */
char
*
rotating_str
=
NULL
;
int
rotating
=
0
;
int
rotating_same
=
0
;
int
rotating_cursors
=
0
;
/* scale cursor */
char
*
scale_cursor_str
=
NULL
;
...
...
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