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 e61a5cb  [OPENMEETINGS-2239] less errors in SIP communications
e61a5cb is described below

commit e61a5cbba61bdbe55eb624bc348528764f0562d4
Author: Maxim Solodovnik <[email protected]>
AuthorDate: Wed Dec 16 22:24:10 2020 +0700

    [OPENMEETINGS-2239] less errors in SIP communications
---
 .../org/apache/openmeetings/core/remote/KRoom.java |  12 ++++++
 .../apache/openmeetings/core/remote/KStream.java   |  42 +++++++++++++++------
 .../openmeetings/core/remote/KurentoHandler.java   |   4 ++
 .../apache/openmeetings/core/sip/SipManager.java   |  19 +++++-----
 .../apache/openmeetings/web/app/TimerService.java  |   7 +++-
 openmeetings-web/src/main/webapp/css/raw-room.css  |   4 +-
 openmeetings-web/src/main/webapp/images/phone.png  | Bin 1112 -> 1725 bytes
 openmeetings-web/src/main/webapp/images/phone.svg  |   5 +++
 pom.xml                                            |  11 ++++++
 9 files changed, 79 insertions(+), 25 deletions(-)

diff --git 
a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KRoom.java
 
b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KRoom.java
index d1f993d..8caaaae 100644
--- 
a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KRoom.java
+++ 
b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KRoom.java
@@ -67,6 +67,7 @@ public class KRoom {
        private final AtomicBoolean recordingStarted = new AtomicBoolean(false);
        private final AtomicBoolean sharingStarted = new AtomicBoolean(false);
        private Long recordingId = null;
+       private int sipCount = 0;
        private JSONObject recordingUser = new JSONObject();
        private JSONObject sharingUser = new JSONObject();
 
@@ -247,4 +248,15 @@ public class KRoom {
                processor.getByRoom(room.getId()).forEach(KStream::release);
                log.debug("Room {} closed", room.getId());
        }
+
+       public void updateSipCount(final int count) {
+               if (count != sipCount) {
+                       sipCount = count;
+                       processor.getByRoom(room.getId()).forEach(stream -> 
stream.addSipProcessor(count));
+               }
+       }
+
+       public int getSipCount() {
+               return sipCount;
+       }
 }
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 d744c18..ab8a099 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
@@ -80,13 +80,12 @@ public class KStream extends AbstractStream implements 
ISipCallbacks {
        private RecorderEndpoint recorder;
        private WebRtcEndpoint outgoingMedia = null;
        private RtpEndpoint rtpEndpoint;
-       private Optional<SipStackProcessor> sipProcessor;
+       private Optional<SipStackProcessor> sipProcessor = Optional.empty();
        private final ConcurrentMap<String, WebRtcEndpoint> listeners = new 
ConcurrentHashMap<>();
        private Optional<CompletableFuture<Object>> flowoutFuture = 
Optional.empty();
        private ListenerSubscription flowoutSubscription;
        private Long chunkId;
        private Type type;
-       private String sdpOffer;
        private boolean hasAudio;
        private boolean hasVideo;
        private boolean hasScreen;
@@ -153,7 +152,6 @@ public class KStream extends AbstractStream implements 
ISipCallbacks {
        }
 
        private void internalStartBroadcast(final StreamDesc sd, final String 
sdpOffer) throws Exception {
-               this.sdpOffer = sdpOffer;
                outgoingMedia = createEndpoint(sd.getSid(), sd.getUid());
                outgoingMedia.addMediaSessionTerminatedListener(evt -> 
log.warn("Media stream terminated {}", sd));
                flowoutSubscription = 
outgoingMedia.addMediaFlowOutStateChangeListener(evt -> {
@@ -174,11 +172,7 @@ public class KStream extends AbstractStream implements 
ISipCallbacks {
                });
                outgoingMedia.addMediaFlowInStateChangeListener(evt -> 
log.warn("Media FlowIn :: {}", evt));
                addListener(sd.getSid(), sd.getUid(), sdpOffer);
-               sipProcessor = kHandler.getSipManager().createSipStackProcessor(
-                               randomUUID().toString()
-                               , kRoom.getRoom()
-                               , this);
-               sipProcessor.ifPresent(SipStackProcessor::register);
+               addSipProcessor(kRoom.getSipCount());
                if (kRoom.isRecording()) {
                        startRecord();
                }
@@ -490,6 +484,24 @@ public class KStream extends AbstractStream implements 
ISipCallbacks {
                }
        }
 
+       void addSipProcessor(int count) {
+               if (kRoom.getSipCount() > 0) {
+                       if (sipProcessor.isEmpty()) {
+                               try {
+                                       sipProcessor = 
kHandler.getSipManager().createSipStackProcessor(
+                                                       randomUUID().toString()
+                                                       , kRoom.getRoom()
+                                                       , this);
+                                       
sipProcessor.ifPresent(SipStackProcessor::register);
+                               } catch (Exception e) {
+                                       log.error("Unexpected error while 
creating SipProcessor", e);
+                               }
+                       }
+               } else {
+                       releaseRtp();
+               }
+       }
+
        private static JSONObject convert(com.google.gson.JsonObject o) {
                return new JSONObject(o.toString());
        }
@@ -557,14 +569,20 @@ public class KStream extends AbstractStream implements 
ISipCallbacks {
 
        @Override
        public void onRegisterOk() {
+               //TODO code for `SIP master` stream
                rtpEndpoint = getRtpEndpoint(pipeline);
-               outgoingMedia.connect(rtpEndpoint, MediaType.AUDIO); //TODO 
VIDEO
-               sipProcessor.get().invite(kRoom.getRoom(), null);
+               if (hasAudio) {
+                       outgoingMedia.connect(rtpEndpoint, MediaType.AUDIO);
+               }
+               if (hasVideo) {
+                       outgoingMedia.connect(rtpEndpoint, MediaType.VIDEO);
+               }
+               sipProcessor.get().invite(kRoom.getRoom(), 
rtpEndpoint.generateOffer());
        }
 
        @Override
        public void onInviteOk(String sdp) {
-               String answer = rtpEndpoint.processOffer(sdp);
-               sipProcessor.get().invite(kRoom.getRoom(), answer);
+               //TODO code for `SIP master` stream
+               rtpEndpoint.processAnswer(sdp);
        }
 }
diff --git 
a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KurentoHandler.java
 
b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KurentoHandler.java
index ac4fab6..4dc8a07 100644
--- 
a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KurentoHandler.java
+++ 
b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KurentoHandler.java
@@ -317,6 +317,10 @@ public class KurentoHandler {
                return rooms.values();
        }
 
+       public void updateSipCount(Room r, int count) {
+               getRoom(r.getId()).updateSipCount(count);
+       }
+
        static JSONObject newKurentoMsg() {
                return new JSONObject().put("type", KURENTO_TYPE);
        }
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 c55463b..391f551 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
@@ -194,16 +194,15 @@ public class SipManager implements ISipManager {
                exec(da);
        }
 
-       public Integer countUsers(String confno) {
-               if (confno == null) {
-                       return null;
-               }
-               ConfbridgeListAction da = new ConfbridgeListAction(confno);
-               ResponseEvents r = execEvent(da);
-               if (r != null) {
-                       log.trace("SipManager::countUsers size == {}", 
r.getEvents().size());
-                       // "- 1" here means: ListComplete event
-                       return r.getEvents().size() - 1;
+       public int countUsers(String confno) {
+               if (confno != null) {
+                       ConfbridgeListAction da = new 
ConfbridgeListAction(confno);
+                       ResponseEvents r = execEvent(da);
+                       if (r != null) {
+                               log.trace("SipManager::countUsers size == {}", 
r.getEvents().size());
+                               // "- 1" here means: ListComplete event
+                               return r.getEvents().size() - 1;
+                       }
                }
                return 0;
        }
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/TimerService.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/TimerService.java
index a8bd24b..bf9ca35 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/TimerService.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/TimerService.java
@@ -29,6 +29,7 @@ import java.util.function.Predicate;
 
 import javax.annotation.PostConstruct;
 
+import org.apache.openmeetings.core.remote.KurentoHandler;
 import org.apache.openmeetings.core.sip.SipManager;
 import org.apache.openmeetings.core.util.WebSocketHelper;
 import org.apache.openmeetings.db.entity.basic.Client;
@@ -55,6 +56,8 @@ public class TimerService {
        private ClientManager cm;
        @Autowired
        private SipManager sipManager;
+       @Autowired
+       private KurentoHandler kHandler;
 
        @PostConstruct
        private void init() {
@@ -97,7 +100,9 @@ public class TimerService {
        }
 
        private void updateSipLastName(Optional<Client> sipClient, Room r) {
-               final String newLastName = "(" + 
sipManager.countUsers(r.getConfno()) + ")";
+               int count = sipManager.countUsers(r.getConfno());
+               final String newLastName = "(" + count + ")";
+               kHandler.updateSipCount(r, count);
                sipClient.ifPresentOrElse(c -> {
                        if (!newLastName.equals(c.getUser().getLastname())) {
                                
c.getUser().setLastname(newLastName).resetDisplayName();
diff --git a/openmeetings-web/src/main/webapp/css/raw-room.css 
b/openmeetings-web/src/main/webapp/css/raw-room.css
index f52cf5d..4ed6934 100644
--- a/openmeetings-web/src/main/webapp/css/raw-room.css
+++ b/openmeetings-web/src/main/webapp/css/raw-room.css
@@ -77,13 +77,13 @@ html[dir="rtl"] .room-block .sb-wb .sidebar {
        min-height: 60px;
        padding-left: 5px;
        padding-top: 5px;
-       background-size: 60px 60px;
+       background-size: 55px;
        background-repeat: no-repeat;
        background-position: 2px 2px;
        position: relative;
 }
 .room-block .sb-wb .sidebar .user-list .user.entry:hover {
-       background-size: 80px 80px;
+       background-size: 75px;
        min-height: 80px;
 }
 .room-block .sb-wb .sidebar .user-list .user.entry:hover .user.name {
diff --git a/openmeetings-web/src/main/webapp/images/phone.png 
b/openmeetings-web/src/main/webapp/images/phone.png
index 9ed6449..3bec0a3 100644
Binary files a/openmeetings-web/src/main/webapp/images/phone.png and 
b/openmeetings-web/src/main/webapp/images/phone.png differ
diff --git a/openmeetings-web/src/main/webapp/images/phone.svg 
b/openmeetings-web/src/main/webapp/images/phone.svg
new file mode 100644
index 0000000..bac9fe8
--- /dev/null
+++ b/openmeetings-web/src/main/webapp/images/phone.svg
@@ -0,0 +1,5 @@
+<!--
+  Taken from https://fontawesome.com/icons/phone-alt?style=solid
+  Icons — CC BY 4.0 License https://creativecommons.org/licenses/by/4.0/
+-->
+<svg aria-hidden="true" focusable="false" data-prefix="fas" 
data-icon="phone-alt" class="svg-inline--fa fa-phone-alt fa-w-16" role="img" 
xmlns="http://www.w3.org/2000/svg"; viewBox="0 0 512 512"><path 
fill="currentColor" d="M497.39 361.8l-112-48a24 24 0 0 0-28 6.9l-49.6 
60.6A370.66 370.66 0 0 1 130.6 204.11l60.6-49.6a23.94 23.94 0 0 0 
6.9-28l-48-112A24.16 24.16 0 0 0 122.6.61l-104 24A24 24 0 0 0 0 48c0 256.5 
207.9 464 464 464a24 24 0 0 0 23.4-18.6l24-104a24.29 24.29 0 0 
0-14.01-27.6z"></p [...]
diff --git a/pom.xml b/pom.xml
index c119863..f94f5ab 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1012,6 +1012,14 @@
                                                                        
<pattern>BSD-style license</pattern>
                                                                </patterns>
                                                        </license>
+                                                       <license 
implementation="org.apache.rat.analysis.license.SimplePatternBasedLicense">
+                                                               
<licenseFamilyCategory>Creative Commons Attribution</licenseFamilyCategory>
+                                                               
<licenseFamilyName>CC BY</licenseFamilyName>
+                                                               <notes></notes>
+                                                               <patterns>
+                                                                       
<pattern>creativecommons.org/licenses/by/4.0</pattern>
+                                                               </patterns>
+                                                       </license>
                                                </licenses>
                                                <licenseFamilies>
                                                        <licenseFamily 
implementation="org.apache.rat.license.SimpleLicenseFamily">
@@ -1020,6 +1028,9 @@
                                                        <licenseFamily 
implementation="org.apache.rat.license.SimpleLicenseFamily">
                                                                
<familyName>BSD</familyName>
                                                        </licenseFamily>
+                                                       <licenseFamily 
implementation="org.apache.rat.license.SimpleLicenseFamily">
+                                                               <familyName>CC 
BY</familyName>
+                                                       </licenseFamily>
                                                </licenseFamilies>
                                                <excludes>
                                                        
<exclude>**/*.mp3</exclude>

Reply via email to