summaryrefslogtreecommitdiffstats
path: root/x11vnc/x11vnc.h
diff options
context:
space:
mode:
authorrunge <runge>2006-01-09 01:54:38 +0000
committerrunge <runge>2006-01-09 01:54:38 +0000
commit71f2ec79180185a6c3db0c87f9d53c491dc31e76 (patch)
tree67c341571cbeb1bd9a0744cc8eb03b30ef04f381 /x11vnc/x11vnc.h
parentdef301266373e462f4a5e90eab443087ccfc7ccc (diff)
downloadlibtdevnc-71f2ec79180185a6c3db0c87f9d53c491dc31e76.tar.gz
libtdevnc-71f2ec79180185a6c3db0c87f9d53c491dc31e76.zip
x11vnc: the big split.
Diffstat (limited to 'x11vnc/x11vnc.h')
-rw-r--r--x11vnc/x11vnc.h434
1 files changed, 434 insertions, 0 deletions
diff --git a/x11vnc/x11vnc.h b/x11vnc/x11vnc.h
new file mode 100644
index 0000000..ce20af5
--- /dev/null
+++ b/x11vnc/x11vnc.h
@@ -0,0 +1,434 @@
+#ifndef _X11VNC_X11VNC_H
+#define _X11VNC_X11VNC_H
+
+/* -- x11vnc.h -- */
+/*
+ * These ' -- filename.[ch] -- ' comments represent a partial cleanup:
+ * they are an odd way to indicate how this huge file would be split up
+ * someday into multiple files.
+ *
+ * The primary reason we have not broken up this file is for user
+ * convenience: those wanting to use the latest version download a single
+ * file, x11vnc.c, and off they go...
+ */
+
+/****************************************************************************/
+
+/* Standard includes and libvncserver */
+
+#include <unistd.h>
+#include <signal.h>
+#include <sys/utsname.h>
+#include <time.h>
+#include <errno.h>
+
+#include <X11/Xlib.h>
+#include <X11/Xutil.h>
+
+#include <X11/keysym.h>
+#include <X11/Xatom.h>
+
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <ctype.h>
+
+#include <rfb/rfb.h>
+#include <rfb/rfbregion.h>
+
+/****************************************************************************/
+
+/* Build-time customization via CPPFLAGS. */
+
+/*
+ * Summary of options to include in CPPFLAGS for custom builds:
+ *
+ * -DVNCSHARED to have the vnc display shared by default.
+ * -DFOREVER to have -forever on by default.
+ * -DNOREPEAT=0 to have -repeat on by default.
+ * -DADDKEYSYMS=0 to have -noadd_keysyms the default.
+ *
+ * -DREMOTE_DEFAULT=0 to disable remote-control on by default (-yesremote).
+ * -DREMOTE_CONTROL=0 to disable remote-control mechanism completely.
+ * -DEXTERNAL_COMMANDS=0 to disable the running of all external commands.
+ * -DFILEXFER=0 disable filexfer.
+ *
+ * -DHARDWIRE_PASSWD=... hardwired passwords, quoting necessary.
+ * -DHARDWIRE_VIEWPASSWD=...
+ * -DNOPW=1 make -nopw the default (skip warning)
+ * -DPASSWD_REQUIRED=1 exit unless a password is supplied.
+ * -DPASSWD_UNLESS_NOPW=1 exit unless a password is supplied and no -nopw.
+ *
+ * -DWIREFRAME=0 to have -nowireframe as the default.
+ * -DWIREFRAME_COPYRECT=0 to have -nowirecopyrect as the default.
+ * -DWIREFRAME_PARMS=... set default -wirecopyrect parameters.
+ * -DSCROLL_COPYRECT=0 to have -noscrollcopyrect as the default.
+ * -DSCROLL_COPYRECT_PARMS=... set default -scrollcopyrect parameters.
+ * -DXDAMAGE=0 to have -noxdamage as the default.
+ * -DSKIPDUPS=0 to have -noskip_dups as the default or vice versa.
+ *
+ * -DPOINTER_MODE_DEFAULT={0,1,2,3,4} set default -pointer_mode.
+ * -DBOLDLY_CLOSE_DISPLAY=0 to not close X DISPLAY under -rawfb.
+ * -DSMALL_FOOTPRINT=1 for smaller binary size (no help, no gui, etc)
+ * use 2 or 3 for even smaller footprint.
+ * -DNOGUI do not include the gui tkx11vnc.
+ *
+ * Set these in CPPFLAGS before running configure. E.g.:
+ *
+ * % env CPPFLAGS="-DFOREVER -DREMOTE_CONTROL=0" ./configure
+ * % make
+ */
+
+/*
+ * This can be used to disable the remote control mechanism.
+ */
+#ifndef REMOTE_CONTROL
+#define REMOTE_CONTROL 1
+#endif
+
+#ifndef NOPW
+#define NOPW 0
+#endif
+
+#ifndef PASSWD_REQUIRED
+#define PASSWD_REQUIRED 0
+#endif
+
+#ifndef PASSWD_UNLESS_NOPW
+#define PASSWD_UNLESS_NOPW 0
+#endif
+
+/*
+ * Beginning of support for small binary footprint build for embedded
+ * systems, PDA's etc. It currently just cuts out the low-hanging
+ * fruit (large text passages). Set to 2, 3 to cut out some of the
+ * more esoteric extensions. More tedious is to modify LDFLAGS in the
+ * Makefile to not link against the extension libraries... but that
+ * should be done too (manually for now).
+ *
+ * If there is interest more of the bloat can be removed... Currently
+ * these shrink the binary from 500K to about 270K.
+ */
+#ifndef SMALL_FOOTPRINT
+#define SMALL_FOOTPRINT 0
+#endif
+
+#if SMALL_FOOTPRINT
+#define NOGUI
+#endif
+
+#if (SMALL_FOOTPRINT > 1)
+#define LIBVNCSERVER_HAVE_XKEYBOARD 0
+#define LIBVNCSERVER_HAVE_LIBXINERAMA 0
+#define LIBVNCSERVER_HAVE_LIBXRANDR 0
+#define LIBVNCSERVER_HAVE_LIBXFIXES 0
+#define LIBVNCSERVER_HAVE_LIBXDAMAGE 0
+#endif
+
+#if (SMALL_FOOTPRINT > 2)
+#define LIBVNCSERVER_HAVE_UTMPX_H 0
+#define LIBVNCSERVER_HAVE_PWD_H 0
+#define REMOTE_CONTROL 0
+#endif
+
+/*
+ * Not recommended unless you know what you are getting into, but if you
+ * define the HARDWIRE_PASSWD or HARDWIRE_VIEWPASSWD variables here or in
+ * CPPFLAGS you can set a default -passwd and -viewpasswd string values,
+ * perhaps this would be better than nothing on an embedded system, etc.
+ * These default values will be overridden by the command line.
+ * We don't even give an example ;-)
+ */
+
+/****************************************************************************/
+
+/* Extensions and related includes: */
+
+#if LIBVNCSERVER_HAVE_XSHM
+# if defined(__hpux) && defined(__ia64) /* something weird on hp/itanic */
+# undef _INCLUDE_HPUX_SOURCE
+# endif
+#include <sys/ipc.h>
+#include <sys/shm.h>
+#include <X11/extensions/XShm.h>
+#endif
+
+#if LIBVNCSERVER_HAVE_XTEST
+#include <X11/extensions/XTest.h>
+#endif
+extern int xtest_base_event_type;
+
+#if LIBVNCSERVER_HAVE_LIBXTRAP
+#define NEED_EVENTS
+#define NEED_REPLIES
+#include <X11/extensions/xtraplib.h>
+#include <X11/extensions/xtraplibp.h>
+extern XETC *trap_ctx;
+#endif
+extern int xtrap_base_event_type;
+
+#if LIBVNCSERVER_HAVE_RECORD
+#include <X11/Xproto.h>
+#include <X11/extensions/record.h>
+#endif
+
+#if LIBVNCSERVER_HAVE_XKEYBOARD
+#include <X11/XKBlib.h>
+#endif
+
+#if LIBVNCSERVER_HAVE_LIBXINERAMA
+#include <X11/extensions/Xinerama.h>
+#endif
+
+#if LIBVNCSERVER_HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+
+#include <netdb.h>
+extern int h_errno;
+
+#if LIBVNCSERVER_HAVE_NETINET_IN_H
+#include <netinet/in.h>
+#include <netinet/tcp.h>
+#include <arpa/inet.h>
+#endif
+
+/* XXX autoconf */
+#if LIBVNCSERVER_HAVE_PWD_H
+#include <pwd.h>
+#endif
+#if LIBVNCSERVER_HAVE_SYS_WAIT_H
+#include <sys/wait.h>
+#endif
+#if LIBVNCSERVER_HAVE_UTMPX_H
+#include <utmpx.h>
+#endif
+
+#if LIBVNCSERVER_HAVE_MMAP
+#include <sys/mman.h>
+#endif
+
+/*
+ * overlay/multi-depth screen reading support
+ * undef SOLARIS_OVERLAY or IRIX_OVERLAY if there are problems building.
+ */
+
+/* solaris/sun */
+#if defined (__SVR4) && defined (__sun)
+# define SOLARIS
+# ifdef LIBVNCSERVER_HAVE_SOLARIS_XREADSCREEN
+# define SOLARIS_OVERLAY
+# define OVERLAY_OS
+# endif
+#endif
+
+#ifdef SOLARIS_OVERLAY
+#include <X11/extensions/transovl.h>
+#endif
+
+/* irix/sgi */
+#if defined(__sgi)
+# define IRIX
+# ifdef LIBVNCSERVER_HAVE_IRIX_XREADDISPLAY
+# define IRIX_OVERLAY
+# define OVERLAY_OS
+# endif
+#endif
+
+#ifdef IRIX_OVERLAY
+#include <X11/extensions/readdisplay.h>
+#endif
+
+extern int overlay_present;
+
+#if LIBVNCSERVER_HAVE_LIBXRANDR
+#include <X11/extensions/Xrandr.h>
+#endif
+extern int xrandr_base_event_type;
+
+#if LIBVNCSERVER_HAVE_LIBXFIXES
+#include <X11/extensions/Xfixes.h>
+#endif
+extern int xfixes_base_event_type;
+
+#if LIBVNCSERVER_HAVE_LIBXDAMAGE
+#include <X11/extensions/Xdamage.h>
+#endif
+extern int xdamage_base_event_type;
+
+extern char lastmod[];
+
+/* X display info */
+
+extern Display *dpy; /* the single display screen we connect to */
+extern int scr;
+extern Window window, rootwin; /* polled window, root window (usu. same) */
+extern Visual *default_visual; /* the default visual (unless -visual) */
+extern int bpp, depth;
+extern int indexed_color;
+extern int dpy_x, dpy_y; /* size of display */
+extern int off_x, off_y; /* offsets for -sid */
+extern int wdpy_x, wdpy_y; /* for actual sizes in case of -clip */
+extern int cdpy_x, cdpy_y, coff_x, coff_y; /* the -clip params */
+extern int button_mask; /* button state and info */
+extern int button_mask_prev;
+extern int num_buttons;
+
+/* image structures */
+extern XImage *scanline;
+extern XImage *fullscreen;
+extern XImage **tile_row; /* for all possible row runs */
+extern XImage *fb0;
+extern XImage *snaprect; /* for XShmGetImage (fs_factor) */
+extern XImage *snap; /* the full snap fb */
+extern XImage *raw_fb_image; /* the raw fb */
+
+#if !LIBVNCSERVER_HAVE_XSHM
+/*
+ * for simplicity, define this struct since we'll never use them
+ * under using_shm = 0.
+ */
+typedef struct {
+ int shmid; char *shmaddr; Bool readOnly;
+} XShmSegmentInfo;
+#endif
+
+/* corresponding shm structures */
+extern XShmSegmentInfo scanline_shm;
+extern XShmSegmentInfo fullscreen_shm;
+extern XShmSegmentInfo *tile_row_shm; /* for all possible row runs */
+extern XShmSegmentInfo snaprect_shm;
+
+/* rfb screen info */
+extern rfbScreenInfoPtr screen;
+extern char *rfb_desktop_name;
+extern char *http_dir;
+extern char vnc_desktop_name[];
+extern char *main_fb; /* our copy of the X11 fb */
+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 *raw_fb;
+extern char *raw_fb_addr;
+extern int raw_fb_offset;
+extern int raw_fb_shm;
+extern int raw_fb_mmap;
+extern int raw_fb_seek;
+extern int raw_fb_fd;
+
+extern int rfb_bytes_per_line;
+extern int main_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;
+
+/* scaling parameters */
+extern char *scale_str;
+extern double scale_fac;
+extern int scaling;
+extern int scaling_blend; /* for no blending option (very course) */
+extern int scaling_nomult4; /* do not require width = n * 4 */
+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 */
+
+/* scale cursor */
+extern char *scale_cursor_str;
+extern double scale_cursor_fac;
+extern int scaling_cursor;
+extern int scaling_cursor_blend;
+extern int scaling_cursor_interpolate;
+extern int scale_cursor_numer, scale_cursor_denom;
+
+/* size of the basic tile unit that is polled for changes: */
+extern int tile_x;
+extern int tile_y;
+extern int ntiles, ntiles_x, ntiles_y;
+
+/* arrays that indicate changed or checked tiles. */
+extern unsigned char *tile_has_diff, *tile_tried, *tile_copied;
+extern unsigned char *tile_has_xdamage_diff, *tile_row_has_xdamage_diff;
+
+/* times of recent events */
+extern time_t last_event, last_input, last_client;
+extern time_t last_keyboard_input, last_pointer_input;
+extern time_t last_fb_bytes_sent;
+extern double last_keyboard_time;
+extern double last_pointer_time;
+extern double last_pointer_click_time;
+extern double last_pointer_motion_time;
+extern double last_key_to_button_remap_time;
+extern double last_copyrect;
+extern double last_copyrect_fix;
+extern double servertime_diff;
+extern double x11vnc_start;
+
+/* last client to move pointer */
+extern rfbClientPtr last_pointer_client;
+
+extern int client_count;
+extern int clients_served;
+
+/* more transient kludge variables: */
+extern int cursor_x, cursor_y; /* x and y from the viewer(s) */
+extern int button_change_x, button_change_y;
+extern int got_user_input;
+extern int got_pointer_input;
+extern int got_pointer_calls;
+extern int got_keyboard_input;
+extern int got_keyboard_calls;
+extern int urgent_update;
+extern int last_keyboard_keycode;
+extern rfbBool last_rfb_down;
+extern rfbBool last_rfb_key_accepted;
+extern rfbKeySym last_rfb_keysym;
+extern double last_rfb_keytime;
+extern int fb_copy_in_progress;
+extern int drag_in_progress;
+extern int shut_down;
+extern int do_copy_screen;
+extern time_t damage_time;
+extern int damage_delay;
+
+extern int program_pid;
+extern char *program_name;
+extern char *program_cmdline;
+
+extern struct utsname UT;
+
+typedef struct hint {
+ /* location x, y, height, and width of a change-rectangle */
+ /* (grows as adjacent horizontal tiles are glued together) */
+ int x, y, w, h;
+} hint_t;
+
+/* struct with client specific data: */
+#define CILEN 10
+typedef struct _ClientData {
+ int uid;
+ char *hostname;
+ char *username;
+ int client_port;
+ int server_port;
+ char *server_ip;
+ char input[CILEN];
+ int login_viewonly;
+ time_t login_time;
+
+ int had_cursor_shape_updates;
+ int had_cursor_pos_updates;
+
+ double timer;
+ double send_cmp_rate;
+ double send_raw_rate;
+ double latency;
+ int cmp_bytes_sent;
+ int raw_bytes_sent;
+} ClientData;
+
+#include "params.h"
+#include "enums.h"
+#include "options.h"
+#include "util.h"
+
+#endif /* _X11VNC_X11VNC_H */