This is an automated email from the ASF dual-hosted git repository.

solomax pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/openmeetings.git


The following commit(s) were added to refs/heads/master by this push:
     new 2aa25ec  [OPENMEETINGS-2239] audio room -> softphone seems to work
2aa25ec is described below

commit 2aa25ec5ce0ac9d9e8467809ca13009f06b010f5
Author: Maxim Solodovnik <[email protected]>
AuthorDate: Thu Dec 17 00:24:08 2020 +0700

    [OPENMEETINGS-2239] audio room -> softphone seems to work
---
 .../apache/openmeetings/core/remote/KStream.java   |  3 ++-
 .../openmeetings/core/sip/SipStackProcessor.java   | 22 ++++++++++++++++++++--
 2 files changed, 22 insertions(+), 3 deletions(-)

diff --git 
a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KStream.java
 
b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KStream.java
index ab8a099..d3394c7 100644
--- 
a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KStream.java
+++ 
b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KStream.java
@@ -467,6 +467,7 @@ public class KStream extends AbstractStream implements 
ISipCallbacks {
                        rtpEndpoint = null;
                }
                sipProcessor.ifPresent(SipStackProcessor::destroy);
+               sipProcessor = Optional.empty();
        }
 
        public void addCandidate(IceCandidate candidate, String uid) {
@@ -485,7 +486,7 @@ public class KStream extends AbstractStream implements 
ISipCallbacks {
        }
 
        void addSipProcessor(int count) {
-               if (kRoom.getSipCount() > 0) {
+               if (count > 0) {
                        if (sipProcessor.isEmpty()) {
                                try {
                                        sipProcessor = 
kHandler.getSipManager().createSipStackProcessor(
diff --git 
a/openmeetings-core/src/main/java/org/apache/openmeetings/core/sip/SipStackProcessor.java
 
b/openmeetings-core/src/main/java/org/apache/openmeetings/core/sip/SipStackProcessor.java
index 36f1a2d..cb69f20 100644
--- 
a/openmeetings-core/src/main/java/org/apache/openmeetings/core/sip/SipStackProcessor.java
+++ 
b/openmeetings-core/src/main/java/org/apache/openmeetings/core/sip/SipStackProcessor.java
@@ -34,6 +34,7 @@ import java.util.concurrent.atomic.AtomicLong;
 import java.util.function.Consumer;
 
 import javax.sip.ClientTransaction;
+import javax.sip.Dialog;
 import javax.sip.DialogTerminatedEvent;
 import javax.sip.IOExceptionEvent;
 import javax.sip.ListeningPoint;
@@ -47,6 +48,7 @@ import javax.sip.TimeoutEvent;
 import javax.sip.TransactionTerminatedEvent;
 import javax.sip.address.Address;
 import javax.sip.address.AddressFactory;
+import javax.sip.header.CSeqHeader;
 import javax.sip.header.ContactHeader;
 import javax.sip.header.HeaderFactory;
 import javax.sip.message.MessageFactory;
@@ -165,8 +167,11 @@ public class SipStackProcessor implements SipListenerExt {
                Request rq = evt.getRequest();
                String method = rq.getMethod();
                try {
-                       if (Request.OPTIONS.equals(method)) {
-                               ServerTransaction transaction = 
sipProvider.getNewServerTransaction(rq);
+                       if (Request.OPTIONS.equals(method) || 
Request.BYE.equals(method)) {
+                               ServerTransaction transaction = 
evt.getServerTransaction();
+                               if (transaction == null) {
+                                       transaction = 
sipProvider.getNewServerTransaction(rq);
+                               }
                                Response resp = 
messageFactory.createResponse(200, rq);
                                resp.addHeader(contactHeader);
                                transaction.sendResponse(resp);
@@ -190,6 +195,7 @@ public class SipStackProcessor implements SipListenerExt {
                                if (REGISTER.equals(prevReq.getMethod())) {
                                        callbacks.onRegisterOk();
                                } else if (INVITE.equals(prevReq.getMethod())) {
+                                       ack(evt);
                                        callbacks.onInviteOk(new 
String((byte[])resp.getContent()));
                                }
                                break;
@@ -202,6 +208,18 @@ public class SipStackProcessor implements SipListenerExt {
                }
        }
 
+       private void ack(ResponseEvent evt) {
+               try {
+                       Response resp = evt.getResponse();
+                       Dialog dlg = evt.getDialog();
+                       CSeqHeader cseqHead = 
(CSeqHeader)resp.getHeader(CSeqHeader.NAME);
+                       Request ack = dlg.createAck(cseqHead.getSeqNumber());
+                       dlg.sendAck(ack);
+               } catch (Exception e) {
+                       log.error("ack {}", evt, e);
+               }
+       }
+
        private String getRnd(int count) {
                return rnd.ints('0', 'z' + 1)
                                .filter(ch -> (ch >= '0' && ch <= '9') || (ch 
>= 'a' && ch <= 'z'))

Reply via email to