private static void HookStream(JniEnvironment environment, JniClass nativeClazz, 
     JavaVMLogTypes hook, string javaHookMethod)
 {
     JniMethod outMid = nativeClazz.GetStaticMethodId(environment, javaHookMethod, "(I)V");
     JValue[] paramArray = new JValue[1];
     paramArray[0].AssignIntValue((int)hook);
     outMid.CallStaticVoidMethod(environment, paramArray);
 }
Beispiel #2
0
        protected JniMember(IntPtr handle, JniClass declaringClass, bool isStatic, string signature)
        {
            if (handle == IntPtr.Zero)
            {
                throw new JniException("TODO");
            }
            VerifyInputJniObject(declaringClass);
            mHandle = handle;
            mDeclaringClass = declaringClass;
            mIsStatic = isStatic;

            // TODO - refactor this mess
            string returnType = signature.Trim();
            int pos = returnType.LastIndexOf(')');
            if (pos > -1)
                returnType = returnType.Substring(pos + 1);
            pos = returnType.LastIndexOf('[');
            mArrayRank = -1;
            string type = returnType;
            if (pos > -1)
            {
                mArrayRank = pos + 1;
                type = type.Substring(pos + 1);
            }
            if (type.Length == 1)
            {
                if (type == "V")
                {
                    mJniType = JniType.Void;
                }
                else
                {
                    mJniType = CsJni.JniArray.ParseArrayPrimitiveType(type);
                    if (mJniType == JniType.Null)
                    {
                        throw new JniException("TODO");
                    }
                }
            }
            else
            {
                if (!(type.StartsWith("L", StringComparison.Ordinal) && type.EndsWith(";", StringComparison.Ordinal)))
                {
                    throw new JniException("TODO");
                }
                switch (type)
                {
                    case "Ljava/lang/String;": mJniType = JniType.String; break;
                    case "Ljava/lang/Class;": mJniType = JniType.Class; break;
                    case "Ljava/lang/Throwable;": mJniType = JniType.Throwable; break;
                    default: mJniType = JniType.NonPrimitive; break;
                }
            }
        }
Beispiel #3
0
 public static bool IsAssignableFrom(
     JniEnvironment environment,
     JniClass subclass,
     JniClass superclass
     )
 {
     VerifyEnvironment(environment);
     VerifyInputJniObject(subclass);
     VerifyInputJniObject(superclass);
     byte result = JniEnvironment.Functions.IsAssignableFrom(environment.Handle, subclass.Handle, superclass.Handle);
     JniThrowable.CheckException(environment);
     return JBooleanConverter.From(result);
 }
Beispiel #4
0
 public static JniObjectArray NewObjectArray(
     JniEnvironment environment,
     int length,
     JniClass jniClass,
     JniObject init
     )
 {
     VerifyEnvironment(environment);
     VerifyInputJniObject(jniClass);
     IntPtr safeInit = (init == null) ? IntPtr.Zero : init.Handle; // OK if initial value is null
     IntPtr result = JniEnvironment.Functions.NewObjectArray(environment.Handle, length, jniClass.Handle, safeInit);
     if (IntPtr.Zero == result)
     {
         JniThrowable.ThrowCurrentException(environment); // null result means an exception occurred
     }
     // EXCEPTION CHECK: Do nothing, already checked for exception above.
     return new JniObjectArray(environment, result, JniObjectLifecycle.Local, -1, JniType.Null);
 }
 internal static void RegisterCounterpart(JniEnvironment environment, JniClass peer, Type counterpartType)
 {
     JniNativeMethodHolder nmHolder = new JniNativeMethodHolder();
     nmHolder.PopulateFromType(counterpartType);
     if (nmHolder.Count > 0)
     {
         peer.RegisterNatives(environment, nmHolder);
     }
 }
 private static void RegisterNativeMethods(/* JNIEnv */ IntPtr environmentHandle,
     /* jobject */ IntPtr selfHandle, IntPtr /*jclass*/ declaringClassHandle)
 {
     JniEnvironment environment = JavaVM.EnvironmentFromHandle(environmentHandle);
     try
     {
         JniClass peerClass = new JniClass(environment, declaringClassHandle, JniObjectLifecycle.LocalJ2N);
         string peerClassName = peerClass.GetTypeName(environment);
         Type counterpartType;
         if (!JavaVM.JavaNativeMethodRegistrar.mCounterpartMap.TryGetValue(peerClassName, out counterpartType))
         {
             throw new JniException("Found no counterpart for: " + peerClassName);
         }
         JavaVM.Log("Registering natives for peer: " + peerClassName + ", counterpart class: " + counterpartType.AssemblyQualifiedName);
         RegisterCounterpart(environment, peerClass, counterpartType);
     }
     catch (JniThrowableException ex)
     {
         ex.Throwable.ThrowToJavaVM(environment);
     }
     catch (Exception ex)
     {
         JniThrowable.ThrowNewToJavaVM(environment,
             JniClass.FindClass(environment, "java.lang.UnsatisfiedLinkError"),
             JniThrowable.ExtractDotNetExceptionMessage(ex));
     }
 }
