首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 互联网 >

[Libjingle代码分析]对比Jingle的XMPP stanza理解Libjingle的几个关键数据结构

2012-07-01 
[Libjingle代码分析]对照Jingle的XMPP stanza理解Libjingle的几个关键数据结构1.SessionManager管理多个Se

[Libjingle代码分析]对照Jingle的XMPP stanza理解Libjingle的几个关键数据结构

1.

SessionManager管理多个Session:

class SessionManager {  typedef std::map<std::string, Session*> SessionMap;  SessionMap session_map_;}

每个Session在SessionManager里通过sid来区分:

session_map_[session->id()] = session;
?

通过SessionManager::CreateSession(content_type)创建一个Session, 每个Session对应一个content_type:

class Session {  std::string content_type_;}

content_type目前传入的为"urn:xmpp:jingle:apps:rtp:1", 其实就是<content>下<description>元素的"xmlns"属性值.

?

2.

一个Session管理多个Transport:

typedef std::map<std::string, TransportProxy*> TransportMap;class Session {  TransportMap transports_;}

每个Transport在Session里通过content_name来区分:

transports_[content_name] = transproxy;

?

通过Session::GetOrCreateTransportProxy(content_name)来创建一个Transport. content_name就是<content>元素的name属性值, 如"audio", "video"等. 比如, 在视频聊天中:

<jingle>  <content name="audio" creator="initiator">  </content>  <content name="video" creator="initiator">  </content></jingle>

?

3.

一个Transport管理多个Transportchannel:

typedef std::map<std::string, TransportChannelImpl*> ChannelMap;class Transport {  ChannelMap channels_;} 

每个Transportchannel通过channel_name来区分:

channels_[name] = channel;
?

通过 Transport::CreateChannel(name)创建一个Transport, channel_name没有对应的XMPP stanza, 其值有"rtp", "rtcp"等.

?

4.

一个TransportChannel(主要是P2PTransportChannel)管理多个Port:

class P2PTransportChannel {  std::vector<Port *> ports_;}

?

Port分为StunPort, TCPPort, UDPPort等, 与<transport>元素的xmlns属性值(如"urn:xmpp:jingle:transports:ice-udp:1")以及子元素<candidate>的protocol属性值(如"udp")有关.

?

5.

一个Port管理多个Connection:

class Port {  typedef std::map<talk_base::SocketAddress, Connection*> AddressMap;  AddressMap connections_;}

?

6.

一个Connection包括一个local_candidate和一个remote_candidate:

class Connection

class Connection {  size_t local_candidate_index_;  Candidate remote_candidate_;}

热点排行