/* Copyright (C) 2009 Red Hat, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifndef _H_REDS #define _H_REDS #include #include #include typedef struct RedsStreamContext { void *ctx; int socket; SSL *ssl; int (*cb_write)(void *, void *, int); int (*cb_read)(void *, void *, int); int (*cb_readv)(void *, const struct iovec *vector, int count); int (*cb_writev)(void *, const struct iovec *vector, int count); int (*cb_free)(struct RedsStreamContext *); } RedsStreamContext; typedef struct Channel { struct Channel *next; uint32_t type; uint32_t id; int num_common_caps; uint32_t *common_caps; int num_caps; uint32_t *caps; void (*link)(struct Channel *, RedsStreamContext *peer, int migration, int num_common_caps, uint32_t *common_caps, int num_caps, uint32_t *caps); void (*shutdown)(struct Channel *); void (*migrate)(struct Channel *); void *data; } Channel; void reds_desable_mm_timer(); void reds_enable_mm_timer(); void reds_update_mm_timer(uint32_t mm_time); uint32_t reds_get_mm_time(); void reds_set_client_mouse_allowed(int is_client_mouse_allowed, int x_res, int y_res); void reds_register_channel(Channel *channel); void reds_unregister_channel(Channel *channel); extern struct CoreInterface *core; extern uint64_t bitrate_per_sec; #define IS_LOW_BANDWIDTH() (bitrate_per_sec < 10 * 1024 * 1024) #endif