SPICE协议------主通道交互定义

1  主通道协议定义

1.1服务器—》客户端

enum {
    SPICE_MSG_MAIN_MIGRATE_BEGIN = 101,
    SPICE_MSG_MAIN_MIGRATE_CANCEL,
    SPICE_MSG_MAIN_INIT,
    SPICE_MSG_MAIN_CHANNELS_LIST,
    SPICE_MSG_MAIN_MOUSE_MODE,
    SPICE_MSG_MAIN_MULTI_MEDIA_TIME,
    SPICE_MSG_MAIN_AGENT_CONNECTED,
    SPICE_MSG_MAIN_AGENT_DISCONNECTED,
    SPICE_MSG_MAIN_AGENT_DATA,
    SPICE_MSG_MAIN_AGENT_TOKEN,
    SPICE_MSG_MAIN_MIGRATE_SWITCH_HOST,
    SPICE_MSG_MAIN_MIGRATE_END,
    SPICE_MSG_MAIN_NAME,
    SPICE_MSG_MAIN_UUID,
    SPICE_MSG_MAIN_AGENT_CONNECTED_TOKENS,
    SPICE_MSG_MAIN_MIGRATE_BEGIN_SEAMLESS,
    SPICE_MSG_MAIN_MIGRATE_DST_SEAMLESS_ACK,
    SPICE_MSG_MAIN_MIGRATE_DST_SEAMLESS_NACK,
    SPICE_MSG_END_MAIN
};

1.2客户端—》服务器

enum {
    SPICE_MSGC_MAIN_CLIENT_INFO = 101,
    SPICE_MSGC_MAIN_MIGRATE_CONNECTED,
    SPICE_MSGC_MAIN_MIGRATE_CONNECT_ERROR,
    SPICE_MSGC_MAIN_ATTACH_CHANNELS,
    SPICE_MSGC_MAIN_MOUSE_MODE_REQUEST,
    SPICE_MSGC_MAIN_AGENT_START,
    SPICE_MSGC_MAIN_AGENT_DATA,
    SPICE_MSGC_MAIN_AGENT_TOKEN,
    SPICE_MSGC_MAIN_MIGRATE_END,
    SPICE_MSGC_MAIN_MIGRATE_DST_DO_SEAMLESS,
    SPICE_MSGC_MAIN_MIGRATE_CONNECTED_SEAMLESS,
    SPICE_MSGC_END_MAIN
};

1.3迁移控制

1.4鼠标模式

SPICE协议支持两个鼠标模式:客户端模式及服务器模式。客户端模式下,实际鼠标是客户端鼠标,客户端端发送鼠标位置的显示和服务器发送鼠标形状信息。服务器模式下,客户端发送鼠标的相对移动位置和服务器发送的位置和形状的命令。SPICE主通道被用来发送鼠标模式的控制。

1.4.1  SpiceMouseMode模式

typedef enumSpiceMouseMode {
    SPICE_MOUSE_MODE_SERVER = (1 << 0),//服务器模式
    SPICE_MOUSE_MODE_CLIENT = (1 << 1),//客户端模式
    SPICE_MOUSE_MODE_MASK = 0x3
}SpiceMouseMode;

1.4.2  SpiceMsgMainMouseMode结构体描述

SPICE服务器在鼠标模式更改时发送此消息

typedef structSpiceMsgMainMouseMode {

uint32_t supported_modes; //当前支持的鼠标模式

uint32_t current_mode; //当前鼠标模式

}SpiceMsgMainMouseMode;

1.4.3  SpiceMsgcMainMouseModeRequest结构体描述

SPICE客户端发送此消息用来指定鼠标模式。服务器是否接受这个模式是不确定的。只有当收到服务器的回复,客户端才知道实际鼠标模式。

typedef structSpiceMsgcMainMouseModeRequest {
    uint32_t mode;
}SpiceMsgcMainMouseModeRequest;

1.5Main channel init message

