I首先使用GDB逐步浏览GUACD文件夹中的守护程序。 CTRL+单击顺序中的每个功能也最终导致了它从Libssh2频道读取的位置,但我仍然不明白鳄梨调味酱如何创建这些说明,甚至将图像存储为base64等。我已经浏览了他们网站上的所有文档,并了解了这些说明的所有文档,并了解了这些指令
do,但无法在其中识别它们。 是我第一次通过开源项目,理解它变得越来越复杂。我现在只尝试了SSH会议。有助于理解代码流的一些帮助真的很有帮助。
daemon.c
(在
guacd
中)聆听传入的客户连接。收到新连接后,它会创建一个新的客户端线程(
guacd_client_thread()
main()
接受循环中的新客户端,为每个连接创建线程。每个连接都由其自己的线程处理,流量从
daemon.c
移到特定于协议的处理程序。对于SSH,在初始设置后,该线程将在SSH协议插件中调用功能。
SSH协议插件
guac_ssh_client_thread()
是您应该调查的核心位置。 SSH逻辑的输入点是设置会话处理程序的函数
src/protocols/ssh/ssh.c
,包括使用
guac_client_plugin_init()
创建SSH会话。 SSH处理的核心会话线程是Intial libssh2会话,连接到远程主机,然后循环读取数据。 在SSH插件中,鳄梨调味酱持续从
libssh2
:读
guac_ssh_client_thread()
接收字节代表来自SSH会话的原始终端输出。
SSH数据与鳄梨调原协议指令之间的转换发生在终端仿真逻辑(VT100/ANSI)中,由
libssh2_channel_read()
组件管理int bytes_read = libssh2_channel_read(channel, buffer, sizeof(buffer));
以及相关文件,例如
guac_terminal
和
src/terminal/terminal.c