[Spice-devel] [PATCH 2/5] server/reds.c: split off reds-private.h
Christophe Fergeau
cfergeau at redhat.com
Tue Oct 23 02:00:41 PDT 2012
I assume it's only a c&p, haven't carefully checked the whole file, ACK
Christophe
On Fri, Oct 19, 2012 at 01:50:09PM +0200, Alon Levy wrote:
> ---
> server/reds-private.h | 182 ++++++++++++++++++++++++++++++++++++++++++++++++++
> server/reds.c | 180 ++-----------------------------------------------
> 2 files changed, 186 insertions(+), 176 deletions(-)
> create mode 100644 server/reds-private.h
>
> diff --git a/server/reds-private.h b/server/reds-private.h
> new file mode 100644
> index 0000000..3db6565
> --- /dev/null
> +++ b/server/reds-private.h
> @@ -0,0 +1,182 @@
> +#ifndef REDS_PRIVATE_H
> +#define REDS_PRIVATE_H
> +
> +#include <time.h>
> +
> +#include <spice/protocol.h>
> +
> +#define MIGRATE_TIMEOUT (1000 * 10) /* 10sec */
> +#define MM_TIMER_GRANULARITY_MS (1000 / 30)
> +#define MM_TIME_DELTA 400 /*ms*/
> +
> +typedef struct TicketAuthentication {
> + char password[SPICE_MAX_PASSWORD_LENGTH];
> + time_t expiration_time;
> +} TicketAuthentication;
> +
> +typedef struct TicketInfo {
> + RSA *rsa;
> + int rsa_size;
> + BIGNUM *bn;
> + SpiceLinkEncryptedTicket encrypted_ticket;
> +} TicketInfo;
> +
> +typedef struct MonitorMode {
> + uint32_t x_res;
> + uint32_t y_res;
> +} MonitorMode;
> +
> +typedef struct VDIReadBuf {
> + RingItem link;
> + uint32_t refs;
> +
> + int len;
> + uint8_t data[SPICE_AGENT_MAX_DATA_SIZE];
> +} VDIReadBuf;
> +
> +static VDIReadBuf *vdi_port_read_buf_get(void);
> +static VDIReadBuf *vdi_port_read_buf_ref(VDIReadBuf *buf);
> +static void vdi_port_read_buf_unref(VDIReadBuf *buf);
> +
> +enum {
> + VDI_PORT_READ_STATE_READ_HEADER,
> + VDI_PORT_READ_STATE_GET_BUFF,
> + VDI_PORT_READ_STATE_READ_DATA,
> +};
> +
> +typedef struct VDIPortState {
> + SpiceCharDeviceState *base;
> + uint32_t plug_generation;
> + int client_agent_started;
> +
> + /* write to agent */
> + SpiceCharDeviceWriteBuffer *recv_from_client_buf;
> + int recv_from_client_buf_pushed;
> + AgentMsgFilter write_filter;
> +
> + /* read from agent */
> + Ring read_bufs;
> + uint32_t read_state;
> + uint32_t message_recive_len;
> + uint8_t *recive_pos;
> + uint32_t recive_len;
> + VDIReadBuf *current_read_buf;
> + AgentMsgFilter read_filter;
> +
> + VDIChunkHeader vdi_chunk_header;
> +
> + SpiceMigrateDataMain *mig_data; /* storing it when migration data arrives
> + before agent is attached */
> +} VDIPortState;
> +
> +/* messages that are addressed to the agent and are created in the server */
> +typedef struct __attribute__ ((__packed__)) VDInternalBuf {
> + VDIChunkHeader chunk_header;
> + VDAgentMessage header;
> + union {
> + VDAgentMouseState mouse_state;
> + }
> + u;
> +} VDInternalBuf;
> +
> +#ifdef RED_STATISTICS
> +
> +#define REDS_MAX_STAT_NODES 100
> +#define REDS_STAT_SHM_SIZE (sizeof(SpiceStat) + REDS_MAX_STAT_NODES * sizeof(SpiceStatNode))
> +
> +typedef struct RedsStatValue {
> + uint32_t value;
> + uint32_t min;
> + uint32_t max;
> + uint32_t average;
> + uint32_t count;
> +} RedsStatValue;
> +
> +#endif
> +
> +typedef struct RedsMigPendingLink {
> + RingItem ring_link; // list of links that belongs to the same client
> + SpiceLinkMess *link_msg;
> + RedsStream *stream;
> +} RedsMigPendingLink;
> +
> +typedef struct RedsMigTargetClient {
> + RingItem link;
> + RedClient *client;
> + Ring pending_links;
> +} RedsMigTargetClient;
> +
> +typedef struct RedsMigWaitDisconnectClient {
> + RingItem link;
> + RedClient *client;
> +} RedsMigWaitDisconnectClient;
> +
> +typedef struct SpiceCharDeviceStateItem {
> + RingItem link;
> + SpiceCharDeviceState *st;
> +} SpiceCharDeviceStateItem;
> +
> +/* Intermediate state for on going monitors config message from a single
> + * client, being passed to the guest */
> +typedef struct RedsClientMonitorsConfig {
> + MainChannelClient *mcc;
> + uint8_t *buffer;
> + int buffer_size;
> + int buffer_pos;
> +} RedsClientMonitorsConfig;
> +
> +typedef struct RedsState {
> + int listen_socket;
> + int secure_listen_socket;
> + SpiceWatch *listen_watch;
> + SpiceWatch *secure_listen_watch;
> + VDIPortState agent_state;
> + int pending_mouse_event;
> + Ring clients;
> + int num_clients;
> + MainChannel *main_channel;
> +
> + int mig_wait_connect; /* src waits for clients to establish connection to dest
> + (before migration starts) */
> + int mig_wait_disconnect; /* src waits for clients to disconnect (after migration completes) */
> + Ring mig_wait_disconnect_clients; /* List of RedsMigWaitDisconnectClient. Holds the clients
> + which the src waits for their disconnection */
> +
> + int mig_inprogress;
> + int expect_migrate;
> + int src_do_seamless_migrate; /* per migration. Updated after the migration handshake
> + between the 2 servers */
> + int dst_do_seamless_migrate; /* per migration. Updated after the migration handshake
> + between the 2 servers */
> + Ring mig_target_clients;
> + int num_mig_target_clients;
> + RedsMigSpice *mig_spice;
> +
> + int num_of_channels;
> + Ring channels;
> + int mouse_mode;
> + int is_client_mouse_allowed;
> + int dispatcher_allows_client_mouse;
> + MonitorMode monitor_mode;
> + SpiceTimer *mig_timer;
> + SpiceTimer *mm_timer;
> +
> + int vm_running;
> + Ring char_devs_states; /* list of SpiceCharDeviceStateItem */
> + int seamless_migration_enabled; /* command line arg */
> +
> + SSL_CTX *ctx;
> +
> +#ifdef RED_STATISTICS
> + char *stat_shm_name;
> + SpiceStat *stat;
> + pthread_mutex_t stat_lock;
> + RedsStatValue roundtrip_stat;
> +#endif
> + int peer_minor_version;
> + int allow_multiple_clients;
> +
> + RedsClientMonitorsConfig client_monitors_config;
> +} RedsState;
> +
> +#endif
> diff --git a/server/reds.c b/server/reds.c
> index 9fc0057..98c8706 100644
> --- a/server/reds.c
> +++ b/server/reds.c
> @@ -75,6 +75,8 @@
> #include "smartcard.h"
> #endif
>
> +#include "reds-private.h"
> +
> SpiceCoreInterface *core = NULL;
> static SpiceCharDeviceInstance *vdagent = NULL;
> static SpiceMigrateInstance *migration_interface = NULL;
> @@ -93,6 +95,8 @@ static SpiceMigrateInstance *migration_interface = NULL;
> #define REDS_TOKENS_TO_SEND 5
> #define REDS_VDI_PORT_NUM_RECEIVE_BUFFS 5
>
> +static TicketAuthentication taTicket;
> +
> static int spice_port = -1;
> static int spice_secure_port = -1;
> static int spice_listen_socket_fd = -1;
> @@ -121,182 +125,6 @@ int agent_mouse = TRUE;
> int agent_copypaste = TRUE;
> static bool exit_on_disconnect = FALSE;
>
> -#define MIGRATE_TIMEOUT (1000 * 10) /* 10sec */
> -#define MM_TIMER_GRANULARITY_MS (1000 / 30)
> -#define MM_TIME_DELTA 400 /*ms*/
> -
> -typedef struct TicketAuthentication {
> - char password[SPICE_MAX_PASSWORD_LENGTH];
> - time_t expiration_time;
> -} TicketAuthentication;
> -
> -static TicketAuthentication taTicket;
> -
> -typedef struct TicketInfo {
> - RSA *rsa;
> - int rsa_size;
> - BIGNUM *bn;
> - SpiceLinkEncryptedTicket encrypted_ticket;
> -} TicketInfo;
> -
> -typedef struct MonitorMode {
> - uint32_t x_res;
> - uint32_t y_res;
> -} MonitorMode;
> -
> -typedef struct VDIReadBuf {
> - RingItem link;
> - uint32_t refs;
> -
> - int len;
> - uint8_t data[SPICE_AGENT_MAX_DATA_SIZE];
> -} VDIReadBuf;
> -
> -static VDIReadBuf *vdi_port_read_buf_get(void);
> -static VDIReadBuf *vdi_port_read_buf_ref(VDIReadBuf *buf);
> -static void vdi_port_read_buf_unref(VDIReadBuf *buf);
> -
> -enum {
> - VDI_PORT_READ_STATE_READ_HEADER,
> - VDI_PORT_READ_STATE_GET_BUFF,
> - VDI_PORT_READ_STATE_READ_DATA,
> -};
> -
> -typedef struct VDIPortState {
> - SpiceCharDeviceState *base;
> - uint32_t plug_generation;
> - int client_agent_started;
> -
> - /* write to agent */
> - SpiceCharDeviceWriteBuffer *recv_from_client_buf;
> - int recv_from_client_buf_pushed;
> - AgentMsgFilter write_filter;
> -
> - /* read from agent */
> - Ring read_bufs;
> - uint32_t read_state;
> - uint32_t message_recive_len;
> - uint8_t *recive_pos;
> - uint32_t recive_len;
> - VDIReadBuf *current_read_buf;
> - AgentMsgFilter read_filter;
> -
> - VDIChunkHeader vdi_chunk_header;
> -
> - SpiceMigrateDataMain *mig_data; /* storing it when migration data arrives
> - before agent is attached */
> -} VDIPortState;
> -
> -/* messages that are addressed to the agent and are created in the server */
> -typedef struct __attribute__ ((__packed__)) VDInternalBuf {
> - VDIChunkHeader chunk_header;
> - VDAgentMessage header;
> - union {
> - VDAgentMouseState mouse_state;
> - }
> - u;
> -} VDInternalBuf;
> -
> -#ifdef RED_STATISTICS
> -
> -#define REDS_MAX_STAT_NODES 100
> -#define REDS_STAT_SHM_SIZE (sizeof(SpiceStat) + REDS_MAX_STAT_NODES * sizeof(SpiceStatNode))
> -
> -typedef struct RedsStatValue {
> - uint32_t value;
> - uint32_t min;
> - uint32_t max;
> - uint32_t average;
> - uint32_t count;
> -} RedsStatValue;
> -
> -#endif
> -
> -typedef struct RedsMigPendingLink {
> - RingItem ring_link; // list of links that belongs to the same client
> - SpiceLinkMess *link_msg;
> - RedsStream *stream;
> -} RedsMigPendingLink;
> -
> -typedef struct RedsMigTargetClient {
> - RingItem link;
> - RedClient *client;
> - Ring pending_links;
> -} RedsMigTargetClient;
> -
> -typedef struct RedsMigWaitDisconnectClient {
> - RingItem link;
> - RedClient *client;
> -} RedsMigWaitDisconnectClient;
> -
> -typedef struct SpiceCharDeviceStateItem {
> - RingItem link;
> - SpiceCharDeviceState *st;
> -} SpiceCharDeviceStateItem;
> -
> -/* Intermediate state for on going monitors config message from a single
> - * client, being passed to the guest */
> -typedef struct RedsClientMonitorsConfig {
> - MainChannelClient *mcc;
> - uint8_t *buffer;
> - int buffer_size;
> - int buffer_pos;
> -} RedsClientMonitorsConfig;
> -
> -typedef struct RedsState {
> - int listen_socket;
> - int secure_listen_socket;
> - SpiceWatch *listen_watch;
> - SpiceWatch *secure_listen_watch;
> - VDIPortState agent_state;
> - int pending_mouse_event;
> - Ring clients;
> - int num_clients;
> - MainChannel *main_channel;
> -
> - int mig_wait_connect; /* src waits for clients to establish connection to dest
> - (before migration starts) */
> - int mig_wait_disconnect; /* src waits for clients to disconnect (after migration completes) */
> - Ring mig_wait_disconnect_clients; /* List of RedsMigWaitDisconnectClient. Holds the clients
> - which the src waits for their disconnection */
> -
> - int mig_inprogress;
> - int expect_migrate;
> - int src_do_seamless_migrate; /* per migration. Updated after the migration handshake
> - between the 2 servers */
> - int dst_do_seamless_migrate; /* per migration. Updated after the migration handshake
> - between the 2 servers */
> - Ring mig_target_clients;
> - int num_mig_target_clients;
> - RedsMigSpice *mig_spice;
> -
> - int num_of_channels;
> - Ring channels;
> - int mouse_mode;
> - int is_client_mouse_allowed;
> - int dispatcher_allows_client_mouse;
> - MonitorMode monitor_mode;
> - SpiceTimer *mig_timer;
> - SpiceTimer *mm_timer;
> -
> - int vm_running;
> - Ring char_devs_states; /* list of SpiceCharDeviceStateItem */
> - int seamless_migration_enabled; /* command line arg */
> -
> - SSL_CTX *ctx;
> -
> -#ifdef RED_STATISTICS
> - char *stat_shm_name;
> - SpiceStat *stat;
> - pthread_mutex_t stat_lock;
> - RedsStatValue roundtrip_stat;
> -#endif
> - int peer_minor_version;
> - int allow_multiple_clients;
> -
> - RedsClientMonitorsConfig client_monitors_config;
> -} RedsState;
> -
> static RedsState *reds = NULL;
>
> typedef struct AsyncRead {
> --
> 1.7.12.1
>
> _______________________________________________
> Spice-devel mailing list
> Spice-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/spice-devel
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/spice-devel/attachments/20121023/62ea4363/attachment.pgp>
More information about the Spice-devel
mailing list