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/10/30 03:02:41 UTC

[openmeetings] branch master updated: [OPENMEETINGS-2239] code clean-up

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 2807167  [OPENMEETINGS-2239] code clean-up
2807167 is described below

commit 2807167a7a571f700f9f27d63468ba6681b4a93b
Author: Maxim Solodovnik <so...@gmail.com>
AuthorDate: Fri Oct 30 09:43:09 2020 +0700

    [OPENMEETINGS-2239] code clean-up
---
 .../org/apache/openmeetings/core/remote/KStream.java  | 17 +++++++++++------
 .../apache/openmeetings/core/sip/ISipCallbacks.java   |  3 ++-
 .../org/apache/openmeetings/core/sip/SipManager.java  | 17 ++++++++++++++++-
 .../openmeetings/core/sip/SipStackProcessor.java      | 19 ++++++++++++-------
 .../org/apache/openmeetings/web/app/Application.java  |  2 +-
 5 files changed, 42 insertions(+), 16 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 8410cd3..650ecbe 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
@@ -179,10 +179,8 @@ public class KStream extends AbstractStream implements ISipCallbacks {
 		sipProcessor = kHandler.getSipManager().createSipStackProcessor(
 				randomUUID().toString()
 				, kRoom.getRoom()
-				, this); // TODO check this
-		sipProcessor.ifPresent(ssp -> {
-			ssp.register();
-		});
+				, this);
+		sipProcessor.ifPresent(SipStackProcessor::register);
 		if (kRoom.isRecording()) {
 			startRecord();
 		}
@@ -545,8 +543,15 @@ public class KStream extends AbstractStream implements ISipCallbacks {
 	}
 
 	@Override
-	public void onRegister() {
+	public void onRegisterOk() {
 		rtpEndpoint = getRtpEndpoint(pipeline);
-		sipProcessor.get().invite(kRoom.getRoom(), sdpOffer);
+		outgoingMedia.connect(rtpEndpoint, MediaType.AUDIO); //TODO VIDEO
+		sipProcessor.get().invite(kRoom.getRoom(), null);
+	}
+
+	@Override
+	public void onInviteOk(String sdp) {
+		String answer = rtpEndpoint.processOffer(sdp);
+		sipProcessor.get().invite(kRoom.getRoom(), answer);
 	}
 }
diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/sip/ISipCallbacks.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/sip/ISipCallbacks.java
index a11fc98..a04f275 100644
--- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/sip/ISipCallbacks.java
+++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/sip/ISipCallbacks.java
@@ -19,5 +19,6 @@
 package org.apache.openmeetings.core.sip;
 
 public interface ISipCallbacks {
-	void onRegister();
+	void onRegisterOk();
+	void onInviteOk(String sdp);
 }
diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/sip/SipManager.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/sip/SipManager.java
index 4c42e88..c55463b 100644
--- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/sip/SipManager.java
+++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/sip/SipManager.java
@@ -21,6 +21,7 @@ package org.apache.openmeetings.core.sip;
 import static org.apache.openmeetings.util.OmFileHelper.SIP_USER_ID;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.isSipEnabled;
 
+import java.util.BitSet;
 import java.util.Optional;
 import java.util.function.Function;
 
@@ -84,6 +85,7 @@ public class SipManager implements ISipManager {
 
 	private ManagerConnectionFactory factory;
 	private String sipUserPicture;
+	private BitSet ports;
 
 	@PostConstruct
 	public void init() {
@@ -93,6 +95,7 @@ public class SipManager implements ISipManager {
 					, managerPort
 					, managerUser
 					, managerPass);
+			ports = new BitSet(maxLocalWsPort - minLocalWsPort);
 		}
 	}
 
@@ -273,6 +276,18 @@ public class SipManager implements ISipManager {
 			log.warn("Asterisk is not configured or denied in room #{}", r.getId());
 			return Optional.empty();
 		}
-		return Optional.of(new SipStackProcessor(this, name, minLocalWsPort, callbacks)); /// FIXME TODO
+		int port;
+		synchronized (ports) {
+			int free = ports.nextClearBit(0);
+			ports.flip(free);
+			port = minLocalWsPort + free;
+		}
+		return Optional.of(new SipStackProcessor(this, name, port, callbacks));
+	}
+
+	void freePort(int port) {
+		synchronized (ports) {
+			ports.clear(port - minLocalWsPort);
+		}
 	}
 }
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 483f148..36f1a2d 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
@@ -106,7 +106,9 @@ public class SipStackProcessor implements SipListenerExt {
 
 		final Properties properties = new Properties();
 		properties.setProperty("javax.sip.STACK_NAME", name);
-		//properties.setProperty("gov.nist.javax.sip.TRACE_LEVEL", "32");
+		if (log.isTraceEnabled()) {
+			properties.setProperty("gov.nist.javax.sip.TRACE_LEVEL", "32");
+		}
 		properties.setProperty("gov.nist.javax.sip.LOG_MESSAGE_CONTENT", "true");
 		properties.setProperty("gov.nist.javax.sip.MESSAGE_PROCESSOR_FACTORY", NioMessageProcessorFactory.class.getName());
 		sipStack = new SipStackImpl(properties);
@@ -186,7 +188,9 @@ public class SipStackProcessor implements SipListenerExt {
 				break;
 			case OK:
 				if (REGISTER.equals(prevReq.getMethod())) {
-					callbacks.onRegister();
+					callbacks.onRegisterOk();
+				} else if (INVITE.equals(prevReq.getMethod())) {
+					callbacks.onInviteOk(new String((byte[])resp.getContent()));
 				}
 				break;
 			case TRYING:
@@ -248,8 +252,6 @@ public class SipStackProcessor implements SipListenerExt {
 
 			reqCons.accept(request);
 
-			log.debug("sendRequest: \n\n{}", request);
-
 			ClientTransaction trans = sipProvider.getNewClientTransaction(request);
 			trans.sendRequest();
 		} catch (Exception e) {
@@ -315,15 +317,18 @@ public class SipStackProcessor implements SipListenerExt {
 				, req -> {
 					try {
 						addAllow(req);
-						req.addHeader(headerFactory.createContentLengthHeader(sdp.length()));
-						req.setContent(sdp, headerFactory.createContentTypeHeader("application", "sdp"));
+						if (sdp != null) {
+							req.addHeader(headerFactory.createContentLengthHeader(sdp.length()));
+							req.setContent(sdp, headerFactory.createContentTypeHeader("application", "sdp"));
+						}
 					} catch (Exception e) {
-						log.error("fail to create allow header", e);
+						log.error("fail patch invite request", e);
 					}
 				});
 	}
 
 	public void destroy() {
 		sipStack.stop();
+		manager.freePort(localWsPort);
 	}
 }
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java
index 8adf62f..d1ba947 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java
@@ -285,7 +285,7 @@ public class Application extends AuthenticatedWebApplication implements IApplica
 		if (sc != null) {
 			sc.setDefaultMaxSessionIdleTimeout(60 * 1000L); // should be enough, should it be configurable?
 		}
-		getHeaderResponseDecorators().add(response -> new FilteringHeaderResponse(response));
+		getHeaderResponseDecorators().add(FilteringHeaderResponse::new);
 		super.init();
 		final IBootstrapSettings settings = new BootstrapSettings();
 		settings.setThemeProvider(new BootswatchThemeProvider(BootswatchTheme.Sandstone));//FIXME TODO new SingleThemeProvider(new MaterialDesignTheme())