| #ifndef _LIBRFB_DECODER_H_ | |
| #define _LIBRFB_DECODER_H_ | |
| #include <gio/gio.h> | |
| #include <glib.h> | |
| G_BEGIN_DECLS | |
| enum | |
| { | |
| SECURITY_FAIL = 0, | |
| SECURITY_NONE, | |
| SECURITY_VNC, | |
| }; | |
| #define IS_VERSION(x, ma, mi) ((x->protocol_major == ma) && (x->protocol_minor == mi)) | |
| #define IS_VERSION_3_3(x) IS_VERSION(x, 3, 3) | |
| #define IS_VERSION_3_7(x) IS_VERSION(x, 3, 7) | |
| #define IS_VERSION_3_8(x) IS_VERSION(x, 3, 8) | |
| #define MESSAGE_TYPE_FRAMEBUFFER_UPDATE 0 | |
| #define ENCODING_TYPE_RAW 0 | |
| #define ENCODING_TYPE_COPYRECT 1 | |
| #define ENCODING_TYPE_RRE 2 | |
| #define ENCODING_TYPE_CORRE 4 | |
| #define ENCODING_TYPE_HEXTILE 5 | |
| #define SUBENCODING_RAW 1 | |
| #define SUBENCODING_BACKGROUND 2 | |
| #define SUBENCODING_FOREGROUND 4 | |
| #define SUBENCODING_ANYSUBRECTS 8 | |
| #define SUBENCODING_SUBRECTSCOLORED 16 | |
| typedef struct _RfbDecoder RfbDecoder; | |
| struct _RfbDecoder | |
| { | |
| /* callbacks */ | |
| gboolean (*state) (RfbDecoder * decoder); | |
| gpointer buffer_handler_data; | |
| GSocketClient *socket_client; | |
| GSocketConnection *connection; | |
| GCancellable *cancellable; | |
| guint8 *data; | |
| guint32 data_len; | |
| gpointer decoder_private; | |
| guint8 *frame; | |
| guint8 *prev_frame; | |
| GError *error; | |
| /* settable properties */ | |
| gboolean shared_flag; | |
| /* readable properties */ | |
| gboolean inited; | |
| guint protocol_major; | |
| guint protocol_minor; | |
| guint security_type; | |
| gchar *password; | |
| gboolean use_copyrect; | |
| guint width; | |
| guint height; | |
| guint bpp; | |
| guint depth; | |
| gboolean big_endian; | |
| gboolean true_colour; | |
| guint red_max; | |
| guint green_max; | |
| guint blue_max; | |
| guint red_shift; | |
| guint green_shift; | |
| guint blue_shift; | |
| gchar *name; | |
| /* information if we don't want to update the whole screen */ | |
| guint offset_x; | |
| guint offset_y; | |
| guint rect_width; | |
| guint rect_height; | |
| gint n_rects; | |
| /* some many used values */ | |
| guint bytespp; | |
| guint line_size; | |
| /* Seriliaze writes operations */ | |
| GMutex write_lock; | |
| }; | |
| RfbDecoder *rfb_decoder_new (void); | |
| void rfb_decoder_free (RfbDecoder * decoder); | |
| gboolean rfb_decoder_connect_tcp (RfbDecoder * decoder, | |
| gchar * host, guint port); | |
| void rfb_decoder_disconnect (RfbDecoder * decoder); | |
| gboolean rfb_decoder_iterate (RfbDecoder * decoder); | |
| void rfb_decoder_send_update_request (RfbDecoder * decoder, | |
| gboolean incremental, gint x, gint y, gint width, gint height); | |
| void rfb_decoder_send_key_event (RfbDecoder * decoder, | |
| guint key, gboolean down_flag); | |
| void rfb_decoder_send_pointer_event (RfbDecoder * decoder, | |
| gint button_mask, gint x, gint y); | |
| G_END_DECLS | |
| #endif |