changeset 123:3ec98ede8a06

Added compatibility wrapper for block guard. * dalvik/package-info.java: Added package description. * dalvik/system/BlockGuard.java: Added new compatibility wrapper.
author Michael Starzinger <michi@complang.tuwien.ac.at>
date Sun, 10 Apr 2011 23:52:10 +0200
parents 1f55b68e19b0
children 8bb44682be11
files src/main/java/dalvik/package-info.java src/main/java/dalvik/system/BlockGuard.java
diffstat 2 files changed, 151 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/dalvik/package-info.java	Sun Apr 10 23:52:10 2011 +0200
@@ -0,0 +1,44 @@
+/*
+ * Daneel - Dalvik to Java bytecode compiler
+ * Copyright (C) 2011  IcedRobot team
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * This file is subject to the "Classpath" exception:
+ *
+ * Linking this library statically or dynamically with other modules is
+ * making a combined work based on this library.  Thus, the terms and
+ * conditions of the GNU General Public License cover the whole
+ * combination.
+ *
+ * As a special exception, the copyright holders of this library give you
+ * permission to link this library with independent modules to produce an
+ * executable, regardless of the license terms of these independent
+ * modules, and to copy and distribute the resulting executable under terms
+ * of your choice, provided that you also meet, for each linked independent
+ * module, the terms and conditions of the license of that module.  An
+ * independent module is a module which is not derived from or based on
+ * this library.  If you modify this library, you may extend this exception
+ * to your version of the library, but you are not obligated to do so.  If
+ * you do not wish to do so, delete this exception statement from your
+ * version.
+ */
+
+/**
+ * This package contains Dalvik VM compatibility wrappers which make Daneel into
+ * a "VM compatible to Dalvik". Note that Daneel is a clean-room implementation
+ * and does not contain any Dalvik sources, it merely provides wrapper classes
+ * having the same interface.
+ */
+package dalvik;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/dalvik/system/BlockGuard.java	Sun Apr 10 23:52:10 2011 +0200
@@ -0,0 +1,107 @@
+/*
+ * Daneel - Dalvik to Java bytecode compiler
+ * Copyright (C) 2011  IcedRobot team
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * This file is subject to the "Classpath" exception:
+ *
+ * Linking this library statically or dynamically with other modules is
+ * making a combined work based on this library.  Thus, the terms and
+ * conditions of the GNU General Public License cover the whole
+ * combination.
+ *
+ * As a special exception, the copyright holders of this library give you
+ * permission to link this library with independent modules to produce an
+ * executable, regardless of the license terms of these independent
+ * modules, and to copy and distribute the resulting executable under terms
+ * of your choice, provided that you also meet, for each linked independent
+ * module, the terms and conditions of the license of that module.  An
+ * independent module is a module which is not derived from or based on
+ * this library.  If you modify this library, you may extend this exception
+ * to your version of the library, but you are not obligated to do so.  If
+ * you do not wish to do so, delete this exception statement from your
+ * version.
+ */
+
+package dalvik.system;
+
+/**
+ * Compatibility wrapper for Dalvik VM interface. The block guard allows
+ * applications to specify what operations each thread is allowed to perform.
+ * The block guard has to be implemented on a best-effort basis, so we can
+ * safely ignore it and just provide an empty stub.
+ */
+public class BlockGuard {
+
+    public static final int DISALLOW_DISK_WRITE = 1;
+    public static final int DISALLOW_DISK_READ = 2;
+    public static final int DISALLOW_NETWORK = 4;
+    public static final int PASS_RESTRICTIONS_VIA_RPC = 8;
+    public static final int PENALTY_LOG = 16;
+    public static final int PENALTY_DIALOG = 32;
+    public static final int PENALTY_DEATH = 64;
+
+    /**
+     * The interface for a block guard policy specifying what operations a
+     * thread is allowed to perform.
+     */
+    public static interface Policy {
+        int getPolicyMask();
+        void onNetwork();
+        void onReadFromDisk();
+        void onWriteToDisk();
+    };
+
+    /**
+     * The initial block guard policy that each thread starts out with, if not
+     * specified explicitly.
+     */
+    public static final Policy LAX_POLICY = new Policy() {
+        public int getPolicyMask() { return 0; }
+        public void onNetwork() {}
+        public void onReadFromDisk() {}
+        public void onWriteToDisk() {}
+    };
+
+    /**
+     * Gets the block guard policy for the current thread.
+     * @return The block guard policy.
+     */
+    public static Policy getPolicy() {
+        return threadPolicy.get();
+    }
+
+    /**
+     * Sets the block guard policy for the current thread.
+     * @param policy The block guard policy.
+     */
+    public static void setPolicy(Policy policy) {
+        threadPolicy.set(policy);
+    }
+
+    private static final ThreadLocal<Policy> threadPolicy;
+    static {
+        threadPolicy = new ThreadLocal<Policy>() {
+            @Override
+            protected Policy initialValue() {
+                return LAX_POLICY;
+            }
+        };
+    }
+
+    private BlockGuard() {
+        // No instances of this class.
+    }
+}