/* * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.mobicents.servlet.sip.testsuite; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.servlet.ServletException; import javax.servlet.sip.B2buaHelper; import javax.servlet.sip.SipFactory; import javax.servlet.sip.SipServlet; import javax.servlet.sip.SipServletRequest; import javax.servlet.sip.SipServletResponse; import javax.servlet.sip.SipSession; import javax.servlet.sip.SipURI; import org.apache.log4j.Logger; public class B2BUASipServlet extends SipServlet { private static final long serialVersionUID = 1L; private static transient Logger logger = Logger.getLogger(B2BUASipServlet.class); @Override protected void doInvite(SipServletRequest request) throws ServletException, IOException { logger.info("Got request:\n" + request); Map<String, List<String>> headers=new HashMap<String, List<String>>(); List<String> toHeaderList = new ArrayList<String>(); toHeaderList.add("sip:aa@sip-servlets.com"); headers.put("To", toHeaderList); B2buaHelper helper = request.getB2buaHelper(); SipServletRequest forkedRequest = helper.createRequest(request, true, headers); SipFactory sipFactory = (SipFactory) getServletContext().getAttribute( SIP_FACTORY); SipURI sipUri = (SipURI) sipFactory.createURI("sip:aa@127.0.0.1:5059"); forkedRequest.setRequestURI(sipUri); if (logger.isDebugEnabled()) { logger.debug("forkedRequest = " + forkedRequest); } forkedRequest.getSession().setAttribute("originalRequest", request); forkedRequest.send(); } /** * {@inheritDoc} */ protected void doResponse(SipServletResponse sipServletResponse) throws ServletException, IOException { logger.info("Got : " + sipServletResponse.getStatus() + " " + sipServletResponse.getMethod()); int status = sipServletResponse.getStatus(); if (status == SipServletResponse.SC_OK) { String cSeqValue = sipServletResponse.getHeader("CSeq"); //if this is a response to an INVITE we ack it and forward the OK if(cSeqValue.indexOf("INVITE") != -1) { SipServletRequest ackRequest = sipServletResponse.createAck(); ackRequest.send(); B2buaHelper helper = sipServletResponse.getRequest().getB2buaHelper(); //create and sends OK for the first call leg SipSession originalSession = helper.getLinkedSession(sipServletResponse.getSession()); SipServletResponse responseToOriginalRequest = helper.createResponseToOriginalRequest(originalSession, sipServletResponse.getStatus(), "OK"); responseToOriginalRequest.send(); } } else { super.doResponse(sipServletResponse); } } /** * * {@inheritDoc} */ @Override protected void doBye(SipServletRequest request) throws ServletException, IOException { logger.info("Got BYE: " + request.getMethod()); SipServletResponse response = request.createResponse(200); response.send(); SipSession session = request.getSession(); SipSession linkedSession = request.getB2buaHelper().getLinkedSession(session); SipServletRequest newRequest = linkedSession.createRequest("BYE"); logger.info(newRequest); newRequest.send(); } @Override protected void doCancel(SipServletRequest request) throws ServletException, IOException { logger.info("Got CANCEL: " + request.toString()); SipSession session = request.getSession(); B2buaHelper b2buaHelper = request.getB2buaHelper(); SipSession linkedSession = b2buaHelper.getLinkedSession(session); SipServletRequest originalRequest = (SipServletRequest)linkedSession.getAttribute("originalRequest"); SipServletRequest cancelRequest = b2buaHelper.getLinkedSipServletRequest(originalRequest).createCancel(); logger.info("forkedRequest = " + cancelRequest); cancelRequest.send(); } }