第六步:网络初始化
以下内容为系统启动过程中,每一步骤的详细分析。
第6步,网络初始化(src/init.cpp::AppInitMain()
)
src/init.cpp::AppInitMain()
)生成智能指针对象 g_connman,类型为
CConnman
。生成智能指针对象 peerLogic,类型为
PeerLogicValidation
。PeerLogicValidation 继承了 CValidationInterface、NetEventsInterface 两个类。实现 CValidationInterface 这个类可以订阅验证过程中产生的事件。实现 NetEventsInterface 这个类可以处理消息网络消息。
注册各种验证处理器,即信号处理器,在发送信号时会调用这些处理器。
方法具体实现如下:
静态变量 g_signals 在程序启动前生成,m_internals 在第4a 步应用程序初始化过程中生成。
根据命令行参数
-uacomment
,处理追加到用户代理的字符串。构造并检查版本字符串长度是否大于
version
消息中版本的最大长度。如果指定了
onlynet
参数,则设置可以对接进行连接的类型,比如:ipv4、ipv6、onion。上面的代码首先把
-onlynet
参数指定的只允许对外连接的网络类型加入集合中,然后进行 for 遍历,如果当前的类型不在允许的集合中,则调用SetLimited
方法,设置这些类型为受限的。获取是否允许进行 DNS 查找,是否进行代理随机
两者默认都为真。
处理网络代理。
如果指定了
-proxy
,且不等于 0,即指定了代理地址,进行下面的处理:调用
Lookup
方法,根据指定的代理,通过 DNS查找,发现代理服务器的地址。生成 proxyType 对象。
设置 IPv4、IPv6、Tor 网络的代理。
设置命名(域名)代理。
设置不限制连接到 Tor 网络。
具体代码如下:
处理洋葱网络。 如果指定了
onion
参数,则处理洋葱网络的相关设置。如果指定了
-onion
,且不等于空字符串,即指定了洋葱代理地址,进行下面的处理:如果参数等于 0,设置洋葱网络受限,即不可达。否则,进行下面的处理。
调用
Lookup
方法,根据指定的代理,通过 DNS查找,发现代理服务器的地址。生成 proxyType 对象。
设置 Tor 网络的代理。
设置不限制连接到 Tor 网络。
具体代码如下:
处理通过
-externalip
参数设置的外部 IP地址。获取并遍历所有指定的外部地址,进行如下处理:调用
Lookup
方法进行DNS 查找。如果成功则调用AddLocal
方法,保存新的地址。否则,抛出初始化错误。如果设置了
maxuploadtarget
参数,则设置最大出站限制。
Last updated
Was this helpful?