vTable.call_state_changed = callStateChange;
vTable.call_encryption_changed = callEncryptionChange;
vTable.text_received = text_received;
+ vTable.message_received = message_received;
vTable.new_subscription_request = new_subscription_request;
vTable.notify_presence_recv = notify_presence_recv;
callClass = (jclass)env->NewGlobalRef(env->FindClass("org/linphone/core/LinphoneCallImpl"));
callCtrId = env->GetMethodID(callClass,"<init>", "(J)V");
+ chatMessageClass = (jclass)env->NewGlobalRef(env->FindClass("org/linphone/core/LinphoneChatMessageImpl"));
+ chatMessageCtrId = env->GetMethodID(chatMessageClass,"<init>", "(J)V");
+
chatRoomClass = (jclass)env->NewGlobalRef(env->FindClass("org/linphone/core/LinphoneChatRoomImpl"));
chatRoomCtrId = env->GetMethodID(chatRoomClass,"<init>", "(J)V");
env->DeleteGlobalRef(chatMessageStateClass);
env->DeleteGlobalRef(proxyClass);
env->DeleteGlobalRef(callClass);
+ env->DeleteGlobalRef(chatMessageClass);
env->DeleteGlobalRef(chatRoomClass);
env->DeleteGlobalRef(friendClass);
jmethodID newSubscriptionRequestId;
jmethodID notifyPresenceReceivedId;
jmethodID textReceivedId;
+ jmethodID messageReceivedId;
jclass globalStateClass;
jmethodID globalStateId;
jclass callClass;
jmethodID callCtrId;
+ jclass chatMessageClass;
+ jmethodID chatMessageCtrId;
+
jclass chatRoomClass;
jmethodID chatRoomCtrId;
,env->NewObject(lcData->addressClass,lcData->addressCtrId,(jlong)from)
,message ? env->NewStringUTF(message) : NULL);
}
+ static void message_received(LinphoneCore *lc, LinphoneChatRoom *room, const LinphoneAddress *from, const LinphoneChatMessage *msg) {
+ JNIEnv *env = 0;
+ jint result = jvm->AttachCurrentThread(&env,NULL);
+ if (result != 0) {
+ ms_error("cannot attach VM\n");
+ return;
+ }
+ LinphoneCoreData* lcData = (LinphoneCoreData*)linphone_core_get_user_data(lc);
+ env->CallVoidMethod(lcData->listener
+ ,lcData->messageReceivedId
+ ,lcData->core
+ ,env->NewObject(lcData->chatRoomClass,lcData->chatRoomCtrId,(jlong)room)
+ ,env->NewObject(lcData->addressClass,lcData->addressCtrId,(jlong)from)
+ ,env->NewObject(lcData->chatMessageClass,lcData->chatMessageCtrId,(jlong)msg));
+ }
static void ecCalibrationStatus(LinphoneCore *lc, LinphoneEcCalibratorStatus status, int delay_ms, void *data) {
JNIEnv *env = 0;
jint result = jvm->AttachCurrentThread(&env,NULL);
jstring jvalue =env->NewStringUTF(linphone_chat_message_get_message((LinphoneChatMessage*)ptr));
return jvalue;
}
+extern "C" jstring Java_org_linphone_core_LinphoneChatMessageImpl_getExternalBodyUrl(JNIEnv* env
+ ,jobject thiz
+ ,jlong ptr) {
+ jstring jvalue =env->NewStringUTF(linphone_chat_message_get_external_body_url((LinphoneChatMessage*)ptr));
+ return jvalue;
+}
+extern "C" void Java_org_linphone_core_LinphoneChatMessageImpl_setExternalBodyUrl(JNIEnv* env
+ ,jobject thiz
+ ,jlong ptr
+ ,jstring jurl) {
+ const char* url = env->GetStringUTFChars(jurl, NULL);
+ linphone_chat_message_set_external_body_url((LinphoneChatMessage *)ptr, url);
+ env->ReleaseStringUTFChars(jurl, url);
+}
extern "C" long Java_org_linphone_core_LinphoneChatMessageImpl_getPeerAddress(JNIEnv* env
,jobject thiz
,jlong ptr) {
* @param from LinphoneAddress from
* @param message incoming message
*/
- void textReceived(LinphoneCore lc, LinphoneChatRoom cr,LinphoneAddress from,String message);
+ void textReceived(LinphoneCore lc, LinphoneChatRoom cr, LinphoneAddress from, String message);
+
+ /**
+ * invoked when a new linphone chat message is received
+ * @param lc LinphoneCore
+ * @param room LinphoneChatRoom involved in this conversation. Can be be created by the framework in case the from is not present in any chat room.
+ * @param from LinphoneAddress from
+ * @param message incoming linphone chat message message
+ */
+ void messageReceived(LinphoneCore lc, LinphoneChatRoom cr, LinphoneAddress from, LinphoneChatMessage message);
/**
* Invoked when echo cancalation calibration is completed