648540858
2022-06-15 f7006e4881b176c12e3ba07af7025b0ef4a1508c
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommanderFroPlatform.java
@@ -277,8 +277,8 @@
                        catalogXml.append("<Owner>" + channel.getOwner() + "</Owner>\r\n");
                        catalogXml.append("<CivilCode>" + channel.getCivilCode() + "</CivilCode>\r\n");
                        catalogXml.append("<Address>" + channel.getAddress() + "</Address>\r\n");
                        catalogXml.append("<Longitude>" + channel.getLongitude() + "</Longitude>\r\n");
                        catalogXml.append("<Latitude>" + channel.getLatitude() + "</Latitude>\r\n");
                        catalogXml.append("<Longitude>" + channel.getLongitudeWgs84() + "</Longitude>\r\n");
                        catalogXml.append("<Latitude>" + channel.getLatitudeWgs84() + "</Latitude>\r\n");
                        catalogXml.append("<IPAddress>" + channel.getIpAddress() + "</IPAddress>\r\n");
                        catalogXml.append("<Port>" + channel.getPort() + "</Port>\r\n");
                        catalogXml.append("<Info>\r\n");
@@ -760,6 +760,29 @@
        }
        try{
            SIPDialog dialog = (SIPDialog) SerializeUtils.deSerialize(dialogByteArray);
            SipStack sipStack;
            if ("TCP".equals(platform.getTransport())) {
                sipStack = tcpSipProvider.getSipStack();
            } else {
                sipStack = udpSipProvider.getSipStack();
            }
            SIPDialog sipDialog = ((SipStackImpl) sipStack).putDialog(dialog);
            if (dialog != sipDialog) {
                dialog = sipDialog;
            }
            if ("TCP".equals(platform.getTransport())) {
                dialog.setSipProvider(tcpSipProvider);
            } else {
                dialog.setSipProvider(udpSipProvider);
            }
            Field sipStackField = SIPDialog.class.getDeclaredField("sipStack");
            sipStackField.setAccessible(true);
            sipStackField.set(dialog, sipStack);
            Field eventListenersField = SIPDialog.class.getDeclaredField("eventListeners");
            eventListenersField.setAccessible(true);
            eventListenersField.set(dialog, new HashSet<>());
            SIPRequest messageRequest = (SIPRequest)dialog.createRequest(Request.MESSAGE);
            String characterSet = platform.getCharacterSet();
            StringBuffer mediaStatusXml = new StringBuffer(200);
@@ -775,20 +798,23 @@
            SipURI sipURI = (SipURI) messageRequest.getRequestURI();
            sipURI.setHost(platform.getServerIP());
            sipURI.setPort(platform.getServerPort());
            ClientTransaction transaction = null;
            ClientTransaction clientTransaction;
            if ("TCP".equals(platform.getTransport())) {
                transaction = tcpSipProvider.getNewClientTransaction(messageRequest);
            } else if ("UDP".equals(platform.getTransport())) {
                transaction = udpSipProvider.getNewClientTransaction(messageRequest);
                clientTransaction = tcpSipProvider.getNewClientTransaction(messageRequest);
            }else {
                clientTransaction = udpSipProvider.getNewClientTransaction(messageRequest);
            }
            transaction.sendRequest();
            dialog.sendRequest(clientTransaction);
        } catch (SipException e) {
            e.printStackTrace();
            return false;
        } catch (ParseException e) {
            e.printStackTrace();
            return false;
        } catch (NoSuchFieldException e) {
            throw new RuntimeException(e);
        } catch (IllegalAccessException e) {
            throw new RuntimeException(e);
        }
        return true;
@@ -811,13 +837,22 @@
            byte[] dialogByteArray = sendRtpItem.getDialog();
            if (dialogByteArray != null) {
                SIPDialog dialog = (SIPDialog) SerializeUtils.deSerialize(dialogByteArray);
                SipStack sipStack = udpSipProvider.getSipStack();
                SipStack sipStack;
                if ("TCP".equals(platform.getTransport())) {
                    sipStack = tcpSipProvider.getSipStack();
                } else {
                    sipStack = udpSipProvider.getSipStack();
                }
                SIPDialog sipDialog = ((SipStackImpl) sipStack).putDialog(dialog);
                if (dialog != sipDialog) {
                    dialog = sipDialog;
                }
                try {
                    dialog.setSipProvider(udpSipProvider);
                    if ("TCP".equals(platform.getTransport())) {
                        dialog.setSipProvider(tcpSipProvider);
                    } else {
                        dialog.setSipProvider(udpSipProvider);
                    }
                    Field sipStackField = SIPDialog.class.getDeclaredField("sipStack");
                    sipStackField.setAccessible(true);
                    sipStackField.set(dialog, sipStack);
@@ -825,17 +860,15 @@
                    eventListenersField.setAccessible(true);
                    eventListenersField.set(dialog, new HashSet<>());
                    byte[] transactionByteArray = sendRtpItem.getTransaction();
                    ClientTransaction clientTransaction = (ClientTransaction) SerializeUtils.deSerialize(transactionByteArray);
                    Request byeRequest = dialog.createRequest(Request.BYE);
                    SipURI byeURI = (SipURI) byeRequest.getRequestURI();
                    SIPRequest request = (SIPRequest) clientTransaction.getRequest();
                    byeURI.setHost(request.getRemoteAddress().getHostAddress());
                    byeURI.setPort(request.getRemotePort());
                    byeURI.setHost(platform.getServerIP());
                    byeURI.setPort(platform.getServerPort());
                    ClientTransaction clientTransaction;
                    if ("TCP".equals(platform.getTransport())) {
                        clientTransaction = tcpSipProvider.getNewClientTransaction(byeRequest);
                    } else if ("UDP".equals(platform.getTransport())) {
                    } else {
                        clientTransaction = udpSipProvider.getNewClientTransaction(byeRequest);
                    }
                    dialog.sendRequest(clientTransaction);