Adding backup for AmcrestCamera firmware; porting BlossomSprinkler driver from the...
[iot2.git] / iotjava / iotruntime / master / IoTMaster.java
index 568c939a9b2448a1cc323db7a1e60729be5eb900..7dc41d7a2b2274c70ba2c1ccb79b1102be9ef372 100644 (file)
@@ -40,7 +40,7 @@ import static java.lang.Math.toIntExact;
  * @version     1.0
  * @since       2016-06-16
  */
-public class IoTMaster {
+public final class IoTMaster {
 
        /**
         * IoTMaster class properties
@@ -102,6 +102,7 @@ public class IoTMaster {
        private static String STR_LANGUAGE_CONTROLLER;
        private static String STR_SKEL_CLASS_SUFFIX;
        private static String STR_STUB_CLASS_SUFFIX;
+       private static String STR_ACTIVATE_SANDBOXING;
        private static boolean BOOL_VERBOSE;
 
        /**
@@ -198,6 +199,7 @@ public class IoTMaster {
                STR_JVM_INIT_HEAP_SIZE = null;
                STR_JVM_MAX_HEAP_SIZE = null;
                STR_LANGUAGE_CONTROLLER = null;
+               STR_ACTIVATE_SANDBOXING = null;
                BOOL_VERBOSE = false;
        }
 
@@ -277,6 +279,7 @@ public class IoTMaster {
                STR_JVM_MAX_HEAP_SIZE = prop.getProperty("JVM_MAX_HEAP_SIZE");
                STR_SKEL_CLASS_SUFFIX = prop.getProperty("SKEL_CLASS_SUFFIX");
                STR_STUB_CLASS_SUFFIX = prop.getProperty("STUB_CLASS_SUFFIX");
+               STR_ACTIVATE_SANDBOXING = prop.getProperty("ACTIVATE_SANDBOXING");
                if(prop.getProperty("VERBOSE").equals(STR_YES)) {
                        BOOL_VERBOSE = true;
                }
@@ -301,6 +304,7 @@ public class IoTMaster {
                RuntimeOutput.print("STR_JVM_MAX_HEAP_SIZE=" + STR_JVM_MAX_HEAP_SIZE, BOOL_VERBOSE);
                RuntimeOutput.print("STR_SKEL_CLASS_SUFFIX=" + STR_SKEL_CLASS_SUFFIX, BOOL_VERBOSE);
                RuntimeOutput.print("STR_STUB_CLASS_SUFFIX=" + STR_STUB_CLASS_SUFFIX, BOOL_VERBOSE);
+               RuntimeOutput.print("STR_ACTIVATE_SANDBOXING=" + STR_ACTIVATE_SANDBOXING, BOOL_VERBOSE);
                RuntimeOutput.print("BOOL_VERBOSE=" + BOOL_VERBOSE, BOOL_VERBOSE);
                RuntimeOutput.print("IoTMaster: Information extracted successfully!", BOOL_VERBOSE);
        }
@@ -412,6 +416,7 @@ public class IoTMaster {
 
                // Get information from the set
                List<Object[]> listObject = objAddInitHand.getFields(strFieldIdentifier);
+        RuntimeOutput.print("IoTMaster: DEBUG: Getting into instrumentIoTSetDevice!", BOOL_VERBOSE);
                // Create a new IoTSet
                if(strLanguage.equals(STR_JAVA)) {
                        Message msgCrtIoTSet = new MessageCreateSetRelation(IoTCommCode.CREATE_NEW_IOTSET, strFieldName);
@@ -636,11 +641,13 @@ public class IoTMaster {
                        // Configure MAC policies for objects
                        //String strFileName = STR_MAC_POL_PATH + strObjClassName + STR_MAC_POLICY_EXT;
                        String strFileName = STR_MAC_POL_PATH + STR_JAVA + STR_MAC_POLICY_EXT;
-                       processJailConfig.configureProcessJailDeviceDriverPolicies(strIoTSlaveObjectHostAdd, strObjName, strObjClassName,
-                               strFileName, strIoTMasterHostAdd, commHan.getComPort(strObjName), commHan.getRMIRegPort(strObjName), 
-                               commHan.getRMIStubPort(strObjName));
-                       processJailConfig.configureProcessJailContRMIPolicies(strObjControllerName, strIoTSlaveObjectHostAdd, 
-                               commHan.getRMIRegPort(strObjName), commHan.getRMIStubPort(strObjName));
+                       if (STR_ACTIVATE_SANDBOXING.equals("Yes")) {
+                               processJailConfig.configureProcessJailDeviceDriverPolicies(strIoTSlaveObjectHostAdd, strObjName, strObjClassName,
+                                       strFileName, strIoTMasterHostAdd, commHan.getComPort(strObjName), commHan.getRMIRegPort(strObjName), 
+                                       commHan.getRMIStubPort(strObjName));
+                               processJailConfig.configureProcessJailContRMIPolicies(strObjControllerName, strIoTSlaveObjectHostAdd, 
+                                       commHan.getRMIRegPort(strObjName), commHan.getRMIStubPort(strObjName));
+                       }
                        // Instrument the IoTSet declarations inside the class file
                        instrumentObjectIoTSet(strFieldObjectID, strLanguage);
                }
@@ -732,7 +739,8 @@ public class IoTMaster {
                                routerConfig.configureRouterHTTPPolicies(STR_ROUTER_ADD, strIoTSlaveObjectHostAdd, strDeviceAddress);
                                routerConfig.configureHostHTTPPolicies(strIoTSlaveObjectHostAdd, strIoTSlaveObjectHostAdd, strDeviceAddress);
                                // Configure MAC policies
-                               processJailConfig.configureProcessJailGWDevicePolicies(strIoTSlaveObjectHostAdd, STR_ROUTER_ADD, INT_DNS_PORT);
+                               if (STR_ACTIVATE_SANDBOXING.equals("Yes"))
+                                       processJailConfig.configureProcessJailGWDevicePolicies(strIoTSlaveObjectHostAdd, STR_ROUTER_ADD, INT_DNS_PORT);
                        } else {
                                // Other port numbers...
                                commHan.addDevicePort(iDestDeviceDriverPort);
@@ -741,8 +749,9 @@ public class IoTMaster {
                                routerConfig.configureHostMainPolicies(strIoTSlaveObjectHostAdd, strIoTSlaveObjectHostAdd, strDeviceAddress, strProtocol, 
                                        commHan.getComPort(strDeviceAddressKey), iDestDeviceDriverPort);
                                // Configure MAC policies
-                               processJailConfig.configureProcessJailDevicePolicies(strIoTSlaveObjectHostAdd, strProtocol,
-                                       commHan.getComPort(strDeviceAddressKey), strDeviceAddress, iDestDeviceDriverPort);
+                               if (STR_ACTIVATE_SANDBOXING.equals("Yes"))
+                                       processJailConfig.configureProcessJailDevicePolicies(strIoTSlaveObjectHostAdd, strProtocol,
+                                               commHan.getComPort(strDeviceAddressKey), strDeviceAddress, iDestDeviceDriverPort);
                        }
                }
        }
@@ -769,10 +778,12 @@ public class IoTMaster {
                        // Get device address
                        String strAddress = (String) arrFieldValues[0];
                        // Setting up router policies for HTTP/HTTPs
-                       if (strControllerName != null) {
-                               processJailConfig.configureProcessJailInetAddressPolicies(strControllerName, strAddress);
-                       } else {
-                               processJailConfig.configureProcessJailInetAddressPolicies(strHostAddress, strAddress);
+                       if (STR_ACTIVATE_SANDBOXING.equals("Yes")) {
+                               if (strControllerName != null) {
+                                       processJailConfig.configureProcessJailInetAddressPolicies(strControllerName, STR_ROUTER_ADD, strAddress);
+                               } else {
+                                       processJailConfig.configureProcessJailInetAddressPolicies(strHostAddress, STR_ROUTER_ADD, strAddress);
+                               }
                        }
                        routerConfig.configureRouterHTTPPolicies(STR_ROUTER_ADD, strHostAddress, strAddress);
                        routerConfig.configureHostHTTPPolicies(strHostAddress, strHostAddress, strAddress);
@@ -1075,6 +1086,7 @@ public class IoTMaster {
                                if(setInstrumenter.getObjTableName().equals(STR_IOT_DEV_ADD_CLS)) { 
                                // Instrument the normal IoTDeviceAddress
                                        synchronized(this) {
+                                   //RuntimeOutput.print("IoTMaster: DEBUG: Processing " + STR_IOT_DEV_ADD_CLS + "!", BOOL_VERBOSE);
                                                instrumentIoTSetDevice(strFieldIdentifier, strObjName, strFieldName, strIoTSlaveObjectHostAdd, inStream, outStream, strLanguageDriver);
                                        }
                                } else if(setInstrumenter.getObjTableName().equals(STR_IOT_ZB_ADD_CLS)) { 
@@ -2060,9 +2072,11 @@ public class IoTMaster {
                                }
                                // Write basic MAC policies for controller
                                //String strFileName = STR_MAC_POL_PATH + strObjControllerName + STR_MAC_POLICY_EXT;
-                               String strFileName = STR_MAC_POL_PATH + STR_JAVA + STR_MAC_POLICY_EXT;
-                               processJailConfig.configureProcessJailControllerPolicies(strObjControllerName, strFileName, 
-                                       strIoTMasterHostAdd, commHan.getComPort(strObjControllerName));
+                               if (STR_ACTIVATE_SANDBOXING.equals("Yes")) {
+                                       String strFileName = STR_MAC_POL_PATH + STR_JAVA + STR_MAC_POLICY_EXT;
+                                       processJailConfig.configureProcessJailControllerPolicies(strObjControllerName, strFileName, 
+                                               strIoTMasterHostAdd, commHan.getComPort(strObjControllerName));
+                               }
                                // PROFILING
                                result = System.currentTimeMillis()-start;
                                System.out.println("\n\n ==> From IoTSlave start until main controller object is created: " + result);
@@ -2192,8 +2206,8 @@ public class IoTMaster {
                                serverSocket.close();
                                commHan.printLists();
                                lbIoT.printHostInfo();
-                               // TODO: Uncomment this - just for experiments!
-                               createMACPolicyThreads(setAddresses);
+                               if (STR_ACTIVATE_SANDBOXING.equals("Yes"))
+                                       createMACPolicyThreads(setAddresses);
                        }
 
                } catch (IOException          |