博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
GB28181:基于JAVA的Catalog目录获取[part3]
阅读量:2395 次
发布时间:2019-05-10

本文共 4858 字,大约阅读时间需要 16 分钟。

GB28181:基于JAVA的Catalog目录获取[part3]

1、国标文件里面catalog的描述

image.png

2、java组装SIP信令

/**     * This method uses the SIP stack to send a message. 第一个参数:用户名 第二个参数:IP地址 第三个参数:设备ID     */    public synchronized void sendCatalog(String toIp,Integer toPort, String deviceId)            throws ParseException, InvalidArgumentException, SipException {        log.info("发送 sendCatalog ");        String catalog = String.format(CATALOG_FORMAT, SN.incrementAndGet(), deviceId);        Request request = createRequest(deviceId, toIp+":"+toPort, Request.MESSAGE, null, "QQ136320186CatalogTag", "QQ136320186CatalogBranch", Request.MESSAGE,20L,null);        ContentTypeHeader contentTypeHeader = headerFactory.createContentTypeHeader("Application", "MANSCDP+xml");        request.setContent(catalog, contentTypeHeader);        sipProvider.sendRequest(request);        log.info("发送 sendCatalog 结束.....");    } private Request createRequest(String deviceId, String toIpAddPort, String method, String callId,                                  String tag, String branch, String CSeqMethod, Long CSeq, String toTag)            throws ParseException, InvalidArgumentException {        SipURI from = addressFactory                .createSipURI(deviceId, ip + ":" + port);        Address fromNameAddress = addressFactory.createAddress(from);        FromHeader fromHeader = headerFactory.createFromHeader(fromNameAddress, tag);        SipURI toAddress = addressFactory.createSipURI(deviceId, toIpAddPort);        Address toNameAddress = addressFactory.createAddress(toAddress);        ToHeader toHeader = headerFactory.createToHeader(toNameAddress, toTag);        SipURI requestURI = addressFactory.createSipURI(deviceId, toIpAddPort);        ArrayList
viaHeaders = new ArrayList
(); ViaHeader viaHeader = headerFactory .createViaHeader(ip, port, "udp", branch); viaHeaders.add(viaHeader); CallIdHeader callIdHeader = StringUtils.isEmpty(callId) ? sipProvider.getNewCallId() : headerFactory.createCallIdHeader(callId); CSeqHeader cSeqHeader = headerFactory.createCSeqHeader(CSeq == null ? 1L : CSeq, CSeqMethod); MaxForwardsHeader maxForwards = headerFactory.createMaxForwardsHeader(70); return messageFactory.createRequest(requestURI, method, callIdHeader, cSeqHeader, fromHeader, toHeader, viaHeaders, maxForwards); }

###3、发送的抓包信令

MESSAGE sip:34020000001110000001@192.168.1.200:5060 SIP/2.0Call-ID: fce0e85df3e239bd013fcdd7c0e9336a@192.168.1.18CSeq: 20 MESSAGEFrom: 
;tag=QQ136320186CatalogTagTo:
Via: SIP/2.0/UDP 172.18.100.18:5060;branch=QQ136320186CatalogBranchMax-Forwards: 70Content-Type: Application/MANSCDP+xmlContent-Length: 123
Catalog
20001
34020000001110000001

###4、设备返回的代码处理

@Override    public void processRequest(RequestEvent requestEvent, AddressFactory addressFactory, MessageFactory messageFactory, HeaderFactory headerFactory, SipProvider sipProvider) {        Request request = requestEvent.getRequest();        if (null == request) {            log.error("processRequest RequestEvent is null");            return;        }        switch (request.getMethod().toUpperCase()) {            case Request.MESSAGE:                log.debug("收到MESSAGE的请求");                doRequestMessage(requestEvent, addressFactory,messageFactory, headerFactory, sipProvider);                break;                default:                    log.info("不处理的requestMethod:" + cSeqHeader.getMethod().toUpperCase());            }        } catch (Exception ex) {            ex.printStackTrace();        }    }
private void doRequestMessage(RequestEvent requestEvent, AddressFactory addressFactory, MessageFactory messageFactory, HeaderFactory headerFactory, SipProvider sipProvider) {        try {            Request request = requestEvent.getRequest();            String encode = request.toString();            if (org.apache.commons.lang3.StringUtils.contains(encode, MST_TYPE_KEEPALIVE)) {                log.debug("收到下级域发来的心跳请求,{}", request.getRequestURI());                doSuccess(requestEvent, addressFactory, messageFactory, headerFactory, sipProvider);            } else if (org.apache.commons.lang3.StringUtils.contains(encode, MST_TYPE_CATALOG)) {                ViaHeader viaHeader = (ViaHeader) request.getHeader(ViaHeader.NAME);                log.info("收到目录检索返回,IP={},Port={}", viaHeader.getReceived(), viaHeader.getRPort());                doSuccess(requestEvent, addressFactory, messageFactory, headerFactory, sipProvider);                doRequestCatalog(requestEvent.getRequest(),encode);            }        }catch (Exception e) {            log.error("doRequestMessage Error:{}",e.getMessage());            e.printStackTrace();        }    }

3、源码

源码:

扣 群 号:

5_4_1_4_1_0_1_3_2

转载地址:http://ekwob.baihongyu.com/

你可能感兴趣的文章
机器学习算法在文本分类中的应用综述
查看>>
利用-TensorFlow-构建卷积神经网络
查看>>
利用-TensorFlow-实现排序和搜索算法
查看>>
利用TensorFlow实现卷积神经网络做文本分类
查看>>
如何构建高可读性和高可重用的-TensorFlow-模型
查看>>
使用TensorFlow识别交通标志
查看>>
122. Best Time to Buy and Sell Stock II [medium] (Python)
查看>>
推荐-线下AUC提升,线上CTR无提升
查看>>
Ubuntu 安装 pylucene 踩坑还原记,并安装 SmartChineseAnalyzer
查看>>
Java编程思想学习笔记(10)
查看>>
Java编程思想学习笔记(11)
查看>>
机器学习实战:基于Scikit-Learn和TensorFlow—第五章笔记
查看>>
Java编程思想学习笔记(12)
查看>>
Java编程思想学习笔记(13)
查看>>
Java编程思想学习笔记(14)
查看>>
Java-8-UnaryOperator
查看>>
Java-8-Function
查看>>
Java-8-Stream接口
查看>>
Junit4入门
查看>>
Java与算法(11)
查看>>