相关文件
H:\webrtc-20210315\webrtc-20210315\webrtc\webrtc-checkout\src\rtc_base\network.h
Networkmanager类关系图
1、BasicNetworkManager
重要的成员变量和成员函数:
thread:知道当前是在哪个线程;
network_monitor: 监控网络变化
CreateNetworks:查找我们系统中都有哪些网络设备,并获取信息
QueryDefaultLocalAddress:用于获取本地绑定的socket,知道自己在使用哪个ip地址和端口
StartNetworkMonitor/StopNetworkMonitor:启动/停止网络监控器,被StartUpdating/StopUpdating调用。
2、NetworkManagerBase
重要的成员变量和成员函数:
networks: 遍历出的所有网卡信息
ipv4_any_address_network:默认ipv4网卡信息
ipv6any_address_network: 默认ipv6网卡信息
void MergeNetworkList(const NetworkList& list, bool* changed); 将可以合并的网卡信息进行合并;
3、NetworkManager
Initialize():初始化
StartUpdating/StopUpdating:启动/停止网络监控
DumpNetworks(): 将所有网卡信息输出到终端上去
4、其他
MdnsResponderProvider类,是webrtc的新功能,隐藏ip地址,防止ip地址泄漏。防止信令交换后,一旦对端获取到本端的公网ip后,可能会被不良分子攻击利用。
创建Networks过程
触发的时间点
BasicNetworkManager::StartUpdating
void BasicNetworkManager::StartUpdating() {
thread_ = Thread::Current();
// Redundant but necessary for thread annotations.
RTC_DCHECK_RUN_ON(thread_);
if (start_count_) {
// If network interfaces are already discovered and signal is sent,
// we should trigger network signal immediately for the new clients
// to start allocating ports.
if (sent_first_update_)
thread_->Post(RTC_FROM_HERE, this, kSignalNetworksMessage);
} else {
thread_->Post(RTC_FROM_HERE, this, kUpdateNetworksMessage);
StartNetworkMonitor();
}
++start_count_;
}
void BasicNetworkManager::StopUpdating() {
RTC_DCHECK_RUN_ON(thread_);
if (!start_count_)
return;
--start_count_;
if (!start_count_) {
thread_->Clear(this);
sent_first_update_ = false;
StopNetworkMonitor();
}
}