HttpSessionßàSipSession
(1)HttpSessionàSipSession的方法:
import javax.servlet.sip.ConvergedHttpSession;
import javax.servlet.sip.SipApplicationSession;
import javax.servlet.sip.SipSession;
ConvergedHttpSession chs = (ConvergedHttpSession) httpReq.getSession();
SipApplicationSession sas = chs.getApplicationSession();
Iterator sipSessions = sas.getSessions("SIP");
(2)HttpSessionßSipSession的方法:
目前,还没有找到明确讲解SipSessionàHttpSession的理论方法或示例代码。是不是可以这样:如果已知某SipApplicationSession是converged的,则执行以下代码找到HTTP Session。
个人想法。
SipSession ss = sipReq.getSession();
SipApplicationSession sas = ss.getApplicationSession();
Iterator httpSessions = sas.getSessions("HTTP");
use case
举例的聚合应用包含一个HTTP Servlet(ClickToDialServlet)和一个SIP Servlet(CallServlet),下面主要针对HTTP Servlet进行说明,因为它与ConvergedHttpSession的使用相关。
ClickToDialServlet允许初始化和结束一个SIP呼叫。示例代码如下:
@Resource(mappedName = "sip/convergedapp")
private SipFactory sipFactory;
public class ClickToDialServlet extends HttpServlet {
public void doGet(HttpServletRequest httpReq, HttpServletResponse httpRes)
throws ServletException, IOException {
// 初始化或结束一个SIP呼叫,取决于请求参数"action"的值
String action = httpReq.getParameter("action");
if (action.equals("call")) {
initiateSipCall(httpReq, httpRes);
} else if (action.equals("bye")) {
terminateSipCall(httpReq, httpRes);
} else {
throw new ServletException("Invalid action");
}
}
[...]
}
/**
* 初始化一个SIP call
*/
private void initiateSipCall(HttpServletRequest httpReq, HttpServletResponse httpRes) throws ServletException, IOException {
// 由一个HTTP请求生成一个新的ConvergedHttpSession
ConvergedHttpSession chs = (ConvergedHttpSession) httpReq.getSession();
// 由ConvergedHttpSession生成一个新的SipApplicationSession,并将二者关联起来。
SipApplicationSession sas = chs.getApplicationSession();
// 生成SIP URI
String localIp = InetAddress.getLocalHost().getAddress().toString();
Address fromAddr = sipFactory.createAddress("sip:foo@" + localIp + ":" + System.getProperty("SIP_PORT"));
Address toAddr = sipFactory.createAddress("sip:bar@" + httpReq.getParameter("remoteIp") + ":" + httpReq.getParameter("remotePort"));
// 生成SIP INVITE请求,此处请求是与SipApplicationSession相关的。
SipServletRequest sipReq = sipFactory.createRequest(sas, "INVITE", fromAddr, toAddr);
// 由SIP请求生成一个SipSession
SipSession sipSession = sipReq.getSession();
// 所有与新的SipSession相关的请求和响应都将交由聚合应用的CallServlet来处理
sipSession.setHandler("CallServlet");
// 将SipSession的id作为一个session属性"CallId"存储到SipApplicationSession中,从而保证稍后可以找到SipSession,结束呼叫。
sas.setAttribute("CallId", sipSession.getId());
// 发送请求
sipReq.send();
// 返回一个用于结束呼叫的web form
PrintWriter out = httpRes.getWriter();
out.println("<form action=\"ClickToDialServlet\" method=\"GET\">");
out.println("<input type=\"hidden\" name=\"action\" value=\"bye\"/>");
out.println("<input type=\"submit\" value=\"Terminate call\"/>");
out.println("</form>");
}
/**
* 结束一个SIP call.
*/
private void terminateSipCall(HttpServletRequest httpReq, HttpServletResponse httpRes) throws ServletException, IOException {
// 维护ConvergedHttpSession,根据与请求一起发送的JSESSIONID cookie进行识别
ConvergedHttpSession chs = (ConvergedHttpSession) httpReq.getSession(false);
// 得到SipApplicationSession
SipApplicationSession sas = chs.getApplicationSession();
// 得到"CallId"属性对应的SipSession
SipSession sipSession = sas.getSipSession((String) sas.getAttribute("CallId"));
// 发送BYE请求结束呼叫
sipSession.createRequest("BYE").send();
}
参考:http://blogs.sun.com/jluehe/entry/converged_http_sessions_in_sailfin
分享到:
相关推荐
This test document specifies test methodologies and performance criteria for the RF performance evaluation of WiFi mobile converged devices. The scope of testing includes Handheld, self-contained Wi-...
### Telecommunications and Internet Converged Services and Protocols for Advanced Networking (TISPAN): Business Communication Requirements #### 概述 《Telecommunications and Internet converged ...
Nortel Converged Office for Communication Server 1000是Nortel公司开发的一款综合通讯解决方案,旨在帮助企业用户整合其电话基础设施和桌面统一通信应用,以实现高效、便捷的统一通信。通过该方案,可以将Nortel...
Lenovo Converged HX Series 是联想推出的一系列融合基础设施解决方案,旨在帮助企业简化IT基础设施管理,降低成本,并提高运营效率。这些设备集成了计算、存储、网络和管理功能,以提供一个全面的、易于使用的数据...
IBM Converged Switch B32 (3758) 是一款专为数据中心设计的高性能交换机,主要用于实现网络和存储的融合。这款交换机具备24个万兆以太网端口,支持Converged Enhanced Ethernet (CEE),以及8个8 Gbps的光纤通道端口...
《IMS多媒体电话在移动系统中的应用——融合通信世界中的VoIP演进》是Wiley出版社在2007年发布的一本专著,它深入探讨了VoIP技术在移动通信领域的演变及其与传统电信网络的融合。这本书的核心内容涵盖了IMS(IP...
in which the techniques of cooperative communication and wireless relay are utilized to improve performances of the individual user and the overall converged networks. In order to evaluate the ...
Lenovo Converged HX Series 是一款融合基础设施解决方案,它在市场中面临着来自不同竞争对手的挑战,主要包括在超融合和融合领域的产品。本篇将详细分析这些竞争对手的特点和不足,以便更好地理解Lenovo HX系列的...
驱动 HP NC553i 10Gb 2-port FlexFabric Converged Network Adapter,2008 r2
A new metasurface design is used to generate the vortex beam, in which the required accumulated phase difference along the propagation path is realized by designing and arranging artificial single-...
内容概要:本文档详细阐述了PCI Express、SATA、USB 3.1、DisplayPort以及Converged IO架构的物理层接口(PHY)。它包括PHY层的工作原理、各协议的数据传输速率及其接口信号的具体定义。文中还特别强调了PIPE架构,...
"藏经阁-How Spark is Enabling the New Wave of Converged Applications" Spark 是一种基于内存的数据处理引擎,它可以使得数据处理速度大幅提升,并且支持实时数据处理和批量数据处理。Spark 的出现使得新一代...
6. **turbulent viscosity limited to viscosity ratio of 1.000000e+5 in**: - 湍流粘性超过限制,可能因初始条件、湍流边界条件或高扭曲度网格引起。解决方法包括优化网格,调整湍流模型的初始条件和边界条件,...
"Obtaining a Converged Solution with Abaqus" 是一本专门针对Abaqus求解收敛问题的培训教材,旨在帮助用户理解和解决在进行有限元分析时遇到的收敛挑战。 教程分为两天的内容,涵盖了多个主题和工作坊,以理论...
iNOF,即智能网络优化功能,是华为推出的一种创新技术,结合了RoCE(RDMA over Converged Ethernet,远程直接内存访问通过融合以太网)和SAN(存储区域网络)的优势,旨在解决传统金融业务中的存储效率和稳定性问题...
VMware VSP (vSphere Virtual San Policy) 是 VMware 提供的一种超融合基础设施(Hyper-Converged Infrastructure, HCI)解决方案的核心组件。在2020年的评估中,它着重考察了用户对VMware HCI平台的理解、配置和...
• Support added for TerraStar-C correction data which enables better converged accuracy and faster re-convergence • Steadyline now provides smooth transitions, between solution types in BESTPOS, ...
E6000融合边缘路由器是一款先进的网络设备,它在设计上继承了C4 CMTS(电缆调制解调器终端系统)的优良特性,同时针对高密度市场需求进行了优化,实现了更高的性能和成本效益。这款路由器是面向现代通信网络的解决...