libjingle开发(4)

2019-08-31 12:21

1、#define FEATURE_ENABLE_SSL (如果编译器是Visual Studio,这个设置是在工程设置中定义的,而不是在代码中)。

2、确定SSL_USE_OPENSSL 或SSL_USE_SCHANNEL 在ssladapter.cc中被定义,具体是哪一个视应用将来运行的操作系统而定。

3、调用InitializeSSL初始化一些必须的组件。这个函数在ssladapter.cc中定义。当应用程序退出时,应该调用 CleanupSSL。应用程序不必调用InitializeSSLThread(在InitializeSSL中己经被调用过了)。

五、Connections(链接)

一个p2p的链接实际上由两个通道组成。

● session negotiation channel(也称作signaling channel),会话协商通道。是为数据链接服务的沟通通道。这个通道被用来回应取得一个链接的请求,交换候选,和协商会话的细节(比如:套接字地址,需要的编码方案,交换的文件,链接改变请求,终止请求)。这个通道是两个计算机之间建立的第一个链接,也只有这个链接成功之后,两个计算机之间的数据链接才能被建立。libjingle通过发送一个指定的前导协议节发出一次响铃并收到一个回应,数据链接则被建立(see Jingle and libjingle)。这个通道发送协议节是通过XMPP 服务器这一中间机构进行的,例子中的代码是把Google Talk服务器当作中间机构用的。

● data channel (娄据通道,数据链接)这个通道传送的是p2p两端真正交换的数据(语音,视频,文件等),数据通道里的数据被TCP或UDP包封装,到底是TCP还是UDP这要视协商的传送方式,这些包并没有经过XMPP服务器。

会话协商通道首先被建立,它作为计算机间协商建立数据通道细节的通道。数据通道被成功建立之后,在这个通道上将发生许多数据活动,除非碰到改变编码请求,新文件请求,重传请求,或终止请求。

下面的图演示了这两种数据路径。尽管只有一个路径处于活动态,图中还列出了两个路径的交替使用态。因为路径可以是直接链接(92%的链接尝试都可以转换成直联)或服务器中转(8%的链接尝试需要中间服务器的中转)。第三种数据路径没有列出,它是没有防火墙的网络中从一台计算机直接链接另一台计算机。

1、libjingle不时地发送出心跳包(STUN),来维持一个链接可写入,保持防火墙和NAT地址绑定处于活动态,并且还可用来检查潜在的链接。

2、linjingle向链接端口分配用户名和密码。此举用来确定当前链接的数据通道就是在会话协商通道上协商好的数据通道。因为用户名和密码是被XMPP发出的,也许没有经过TLS的加密,心跳包中的用户名和密码只是身份的标识,并没有加密验证。

运行 file share 例子程序,可以看到发出的真实协议节。

六、Transports, Channels, and Connections

每个p2pTransportChannel代表了本地机与远程机的数据通道。这个通道实际上包含着(隐藏着)一个设计复杂而健壮的体系。P2PTransportChannel管理着大量的不同的Connection对象,每个对象代表了一个不同种类的链接(UDP,TCP等)。一个Connection对象实际上封装了一对对象:一个Port子类,代表了本地链接,和一个代表远程机的地址。如果一个链接无效,P2pTransportChannel会立即切换到下个最佳的链接上(即从候选链接中选一个最佳的)。

下面的图是数据路径在p2p组件内部的高层抽象。

当libjingle和远程机协商一个链接时,libjingle就会在本地创建一个链表,用来储存所有潜在链接点,这潜在的链接点称作“candidates”(候选),本地的每个候选被一个Port对象封装,此Port对象被PortAllocator子类分配。本地的Port对象是在发起方在发送链接请求之前被创建,或接收方收到一个链接请求后被创建(如果Port对象链表己经被生成,不论这个链表是怎么创建的,只要有就行)。当P2PTransportChannel收到另外一个计算机的链接请求,它就会创建一个Connection对象来封装每个“远程候选/本地Port对象”对。

