You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openmeetings.apache.org by so...@apache.org on 2020/12/16 17:24:25 UTC

[openmeetings] branch master updated: [OPENMEETINGS-2239] audio room -> softphone seems to work

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 <so...@gmail.com>
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'))