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;  
 | 
    }  
 | 
      
 | 
      
 | 
}  
 |