guacamole-server0.9.9(RDP server)

guacamole-server0.9.9(RDP server)

guacamole支持不同的远程桌面连接,也就是说guacamole需要支持不同的远程桌面协议。本节内容是单指基于RDP协议的部分。guacamole 整个项目分为三个部分,分别是guacamole server、guacamole client以及web application。guacamole server的功能是为client和RDP server提供通信接口。guacamole server又可以称作guacd。guacd与guacamole client之间的通信是依靠guacamole协议,与RDP server通信是依靠RDP协议,具体到代码中使用的是开源项目freerdp。guacd通过加载不同的动态链接库来支持不同的协议。此处加载RDP动态链接库。

guacamole server与其他部分的通信机制如下图所示:

guacamole-server0.9.9(RDP server)_第1张图片

guacd在系统中维持一个守护进程,守护进程中主要是监听来自guacamole client的socket数据包,收到数据包之后创建子进程进行连接处理。

以上是大体介绍了guacamole server的结构,下面将从main函数开始分析代码。分析的重点:

1.     关键结构体分析,包括元素的意义、函数指针的调用;

2.     关键流程的记录;

3.     结构体之间的关系;

4.     关键函数的分析;

1.  main()

l  流程:

1.     新建guacd_client_map,管理连接的client

2.     从配置文件中读取client地址和端口号

(配置文件应该是/etc/guacamole/guacamole.properties,在实测中IP地址:127.0.0.1 端口号:4822)

3.     得到client端socket,描述符socket_fd,并绑定地址

4.     开启守护进程,向配置文件中写入进程pid,设置信号相应模式

5.     listen(socket_fd),监听client端的socket

------------------------------------------连接到guacamole client-----------------------------------

6.     循环

你可能感兴趣的:(guacamole,guacamole,RDP)