|  |  |  | 
|---|
|  |  |  | import javax.sip.message.Request; | 
|---|
|  |  |  | import javax.sip.message.Response; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 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 org.slf4j.Logger; | 
|---|
|  |  |  | import org.slf4j.LoggerFactory; | 
|---|
|  |  |  | import com.genersoft.iot.vmp.gb28181.transmit.response.impl.*; | 
|---|
|  |  |  | 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.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 IRedisCatchStorage redisCatchStorage; | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private EventPublisher publisher; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private SIPCommander cmder; | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private SIPCommanderFroPlatform cmderFroPlatform; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private RedisUtil redis; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private CancelResponseProcessor cancelResponseProcessor; | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | @Lazy | 
|---|
|  |  |  | private RegisterResponseProcessor registerResponseProcessor; | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private OtherResponseProcessor otherResponseProcessor; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private IPlayService playService; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private ZLMRTPServerFactory zlmrtpServerFactory; | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 注:这里使用注解会导致循环依赖注入,暂用springBean | 
|---|
|  |  |  | 
|---|
|  |  |  | 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.setDeferredResultHolder(deferredResultHolder); | 
|---|
|  |  |  | processor.setOffLineDetector(offLineDetector); | 
|---|
|  |  |  | processor.setCmder(cmder); | 
|---|
|  |  |  | processor.setCmderFroPlatform(cmderFroPlatform); | 
|---|
|  |  |  | processor.setStorager(storager); | 
|---|
|  |  |  | processor.setRedisCatchStorage(redisCatchStorage); | 
|---|
|  |  |  | return processor; | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public ISIPResponseProcessor createResponseProcessor(ResponseEvent evt) { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | Response response = evt.getResponse(); | 
|---|
|  |  |  | CSeqHeader cseqHeader = (CSeqHeader) response.getHeader(CSeqHeader.NAME); | 
|---|
|  |  |  | String method = cseqHeader.getMethod(); | 
|---|
|  |  |  | 
|---|
|  |  |  | return byeResponseProcessor; | 
|---|
|  |  |  | } else if (Request.CANCEL.equals(method)) { | 
|---|
|  |  |  | return cancelResponseProcessor; | 
|---|
|  |  |  | }else if (Request.REGISTER.equals(method)) { | 
|---|
|  |  |  | return registerResponseProcessor; | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | return otherResponseProcessor; | 
|---|
|  |  |  | } | 
|---|