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

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

转载自: http://mysuperbaby.iteye.com/blog/932449

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_;
}


 

你可能感兴趣的:([Libjingle代码分析]对照Jingle的XMPP stanza理解Libjingle的几个关键数据结构)