648540858
2022-04-18 596a633d2e33317909f40bb2485038d4f307768c
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/RegisterRequestProcessor.java
@@ -8,8 +8,10 @@
import com.genersoft.iot.vmp.gb28181.bean.WvpSipDate;
import com.genersoft.iot.vmp.gb28181.event.EventPublisher;
import com.genersoft.iot.vmp.gb28181.transmit.SIPProcessorObserver;
import com.genersoft.iot.vmp.gb28181.transmit.event.request.SIPRequestProcessorAbstract;
import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
import com.genersoft.iot.vmp.gb28181.transmit.event.request.ISIPRequestProcessor;
import com.genersoft.iot.vmp.gb28181.transmit.event.request.SIPRequestProcessorParent;
import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
import com.genersoft.iot.vmp.storager.IVideoManagerStorage;
import gov.nist.javax.sip.RequestEventExt;
import gov.nist.javax.sip.address.AddressImpl;
import gov.nist.javax.sip.address.SipUri;
@@ -17,6 +19,7 @@
import gov.nist.javax.sip.header.SIPDateHeader;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
@@ -33,13 +36,11 @@
import java.util.Calendar;
import java.util.Locale;
/**
 * @description:收到注册请求 处理
 * @author: swwheihei
 * @date:   2020年5月3日 下午4:47:25
/**
 * SIP命令类型: REGISTER请求
 */
@Component
public class RegisterRequestProcessor extends SIPRequestProcessorAbstract {
public class RegisterRequestProcessor extends SIPRequestProcessorParent implements InitializingBean, ISIPRequestProcessor {
   private Logger logger = LoggerFactory.getLogger(RegisterRequestProcessor.class);
@@ -52,7 +53,10 @@
   private RegisterLogicHandler handler;
   @Autowired
   private IVideoManagerStorager storager;
   private IRedisCatchStorage redisCatchStorage;
   @Autowired
   private IVideoManagerStorage storager;
   @Autowired
   private EventPublisher publisher;
@@ -77,7 +81,7 @@
         String requestAddress = evtExt.getRemoteIpAddress() + ":" + evtExt.getRemotePort();
         logger.info("[{}] 收到注册请求,开始处理", requestAddress);
         Request request = evt.getRequest();
         ExpiresHeader expiresHeader = (ExpiresHeader) request.getHeader(Expires.NAME);
         Response response = null; 
         boolean passwordCorrect = false;
         // 注册标志  0:未携带授权头或者密码错误  1:注册成功   2:注销成功
@@ -86,8 +90,13 @@
         AddressImpl address = (AddressImpl) fromHeader.getAddress();
         SipUri uri = (SipUri) address.getURI();
         String deviceId = uri.getUser();
         Device deviceInRedis = redisCatchStorage.getDevice(deviceId);
         Device device = storager.queryVideoDevice(deviceId);
         AuthorizationHeader authorhead = (AuthorizationHeader) request.getHeader(AuthorizationHeader.NAME);
         if (deviceInRedis != null && device == null) {
            // redis 存在脏数据
            redisCatchStorage.clearCatchByDeviceId(deviceId);
         }
         AuthorizationHeader authorhead = (AuthorizationHeader) request.getHeader(AuthorizationHeader.NAME);
         // 校验密码是否正确
         if (authorhead != null) {
            passwordCorrect = new DigestServerAuthenticationHelper().doAuthenticatePlainTextPassword(request,
@@ -119,7 +128,7 @@
               dateHeader.setDate(wvpSipDate);
               response.addHeader(dateHeader);
               ExpiresHeader expiresHeader = (ExpiresHeader) request.getHeader(Expires.NAME);
               if (expiresHeader == null) {
                  response = getMessageFactory().createResponse(Response.BAD_REQUEST, request);
                  ServerTransaction serverTransaction = getServerTransaction(evt);
@@ -146,9 +155,13 @@
               if (device == null) {
                  device = new Device();
                  device.setStreamMode("UDP");
                  device.setCharset("gb2312");
                  device.setCharset("GB2312");
                  device.setDeviceId(deviceId);
                  device.setFirsRegister(true);
               }else {
                  if (device.getOnline() == 0) {
                     device.setFirsRegister(true);
                  }
               }
               device.setIp(received);
               device.setPort(rPort);
@@ -178,12 +191,9 @@
         if (serverTransaction.getDialog() != null) serverTransaction.getDialog().delete();
         // 注册成功
         // 保存到redis
         // 下发catelog查询目录
         if (registerFlag == 1 ) {
            logger.info("[{}] 注册成功! deviceId:" + device.getDeviceId(), requestAddress);
            publisher.onlineEventPublish(device, VideoManagerConstants.EVENT_ONLINE_REGISTER);
            // 重新注册更新设备和通道,以免设备替换或更新后信息无法更新
            handler.onRegister(device);
            publisher.onlineEventPublish(device, VideoManagerConstants.EVENT_ONLINE_REGISTER, expiresHeader.getExpires());
         } else if (registerFlag == 2) {
            logger.info("[{}] 注销成功! deviceId:" + device.getDeviceId(), requestAddress);
            publisher.outlineEventPublish(device.getDeviceId(), VideoManagerConstants.EVENT_OUTLINE_UNREGISTER);