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'))