diff --git a/activation.conf.example b/activation.conf.example
new file mode 100644
index 0000000..3296996
--- /dev/null
+++ b/activation.conf.example
@@ -0,0 +1,2 @@
+[SmartInputHookClass]
+EQUAL,O00oOO0
diff --git a/pom.xml b/pom.xml
index 5bcb25b..c9eaff3 100644
--- a/pom.xml
+++ b/pom.xml
@@ -63,7 +63,7 @@
com.ja-netfilter
ja-netfilter
- 2.0.1
+ 2.1.1
provided
diff --git a/src/main/java/com/yelochick/ActivationPlugin.java b/src/main/java/com/yelochick/ActivationPlugin.java
index 65d4c28..584cf4f 100644
--- a/src/main/java/com/yelochick/ActivationPlugin.java
+++ b/src/main/java/com/yelochick/ActivationPlugin.java
@@ -1,14 +1,27 @@
package com.yelochick;
+import com.janetfilter.core.Environment;
import com.janetfilter.core.plugin.MyTransformer;
+import com.janetfilter.core.plugin.PluginConfig;
import com.janetfilter.core.plugin.PluginEntry;
import com.yelochick.coolrequest.VipApiTransformer;
import com.yelochick.smartinput.OsLanguageManagerProxyTransformer;
+import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collections;
import java.util.List;
public class ActivationPlugin implements PluginEntry {
+
+ private final List transformers = new ArrayList<>();
+
+ @Override
+ public void init(Environment environment, PluginConfig config) {
+ transformers.add(new VipApiTransformer());
+ transformers.add(new OsLanguageManagerProxyTransformer(config.getBySection("SmartInputHookClass")));
+ }
+
@Override
public String getName() {
return "ACTIVATION";
@@ -21,9 +34,6 @@ public class ActivationPlugin implements PluginEntry {
@Override
public List getTransformers() {
- return Arrays.asList(
- new VipApiTransformer(),
- new OsLanguageManagerProxyTransformer()
- );
+ return Collections.unmodifiableList(transformers);
}
}
diff --git a/src/main/java/com/yelochick/smartinput/OsLanguageManagerProxyTransformer.java b/src/main/java/com/yelochick/smartinput/OsLanguageManagerProxyTransformer.java
index 495ba1e..c1158fd 100644
--- a/src/main/java/com/yelochick/smartinput/OsLanguageManagerProxyTransformer.java
+++ b/src/main/java/com/yelochick/smartinput/OsLanguageManagerProxyTransformer.java
@@ -1,12 +1,15 @@
package com.yelochick.smartinput;
import com.janetfilter.core.commons.DebugInfo;
+import com.janetfilter.core.models.FilterRule;
import com.janetfilter.core.plugin.MyTransformer;
import com.yelochick.SafeClassWriter;
import jdk.internal.org.objectweb.asm.ClassReader;
import jdk.internal.org.objectweb.asm.ClassWriter;
import jdk.internal.org.objectweb.asm.tree.*;
+import java.util.List;
+
import static jdk.internal.org.objectweb.asm.Opcodes.*;
/**
@@ -14,13 +17,23 @@ import static jdk.internal.org.objectweb.asm.Opcodes.*;
*/
public class OsLanguageManagerProxyTransformer implements MyTransformer {
+ private final List rules;
+
+ public OsLanguageManagerProxyTransformer(List rules) {
+ this.rules = rules;
+ }
+
@Override
public String getHookClassName() {
- return "O00oOO0";
+ return null;
}
@Override
public byte[] transform(String className, byte[] classBytes, int order) throws Exception {
+ if (!classMatched(className)) {
+ return classBytes;
+ }
+
ClassReader reader = new ClassReader(classBytes);
ClassNode node = new ClassNode(ASM5);
reader.accept(node, 0);
@@ -39,4 +52,14 @@ public class OsLanguageManagerProxyTransformer implements MyTransformer {
node.accept(writer);
return writer.toByteArray();
}
+
+ private boolean classMatched(String className) {
+ for (FilterRule rule : rules) {
+ if (rule.test(className)) {
+ DebugInfo.output("Native wrapper: " + className + ", rule: " + rule);
+ return true;
+ }
+ }
+ return false;
+ }
}