Resolve SonarQube critical issues
authorKartik Anand <kartik.anand@samsung.com>
Wed, 31 May 2023 15:15:26 +0000 (20:45 +0530)
committerKartik Anand <kartik.anand@samsung.com>
Wed, 14 Jun 2023 11:55:34 +0000 (20:55 +0900)
android/aitt/src/main/java/com/samsung/android/aitt/Aitt.java
android/aitt/src/main/java/com/samsung/android/aitt/handler/RTSPHandler.java
android/aitt/src/main/java/com/samsung/android/aitt/handler/StreamHandler.java
android/aitt/src/main/java/com/samsung/android/aitt/handler/WebRTCHandler.java
android/aitt/src/test/java/com/samsung/android/aitt/AittUnitTest.java

index d244c75..d47e186 100644 (file)
@@ -59,7 +59,6 @@ public class Aitt {
     private final JniInterface mJniInterface;
     private final String ip;
     private final Context appContext;
-    private final long instance;
 
     private Map<String, ArrayList<SubscribeCallback>> subscribeCallbacks = new HashMap<>();
     private Map<String, Long> aittSubId = new HashMap<>();
@@ -164,7 +163,7 @@ public class Aitt {
             throw new IllegalArgumentException("Invalid ip");
 
         mJniInterface = new JniInterface();
-        instance = mJniInterface.init(id, ip, clearSession);
+        long instance = mJniInterface.init(id, ip, clearSession);
         if (instance == 0L)
             throw new InstantiationException("Failed to instantiate native instance");
 
@@ -215,6 +214,7 @@ public class Aitt {
     public void disconnect() {
         mJniInterface.publish(Definitions.JAVA_SPECIFIC_DISCOVERY_TOPIC, new byte[0], 0, Protocol.MQTT.getValue(), QoS.AT_LEAST_ONCE.ordinal(), true);
 
+        // ToDo : Disconnect the running stream instances
         mJniInterface.disconnect();
         try {
             close();
@@ -291,12 +291,17 @@ public class Aitt {
                 jniProtocols += p.getValue();
                 protocols.remove(p);
             }
+            if (isStreamProtocol(p)) {
+                Log.w(TAG, "Use AittStream interface to publish with " + p + " protocol");
+                protocols.remove(p);
+            }
         }
 
         if (jniProtocols > 0)
             mJniInterface.publish(topic, message, message.length, jniProtocols, qos.ordinal(), retain);
 
-        publishTransportProtocols(topic, message, protocols);
+        if (!protocols.isEmpty())
+            publishTransportProtocols(topic, message, protocols);
     }
 
     /**
@@ -325,47 +330,31 @@ public class Aitt {
      * @param protocols Protocols to be used to publish message
      */
     private void publishTransportProtocols(String topic, byte[] message, EnumSet<Protocol> protocols) {
-        for (Protocol protocol : protocols) {
-            try {
-                synchronized (this) {
-                    HostTable hostTable = getHostTable(topic);
-                    for (String hostIp : hostTable.hostMap.keySet()) {
-                        PortTable portTable = hostTable.hostMap.get(hostIp);
-                        if (portTable == null) {
-                            Log.e(TAG, "Port table for host [" + hostIp + "] is null.");
-                            continue;
-                        }
-                        for (Integer port : portTable.portMap.keySet()) {
-                            Pair<Protocol, Object> protocolPair = portTable.portMap.get(port);
-                            if (protocolPair == null) {
-                                Log.e(TAG, "Pair for port: " + port + "is null.");
-                                continue;
-                            }
-                            if (protocolPair.first == protocol)
-                                publishHandler(protocol, portTable, topic, protocolPair.second, hostIp, port, message);
-                        }
-                    }
-                }
-            } catch (Exception e) {
-                Log.e(TAG, "Error during publishing transport protocols", e);
+        synchronized (this) {
+            if (!publishTable.containsKey(topic)) {
+                Log.e(TAG, "No subscriber for the topic: " + topic);
+                return;
             }
-        }
-    }
 
-    /**
-     * Method to get a host table related to a specific topic
-     *
-     * @param topic String to which message needs to be published
-     */
-    private HostTable getHostTable(String topic) {
-        if (!publishTable.containsKey(topic))
-            throw new IllegalArgumentException("Invalid publish request over an unsubscribed topic");
-
-        HostTable hostTable = publishTable.get(topic);
-        if (hostTable == null)
-            throw new IllegalArgumentException("Host table for topic [" + topic + "] is null.");
+            HostTable hostTable = publishTable.get(topic);
+            if (hostTable == null) {
+                Log.e(TAG, "No host table entry for topic: " + topic);
+                return;
+            }
 
-        return hostTable;
+            for (Map.Entry<String, PortTable> entry : hostTable.hostMap.entrySet()) {
+                String hostIp = entry.getKey();
+                PortTable portTable = entry.getValue();
+                if (portTable == null)
+                    continue;
+                for (Integer port : portTable.portMap.keySet()) {
+                    Pair<Protocol, Object> protocolHandlerPair = portTable.portMap.get(port);
+                    if (protocolHandlerPair == null || !protocols.contains(protocolHandlerPair.first))
+                        continue;
+                    publishHandler(protocolHandlerPair.first, portTable, topic, protocolHandlerPair.second, hostIp, port, message);
+                }
+            }
+        }
     }
 
     /**
@@ -380,29 +369,42 @@ public class Aitt {
      * @param message             Data to be transferred over WebRTC
      */
     private void publishHandler(Protocol protocol, PortTable portTable, String topic, Object moduleHandlerObject, String ip, int port, byte[] message) {
-        // TODO: Validate protocol type.
-        TransportHandler transportHandler;
-        if (moduleHandlerObject == null) {
-            transportHandler = (TransportHandler) createModuleHandler(protocol);
+        try {
+            TransportHandler transportHandler;
+            if (moduleHandlerObject == null) {
+                transportHandler = (TransportHandler) createModuleHandler(protocol);
+                if (transportHandler != null)
+                    transportHandler.setAppContext(appContext);
+                portTable.portMap.replace(port, new Pair<>(protocol, transportHandler));
+            } else {
+                transportHandler = (TransportHandler) moduleHandlerObject;
+            }
+
             if (transportHandler != null)
-                transportHandler.setAppContext(appContext);
-            portTable.portMap.replace(port, new Pair<>(protocol, transportHandler));
-        } else {
-            transportHandler = (TransportHandler) moduleHandlerObject;
+                transportHandler.publish(topic, ip, port, message);
+        } catch (Exception e) {
+            Log.e(TAG, "Error during publishing transport protocols " + e.getMessage());
         }
-
-        if (transportHandler != null)
-            transportHandler.publish(topic, ip, port, message);
     }
 
     /**
      * Method to differentiate android specific protocol
      *
-     * @param protocols Protocol to be classified
+     * @param protocol Protocol to be classified
      * @return true if the protocol is using native publish/subscribe
      */
-    private boolean isUsingNativePubSub(Protocol protocols) {
-        return protocols.equals(Protocol.MQTT) || protocols.equals(Protocol.TCP) || protocols.equals(Protocol.TCP_SECURE);
+    private boolean isUsingNativePubSub(Protocol protocol) {
+        return protocol.equals(Protocol.MQTT) || protocol.equals(Protocol.TCP) || protocol.equals(Protocol.TCP_SECURE);
+    }
+
+    /**
+     * Method to check if it is a stream protocol
+     *
+     * @param protocol Protocol to be classified
+     * @return true if the protocol is a stream protocol
+     */
+    private boolean isStreamProtocol(Protocol protocol) {
+        return protocol.equals(Protocol.RTSP) || protocol.equals(Protocol.WEBRTC);
     }
 
     /**
@@ -710,7 +712,7 @@ public class Aitt {
 
             HostTable hostTable = publishTable.get(topic);
             if (hostTable == null) {
-                Log.d(TAG, "Host table for topic[" + topic + "] is null,");
+                Log.d(TAG, "[updatePublishTable] No host table entry for topic: " + topic);
                 return;
             }
             if (!hostTable.hostMap.containsKey(host)) {
@@ -722,7 +724,7 @@ public class Aitt {
 
             PortTable portTable = hostTable.hostMap.get(host);
             if (portTable == null) {
-                Log.d(TAG, "Port table for host[" + host + "] is null.");
+                Log.d(TAG, "[updatePublishTable] No port table entry for host: " + host);
                 return;
             }
             if (portTable.portMap.containsKey(port)) {
@@ -737,11 +739,11 @@ public class Aitt {
                     portLists.append(p);
                     portLists.append(", ");
                 }
-                Log.d(TAG, "Existing ports list: " + portLists);
+                Log.d(TAG, "[updatePublishTable] Existing ports list: " + portLists);
                 portTable.portMap.clear();
             }
 
-            Log.d(TAG, "[updatePublishTable] port " + port + "is added. (Topic,Host) = (" + topic + "," + host + ")");
+            Log.d(TAG, "[updatePublishTable] Port " + port + "is added. (Topic,Host) = (" + topic + "," + host + ")");
             portTable.portMap.put(port, new Pair<>(protocol, null));
         }
     }
index 4e8f4c0..422102f 100644 (file)
@@ -17,12 +17,9 @@ package com.samsung.android.aitt.handler;
 
 import android.content.Context;
 
-import static android.content.ContentValues.TAG;
 import static com.samsung.android.aitt.stream.RTSPStream.createPublisherStream;
 import static com.samsung.android.aitt.stream.RTSPStream.createSubscriberStream;
 
-import android.util.Log;
-
 import com.samsung.android.aitt.Aitt;
 import com.samsung.android.aitt.stream.AittStream;
 
@@ -32,6 +29,7 @@ public class RTSPHandler extends StreamHandler {
 
     @Override
     public void setAppContext(Context context) {
+        //ToDo : Not needed for now
     }
 
     @Override
index 485de5a..20ec909 100644 (file)
@@ -31,7 +31,6 @@ public class StreamHandler implements ModuleHandler {
      * @return returns stream object
      */
     AittStream newStreamModule(Aitt.Protocol protocol, String topic, AittStream.StreamRole role, Context context) throws InstantiationException {
-        // TODO: Change this function properly after refactoring WebRTC modules.
         return null;
     }
 
@@ -41,6 +40,6 @@ public class StreamHandler implements ModuleHandler {
      */
     @Override
     public void setAppContext(Context appContext) {
-        // TODO: implement this function.
+        // //ToDo : Not needed for now
     }
 }
index 5694978..b52ced8 100644 (file)
@@ -19,20 +19,17 @@ import static com.samsung.android.aitt.stream.WebRTCStream.createPublisherStream
 import static com.samsung.android.aitt.stream.WebRTCStream.createSubscriberStream;
 
 import android.content.Context;
-import android.util.Log;
 
 import com.samsung.android.aitt.Aitt;
-
 import com.samsung.android.aitt.stream.AittStream;
 
 import java.security.InvalidParameterException;
 
 public final class WebRTCHandler extends StreamHandler {
 
-    private static final String TAG = "WebRTCHandler";
-
     @Override
     public void setAppContext(Context context) {
+        //ToDo : Not needed for now
     }
 
     @Override
index 2c4586d..5e45896 100644 (file)
@@ -366,39 +366,6 @@ public class AittUnitTest {
     }
 
     @Test
-    public void testPublishWebRTC_P() {
-        try {
-            shadowJniInterface.setInitReturn(true);
-            Aitt aitt = new Aitt(appContext, aittId);
-            aitt.connect(brokerIp, port);
-
-            byte[] payload = message.getBytes();
-            aitt.publish(topic, payload, Aitt.Protocol.WEBRTC, Aitt.QoS.AT_MOST_ONCE, false);
-
-            aitt.disconnect();
-        } catch (Exception e) {
-            fail("Failed testPublishWebRTC " + e);
-        }
-    }
-
-    @Test
-    public void testPublishWebRTCInvalidTopic_N() {
-        try {
-            shadowJniInterface.setInitReturn(true);
-            Aitt aitt = new Aitt(appContext, aittId);
-            aitt.connect(brokerIp, port);
-
-            String _topic = "";
-            byte[] payload = message.getBytes();
-            assertThrows(IllegalArgumentException.class, () -> aitt.publish(_topic, payload, Aitt.Protocol.WEBRTC, Aitt.QoS.AT_MOST_ONCE, false));
-
-            aitt.disconnect();
-        } catch (Exception e) {
-            fail("Failed testPublishWebRTCInvalidTopic" + e);
-        }
-    }
-
-    @Test
     public void testPublishIpc_P() {
         try {
             shadowJniInterface.setInitReturn(true);
@@ -439,7 +406,9 @@ public class AittUnitTest {
             aitt.connect(brokerIp, port);
 
             byte[] payload = message.getBytes();
-            aitt.publish(topic, payload, Aitt.Protocol.TCP, Aitt.QoS.AT_LEAST_ONCE, false);
+            aitt.publish(topic, payload, Aitt.Protocol.MQTT);
+            aitt.publish(topic, payload, Aitt.Protocol.TCP, Aitt.QoS.EXACTLY_ONCE);
+            aitt.publish(topic, payload, Aitt.Protocol.TCP, Aitt.QoS.AT_LEAST_ONCE, true);
 
             aitt.disconnect();
         } catch (Exception e) {