Beispiel #7
0
 public static void ThrowNewToJavaVM(
     JniEnvironment environment,
     JniClass jniClass,
     string message
     )
 {
     VerifyInputJniObject(jniClass);
     int result = JniEnvironment.Functions.ThrowNew(environment.Handle, jniClass.Handle, message);
     if (0 != result)
     {
         JniException.CheckErrorCode(environment, result);
     }
     // EXCEPTION CHECK: Do nothing, already checked for exception above.
 }
Beispiel #8
0
 internal JniMethod(IntPtr handle, JniClass declaringClass, bool isStatic, string signature)
     : base(handle, declaringClass, isStatic, signature)
 {
 }
 private static string[] GetJavaPropertyNames(JniEnvironment environment, JniClass systemClazz)
 {
     JniLocalFrame frame = environment.CreateLocalFrame(6);
     try
     {
         JniMethod getPropsMid = systemClazz.GetStaticMethodId(environment, "getProperties", "()Ljava/util/Properties;");
         JniObject propsHandle = getPropsMid.CallStaticObjectMethod(environment, null);
         JniClass propsClazz = propsHandle.GetObjectClass(environment);
         JniMethod keySetId = propsClazz.GetMethodId(environment, "keySet", "()Ljava/util/Set;");
         JniObject setHandle = keySetId.CallObjectMethod(environment, propsHandle, null);
         JniClass setClazz = setHandle.GetObjectClass(environment);
         JniMethod toArrayId = setClazz.GetMethodId(environment, "toArray", "()[Ljava/lang/Object;");
         JniObjectArray arrayHandle = (JniObjectArray)toArrayId.CallObjectMethod(environment, setHandle, null);
         string[] keyNames = JniString.ExtractStringArray(environment, arrayHandle);
         return keyNames;
     }
     finally
     {
         frame.SafePop();
     }
 }
Beispiel #10
0
 internal JniConstructor(IntPtr handle, JniClass declaringClass, string signature)
     : base(handle, declaringClass, false, signature)
 {
 }
Beispiel #11
0
 private static void FaultStatics(JniEnvironment environment)
 {
     if (!mStaticsInitialized)
     {
         mStaticsInitialized = true;
         mStringClass = (JniClass)JniClass.FindClass(environment, "java/lang/String").NewGlobalAutoReleaseAndReleaseThis(environment);
         Console.Out.WriteLine("String class: " + mStringClass.Handle); // TODO
     }
 }
Beispiel #12
0
 public bool IsInstanceOf(
     JniEnvironment environment,
     JniClass jniClass
     )
 {
     VerifyEnvironment(environment);
     VerifyInputJniObject(jniClass);
     byte result = JniEnvironment.Functions.IsInstanceOf(environment.Handle, this.Handle, jniClass.Handle);
     JniThrowable.CheckException(environment);
     return JBooleanConverter.From(result);
 }