From 77bf85342b9d5a7954c85f05a54e6a46d41f0bf6 Mon Sep 17 00:00:00 2001
From: 648540858 <18010473990@163.com>
Date: 星期四, 02 九月 2021 15:10:47 +0800
Subject: [PATCH] 更新docker,更新readme

---
 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/RegisterRequestProcessor.java |  174 +++++++++++++++++++++++++++++++++------------------------
 1 files changed, 101 insertions(+), 73 deletions(-)

diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/RegisterRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/RegisterRequestProcessor.java
index 276127f..4034d57 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/RegisterRequestProcessor.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/RegisterRequestProcessor.java
@@ -7,6 +7,7 @@
 
 import javax.sip.InvalidArgumentException;
 import javax.sip.RequestEvent;
+import javax.sip.ServerTransaction;
 import javax.sip.SipException;
 import javax.sip.header.AuthorizationHeader;
 import javax.sip.header.ContactHeader;
@@ -16,6 +17,11 @@
 import javax.sip.message.Request;
 import javax.sip.message.Response;
 
+import com.genersoft.iot.vmp.gb28181.bean.WvpSipDate;
+import gov.nist.javax.sip.RequestEventExt;
+import gov.nist.javax.sip.header.SIPDateHeader;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.util.StringUtils;
 
 import com.genersoft.iot.vmp.common.VideoManagerConstants;
@@ -23,7 +29,6 @@
 import com.genersoft.iot.vmp.gb28181.auth.DigestServerAuthenticationHelper;
 import com.genersoft.iot.vmp.gb28181.auth.RegisterLogicHandler;
 import com.genersoft.iot.vmp.gb28181.bean.Device;
-import com.genersoft.iot.vmp.gb28181.bean.Host;
 import com.genersoft.iot.vmp.gb28181.event.EventPublisher;
 import com.genersoft.iot.vmp.gb28181.transmit.request.SIPRequestAbstractProcessor;
 import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
