diff options
Diffstat (limited to 'src/native/addrbook/AddrBookContactQuery.c')
-rw-r--r-- | src/native/addrbook/AddrBookContactQuery.c | 56 |
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); +} + |