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

1  指针通道定义

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

1.1.1服务器—》客户端

enum {
    SPICE_MSG_CURSOR_INIT = 101,
    SPICE_MSG_CURSOR_RESET,
    SPICE_MSG_CURSOR_SET,
    SPICE_MSG_CURSOR_MOVE,
    SPICE_MSG_CURSOR_HIDE,
    SPICE_MSG_CURSOR_TRAIL,
    SPICE_MSG_CURSOR_INVAL_ONE,
    SPICE_MSG_CURSOR_INVAL_ALL,

    SPICE_MSG_END_CURSOR
};

1.1.2  光标类型

typedef enumSpiceCursorType {
SPICE_CURSOR_TYPE_ALPHA,
//数据包含pre-multiplied ARGB8888象素映射。线跨越<宽度* 4 >
    SPICE_CURSOR_TYPE_MONO,
    SPICE_CURSOR_TYPE_COLOR4,
    SPICE_CURSOR_TYPE_COLOR8,
    SPICE_CURSOR_TYPE_COLOR16,
    SPICE_CURSOR_TYPE_COLOR24,
    SPICE_CURSOR_TYPE_COLOR32,
    SPICE_CURSOR_TYPE_ENUM_END
}SpiceCursorType;

1.1.3  SpiceCursorFlags定义

typedef enumSpiceCursorFlags {
SPICE_CURSOR_FLAGS_NONE = (1 << 0),
//设置无效
SPICE_CURSOR_FLAGS_CACHE_ME = (1 << 1),
//客户端应该将这个形状添加到缓存
    SPICE_CURSOR_FLAGS_FROM_CACHE = (1 <<2),
         //客户端应该从光标缓存中获取光标的形状。SpiceCursorHeader结构体中其他字段除了unique都是无效的。
    SPICE_CURSOR_FLAGS_MASK = 0x7
} SpiceCursorFlags;

1.1.4  SpiceCursorHeader结构体

typedef structSpiceCursorHeader {
    uint64_t unique; //对应光标形状的唯一标示,用于在缓存中存储或检索
    uint16_t type;  //光标类型
    uint16_t width; //光标的宽度
    uint16_t height; //光标高度
    uint16_t hot_spot_x;//光标热点X位置
    uint16_t hot_spot_y; //光标热点Y位置
}SpiceCursorHeader;

typedef structSpiceCursor {
    uint32_t flags;    // SpiceCursorFlags 标示
    SpiceCursorHeader header;//光标头
    uint32_t data_size;//数据大小
    uint8_t *data;//数据实际光标形状数据,
} SpiceCursor;

1.1.5  光标初始化结构体

typedef structSpiceMsgCursorInit {
    SpicePoint16 position; //鼠标指针的位置相关的显示区域
    uint16_t trail_length;
    uint16_t trail_frequency; //
    uint8_t visible; //可见性 1:可见,0:不可见
    SpiceCursor cursor; //当前光标形状
} SpiceMsgCursorInit;

1.1.6  SpiceMsgCursorSet结构体

typedef structSpiceMsgCursorSet {
    SpicePoint16 position; /鼠标指针的位置相关的显示区域
    uint8_t visible; //可见性 1:可见,0:不可见
    SpiceCursor cursor; //当前光标形状
}SpiceMsgCursorSet;

1.1.7  SpiceMsgCursorMove结构体

typedef structSpiceMsgCursorMove {
    SpicePoint16 position; /鼠标指针的位置相关的显示区域
}SpiceMsgCursorMove;

1.1.8  SpiceMsgCursorTrail结构体

typedef structSpiceMsgCursorTrail {
    uint16_t length;//
    uint16_t frequency;//更新频率
}SpiceMsgCursorTrail;
时间: 2024-08-01 01:34:42

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  主通道协议定义 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_

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

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

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

Spice协议初探

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

关于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