@@ -39,6 +44,8 @@
  */
 public class RegisterRequestProcessor extends SIPRequestAbstractProcessor {
 
+	private Logger logger = LoggerFactory.getLogger(RegisterRequestProcessor.class);
+
 	private SipConfig sipConfig;
 	
 	private RegisterLogicHandler handler;
@@ -46,104 +53,125 @@
 	private IVideoManagerStorager storager;
 	
 	private EventPublisher publisher;
-	
-	/***
+
+	/**
 	 * 鏀跺埌娉ㄥ唽璇锋眰 澶勭悊
-	 * 
-	 * @param request
-	 *            璇锋眰娑堟伅
-	 */ 
+ 	 * @param evt
+	 */
 	@Override
 	public void process(RequestEvent evt) {
 		try {
-			System.out.println("鏀跺埌娉ㄥ唽璇锋眰锛屽紑濮嬪鐞�");
+			RequestEventExt evtExt = (RequestEventExt)evt;
+			String requestAddress = evtExt.getRemoteIpAddress() + ":" + evtExt.getRemotePort();
+			logger.info("[{}] 鏀跺埌娉ㄥ唽璇锋眰锛屽紑濮嬪鐞�", requestAddress);
 			Request request = evt.getRequest();
 
 			Response response = null; 
 			boolean passwordCorrect = false;
 			// 娉ㄥ唽鏍囧織  0锛氭湭鎼哄甫鎺堟潈澶存垨鑰呭瘑鐮侀敊璇�  1锛氭敞鍐屾垚鍔�   2锛氭敞閿�鎴愬姛
 			int registerFlag = 0;
-			Device device = null;
+			FromHeader fromHeader = (FromHeader) request.getHeader(FromHeader.NAME);
+			AddressImpl address = (AddressImpl) fromHeader.getAddress();
+			SipUri uri = (SipUri) address.getURI();
+			String deviceId = uri.getUser();
+			Device device = storager.queryVideoDevice(deviceId);
 			AuthorizationHeader authorhead = (AuthorizationHeader) request.getHeader(AuthorizationHeader.NAME); 
 			// 鏍¢獙瀵嗙爜鏄惁姝g‘
 			if (authorhead != null) {
 				passwordCorrect = new DigestServerAuthenticationHelper().doAuthenticatePlainTextPassword(request,
-						sipConfig.getSipPassword());
+						sipConfig.getPassword());
+			}
+			if (StringUtils.isEmpty(sipConfig.getPassword())){
+				passwordCorrect = true;
 			}
 
 			// 鏈惡甯︽巿鏉冨ご鎴栬�呭瘑鐮侀敊璇� 鍥炲401
-			if (authorhead == null || !passwordCorrect) {
-				
-				if (authorhead == null) {
-					System.out.println("鏈惡甯︽巿鏉冨ご 鍥炲401");
-				} else if (!passwordCorrect) {
-					System.out.println("瀵嗙爜閿欒 鍥炲401");
-				}
+			if (authorhead == null ) {
+
+				logger.info("[{}] 鏈惡甯︽巿鏉冨ご 鍥炲401", requestAddress);
 				response = getMessageFactory().createResponse(Response.UNAUTHORIZED, request);
-				new DigestServerAuthenticationHelper().generateChallenge(getHeaderFactory(), response, sipConfig.getSipDomain());
-			}
-			// 鎼哄甫鎺堟潈澶村苟涓斿瘑鐮佹纭�
-			else if (passwordCorrect) {
-				response = getMessageFactory().createResponse(Response.OK, request);
-				// 娣诲姞date澶�
-				response.addHeader(getHeaderFactory().createDateHeader(Calendar.getInstance(Locale.ENGLISH)));
-				ExpiresHeader expiresHeader = (ExpiresHeader) request.getHeader(Expires.NAME);
-				// 娣诲姞Contact澶�
-				response.addHeader(request.getHeader(ContactHeader.NAME));
-				// 娣诲姞Expires澶�
-				response.addHeader(request.getExpires());
-				
-				// 1.鑾峰彇鍒伴�氫俊鍦板潃绛変俊鎭紝淇濆瓨鍒癛edis
-				FromHeader fromHeader = (FromHeader) request.getHeader(FromHeader.NAME);
-				ViaHeader viaHeader = (ViaHeader) request.getHeader(ViaHeader.NAME);
-				String received = viaHeader.getReceived();
-				int rPort = viaHeader.getRPort();
-				// 鏈湴妯℃嫙璁惧 received 涓虹┖ rPort 涓� -1
-				// 瑙f瀽鏈湴鍦板潃鏇夸唬
-				if (StringUtils.isEmpty(received) || rPort == -1) {
-					received = viaHeader.getHost();
-					rPort = viaHeader.getPort();
-				}
-				//
-				Host host = new Host();
-				host.setIp(received);
-				host.setPort(rPort);
-				host.setAddress(received.concat(":").concat(String.valueOf(rPort)));
-				AddressImpl address = (AddressImpl) fromHeader.getAddress();
-				SipUri uri = (SipUri) address.getURI();
-				String deviceId = uri.getUser();
-				device = new Device();
-				device.setStreamMode("UDP");
-				device.setDeviceId(deviceId);
-				device.setHost(host);
-				// 娉ㄩ攢鎴愬姛
-				if (expiresHeader != null && expiresHeader.getExpires() == 0) {
-					registerFlag = 2;
-				}
-				// 娉ㄥ唽鎴愬姛
-				else {
-					registerFlag = 1;
-					// 鍒ゆ柇TCP杩樻槸UDP
-					boolean isTcp = false;
-					ViaHeader reqViaHeader = (ViaHeader) request.getHeader(ViaHeader.NAME);
-					String transport = reqViaHeader.getTransport();
-					if (transport.equals("TCP")) {
-						isTcp = true;
+				new DigestServerAuthenticationHelper().generateChallenge(getHeaderFactory(), response, sipConfig.getDomain());
+			}else {
+				if (!passwordCorrect){
+					// 娉ㄥ唽澶辫触
+					response = getMessageFactory().createResponse(Response.FORBIDDEN, request);
+					response.setReasonPhrase("wrong password");
+					logger.info("[{}] 瀵嗙爜閿欒 鍥炲403", requestAddress);
+				}else {
+					// 鎼哄甫鎺堟潈澶村苟涓斿瘑鐮佹纭�
+					response = getMessageFactory().createResponse(Response.OK, request);
+					// 娣诲姞date澶�
+					SIPDateHeader dateHeader = new SIPDateHeader();
+					// 浣跨敤鑷繁淇敼鐨�
+					WvpSipDate wvpSipDate = new WvpSipDate(Calendar.getInstance(Locale.ENGLISH).getTimeInMillis());
+					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);
+						serverTransaction.sendResponse(response);
+						if (serverTransaction.getDialog() != null) serverTransaction.getDialog().delete();
+						return;
 					}
-					device.setTransport(isTcp ? "TCP" : "UDP");
+					// 娣诲姞Contact澶�
+					response.addHeader(request.getHeader(ContactHeader.NAME));
+					// 娣诲姞Expires澶�
+					response.addHeader(request.getExpires());
+
+					// 鑾峰彇鍒伴�氫俊鍦板潃绛変俊鎭�
+					ViaHeader viaHeader = (ViaHeader) request.getHeader(ViaHeader.NAME);
+					String received = viaHeader.getReceived();
+					int rPort = viaHeader.getRPort();
+					// 瑙f瀽鏈湴鍦板潃鏇夸唬
+					if (StringUtils.isEmpty(received) || rPort == -1) {
+						received = viaHeader.getHost();
+						rPort = viaHeader.getPort();
+					}
+					//
+
+					if (device == null) {
+						device = new Device();
+						device.setStreamMode("UDP");
+						device.setDeviceId(deviceId);
+					}
+					device.setIp(received);
+					device.setPort(rPort);
+					device.setHostAddress(received.concat(":").concat(String.valueOf(rPort)));
+					// 娉ㄩ攢鎴愬姛
+					if (expiresHeader.getExpires() == 0) {
+						registerFlag = 2;
+					}
+					// 娉ㄥ唽鎴愬姛
+					else {
+						device.setExpires(expiresHeader.getExpires());
+						registerFlag = 1;
+						// 鍒ゆ柇TCP杩樻槸UDP
+						boolean isTcp = false;
+						ViaHeader reqViaHeader = (ViaHeader) request.getHeader(ViaHeader.NAME);
+						String transport = reqViaHeader.getTransport();
+						if (transport.equals("TCP")) {
+							isTcp = true;
+						}
+						device.setTransport(isTcp ? "TCP" : "UDP");
+					}
 				}
 			}
-			getServerTransaction(evt).sendResponse(response);
+
+			ServerTransaction serverTransaction = getServerTransaction(evt);
+			serverTransaction.sendResponse(response);
+			if (serverTransaction.getDialog() != null) serverTransaction.getDialog().delete();
 			// 娉ㄥ唽鎴愬姛
 			// 淇濆瓨鍒皉edis
 			// 涓嬪彂catelog鏌ヨ鐩綍
-			if (registerFlag == 1 && device != null) {
-				System.out.println("娉ㄥ唽鎴愬姛! deviceId:" + device.getDeviceId());
-				storager.updateDevice(device);
-				publisher.onlineEventPublish(device.getDeviceId(), VideoManagerConstants.EVENT_ONLINE_REGISTER);
+			if (registerFlag == 1 ) {
+				logger.info("[{}] 娉ㄥ唽鎴愬姛! deviceId:" + device.getDeviceId(), requestAddress);
+				publisher.onlineEventPublish(device, VideoManagerConstants.EVENT_ONLINE_REGISTER);
+				// 閲嶆柊娉ㄥ唽鏇存柊璁惧鍜岄�氶亾锛屼互鍏嶈澶囨浛鎹㈡垨鏇存柊鍚庝俊鎭棤娉曟洿鏂�
 				handler.onRegister(device);
 			} else if (registerFlag == 2) {
-				System.out.println("娉ㄩ攢鎴愬姛! deviceId:" + device.getDeviceId());
+				logger.info("[{}] 娉ㄩ攢鎴愬姛! deviceId:" + device.getDeviceId(), requestAddress);
 				publisher.outlineEventPublish(device.getDeviceId(), VideoManagerConstants.EVENT_OUTLINE_UNREGISTER);
 			}
 		} catch (SipException | InvalidArgumentException | NoSuchAlgorithmException | ParseException e) {

--
Gitblit v1.8.0