SPICE服务器必须发送SPICE_MSG_MAIN_INIT作为第一个消息。在其他任何时候发送都是不被允许的。客户端会回复SPICE_MSGC_MAIN_ATTACH_CHANNELS。获得服务器所支持的通道列表

typedef structSpiceMsgMainInit {
    uint32_t session_id; //SPICE服务端生成的会话ID,后续通道的链接将发送此ID。
    uint32_t display_channels_hint;//可选的预期数量的显示通道。0是无效数值
    uint32_t supported_mouse_modes;//支持的鼠标模式
    uint32_t current_mouse_mode;//当前鼠标模式
    uint32_t agent_connected; //当前SPICE agent的状态。0:断开,1:连接
    uint32_t agent_tokens; //发送给SPICE agent的有效许可证,规定了发送信息的数量
    uint32_t multi_media_time;//当前多媒体时间。用于同步视频帧
    uint32_t ram_hint; //可先的提示帮助确定LZ压缩的大小
} SpiceMsgMainInit;

1.6服务器回应支持通道

为了能够动态的连接服务器通道,SPCIE协议包含了SPICE_MSG_MAIN_CHANNELS_LIST消息。这个消息通知客户端服务器的可用通道。

typedef structSpiceMsgChannels {
    uint32_t num_of_channels;
    SpiceChannelId channels[0];
}SpiceMsgChannels;

1.7多媒体时间同步消息

SPICE协议定义了设置多媒体音视频同步的消息。两种方法支持多媒体的支持,第一种方法是根据播放通道上的时间戳,第二种方法使用在主通道SPICE_MSG_MAIN_MULTI_MEDIA_TIME的消息。后一种方法用在不存在音频通道情况下

typedef structSpiceMsgMainMultiMediaTime {
    uint32_t time;
}SpiceMsgMainMultiMediaTime;

1.8Spice agent

SPICE协议定义一组双向通道的消息在SPICE客户端和远程主机上端AGENT的双向通信。SPICE协议只是提供了一种交流的渠道,实际数据传输协议内容是不逃命的。这个通道可以用于各种目的如剪贴板共享、身份验证和显示配置。

1、SPICE客户端接收远程代理通知连接消息

SPICE_MSG_MAIN_INIT或SPICE_MSG_MAIN_AGENT_CONNECTED。

2、远程代理断开消息

SPICE_MSG_MAIN_AGENT_DISCONNECTED。

双向使用令牌机制是为了防止代理消息阻塞主通道。每一方都不允许发送多于对方分配令牌数量的消息,客户端在接收到SPICE_MSG_MAIN_INIT消息的时候获得对方的令牌。后续可以使用SPICE_MSG_MAIN_AGENT_TOKEN获得对方的令牌。服务器得到客户端的令牌初始数量是在SPICE_MSGC_MAIN_AGENT_START消息中,后续SPICE_MSGC_MAIN_AGENT_TOKEN。后续数据的交互使用SPICE_MSG_MAIN_AGENT_DATA和SPICE_MSGC_MAIN_AGENT_DATA。

时间: 2024-10-28 14:28:02

SPICE协议------主通道交互定义的相关文章

Spice协议----输入通道定义

