示例程序解读

阅读更多
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)

你可能感兴趣的:(Servlet,JSP,浏览器,多线程,数据结构)