[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