1  输入通道定义 SPICE输入通道主要控制鼠标和键盘的操作 1.1服务器--->客户端 enum { SPICE_MSG_INPUTS_INIT = 101, SPICE_MSG_INPUTS_KEY_MODIFIERS, SPICE_MSG_INPUTS_MOUSE_MOTION_ACK = 111, SPICE_MSG_END_INPUTS }; 1.2客户端--->服务器 enum { SPICE_MSGC_INPUTS_KEY_DOWN = 101, SPICE_MSGC_INPU

SPICE协议----光标通道定义

1  指针通道定义 SPICE协议定义了一组消息用来控制光标在远程桌面显示区域的形状和位置.光标位置消息和客户端鼠标模式是无关的.SPICE协议还定义了一组消息用来管理在客户端侧的光标形状缓存.客户端必须严格遵守所有的指令.服务器发送SPICE_MSG_CURSOR_INIT消息设置当前指针状态(形状,位置,能见度)和清楚缓存,后续会发送除初始化之外的其他命令.服务器可以发送SPICE_MSG_CURSOR_RESET消息将禁用指针及重置光标缓存.此消息后SPICE_MSG_CURSOR_INI

SPICE协议-----基本简介及普通协议定义

1  SPICE协议简介 SPICE协议定义了一组协议消息来访问.控制.和接收通过网络从远程计算机设备(如:键盘.视频.鼠标)的操作,并回复发送输出.控制设备既可以在客户端,也可以在服务端.另外,协议定义了一组支持远程服务器从一个网络地址迁移到另一个网络地址.加密传输数据,有一个例外,在选择加密方法上比较灵活.SPICE使用简单的消息传递和不依赖于任何RPC标准或特定的传输层. SPICE通信会话分为多种沟通通道道(每个通道针对一个远程设备)为了有能力控制通信和执行根据通道类型的消息(如QOS加

Spice协议初探

转载自 灵跃云 :原文链接 序 言 SPICE,即Simple Protocol for Independent Computing Environment(独立计算环境简单协议)是红帽企业虚拟化桌面版的主要技术组件之一,具有自适应能力的远程提交协议,能够提供与物理桌面完全相同的最终用户体验.借助支持SPICE协议的客户端(如remote-viewer)或者通过浏览器,用户可以访问自己的虚拟桌面,如下图1所示. 图1 spice remote-viewer客户端 1.特点 Spice虚拟桌面传输

spice协议----播放和录音通道

1  播放通道定义 SPICE协议支持服务器发送音频流数据在客户端播放.音频流服务器使用SPICE_MSG_PLAYBACK_DATA消息发送客户端,音频数据的内容有播放模式控制(服务器通过SPICE_MSG_PLAYBACK_MODE消息发送客户端).服务器通过发送SPICE_MSG_PLAYBACK_START消息和SPICE_MSG_PLAYBACK_STOP消息来停止和播放音频流.数据包发送期间只允许停止和播放消息. 1.1服务器->客户端消息宏 enum { SPICE_MSG_PLA

关于android版本spice协议tls端口链接方式的bug问题

最近在搞了搞android版本的spice协议.在andorid-spice官方github代码下载下来之后,编译成功并且顺利的运行在android系统上链接云桌面的时候,在非安全端口的情况下可以成功的链接到虚拟云桌面,但是非常非常让人头疼的是在tls端口下链接的时候总是链接不到云桌面,并且后台报了一堆ssl问题的错误.经过反复查找问题,原来这个问题是一个本来就存在的bug,是在ssl_read()函数执行的时候由于系统自身的某些原因导致有时候协议的数据是读取不成功的,如果在这时候让ssl_re

DNS 中的协议字段详细定义

DNS中的协议字段定义 Table of Contents 1 概述 2 DNS Classes 3 DNS OpCodes 4 DNS RCODEs 5 DNS Label Types 6 DNS资源记录 7 EDNS Version 8 DNS EDNS0 Option Codes (OPT) 1 概述 总结DNS协议中各字段的取值 2 DNS Classes Decimal Name Reference 0 Reserved RFC6895 1 Internet(IN) RFC1035 2

Openstack启用spice协议

#控制节点 #安装 apt-get install nova-spiceproxy spice-html5 spice-vdagent #配置 nano /etc/nova/nova.conf # Vnc configuration #vnc_enabled=false [spice] enabled=true html5proxy_base_url=http://192.168.29.81:6082/spice_auto.html keymap=en-us server_listen=0.0.

Newton配置SPICE协议

1.控制节点: 安装包: # yum install spice-server spice-protocol openstack-nova-spicehtml5proxy spice-html5 这里提示: 直接下载 spice-html5的RPM包并安装: # wget  # rpm -i spice-html5-0.1.7-1.el7.noarch.rpm 修改配置文件: # vim /etc/nova/nova.conf [default] vnc_enabled=false [spice