aboutsummaryrefslogtreecommitdiffstats
path: root/src/native/addrbook/AddrBookContactQuery.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/native/addrbook/AddrBookContactQuery.c')
-rw-r--r--src/native/addrbook/AddrBookContactQuery.c56
1 files changed, 56 insertions, 0 deletions
diff --git a/src/native/addrbook/AddrBookContactQuery.c b/src/native/addrbook/AddrBookContactQuery.c
new file mode 100644
index 0000000..45cdcd2
--- /dev/null
+++ b/src/native/addrbook/AddrBookContactQuery.c
@@ -0,0 +1,56 @@
+/*
+ * SIP Communicator, the OpenSource Java VoIP and Instant Messaging client.
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+
+#include "AddrBookContactQuery.h"
+
+static void Exception_throwNew
+ (JNIEnv *jniEnv, const char *className, const char *message);
+
+jmethodID
+AddrBookContactQuery_getPtrCallbackMethodID(JNIEnv *jniEnv, jobject callback)
+{
+ jclass callbackClass;
+ jmethodID callbackMethodID = 0;
+
+ /*
+ * Make sure that the specified arguments are valid. For example, check
+ * whether callback exists and has the necessary signature.
+ */
+ if (callback)
+ {
+ callbackClass = (*jniEnv)->GetObjectClass(jniEnv, callback);
+ if (callbackClass)
+ {
+ callbackMethodID
+ = (*jniEnv)->GetMethodID(
+ jniEnv,
+ callbackClass, "callback", "(J)Z");
+ if (!callbackMethodID)
+ {
+ Exception_throwNew(
+ jniEnv, "java/lang/IllegalArgumentException", "callback");
+ }
+ }
+ }
+ else
+ {
+ Exception_throwNew(
+ jniEnv, "java/lang/NullPointerException", "callback");
+ }
+ return callbackMethodID;
+}
+
+static void
+Exception_throwNew(JNIEnv *jniEnv, const char *className, const char *message)
+{
+ jclass clazz;
+
+ clazz = (*jniEnv)->FindClass(jniEnv, className);
+ if (clazz)
+ (*jniEnv)->ThrowNew(jniEnv, clazz, message);
+}
+