|  |  |  | 
|---|
|  |  |  | import javax.sip.message.Request; | 
|---|
|  |  |  | import javax.sip.message.Response; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import com.alibaba.fastjson.JSON; | 
|---|
|  |  |  | import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommanderFroPlatform; | 
|---|
|  |  |  | import com.genersoft.iot.vmp.media.zlm.ZLMRTPServerFactory; | 
|---|
|  |  |  | import com.genersoft.iot.vmp.storager.IRedisCatchStorage; | 
|---|
|  |  |  | import com.genersoft.iot.vmp.gb28181.transmit.response.impl.*; | 
|---|
|  |  |  | import org.slf4j.Logger; | 
|---|
|  |  |  | import org.slf4j.LoggerFactory; | 
|---|
|  |  |  | import com.genersoft.iot.vmp.service.IPlayService; | 
|---|
|  |  |  | import org.springframework.beans.factory.annotation.Autowired; | 
|---|
|  |  |  | import org.springframework.beans.factory.annotation.Qualifier; | 
|---|
|  |  |  | import org.springframework.context.annotation.Lazy; | 
|---|
|  |  |  | import org.springframework.stereotype.Component; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import com.genersoft.iot.vmp.conf.SipConfig; | 
|---|
|  |  |  | 
|---|
|  |  |  | import com.genersoft.iot.vmp.gb28181.transmit.request.impl.CancelRequestProcessor; | 
|---|
|  |  |  | import com.genersoft.iot.vmp.gb28181.transmit.request.impl.InviteRequestProcessor; | 
|---|
|  |  |  | import com.genersoft.iot.vmp.gb28181.transmit.request.impl.MessageRequestProcessor; | 
|---|
|  |  |  | import com.genersoft.iot.vmp.gb28181.transmit.request.impl.NotifyRequestProcessor; | 
|---|
|  |  |  | import com.genersoft.iot.vmp.gb28181.transmit.request.impl.OtherRequestProcessor; | 
|---|
|  |  |  | import com.genersoft.iot.vmp.gb28181.transmit.request.impl.RegisterRequestProcessor; | 
|---|
|  |  |  | import com.genersoft.iot.vmp.gb28181.transmit.request.impl.SubscribeRequestProcessor; | 
|---|
|  |  |  | import com.genersoft.iot.vmp.gb28181.transmit.response.ISIPResponseProcessor; | 
|---|
|  |  |  | import com.genersoft.iot.vmp.gb28181.transmit.response.impl.ByeResponseProcessor; | 
|---|
|  |  |  | import com.genersoft.iot.vmp.gb28181.transmit.response.impl.CancelResponseProcessor; | 
|---|
|  |  |  | import com.genersoft.iot.vmp.gb28181.transmit.response.impl.InviteResponseProcessor; | 
|---|
|  |  |  | import com.genersoft.iot.vmp.gb28181.transmit.response.impl.OtherResponseProcessor; | 
|---|
|  |  |  | import com.genersoft.iot.vmp.storager.IVideoManagerStorager; | 
|---|
|  |  |  | import com.genersoft.iot.vmp.utils.SpringBeanFactory; | 
|---|
|  |  |  | import com.genersoft.iot.vmp.utils.redis.RedisUtil; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * @Description:TODO(这里用一句话描述这个类的作用) | 
|---|
|  |  |  | * @Description: SIP信令处理分配 | 
|---|
|  |  |  | * @author: swwheihei | 
|---|
|  |  |  | * @date:   2020年5月3日 下午4:24:37 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | @Component | 
|---|
|  |  |  | public class SIPProcessorFactory { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | private final static Logger logger = LoggerFactory.getLogger(SIPProcessorFactory.class); | 
|---|
|  |  |  | // private final static Logger logger = LoggerFactory.getLogger(SIPProcessorFactory.class); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private SipConfig sipConfig; | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private IVideoManagerStorager storager; | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private IRedisCatchStorage redisCatchStorage; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private EventPublisher publisher; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private SIPCommander cmder; | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private SIPCommanderFroPlatform cmderFroPlatform; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private RedisUtil redis; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | private CancelResponseProcessor cancelResponseProcessor; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | @Lazy | 
|---|
|  |  |  | private RegisterResponseProcessor registerResponseProcessor; | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private OtherResponseProcessor otherResponseProcessor; | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private IPlayService playService; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private ZLMRTPServerFactory zlmrtpServerFactory; | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 注:这里使用注解会导致循环依赖注入,暂用springBean | 
|---|
|  |  |  | private SipProvider tcpSipProvider; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | Request request = evt.getRequest(); | 
|---|
|  |  |  | String method = request.getMethod(); | 
|---|
|  |  |  | //      logger.info("接收到消息:"+request.getMethod()); | 
|---|
|  |  |  | //      sipSubscribe.getSubscribe(evt.getServerTransaction().getBranchId()).response(evt); | 
|---|
|  |  |  | if (Request.INVITE.equals(method)) { | 
|---|
|  |  |  | InviteRequestProcessor processor = new InviteRequestProcessor(); | 
|---|
|  |  |  | processor.setRequestEvent(evt); | 
|---|
|  |  |  | processor.setTcpSipProvider(getTcpSipProvider()); | 
|---|
|  |  |  | processor.setUdpSipProvider(getUdpSipProvider()); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | processor.setCmder(cmder); | 
|---|
|  |  |  | processor.setCmderFroPlatform(cmderFroPlatform); | 
|---|
|  |  |  | processor.setPlayService(playService); | 
|---|
|  |  |  | processor.setStorager(storager); | 
|---|
|  |  |  | processor.setRedisCatchStorage(redisCatchStorage); | 
|---|
|  |  |  | processor.setZlmrtpServerFactory(zlmrtpServerFactory); | 
|---|
|  |  |  | return processor; | 
|---|
|  |  |  | } else if (Request.REGISTER.equals(method)) { | 
|---|
|  |  |  | RegisterRequestProcessor processor = new RegisterRequestProcessor(); | 
|---|
|  |  |  | 
|---|
|  |  |  | } else if (Request.ACK.equals(method)) { | 
|---|
|  |  |  | AckRequestProcessor processor = new AckRequestProcessor(); | 
|---|
|  |  |  | processor.setRequestEvent(evt); | 
|---|
|  |  |  | processor.setRedisCatchStorage(redisCatchStorage); | 
|---|
|  |  |  | processor.setZlmrtpServerFactory(zlmrtpServerFactory); | 
|---|
|  |  |  | return processor; | 
|---|
|  |  |  | } else if (Request.BYE.equals(method)) { | 
|---|
|  |  |  | ByeRequestProcessor processor = new ByeRequestProcessor(); | 
|---|
|  |  |  | processor.setRequestEvent(evt); | 
|---|
|  |  |  | processor.setRedisCatchStorage(redisCatchStorage); | 
|---|
|  |  |  | processor.setZlmrtpServerFactory(zlmrtpServerFactory); | 
|---|
|  |  |  | processor.setSIPCommander(cmder); | 
|---|
|  |  |  | return processor; | 
|---|
|  |  |  | } else if (Request.CANCEL.equals(method)) { | 
|---|
|  |  |  | CancelRequestProcessor processor = new CancelRequestProcessor(); | 
|---|
|  |  |  | processor.setRequestEvent(evt); | 
|---|
|  |  |  | return processor; | 
|---|
|  |  |  | } else if (Request.MESSAGE.equals(method)) { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | MessageRequestProcessor processor = new MessageRequestProcessor(); | 
|---|
|  |  |  | processor.setRequestEvent(evt); | 
|---|
|  |  |  | processor.setTcpSipProvider(getTcpSipProvider()); | 
|---|
|  |  |  | 
|---|
|  |  |  | processor.setDeferredResultHolder(deferredResultHolder); | 
|---|
|  |  |  | processor.setOffLineDetector(offLineDetector); | 
|---|
|  |  |  | processor.setCmder(cmder); | 
|---|
|  |  |  | processor.setCmderFroPlatform(cmderFroPlatform); | 
|---|
|  |  |  | processor.setStorager(storager); | 
|---|
|  |  |  | processor.setRedisCatchStorage(redisCatchStorage); | 
|---|
|  |  |  | return processor; | 
|---|
|  |  |  | } else if (Request.NOTIFY.equalsIgnoreCase(method)) { | 
|---|
|  |  |  | NotifyRequestProcessor processor = new NotifyRequestProcessor(); | 
|---|
|  |  |  | processor.setRequestEvent(evt); | 
|---|
|  |  |  | processor.setTcpSipProvider(getTcpSipProvider()); | 
|---|
|  |  |  | processor.setUdpSipProvider(getUdpSipProvider()); | 
|---|
|  |  |  | processor.setPublisher(publisher); | 
|---|
|  |  |  | processor.setRedis(redis); | 
|---|
|  |  |  | processor.setDeferredResultHolder(deferredResultHolder); | 
|---|
|  |  |  | processor.setOffLineDetector(offLineDetector); | 
|---|
|  |  |  | processor.setCmder(cmder); | 
|---|
|  |  |  | processor.setStorager(storager); | 
|---|
|  |  |  | processor.setRedisCatchStorage(redisCatchStorage); | 
|---|
|  |  |  | return processor; | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | return new OtherRequestProcessor(); | 
|---|
|  |  |  | OtherRequestProcessor processor = new OtherRequestProcessor(); | 
|---|
|  |  |  | processor.setRequestEvent(evt); | 
|---|
|  |  |  | return processor; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public ISIPResponseProcessor createResponseProcessor(ResponseEvent evt) { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | Response response = evt.getResponse(); | 
|---|
|  |  |  | CSeqHeader cseqHeader = (CSeqHeader) response.getHeader(CSeqHeader.NAME); | 
|---|
|  |  |  | String method = cseqHeader.getMethod(); | 
|---|