diff --git a/include/common.h b/include/common.h new file mode 100644 index 0000000..3cc9b8a --- /dev/null +++ b/include/common.h @@ -0,0 +1,72 @@ +#pragma once + +#include +#include +#include + +#include "rfb-proto.h" +#include "sys/queue.h" + +#include "neatvnc.h" +#include "miniz.h" + +#define MAX_ENCODINGS 32 +#define MAX_OUTGOING_FRAMES 4 +#define MSG_BUFFER_SIZE 4096 + +enum nvnc_client_state { + VNC_CLIENT_STATE_ERROR = -1, + VNC_CLIENT_STATE_WAITING_FOR_VERSION = 0, + VNC_CLIENT_STATE_WAITING_FOR_SECURITY, + VNC_CLIENT_STATE_WAITING_FOR_INIT, + VNC_CLIENT_STATE_READY, +}; + +struct nvnc; + +struct nvnc_common { + void* userdata; +}; + +struct nvnc_client { + struct nvnc_common common; + int ref; + struct uv_tcp_s stream_handle; + struct nvnc* server; + enum nvnc_client_state state; + uint32_t fourcc; + struct rfb_pixel_format pixfmt; + enum rfb_encodings encodings[MAX_ENCODINGS + 1]; + size_t n_encodings; + LIST_ENTRY(nvnc_client) link; + struct pixman_region16 damage; + int n_pending_requests; + bool is_updating; + nvnc_client_fn cleanup_fn; + z_stream z_stream; + size_t buffer_index; + size_t buffer_len; + uint8_t msg_buffer[MSG_BUFFER_SIZE]; +}; + +LIST_HEAD(nvnc_client_list, nvnc_client); + +struct vnc_display { + uint16_t width; + uint16_t height; + uint32_t pixfmt; /* fourcc pixel format */ + char name[256]; +}; + +struct nvnc { + struct nvnc_common common; + uv_tcp_t tcp_handle; + struct nvnc_client_list clients; + struct vnc_display display; + void* userdata; + nvnc_key_fn key_fn; + nvnc_pointer_fn pointer_fn; + nvnc_fb_req_fn fb_req_fn; + nvnc_client_fn new_client_fn; + struct nvnc_fb* frame; +}; diff --git a/src/server.c b/src/server.c index 5dae81f..a6ad2ba 100644 --- a/src/server.c +++ b/src/server.c @@ -23,6 +23,7 @@ #include "type-macros.h" #include "fb.h" #include "neatvnc.h" +#include "common.h" #include #include @@ -43,70 +44,9 @@ #define DEFAULT_NAME "Neat VNC" #define READ_BUFFER_SIZE 4096 -#define MSG_BUFFER_SIZE 4096 - -#define MAX_ENCODINGS 32 -#define MAX_OUTGOING_FRAMES 4 #define EXPORT __attribute__((visibility("default"))) -enum nvnc_client_state { - VNC_CLIENT_STATE_ERROR = -1, - VNC_CLIENT_STATE_WAITING_FOR_VERSION = 0, - VNC_CLIENT_STATE_WAITING_FOR_SECURITY, - VNC_CLIENT_STATE_WAITING_FOR_INIT, - VNC_CLIENT_STATE_READY, -}; - -struct nvnc; - -struct nvnc_common { - void* userdata; -}; - -struct nvnc_client { - struct nvnc_common common; - int ref; - uv_tcp_t stream_handle; - struct nvnc* server; - enum nvnc_client_state state; - uint32_t fourcc; - struct rfb_pixel_format pixfmt; - enum rfb_encodings encodings[MAX_ENCODINGS + 1]; - size_t n_encodings; - LIST_ENTRY(nvnc_client) link; - struct pixman_region16 damage; - int n_pending_requests; - bool is_updating; - nvnc_client_fn cleanup_fn; - z_stream z_stream; - size_t buffer_index; - size_t buffer_len; - uint8_t msg_buffer[MSG_BUFFER_SIZE]; -}; - -LIST_HEAD(nvnc_client_list, nvnc_client); - -struct vnc_display { - uint16_t width; - uint16_t height; - uint32_t pixfmt; /* fourcc pixel format */ - char name[256]; -}; - -struct nvnc { - struct nvnc_common common; - uv_tcp_t tcp_handle; - struct nvnc_client_list clients; - struct vnc_display display; - void* userdata; - nvnc_key_fn key_fn; - nvnc_pointer_fn pointer_fn; - nvnc_fb_req_fn fb_req_fn; - nvnc_client_fn new_client_fn; - struct nvnc_fb* frame; -}; - struct fb_update_work { uv_work_t work; struct nvnc_client* client;