64850858
2021-06-25 0802677d0b609abc8de0f0d882c6dbf483fc1987
Merge remote-tracking branch 'origin/wvp-28181-2.0' into wvp-28181-2.0
9个文件已修改
131 ■■■■ 已修改文件
src/main/java/com/genersoft/iot/vmp/gb28181/auth/DigestServerAuthenticationHelper.java 96 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/MessageRequestProcessor.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaListManager.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRESTfulUtils.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/genersoft/iot/vmp/onvif/impl/ONVIFServerIMpl.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceQuery.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/gbStream/GbStreamController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/genersoft/iot/vmp/vmanager/record/RecoderProxyController.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/genersoft/iot/vmp/gb28181/auth/DigestServerAuthenticationHelper.java
@@ -239,58 +239,58 @@
    }
    public static void main(String[] args) throws NoSuchAlgorithmException {
        String realm = "3402000000";
        String username = "44010000001180008012";
//     public static void main(String[] args) throws NoSuchAlgorithmException {
//         String realm = "3402000000";
//         String username = "44010000001180008012";
        String nonce = "07cab60999fbf643264ace27d3b7de8b";
        String uri = "sip:34020000002000000001@3402000000";
        // qop 保护质量 包含auth(默认的)和auth-int(增加了报文完整性检测)两种策略
        String qop = "auth";
//         String nonce = "07cab60999fbf643264ace27d3b7de8b";
//         String uri = "sip:34020000002000000001@3402000000";
//         // qop 保护质量 包含auth(默认的)和auth-int(增加了报文完整性检测)两种策略
//         String qop = "auth";
        // 客户端随机数,这是一个不透明的字符串值,由客户端提供,并且客户端和服务器都会使用,以避免用明文文本。
        // 这使得双方都可以查验对方的身份,并对消息的完整性提供一些保护
        //String cNonce = authHeader.getCNonce();
//         // 客户端随机数,这是一个不透明的字符串值,由客户端提供,并且客户端和服务器都会使用,以避免用明文文本。
//         // 这使得双方都可以查验对方的身份,并对消息的完整性提供一些保护
//         //String cNonce = authHeader.getCNonce();
        // nonce计数器,是一个16进制的数值,表示同一nonce下客户端发送出请求的数量
        int nc = 1;
        String ncStr = new DecimalFormat("00000000").format(nc);
//        String ncStr = new DecimalFormat("00000000").format(Integer.parseInt(nc + "", 16));
        MessageDigest messageDigest = MessageDigest.getInstance(DEFAULT_ALGORITHM);
        String A1 = username + ":" + realm + ":" + "12345678";
        String A2 = "REGISTER" + ":" + uri;
        byte mdbytes[] = messageDigest.digest(A1.getBytes());
        String HA1 = toHexString(mdbytes);
        System.out.println("A1: " + A1);
        System.out.println("A2: " + A2);
//         // nonce计数器,是一个16进制的数值,表示同一nonce下客户端发送出请求的数量
//         int nc = 1;
//         String ncStr = new DecimalFormat("00000000").format(nc);
// //        String ncStr = new DecimalFormat("00000000").format(Integer.parseInt(nc + "", 16));
//         MessageDigest messageDigest = MessageDigest.getInstance(DEFAULT_ALGORITHM);
//         String A1 = username + ":" + realm + ":" + "12345678";
//         String A2 = "REGISTER" + ":" + uri;
//         byte mdbytes[] = messageDigest.digest(A1.getBytes());
//         String HA1 = toHexString(mdbytes);
//         System.out.println("A1: " + A1);
//         System.out.println("A2: " + A2);
        mdbytes = messageDigest.digest(A2.getBytes());
        String HA2 = toHexString(mdbytes);
        System.out.println("HA1: " + HA1);
        System.out.println("HA2: " + HA2);
        String cnonce = "0a4f113b";
        System.out.println("nonce: " + nonce);
        System.out.println("nc: " + ncStr);
        System.out.println("cnonce: " + cnonce);
        System.out.println("qop: " + qop);
        String KD = HA1 + ":" + nonce;
//         mdbytes = messageDigest.digest(A2.getBytes());
//         String HA2 = toHexString(mdbytes);
//         System.out.println("HA1: " + HA1);
//         System.out.println("HA2: " + HA2);
//         String cnonce = "0a4f113b";
//         System.out.println("nonce: " + nonce);
//         System.out.println("nc: " + ncStr);
//         System.out.println("cnonce: " + cnonce);
//         System.out.println("qop: " + qop);
//         String KD = HA1 + ":" + nonce;
        if (qop != null && qop.equals("auth") ) {
            if (nc != -1) {
                KD += ":" + ncStr;
            }
            if (cnonce != null) {
                KD += ":" + cnonce;
            }
            KD += ":" + qop;
        }
        KD += ":" + HA2;
        System.out.println("KD: " + KD);
        mdbytes = messageDigest.digest(KD.getBytes());
        String mdString = toHexString(mdbytes);
        System.out.println("mdString: " + mdString);
        String response = "4f0507d4b87cdecff04bdaf4c96348f0";
        System.out.println("response: " + response);
    }
