CallSetup
1) 首先,UAC向RegistrarServlet注册,RegistrarServlet继承SipServlet,doRegister ()对注册请求进行处理,其间,会对expires头进行判断请求是否过期;如果获得contact头,则response会发送200 ok给contact头,否则会发给from头,最后持久化to ,contact, expires到Registration。
2)注册完后,用户通过浏览器即可浏览已经注册的信息,ListWebServlet负责显示所有注册的用户信息,它继承自HttpServlet,通过持久层获得所有注册信息然后显示在页面上。
3)任意选择两个注册的用户来作为呼叫双方,发送会话建立请求,SipCallSetupServlet处理请求,进行双方的呼叫建立。
4)B2BCallServlet,继承SipServlet,doRequest()处理接收到的呼叫建立请求,双方呼叫建立。
5)PresenceServlet,继承SipServlet,处理关于在线状态的请求,包括在线状态的订阅、发布。
ClickToDial
1)index.jsp:选择用户,login界面。http://135.252.18.59:8080/ClickToDial
2)main.jsp:显示用户名单,并有call的一个click链接。
http://135.252.18.59:8080/ClickToDial/main.jsp
3)LoginServlet:HTTP Servlet,处理/login请求。
4)placeCallServlet:HTTP Servlet,处理/placecall请求。生成Invite请求,记录会话发起方的地址,生成SDP会话。
5)RegistrarServlet:SIP Servlet,处理注册请求doRegister()
6)CallSipServlet:SIP Servlet。实现了SipSessionListener接口。处理BYE请求和200 OK响应。
7)ModelFacade:实现ServletContextListener接口,上下文初始化、增加/删除用户、获取用户信息等。
8)Person:实现Serializable接口,功能:获取/设置用户名,获取/设置电话号码。
目前,数据库中只存有两个用户名:Alice和Bob。以Alice(或Bob)在界面上login,即显示出当前用户Alice及所有用户信息,包括Name、SIP URI和“call”的链接。选用客户端X-Lite进行测试,将用户名设为Alice(或Bob),注册,即可在main.jsp中显示出注册用户的SIP URI。点击“call”即可与Bob建立连接。
VideoShare
代码结构非常简单,只有四个源文件。
1) VideoShareSession:定义了VideoShareSession类
2) SipServletClass:SIP Servlet。处理SIP信令。doInvite()、doAck()、doBye()、doResponse()
3) RtspRequest:实现了Runnable接口,多线程。处理实时媒体流。
4) Utils:被RtspRequest类中的方法调用。
PersonalAssistant
参考http://dev2dev.bea.com.cn/techdoc/20060815866.html,实现原理的个人理解如下:
1)AssistantSipServlet:请求到来,进行处理。
Invite:
① 返回100 trying给UAC
② 创建一个SipApplicationSession实例
③ 创建一个AssistedCall实例
④ startAssistedCall()
à 创建一个CallerToVMSCall实例(第一种呼叫流模式CallerToVMSCall)
à startCall()
à 创建一个IMediaController接口称为mediaController,真正实现是
SipVxmlMediaController
à createVxmlSession()
à connectVxmlSession()
Request:
① 生成ISipDialog,其中ISipDialog是一个接口,实现它的类是
SipMediaControllerAdapter
② 将SIP消息传给mediaController
③ doSipServletMessage()
à doSipServletRequest()
à 方法为“BYE”,生成200 OK,send()
Response:
① 生成ISipDialog,其中ISipDialog是一个接口,实现它的类是
SipMediaControllerAdapter
② 将SIP消息传给mediaController
③ doSipServletMessage()
à doSipServletResponse()
à 响应是200 OK,分INVITE和BYE两种方法来处理
à 响应大于等于400,处理
2)AssistantHttpServlet:请求到来,进行处理。Service()
对”action”分情况处理:
à web浏览器的请求控制器,dispatch()
à MRF的HTTP请求控制器,触发关联的AssistedCall对象
à doCalleeChoice()
à transferCallerToValediction()(第四种呼叫流模式CallerValedictionTransfer)
à transferCallerToCallee()(第三种呼叫流模式CallerCalleeTransfer)
à doRecordCallerName()
à call.locateCallee()
à tryNextDeviceURI()
à new CalleeToVMSCall()(第二种呼叫流模式CalleeToVMSCall)
分享到:
相关推荐
根据提供的文件信息,本文将对“ATT7022示例程序”进行深入解析,主要聚焦于以下几个方面:ATT7022芯片简介、程序设计背景、关键代码解读以及涉及的技术点。 ### 一、ATT7022芯片简介 ATT7022是一款高性能的三相...
为了帮助工程师们更好地掌握汇川H5U控制器在实际应用中的操作技巧,本文将提供一个针对汇川H5U的轴控应用的简单示例程序,详细解读总线伺服轴配置、本地编码器轴配置和本地脉冲轴配置的步骤与技巧。 首先,总线伺服...
《lingo讲义及示例程序》是一份包含详尽教程和实践案例的资源包,主要针对使用lingo软件进行优化问题求解的学习者。Lingo是一款强大的数学建模语言和求解器,广泛应用于运筹学、管理科学、工程优化等领域。本资源包...
5. **示例程序解读**:该示例程序首先读取Big5编码的文件内容,然后使用`StrConv`函数将其转换为Unicode,再进一步转换为GBK编码,并将结果写回原文件。 #### 结论 通过上述分析可以看出,VB6内置的`StrConv`函数...
示例程序解读 虽然未能直接获取到具体的程序代码,但从“Quadrature Input for Standard CPM1A DC Inputs”这一标题来看,该程序应该包括了上述所有关键步骤。为了更好地理解程序的实现细节,我们可以参考一般性的...
#### 示例程序解读 以下是一个使用C#实现的示例程序: 1. **数据准备:** - 用户名和密码转换为字节数组。 - 获取当前日期和时间。 - 构建密钥和IV。 2. **加密过程:** - 初始化AES对象,并设置密钥和IV。 ...
斯凯MRP示例程序SGL框架是一种专为MRP(物料需求计划)设计的软件开发框架,旨在简化和加速企业资源规划系统中的物料管理部分的开发过程。这个框架是斯凯公司为开发者提供的工具,它包含了一系列预先设计的组件和...
《Windows程序设计示例》这个压缩包文件包含了多个章节的示例程序,旨在帮助学习者深入理解Windows平台上的程序设计。这些章节涵盖了从基础到高级的多种技术,为程序员提供了丰富的实践素材。以下是对每个章节内容的...
`说明.txt`文件可能包含了关于如何运行这个示例程序,以及如何解读结果的详细说明。在实际操作中,理解信号的频率成分对于识别信号特征、噪声滤波、信号恢复等任务至关重要。 FFT的应用广泛,包括音频分析、图像...
《Pushlet官方示例解读与改造》 Pushlet是一种基于HTTP长轮询技术的轻量级推送服务,它允许服务器主动向客户端推送数据,而无需客户端持续发起请求。这种技术在实时性要求较高的应用场景,如在线聊天、股票更新、...
文件"MPU6050九轴示例程序 ..doc"很可能是程序的详细说明文档,包含有如何编译、运行程序,以及如何解读和利用输出结果的指导。文档中可能会介绍如何设置I2C通信接口,连接MPU6050和地磁传感器,以及如何配置DMP以...
通过学习"DEA入门讲义和示例程序",不仅可以掌握DEA的基本原理,还能掌握如何在实际问题中运用DEA进行数据分析和决策支持。对于管理者、经济学家、运筹学爱好者来说,这是一份非常有价值的资料。
【QTP示例程序业务篇解】是针对自动化测试工具QuickTest Professional(QTP)的一份深入学习资源,尤其侧重于在实际业务场景中的应用。QTP,现已被命名为UFT(Unified Functional Testing),是HP公司开发的一款功能...
本示例程序是基于MATLAB实现的,它提供了对信号频谱进行分析的功能。让我们深入探讨这个话题。 首先,MATLAB是一种强大的计算环境,尤其适合于数值计算、符号计算以及数据可视化。在信号处理领域,MATLAB的函数库...
4. **程序结构**:示例程序可能包括初始化设置、周期性扫描和中断服务子程序,这些是PLC程序的基本组成部分,用于实时监控和控制模拟量输入。 5. **模拟量数据的应用**:处理后的模拟量数据可能被用来控制执行器、...
《TMS320F28x源码解读——深入理解数字信号处理器的精髓》 在数字信号处理领域,TMS320F28x系列芯片因其高性能、低功耗的特点,被广泛应用于各种复杂系统中,如工业自动化、电力控制、通信设备等。这些系统的核心...
该文件很可能是对上述程序示例的操作指南或技术文档,它为工程师提供了详细的使用指导,包括如何将示例程序下载到PLC、如何配置通信参数,以及在实际操作中可能遇到的问题和相应的解决办法。对于初学者来说,这一...
在USB3.0的设计资源中,Cypress芯片程序的解读涉及了同步FIFO机制、DMA(直接内存访问)回调函数的注册与处理、USB设备配置以及端点的配置和管理等多个关键知识点。 首先,同步FIFO(First In, First Out)是一种...
在"三分之一倍频程程序解读.zip"压缩包中,包含了多个.gif图像文件,这些图像可能展示了频谱分析的结果,或者程序操作界面的示例。此外,"参考.txt"文件可能是对程序的使用指南或技术文档,其中包含了对程序操作的...
蜂笤的fu6818无传感器风机方案源代码