package com.genersoft.iot.vmp.gb28181.transmit.request; import javax.sip.PeerUnavailableException; import javax.sip.RequestEvent; import javax.sip.ServerTransaction; import javax.sip.SipFactory; import javax.sip.SipProvider; import javax.sip.TransactionAlreadyExistsException; import javax.sip.TransactionUnavailableException; import javax.sip.address.AddressFactory; import javax.sip.header.HeaderFactory; import javax.sip.header.ViaHeader; import javax.sip.message.MessageFactory; import javax.sip.message.Request; import gov.nist.javax.sip.SipStackImpl; import gov.nist.javax.sip.message.SIPRequest; import gov.nist.javax.sip.stack.SIPServerTransaction; /** * @Description:处理接收IPCamera发来的SIP协议请求消息 * @author: songww * @date: 2020年5月3日 下午4:42:22 */ public abstract class SIPRequestAbstractProcessor implements ISIPRequestProcessor { protected RequestEvent evt; private SipProvider tcpSipProvider; private SipProvider udpSipProvider; @Override public void process() { this.process(evt); } public abstract void process(RequestEvent evt); public ServerTransaction getServerTransaction(RequestEvent evt) { Request request = evt.getRequest(); ServerTransaction serverTransaction = evt.getServerTransaction(); // 判断TCP还是UDP boolean isTcp = false; ViaHeader reqViaHeader = (ViaHeader) request.getHeader(ViaHeader.NAME); String transport = reqViaHeader.getTransport(); if (transport.equals("TCP")) { isTcp = true; } if (serverTransaction == null) { try { if (isTcp) { SipStackImpl stack = (SipStackImpl)tcpSipProvider.getSipStack(); serverTransaction = (SIPServerTransaction) stack.findTransaction((SIPRequest)request, true); if (serverTransaction == null) { serverTransaction = tcpSipProvider.getNewServerTransaction(request); } } else { SipStackImpl stack = (SipStackImpl)udpSipProvider.getSipStack(); serverTransaction = (SIPServerTransaction) stack.findTransaction((SIPRequest)request, true); if (serverTransaction == null) { serverTransaction = udpSipProvider.getNewServerTransaction(request); } } } catch (TransactionAlreadyExistsException e) { e.printStackTrace(); } catch (TransactionUnavailableException e) { e.printStackTrace(); } } return serverTransaction; } public AddressFactory getAddressFactory() { try { return SipFactory.getInstance().createAddressFactory(); } catch (PeerUnavailableException e) { e.printStackTrace(); } return null; } public HeaderFactory getHeaderFactory() { try { return SipFactory.getInstance().createHeaderFactory(); } catch (PeerUnavailableException e) { e.printStackTrace(); } return null; } public MessageFactory getMessageFactory() { try { return SipFactory.getInstance().createMessageFactory(); } catch (PeerUnavailableException e) { e.printStackTrace(); } return null; } public RequestEvent getRequestEvent() { return evt; } public void setRequestEvent(RequestEvent evt) { this.evt = evt; } public SipProvider getTcpSipProvider() { return tcpSipProvider; } public void setTcpSipProvider(SipProvider tcpSipProvider) { this.tcpSipProvider = tcpSipProvider; } public SipProvider getUdpSipProvider() { return udpSipProvider; } public void setUdpSipProvider(SipProvider udpSipProvider) { this.udpSipProvider = udpSipProvider; } }