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与其他部分的通信机制如下图所示:
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. 循环