Spice-server源码简要分析

2023-11-16


下载地址:https://www.spice-space.org/download/releases/spice-server/spice-0.14.1.tar.bz2
也可以在gitlab下载。https://gitlab.com/spice


spcie-server主要是以一个lib的形势被qemu调用。研究spice的代码,可以先从qemu入手。
阅读qemu的main函数代码,发现关于libspice的调用有两个地方:

qemu_spice_init();  
qemu_spice_display_init();

简单看一下这两个函数的实现:

#include "ui/qemu-spice.h"
ui\spice-core.c

实际上呢是qemu把libspice里面的代码做了封装。

void qemu_spice_init(void)
{
    QemuOpts *opts = QTAILQ_FIRST(&qemu_spice_opts.head);
    const char *password, *str, *x509_dir, *addr,
        *x509_key_password = NULL,
        *x509_dh_file = NULL,
        *tls_ciphers = NULL;
    char *x509_key_file = NULL,
        *x509_cert_file = NULL,
        *x509_cacert_file = NULL;
    int port, tls_port, addr_flags;
    spice_image_compression_t compression;
    spice_wan_compression_t wan_compr;
    bool seamless_migration;

    qemu_thread_get_self(&me);

    if (!opts) {
        return;
    }
    port = qemu_opt_get_number(opts, "port", 0);
    tls_port = qemu_opt_get_number(opts, "tls-port", 0);
    if (port < 0 || port > 65535) {
        error_report("spice port is out of range");
        exit(1);
    }
    if (tls_port < 0 || tls_port > 65535) {
        error_report("spice tls-port is out of range");
        exit(1);
    }
    password = qemu_opt_get(opts, "password");

    if (tls_port) {
        x509_dir = qemu_opt_get(opts, "x509-dir");
        if (!x509_dir) {
            x509_dir = ".";
        }

        str = qemu_opt_get(opts, "x509-key-file");
        if (str) {
            x509_key_file = g_strdup(str);
        } else {
            x509_key_file = g_strdup_printf("%s/%s", x509_dir,
                                            X509_SERVER_KEY_FILE);
        }

        str = qemu_opt_get(opts, "x509-cert-file");
        if (str) {
            x509_cert_file = g_strdup(str);
        } else {
            x509_cert_file = g_strdup_printf("%s/%s", x509_dir,
                                             X509_SERVER_CERT_FILE);
        }

        str = qemu_opt_get(opts, "x509-cacert-file");
        if (str) {
            x509_cacert_file = g_strdup(str);
        } else {
            x509_cacert_file = g_strdup_printf("%s/%s", x509_dir,
                                               X509_CA_CERT_FILE);
        }

 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spice-server源码简要分析 的相关文章

  • V-rep学习笔记:Geometric Constraint Solver(几何约束求解)

    The geometric constraint solver is slower and less precise at solving kinematic problems but might be easier and more in
  • 【计算机视觉】LeNet方法实现手写体识别(MNIST数据集)

    目录 一 MNIST数据集的特点 二 LeNet模型原理 一 卷积神经网络 二 LeNet 5模型 三 实验结果 一 训练测试结果 二 匹配结果 四 相关代码 一 MNIST数据集的特点 部分数据 MNIST数据集是一个手写体数据集 数据集
  • 进程间通信(IPC)的方法:命名管道

    使用管道时 一个进程的输出可成为另外一个进程的输入 命名管道 Named pipe或FIFO 是一种类似于管道的特殊文件 但在文件系统上有一个名称 它允许以先进先出 FIFO first in first out 的方式存储有限数量的数据
  • CUDA常见函数(一)(小白入门)

    CUDA常见函数 小白入门 示例代码0 VS自带Kernel cu 初始定义 核函数 其他函数 示例代码1 传递参数 cudaMalloc malloc cudaFree cudaMemcpy Memcpy 示例代码2 查询设备 cudaG
  • 关于as遇到的Enable "Android Support" Plugin错误问题

    元旦休息了3天 17年第一天上班打开as就遇到了这个facets cannot be loaded you can mark them as ignored to suppress this error错误问题 蛋疼得很 当然既然遇到了 就
  • 树莓派Pico入手

    树莓派Pico入手 树莓派 Pico 中文站 一 介绍 1 1 价格 开发板 19 00 1 2 型号 目前主要有两个型号 Pico 基础版 Pico W 板载WIFI芯片 H的是指给你焊好排针 1 3 性能 核心 双核 Arm Corte
  • Fisco技术文档总结1---搭建第一个区块链网络

    前言 本文的记录与总结依照于FISCO BCOS 技术文档学习联盟链搭建的相关知识 详细搭建过程见文档 本文仅作参考 本文通过在单机上部署一条4节点的FISCO BCOS联盟链 掌握FISCO BCOS部署流程 搭建 需要使用已经封装好的脚
  • 简易数字式电阻、电容和电感测量仪设计报告

    写在前面 这是这次参加电子设计大赛我写的设计报告 但是我本人现在对硬件不是很熟悉 所以很对原理叙述不是很到位啊 不过整个作品用到知识点和原理都基本说清楚了 简易数字式电阻 电容和电感测量仪设计报告 摘要 本系统利用TI公司的16位超低功耗单
  • 创建最大堆,对指定位置元素进行删减

    在堆H上实现一种新的操作 DecreaseKey H P X 将堆H中 位于P的元素的值减去X 这个操作如何实现 当然 要求操作执行后 H仍然是个堆 堆中的元素允许移动 include
  • 设置多个班主任类似问题

    设置班主任或者是修改 我们一般住在代码中是设置成saveAndUpdtate 在遇到要设置多个的话这种方式是不太可行的 可以采取开启一个事务 先将旧数据拿到 将新数据插入 再用旧数据id去删除旧数据 定义一个全局flag为false 每个步
  • Hyperledger Fabric笔记2--运行fabric测试网络

    Hyperledger Fabric笔记2 运行fabric测试网络 1 获取fabric相关源代码 首先 需要在 opt gopath中新建目录 mkdir p opt gopath src github com hyperledger
  • R手册(Communicate)--R Markdown

    文章目录 Overview Rmd Structure YAML Header Parameters Set render options with YAML 初始文档信息 Text Embed code with knitr syntax
  • bfs打开转盘锁

    转盘锁有四位 每位10个数字 每次只能转一位 而且转的过程中不能出现deadends中的情况 求出最后转几步才能的出target 一串字符串往上往下拨一位会有8种情况 相当于一个节点有8个邻接节点 在这么一个图中 只有一个终点 而且有的节点

随机推荐

  • AcWing题解

    104 货仓选址 417 不高兴的津津 421 陶陶摘苹果 425 明明的随机数 429 奖学金 441 数字统计 445 数字反转 449 质因数分解 680 剪绳子 756 蛇形矩阵 1381 阶乘 3208 Z字形扫描 3375 成绩
  • 银河麒麟安装后,网速过慢,经常断网,网卡:RTL8111/8168/8411

    问题描述 银河麒麟是一款国产系统 我前端时间下载并安装官网提供的试用版本 安装完之后 发现网络时常出现问题 经常网速变慢或者断网 需要电脑休眠之后 重新激活才能连上网络 原因分析 在长达一个月的使用过程中 断断续续的排查中 终于发现了是网卡
  • PYTHON爬虫小工具

    文章目录 google headers格式转换 firefox headers格式转换 判断服务器检测哪些headers头 判断服务器检测哪些cookies值 google headers格式转换 def googleHeadersForm
  • electron-vue 的初步安装使用

    1 安装node 官网Node下载进行安装 2 安装vue cli install 可以缩写为 i npm i g vue cli 安装完成后可以通过输命令查看安装的版本 vue V 2 9 6 3 安装electron vue脚手架 vu
  • 奇安信可信浏览器下载地址

    下载奇安信可信浏览器国密开发者专版 https www qianxin com ctp gmbrowser html
  • 真题详解(UML图)-软件设计(四十七)

    真题详解 Flynn分类 软件设计 四十六 https blog csdn net ke1ying article details 130072198 某搜索引擎在使用过程中 若要增加接受语音输入的功能 使用户可以通过语音来进行搜索 此时对
  • 海岸线——模拟题

    题目链接 http icpc upc edu cn problem php cid 2230 pid 0 题目描述 一个王国分成n m个六边形区域 每个区域内是陆地或者是水 如果一条边两侧为陆地和水 则该条边成为海岸线 求这个王国海岸线的长
  • UE4 抗锯齿设置

    https blog csdn net qq 27151549 article details 80779768
  • Python __str__() 方法

    str 方法和 init 方法类似 都是一些特殊方法 所以前后都有双下划线 它用来返回对象的字符串表达式 如果要把一个类的实例变成 str 就需要实现特殊方法 str 不使用 str 方法 class Student object def
  • 数据结构:直接插入排序详解,java代码实现

    1 动态图 橙色表示有序值红色表示待排序的值 即代码里的temp绿色表示temp的前一个值 即代码里第二个for循环里比较的值a j 2 实现代码 直接插入排序 public static void straightInsertionSor
  • 区块链基本原理概述

    1 简介 区块链本质上是一个由若干区块构成的数据链 这条数据链被分散保存到多个计算机节点 这些计算机节点相互独立 相互勿须信任 没有一个权威的中心节点 因而区块链被认为是一个 去中心化 去信任 的系统 在这两个概念中 去中心化 是方法 去信
  • cad上样条曲线上的点太多了_CAD如何将样条曲线转换成多段线

    有时在使用CAD中 需要把绘制出来的样条曲线转换成多段线来方便以后的编辑或输出到别的软件 设备 然而要怎么进行操作才能转换出来呢 下面有几种实用的方法供大家参考 第一种方法 特别使用CAD低版本的用户 打开CAD 打开需要转换的样条曲线图纸
  • Discuz! X2.5 个人空间主题列表帖子分页地址出错的解决方法

    可用以下方案解决 打开文件 source unction unction misc php 找到 domain http G setting domain app forum G setting domain app forum G set
  • Python函数(完整版)

    01 函数的概念 所谓函数 就是把就有独立功能的代码块组织为一个小模块 在需要的时候调用 函数的使用包含两个步骤 1 定义函数 封装 独立的功能 2 调用函数 享受封装的成果 函数的作用 在开发程序是 使用函数可以提高编写的效率以及代码的重
  • java中constant_如何在Java中定义常量(Constant)

    Method One interface ConstantInterface String SUNDAY SUNDAY String MONDAY MONDAY String TUESDAY TUESDAY String WEDNESDAY
  • Windows下使用命令行直接编译STM32

    1 需要准备的工具 makefile运行工具 MinGW gcc编译工具 arm none eabi gcc 2 安装步骤 2 1 MinGW安装 MinGW是是将GCC编译器和GNU Binutils移植到Win32平台下的产物 包括一系
  • 计算机毕业设计Java平面设计作品管理系统(源码+系统+mysql数据库+lw文档)

    计算机毕业设计Java平面设计作品管理系统 源码 系统 mysql数据库 lw文档 计算机毕业设计Java平面设计作品管理系统 源码 系统 mysql数据库 lw文档 本源码技术栈 项目架构 B S架构 开发语言 Java语言 开发软件 i
  • angular自带的一些api_在angular 2中使用HTTP Rest API

    小编典典 提供的很好的答案 但是我想补充一点 所以发布作为答案 首先 要使用Rest API 我们需要导入Http和HTTP PROVIDERS模块 当我们谈论Http时 第一步显然是 但是 是的HTTP PROVIDERS 在bootst
  • 为Linux的cp和mv命令添加进度条

    为Linux的cp和mv命令添加进度条 cp和mv可能是大家日常中使用最多的Linux命令之一 但是有一个突出的问题是这两个命令都不会有任何提示信息 这在操作大文件时候只能干等 可能大家对此已经习以为常 但是其实上也有解决解决方法 本文我们
  • Spice-server源码简要分析

    下载地址 https www spice space org download releases spice server spice 0 14 1 tar bz2 也可以在gitlab下载 https gitlab com spice s