//         if (qop != null && qop.equals("auth") ) {
//             if (nc != -1) {
//                 KD += ":" + ncStr;
//             }
//             if (cnonce != null) {
//                 KD += ":" + cnonce;
//             }
//             KD += ":" + qop;
//         }
//         KD += ":" + HA2;
//         System.out.println("KD: " + KD);
//         mdbytes = messageDigest.digest(KD.getBytes());
//         String mdString = toHexString(mdbytes);
//         System.out.println("mdString: " + mdString);
//         String response = "4f0507d4b87cdecff04bdaf4c96348f0";
//         System.out.println("response: " + response);
//     }
}
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/MessageRequestProcessor.java
@@ -2,7 +2,6 @@
import java.io.ByteArrayInputStream;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
import javax.sip.address.SipURI;
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaListManager.java
@@ -17,6 +17,7 @@
import java.util.*;
@SuppressWarnings("unchecked")
@Component
public class ZLMMediaListManager {
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRESTfulUtils.java
@@ -4,12 +4,10 @@
import com.alibaba.fastjson.JSONObject;
import com.genersoft.iot.vmp.conf.MediaConfig;
import okhttp3.*;
import org.checkerframework.checker.units.qual.A;
import org.jetbrains.annotations.NotNull;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.io.*;
src/main/java/com/genersoft/iot/vmp/onvif/impl/ONVIFServerIMpl.java
@@ -17,6 +17,7 @@
import java.util.List;
import java.util.Map;
@SuppressWarnings("rawtypes")
/**
 * 处理onvif的各种操作
 */
src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java
@@ -96,15 +96,16 @@
            try {
                String classPath = ResourceUtils.getURL("classpath:").getPath();
                // System.out.println(classPath);
                String path = classPath + "static/static/snap/";
                // 兼容打包为jar的class路径
                if(classPath.contains("jar")) {
                    classPath = classPath.substring(0, classPath.lastIndexOf("."));
                    classPath = classPath.substring(0, classPath.lastIndexOf("/"));
                    path = classPath + "/snap/";
                    classPath = classPath.substring(0, classPath.lastIndexOf("/") + 1);
                }
                if (path.startsWith("file:")) {
                    path = path.substring(path.indexOf(":") + 1, path.length());
                if (classPath.startsWith("file:")) {
                    classPath = classPath.substring(classPath.indexOf(":") + 1, classPath.length());
                }
                String path = classPath + "static/static/snap/";
                // 兼容Windows系统路径(去除前面的“/”)
                if(System.getProperty("os.name").contains("indows")) {
                    path = path.substring(1, path.length());
                }
@@ -116,7 +117,7 @@
                        StreamInfo streamInfoForSuccess = (StreamInfo)wvpResult.getData();
                        String streamUrl = streamInfoForSuccess.getFmp4();
                        // 请求截图
                        zlmresTfulUtils.getSnap(streamUrl, 5, 1, path, fileName);
                        zlmresTfulUtils.getSnap(streamUrl, 15, 1, path, fileName);
                    }
                }
                System.out.println(path);
src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceQuery.java
@@ -132,15 +132,14 @@
     */
    @ApiOperation("同步设备通道")
    @ApiImplicitParams({
            @ApiImplicitParam(name="deviceId", value = "设备id", required = true ,dataTypeClass = String.class),
            @ApiImplicitParam(name="deviceId", value = "设备id", required = true, dataTypeClass = String.class),
    })
    @PostMapping("/devices/{deviceId}/sync")
    public DeferredResult<ResponseEntity<Device>> devicesSync(@PathVariable String deviceId){
        
        if (logger.isDebugEnabled()) {
        }
            logger.debug("设备通道信息同步API调用,deviceId:" + deviceId);
        }
        Device device = storager.queryVideoDevice(deviceId);
        cmder.catalogQuery(device, event -> {
            Response response = event.getResponse();
@@ -264,7 +263,7 @@
    @ApiImplicitParams({
            @ApiImplicitParam(name = "deviceId", value = "设备id", required = true, dataTypeClass = String.class),
            @ApiImplicitParam(name = "streamMode", value = "数据流传输模式, 取值:" +
                    "UDP(udp传输),TCP-ACTIVE(tcp主动模式,暂不支持),TCP-PASSIVE(tcp被动模式)"),
                    "UDP(udp传输),TCP-ACTIVE(tcp主动模式,暂不支持),TCP-PASSIVE(tcp被动模式)", dataTypeClass = String.class),
    })
    @PostMapping("/transport/{deviceId}/{streamMode}")
    public ResponseEntity<PageInfo> updateTransport(@PathVariable String deviceId, @PathVariable String streamMode){
src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/gbStream/GbStreamController.java
@@ -56,7 +56,7 @@
     */
    @ApiOperation("移除国标关联")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "gbStreamParam", value = "GbStreamParam", required = true ,
            @ApiImplicitParam(name = "gbStreamParam", value = "GbStreamParam", required = true,
                    dataTypeClass = GbStreamParam.class),
    })
    @DeleteMapping(value = "/del")
@@ -77,7 +77,7 @@
     */
    @ApiOperation("保存国标关联")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "gbStreamParam", value = "GbStreamParam", required = true , dataTypeClass = GbStreamParam.class),
            @ApiImplicitParam(name = "gbStreamParam", value = "GbStreamParam", required = true, dataTypeClass = GbStreamParam.class),
    })
    @PostMapping(value = "/add")
    @ResponseBody
src/main/java/com/genersoft/iot/vmp/vmanager/record/RecoderProxyController.java
@@ -14,6 +14,8 @@
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
@RestController
@@ -31,7 +33,7 @@
    @ResponseBody
    @RequestMapping(value = "/**/**/**", produces = "application/json;charset=UTF-8")
    public Object proxy(HttpServletRequest request, HttpServletResponse response){
    public Object proxy(HttpServletRequest request, HttpServletResponse response) throws UnsupportedEncodingException{
        String baseRequestURI = request.getRequestURI();
@@ -51,7 +53,7 @@
                mediaInfo.getSdpIp(),
                mediaConfig.getRecordAssistPort(),
                baseRequestURI.substring(baseRequestURI.indexOf(mediaId) + mediaId.length()),
                URLDecoder.decode(request.getQueryString())
                URLDecoder.decode(request.getQueryString(), "UTF-8")
        );
        // 发送请求
        RestTemplate restTemplate = new RestTemplate();