f. SIP没有会议控制能力 , 所以仅仅只能做到点对点的媒体通讯 , 而H.323一开始就考虑了会议功能 , 其中还包含了H.332会议控制协议 。(Vocal提供了一个Conferencing Server可以做普通的会议控制) 。
g. 基于无线的网络而言 , H.323有很大优势 , 由于信令采用了二进制编码 , 所以比较适合手持设备实现 , 而SIP由于采用了文本方式就没有这样的能力 。
三.本文的主要内容
和RTH323的介绍一样 , 我在下面将会尽量具体的分析一下Vocal的整个原代码 , 当然不可能做到完全系统地向大家展示Vocal的精妙之处 , 其实我自己对这个协议栈还是有相当多不了解的地方 , 希望大家能对我们的研究提出宝贵意见 , 后续的文章将会以连载的方式对Vocal进行介绍 , 顺序如下:
3.1 Vovida User Agent:
3.2 Vovida Provision Server:
3.3 Marshal Server;
3.4 Redirect Server;
3.5 HeartBeat Server:
3.6 Policy Server:
3.7 CDR Server:
3.8 Network Manager:
3.9 Feature Server:
3.10 Translator Server:
我们现在可以开始进入Vovida的第一个实体的介绍--User Agent
User Agent
1.User Agent的简介:
User Agent是描述一个普通的用户终端 , 用户代理 , 以下都简称UA端 。本身来说UA端的代码在Linux或者是Windows上都可以编译运行 。在Vocal中资料最具体是User Agent的介绍了 , 有关UA描述的所有的代码部分部分集中在SIPUA目录下面 , SIP的Stack软件主要集中在SIPSIPSTACK , SIP消息和状态的基类描述主要集中在SIPBASE;大家假如对SIP的状态和命令不是非常熟悉的话 , 可以进入SIPUA目录下浏览以下的几个线图:
1. UaOverView.gif:
对于UA中全部的主要类的关系描述 , 主要是展现了一些比较重要的基类 。
2. UaSimpleStatesComplet.gif
UA端的一个简单的呼叫和应答的全部命令和状态的交互示意图 。
3. Ua-States.gif
UA状态迁移的示意图 。
另外在UA中我们会把基本的SIPStack的一些调用做一下具体的介绍 , 所以篇幅可能会比较长 。
下面是一些所使用到的SIP基本的类的介绍:
HeartlessProxy :创建了一个容纳呼叫的"容器" , 和SIP的消息堆栈 , 以及WorkThread和SipThread(用于对SIP消息的队列处理),由HeartlessProxy::Run()方法调用这写线程的Run方法 , 使他们启动 。该类的初始化是用一个Builder的基本类对它进行实例化 。
BasicProxy:由源自HeartlessProxy , 它让系统使用HeartBeat机制 , 在这个类中创建了三个HeartBeat类型的线程:HeartbeatTxThread , HeartbeatRxThread , HouseKeepingThread , 不过暂时在Ua中都没有应用到 , 一般是用在HeartBeat Server中(注:HeartBeat的机制就是指在Vocal的Server集群通过多播端口向HeartBeat Server发送HeartBeat数据报 , 假如在指定的时间内没有收到该数据报 , 那么认为该服务器处于Down状态 , 由HeartbeatServer发送状态消息到SNMP网管 , 同时启动备份设备 , 这个机制类似于BGP,EIGRP协议中的后备路由方案) 。
SipThread:SipThread源自ThreadIf(Thread Interface) , 主要作用是接收并且在sipstack对所收到的SIP消息排队 , 并且对接收的SipMsg(SIP消息)产生相应的Sip本地处理事件SipEvent , 并且把他们放置在一个Fifo队列中等待处理 , SipThread::thread()是循环处理的线程 。
WorkerThread:和SipThread一样 , 它也是源自ThreadIf , 主要作用在于接受并且列队处理上面SipThread收到的Sip本地处理事件SipEvent 。
Builder:是一个基本类 , 它由WorkerThread调用 , 在这个类中包含了针对用户代理的CallContainer(包含所收到的各种呼叫信息)类的指针 , 从代码上看Builder在HeartLessProxy/BasicProxy被创建的时候创建 。
推荐阅读
- 移动定向流量指定的软件怎么查
- vcc和vdd的区别
- 如何去除衣服上的火锅味道
- 杨万里是哪个朝代的诗人 杨万里是什么人
- 黑头和粉刺的区别有哪些
- 净水机不往储水罐进水净水机的储水罐无法进水
- xl适合多少斤的人穿
- TCP/IP协议中的三个参数
- 女朋友生气了该怎么哄?
- 生猪喂红薯能催膘
