Tor系统源码中用于控制链路circuit的文件主要有三个,分别是:circuitlist.c,circuituse.c,circuitbuild.c。这三个文件分别主要针对的处理功能与他们的名字相类似,即分别处理链路的组织,使用和建立。在本篇中,我们只介绍主要用于链路部分的全局变量,即存在于这三个文件之中的全局变量的使用。此处不再罗列链路函数,因为链路部分的函数着实不少,尤其是链路建立部分。或许在本文之后会花专门的篇幅描述链路建立以及对链路建立的函数加以说明,不过这不是本篇的主要内容。
0. 全局变量 circuitlist.c
circuitlist.c文件主要用于处理链路列表的组织,整理,计数等相关的操作。文件中前两个全局变量如下:
/** A global list of all circuits at this hop. */
circuit_t *global_circuitlist=NULL;
/** A list of all the circuits in CIRCUIT_STATE_OR_WAIT. */
static smartlist_t *circuits_pending_or_conns=NULL;
第一个全局变量用于维护系统的链路列表。系统链路列表是每个Tor主机上维护的全局链路列表,也就是说所有的链路都挂接在这个链路列表之中。第二个全局变量用于维护系统等待链路的列表。系统等待链路的列表就是系统中正在等待OR连接完成的链路形成的列表。
这两个列表的操作很简单,就是链表的插入和删除。其代码也可以很容易的用sourceinsight进行查找和分析,此处略去。在仔细研究代码之前我们就可以推测,全局链路列表必定是在链路被建立之时被使用到,一旦链路结构体被创