/* -*- Mode: C; c-basic-offset: 4; indent-tabs-mode: nil -*- */
/*
Copyright (C) 2009-2015 Red Hat, Inc.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, see .
*/
#ifndef REDS_PRIVATE_H_
#define REDS_PRIVATE_H_
#include
#include
#include "main-dispatcher.h"
#include "main-channel.h"
#include "inputs-channel.h"
#include "stat-file.h"
#include "red-record-qxl.h"
#include "safe-list.hpp"
#define MIGRATE_TIMEOUT (MSEC_PER_SEC * 10)
struct TicketAuthentication {
char password[SPICE_MAX_PASSWORD_LENGTH];
time_t expiration_time;
};
struct TicketInfo {
EVP_PKEY *rsa;
int rsa_size;
BIGNUM *bn;
SpiceLinkEncryptedTicket encrypted_ticket;
};
struct MonitorMode {
uint32_t x_res;
uint32_t y_res;
};
struct RedsMigPendingLink {
SpiceLinkMess *link_msg;
RedStream *stream;
};
struct RedsMigTargetClient {
RedClient *client;
GList *pending_links;
};
struct ChannelSecurityOptions;
struct RedSSLParameters {
char keyfile_password[256];
char certs_file[256];
char private_key_file[256];
char ca_certificate_file[256];
char dh_key_file[256];
char ciphersuite[256];
};
struct RedCharDeviceVDIPort;
struct RedServerConfig;
struct RedsState {
SPICE_CXX_GLIB_ALLOCATOR
RedServerConfig *config;
int listen_socket;
int secure_listen_socket;
SpiceWatch *listen_watch;
SpiceWatch *secure_listen_watch;
red::shared_ptr agent_dev;
int pending_mouse_event;
bool pending_device_display_info_message;
red::safe_list clients;
red::shared_ptr main_channel;
red::shared_ptr inputs_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) */
std::forward_list>
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 */
GList *mig_target_clients;
red::safe_list> channels;
SpiceMouseMode mouse_mode;
int is_client_mouse_allowed;
int dispatcher_allows_client_mouse;
MonitorMode monitor_mode;
SpiceTimer *mig_timer;
int vm_running;
red::safe_list> char_devices;
int seamless_migration_enabled; /* command line arg */
SSL_CTX *ctx;
#ifdef RED_STATISTICS
RedStatFile *stat_file;
#endif
int allow_multiple_clients;
bool late_initialization_done;
/* Intermediate state for on going monitors config message from a single
* client, being passed to the guest */
SpiceBuffer client_monitors_config;
int mm_time_enabled;
SpiceCharDeviceInstance *vdagent;
SpiceMigrateInstance *migration_interface;
SpiceCoreInterfaceInternal core;
red::safe_list qxl_instances; // XXX owning
red::shared_ptr main_dispatcher;
RedRecord *record;
};
#endif /* REDS_PRIVATE_H_ */