libjingle还定义了一个RawTransport类,此类支持UDP两端的直接链接(在不使用ICE的情况下)。这样的传输方式(链接方式)也许在能够创建UDP直连条件下或UDP的任何一方不支持ICE机制下被使用。

P2PTtransportChannel 创建和管理多个Connection对象。P2PtransportChannel根据可写入性和优先级(比如:UDP的优级先比中转链接的高)来选择最佳的Connection对象使用。

当链接异常中断或性能低下时,上述情况就会随之发生,P2PTransportChannel立刻会切换到下一个Connection对象上,并且这种切换对上层是透明的。

P2PTransport(图中未显示)是p2p数据体系上的抽象度较高的创建者和管理者。它创建和管理P2PTransportChannel,并且监视它的性能,但是实际上P2PTransport不处理数据;数据的真正进入点是P2PTransportChannel。VoiceChannel和PseudoTcpChannel都关联到了P2PTransportChannel并进行数据的读取和写入。

Session对象掌管着P2PTransport对象,所以可以要求P2PTransport创建数据通道。尽管Session对象有掌管多个Transport和Transport子类实例的潜力,但是当前版本的代码只定义和使用了一个P2PTransport子类的实例。

七、Candidates(候选)

libjingle一个主要的好处就是它可以穿透防火墙和NAT设备进行链接协商。libjingle使用ICE机制穿透防火墙。libjingle应用程序第一步要做的就是在试图协商一个链接时为其它计算机的链入创建一个潜在的本地端口地址链表。链表中的每个潜在的地址就称作一个候选。候选就是“IP地址:端口”对应对,这些对应对使应用程序和其它计算机互联(技术上,这些对应对只在本地机上监听)。libjingle提供了强壮的机制在本地链接上发现候选供其它计算机进入,甚至穿透防火墙或NAT设备。

为了向其它计算机提供尽可能多的候选链接地址,libjingle生成三种本地候选: ● Local IP addresses 一种候选是计算机上的本地IP地址。与它共同在一个网络中的其它计算机能够通过这个候选进入。

● Global addresses第二种候选是两个计算机之间的NAT或防火墙设备的对外地址。如果这个候选是NAT设备对外地址,libjingle使用心跳包使NAT端口与本地机绑定起来并对外公布这个全局地址。这个全局地址被作为从NAT对外地址链接进入的候选。

(A second candidate is an external address on a NAT or firewall device between the two computers. If this

is outside a NAT device, libjingle uses STUN to cause the NAT to bind to your computer and expose a global address.

This address is used as a candidate to connect from outside the NAT device.)

● Relay server addresses 大约有8%的链接尝试在穿越防火墙时,上述方法失败。第三种方法就是在两个防火墙之间进行服务器中转。尽管libjingle有能力使用中转服务器,但是没有提供中转服务器的URI。libjingle包含中转服务的代码(relayserver.h)。应用程序可以自己创建和运行这个服务,使用方法是以中转服务器的IP地址做为BasicPortAllocator的构造函数的第三个参数。

下面的图演示了两台计算机之间生成的 local addrress 候选(C1),external NAT 候选(C2),Relay server候选(C3)。

libjingle以链表的形式储存着全部的候选,这样可以做到在链接建立后,libjingle能够在当前链接迟缓或中断后很快地切换到新的链接上。

libjingle包支持多种传输方式,实现了Jingle的元素表现出来的精神。一个transport元素能够包含比简单的候选地址更多的信息:例如:ICE标签支持像优先权,密码,用户碎片(user fragments)的特殊ICE。尽管这是协商链接的首选方法,为了向下兼容的正规考虑,libjingle仍然支持客户继续使用老式的节。请查看Jingle ICE Transport Specification 里的transport详细说明。

八、Data Packet(数据包)

计算机间的P2P数据被多重协议封装,就像下图演示的,具体被什么协议封装依懒于实现的应用程序。并不是每个应用程序都能用到所有的协议,例如:文件传输应用使用了pseudo-tcp协议,但是语音聊天应用却没有使用。


libjingle开发(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:资产评估操作实施细则 - 图文

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: