Merge branch 'master' of ssh://plrg.eecs.uci.edu/home/git/iot2
[iot2.git] / iotjava / iotpolicy / IoTCompiler.java
index f127cdaf833f5d637d5e1847daa6ac1b3a2c44f2..a1144919e47a8f3e8e62be71e4fb692d9fe7c4f5 100644 (file)
@@ -61,6 +61,7 @@ public class IoTCompiler {
        private String subdir;
        private Map<String,Integer> mapPortCount;       // Counter for ports
        private static int portCount = 0;
+       private static int countObjId = 1;                      // Always increment object Id for a new stub/skeleton
        private String mainClass;
 
 
@@ -143,7 +144,7 @@ public class IoTCompiler {
                mapIntfacePTH.put(origInt, ptHandler);
                mapIntDeclHand.put(origInt, decHandler);
                // Set object Id counter to 0 for each interface
-               mapIntfaceObjId.put(origInt, new Integer(0));
+               mapIntfaceObjId.put(origInt, countObjId++);
        }
 
 
@@ -363,9 +364,9 @@ public class IoTCompiler {
         */
        private void updateIntfaceObjIdMap(String intface, String newIntface) {
 
+               // We are assuming that we only generate one stub per one skeleton at this point @Feb 2017
                Integer objId = mapIntfaceObjId.get(intface);
                mapNewIntfaceObjId.put(newIntface, objId);
-               mapIntfaceObjId.put(intface, objId++);
        }
 
 
@@ -416,8 +417,8 @@ public class IoTCompiler {
                for (Map.Entry<String,Set<String>> intMeth : mapNewIntMethods.entrySet()) {
                        String newIntface = intMeth.getKey();
                        int newObjectId = getNewIntfaceObjectId(newIntface);
-                       println("private final static int object" + newObjectId + "Id = " + 
-                               newObjectId + ";\t//" + newIntface);
+                       //println("private final static int object" + newObjectId + "Id = " + 
+                       //      newObjectId + ";\t//" + newIntface);
                        Set<String> methodIds = intMeth.getValue();
                        print("private static Integer[] object" + newObjectId + "Permission = { ");
                        int i = 0;
@@ -520,42 +521,6 @@ public class IoTCompiler {
        }
 
 
-       /**
-        * HELPER: writeJavaMethodCallbackPermission() writes permission checks in stub for callbacks
-        */
-       private void writeJavaMethodCallbackPermission(String intface) {
-
-               println("int methodId = IoTRMIObject.getMethodId(method);");
-               // Get all the different stubs
-               Map<String,Set<String>> mapNewIntMethods = mapInt2NewInts.get(intface);
-               for (Map.Entry<String,Set<String>> intMeth : mapNewIntMethods.entrySet()) {
-                       String newIntface = intMeth.getKey();
-                       int newObjectId = getNewIntfaceObjectId(newIntface);
-                       println("if (!set" + newObjectId + "Allowed.contains(methodId)) {");
-                       println("throw new Error(\"Callback object for " + intface + " is not allowed to access method: \" + methodId);");
-                       println("}");
-               }
-       }
-
-
-       /**
-        * HELPER: writeJavaInitCallbackPermission() writes the permission for callback
-        */
-       private void writeJavaInitCallbackPermission(String intface, InterfaceDecl intDecl, boolean callbackExist) {
-
-               if (callbackExist) {
-                       String method = "___initCallBack()";
-                       int methodNumId = intDecl.getHelperMethodNumId(method);
-                       Map<String,Set<String>> mapNewIntMethods = mapInt2NewInts.get(intface);
-                       for (Map.Entry<String,Set<String>> intMeth : mapNewIntMethods.entrySet()) {
-                               String newIntface = intMeth.getKey();
-                               int newObjectId = getNewIntfaceObjectId(newIntface);
-                               println("set" + newObjectId + "Allowed.add(" + methodNumId + ");");
-                       }
-               }
-       }
-
-
        /**
         * HELPER: getPortCount() gets port count for different stubs and skeletons
         */
@@ -1191,7 +1156,9 @@ public class IoTCompiler {
        private void writePropertiesJavaSkeleton(String intface, InterfaceDecl intDecl) {
 
                println("private " + intface + " mainObj;");
-               println("private int objectId = 0;");
+               //println("private int objectId = 0;");
+               Integer objId = mapIntfaceObjId.get(intface);
+               println("private int objectId = " + objId + ";");
                println("// Communications and synchronizations");
                println("private IoTRMIComm rmiComm;");
                println("private AtomicBoolean didAlreadyInitWaitInvoke;");
@@ -1245,7 +1212,6 @@ public class IoTCompiler {
                println("rmiComm = new IoTRMICommServer(_portSend, _portRecv);");
                // Generate permission control initialization
                writeConstructorJavaPermission(intface);
-               //writeJavaInitCallbackPermission(intface, intDecl, callbackExist);
                writeStructPermissionJavaSkeleton(methods, intDecl, intface);
                println("IoTRMIUtil.mapSkel.put(_mainObj, this);");
                println("IoTRMIUtil.mapSkelId.put(_mainObj, objectId);");
@@ -3065,7 +3031,6 @@ public class IoTCompiler {
                for (Map.Entry<String,Set<String>> intMeth : mapNewIntMethods.entrySet()) {
                        String newIntface = intMeth.getKey();
                        int newObjectId = getNewIntfaceObjectId(newIntface);
-                       println("int objectId = " + newObjectId + ";");
                        println("static set<int> set" + newObjectId + "Allowed;");
                }
        }       
@@ -3153,25 +3118,6 @@ public class IoTCompiler {
        }
 
 
-       /**
-        * HELPER: writeCplusMethodCallbackPermission() writes permission checks in stub for callbacks
-        */
-       private void writeCplusMethodCallbackPermission(String intface) {
-
-               println("int methodId = IoTRMIObject::getMethodId(method);");
-               // Get all the different stubs
-               Map<String,Set<String>> mapNewIntMethods = mapInt2NewInts.get(intface);
-               for (Map.Entry<String,Set<String>> intMeth : mapNewIntMethods.entrySet()) {
-                       String newIntface = intMeth.getKey();
-                       int newObjectId = getNewIntfaceObjectId(newIntface);
-                       println("if (set" + newObjectId + "Allowed.find(methodId) == set" + newObjectId + "Allowed.end()) {");
-                       println("cerr << \"Callback object for " + intface + " is not allowed to access method: \" << methodId;");
-                       println("return;");
-                       println("}");
-               }
-       }
-
-
        /**
         * generateCPlusStubClassesHpp() generate stubs based on the methods list in C++ (.hpp file)
         */
@@ -3239,11 +3185,11 @@ public class IoTCompiler {
                println(newStubClass + "* obj = (" + newStubClass + "*) t;");
                println("delete obj;");
                println("}\n");
-               //println("extern \"C\" void init" + newStubClass + "(void* t) {");
+               println("extern \"C\" void init" + newStubClass + "(void* t) {");
                //println(newStubClass + "* obj = (" + newStubClass + "*) t;");
                //println("obj->init();");
                //println("while(true);");
-               //println("}\n");
+               println("}\n");
        }
 
 
@@ -3310,6 +3256,8 @@ public class IoTCompiler {
                println("IoTRMIComm *rmiComm;");
                println("char* methodBytes;");
                println("int methodLen;");
+               Integer objId = mapIntfaceObjId.get(intface);
+               println("int objectId = " + objId + ";");
                // Keep track of object Ids of all stubs registered to this interface
                writePropertiesCplusPermission(intface);
                println("// Synchronization variables");
@@ -4338,17 +4286,17 @@ public class IoTCompiler {
 
                println("extern \"C\" void* create" + newSkelClass + "(void** params) {");
                println("// Args: *_mainObj, int _portSend, int _portRecv");
-               println("return new " + newSkelClass + "((" + intface + "*) params[0], *((int*) params[0]), *((int*) params[1]));");
+               println("return new " + newSkelClass + "((" + intface + "*) params[0], *((int*) params[1]), *((int*) params[2]));");
                println("}\n");
                println("extern \"C\" void destroy" + newSkelClass + "(void* t) {");
                println(newSkelClass + "* obj = (" + newSkelClass + "*) t;");
                println("delete obj;");
                println("}\n");
-               //println("extern \"C\" void init" + newSkelClass + "(void* t) {");
+               println("extern \"C\" void init" + newSkelClass + "(void* t) {");
                //println(newSkelClass + "* obj = (" + newSkelClass + "*) t;");
                //println("obj->init();");
                //println("while(true);");
-               //println("}\n");
+               println("}\n");
        }