X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=service%2Fnotification%2Fandroid%2Fnotification-service%2Fsrc%2Fmain%2Fjni%2Fprovider%2FJniNotificationProvider.cpp;h=3e96fe57ade1d1f26afdb7781d4364b0386d7275;hb=89236fab5e9104ea6a33b52d4d72e5d48d7ebe9d;hp=7b1f9b3d09e3eeeba9bc470cf253a339546c1f73;hpb=f1c351f41841510bd8af729c241d3765f3dadd6f;p=platform%2Fupstream%2Fiotivity.git diff --git a/service/notification/android/notification-service/src/main/jni/provider/JniNotificationProvider.cpp b/service/notification/android/notification-service/src/main/jni/provider/JniNotificationProvider.cpp old mode 100644 new mode 100755 index 7b1f9b3..3e96fe5 --- a/service/notification/android/notification-service/src/main/jni/provider/JniNotificationProvider.cpp +++ b/service/notification/android/notification-service/src/main/jni/provider/JniNotificationProvider.cpp @@ -20,8 +20,9 @@ #include "JniNotificationProvider.h" #include "NSProviderService.h" +#include "JniOcRepresentation.h" -static JavaVM *g_jvm = NULL; +static JavaVM *g_jvm_provider = NULL; static jobject g_obj_subscriptionListener = NULL; static jobject g_obj_syncListener = NULL; @@ -35,18 +36,20 @@ jclass g_cls_MediaContents; jclass g_cls_Topic; jclass g_cls_TopicsList; jclass g_cls_TopicState; +jclass g_cls_OcRepresentation; +jmethodID g_mid_OcRepresentation_N_ctor_bool = NULL; static JNIEnv *GetJNIEnv(jint *ret) { JNIEnv *env = NULL; - *ret = g_jvm->GetEnv((void **) &env, JNI_CURRENT_VERSION); + *ret = g_jvm_provider->GetEnv((void **) &env, JNI_CURRENT_VERSION); switch (*ret) { case JNI_OK: return env; case JNI_EDETACHED: - if (g_jvm->AttachCurrentThread(&env, NULL) != JNI_OK) + if (g_jvm_provider->AttachCurrentThread(&env, NULL) != JNI_OK) { LOGE ("Failed to get the environment"); return NULL; @@ -121,10 +124,10 @@ OIC::Service::NSMessage *getNativeMessage(JNIEnv *env, jobject jMsg) LOGE("Error: jfieldID for message ttl is null"); return nullptr; } - jlong jttl = (jlong) env->GetObjectField( jMsg, fid_ttl); - uint64_t ttl = jttl; - LOGD("Message ID: %lld\n", ttl); + jlong jttl = (jlong) env->GetLongField( jMsg, fid_ttl); + uint64_t ttl = jttl; + LOGD("TTL: %d\n", ttl); // Message Title jfieldID fid_title = env->GetFieldID( cls, "mTitle", "Ljava/lang/String;"); @@ -211,38 +214,85 @@ OIC::Service::NSMessage *getNativeMessage(JNIEnv *env, jobject jMsg) return nullptr; } jobject jmedia = env->GetObjectField( jMsg, fid_media); + OIC::Service::NSMediaContents *media = nullptr; if (jmedia == NULL) { - LOGE("Error: jmedia object of MediaContents inside Message is null"); - return nullptr; + LOGD("Info: jmedia object of MediaContents inside Message is null"); } - jclass cls_MediaContents = (jclass) (env->NewLocalRef(g_cls_MediaContents)); - if (!cls_MediaContents) + else { - LOGE ("Failed to Get ObjectClass for class MediaContents"); - return nullptr; + jclass cls_MediaContents = (jclass) (env->NewLocalRef(g_cls_MediaContents)); + if (!cls_MediaContents) + { + LOGE ("Failed to Get ObjectClass for class MediaContents"); + return nullptr; + } + jfieldID fid_icon = env->GetFieldID( cls_MediaContents, "mIconImage", "Ljava/lang/String;"); + if (fid_icon == NULL) + { + LOGE("Error: jfieldID for iconImage is null"); + return nullptr; + } + jstring jiconImage = (jstring)env->GetObjectField( jmedia, fid_icon); + const char *iconImage = ""; + if (jiconImage) + { + iconImage = env->GetStringUTFChars( jiconImage, NULL); + media = new OIC::Service::NSMediaContents(std::string(iconImage)); + env->ReleaseStringUTFChars(jiconImage, iconImage); + } + else + { + LOGD("Info: iconImage is null"); + } + env->DeleteLocalRef(cls_MediaContents); + LOGD("iconImage: %s\n", iconImage); } - jfieldID fid_icon = env->GetFieldID( cls_MediaContents, "mIconImage", "Ljava/lang/String;"); - if (fid_icon == NULL) + + // Message ExtraInfo + jfieldID fid_extraInfo = env->GetFieldID( cls, "mExtraInfo", + "Lorg/iotivity/base/OcRepresentation;"); + if (fid_extraInfo == NULL) { - LOGE("Error: jfieldID for iconImage is null"); + LOGE("Error: jfieldID for mExtraInfo is null"); return nullptr; } - jstring jiconImage = (jstring)env->GetObjectField( jmedia, fid_icon); - const char *iconImage = ""; - if (jiconImage) + jobject jExtraInfo = env->GetObjectField( jMsg, fid_extraInfo); + OC::OCRepresentation *representation = nullptr; + if (jExtraInfo == NULL) { - iconImage = env->GetStringUTFChars( jiconImage, NULL); + LOGE("Error: jExtraInfo object of Message is null"); } else { - LOGD("Info: iconImage is null"); + representation = GetHandle(env, jExtraInfo); + if (env->ExceptionCheck()) + { + LOGE("Failed to get native handle from OcRepresentation"); + } + if (!representation) + { + LOGE("Failed to get native object OcRepresentation"); + } } - LOGD("iconImage: %s\n", iconImage); - - OIC::Service::NSMediaContents *media = new OIC::Service::NSMediaContents(std::string(iconImage)); - OIC::Service::NSMessage *nsMsg = OIC::Service::NSProviderService::getInstance()->CreateMessage(); + OIC::Service::NSMessage *nsMsg; + jfieldID nativeHandle = env->GetFieldID(cls, "mNativeHandle", "J"); + if (!nativeHandle) + { + LOGE("Error: fieldID for mNativeHandle is null"); + return nullptr; + } + jlong jMessage = env->GetLongField(jMsg, nativeHandle); + if (jMessage) + { + LOGD ("calling sendMessage on mNativeHandle"); + nsMsg = (OIC::Service::NSMessage *) (jMessage); + } + else + { + nsMsg = OIC::Service::NSProviderService::getInstance()->createMessage(); + } nsMsg->setType(type); nsMsg->setTime(std::string(time)); @@ -250,11 +300,17 @@ OIC::Service::NSMessage *getNativeMessage(JNIEnv *env, jobject jMsg) nsMsg->setTitle(std::string(messageTitle)); nsMsg->setContentText(std::string(messageBody)); nsMsg->setSourceName(std::string(messageSource)); - nsMsg->setMediaContents(media); + if(media != nullptr) + { + nsMsg->setMediaContents(media); + } nsMsg->setTopic(std::string(topic)); + if (representation != nullptr) + { + nsMsg->setExtraInfo(*representation); + } env->DeleteLocalRef(cls_messageType); - env->DeleteLocalRef(cls_MediaContents); if (jtime) { @@ -276,10 +332,6 @@ OIC::Service::NSMessage *getNativeMessage(JNIEnv *env, jobject jMsg) { env->ReleaseStringUTFChars(jtopic, topic); } - if (jiconImage) - { - env->ReleaseStringUTFChars(jiconImage, iconImage); - } LOGD("JNIProviderService: getMessage - OUT"); return nsMsg; @@ -456,6 +508,31 @@ jobject getJavaMessage(JNIEnv *env, OIC::Service::NSMessage *message) env->SetObjectField(obj_message, fid_type, jType); } + LOGD("Reading OCRepresentation Object from Native"); + OC::OCRepresentation *ocRepresentation = new OC::OCRepresentation(message->getExtraInfo()); + jlong handle = reinterpret_cast(ocRepresentation); + jobject jRepresentation = env->NewObject(g_cls_OcRepresentation, g_mid_OcRepresentation_N_ctor_bool, + handle, true); + if (!jRepresentation) + { + LOGE("Failed to create OcRepresentation"); + delete ocRepresentation; + } + else + { + LOGD("Created OCRepresentation Object from Native"); + } + jfieldID fid_extraInfo = env->GetFieldID(cls_message, "mExtraInfo", + "Lorg/iotivity/base/OcRepresentation;"); + if (!fid_extraInfo) + { + LOGE("Failed to get mExtraInfo for Message"); + delete ocRepresentation; + return NULL; + } + LOGD ("setting extraInfo field"); + env->SetObjectField(obj_message, fid_extraInfo, jRepresentation); + env->DeleteLocalRef(cls_message); LOGD ("JNIProviderService: getJavaMessage - OUT"); return obj_message; @@ -473,30 +550,27 @@ jobject getJavaTopicState(JNIEnv *env, OIC::Service::NSTopic::NSTopicState nsSta return NULL; } - jobject obj_topicState; switch (nsState) { case OIC::Service::NSTopic::NSTopicState::UNSUBSCRIBED: { static jfieldID fieldID = env->GetStaticFieldID(cls_topicState, "UNSUBSCRIBED", "Lorg/iotivity/service/ns/common/Topic$TopicState;"); - obj_topicState = env->GetStaticObjectField(cls_topicState, fieldID); + return env->GetStaticObjectField(cls_topicState, fieldID); } case OIC::Service::NSTopic::NSTopicState::SUBSCRIBED: { static jfieldID fieldID = env->GetStaticFieldID(cls_topicState, "SUBSCRIBED", "Lorg/iotivity/service/ns/common/Topic$TopicState;"); - obj_topicState = env->GetStaticObjectField(cls_topicState, fieldID); + return env->GetStaticObjectField(cls_topicState, fieldID); } + default: + return NULL; } - if (obj_topicState == NULL) - { - LOGE("Error: object of field TopicState is null"); - } - env->DeleteLocalRef(cls_topicState); + LOGD("JNIProviderService: getJavaTopicState - OUT"); - return obj_topicState; + return NULL; } jobject getJavaTopicsList(JNIEnv *env, OIC::Service::NSTopicsList *topicList) @@ -550,38 +624,32 @@ jobject getJavaSyncType(JNIEnv *env, OIC::Service::NSSyncInfo::NSSyncType nsType LOGE ("Failed to Get ObjectClass for SyncType"); return NULL; } - jobject syncType; switch (nsType) { case OIC::Service::NSSyncInfo::NSSyncType::NS_SYNC_UNREAD: { static jfieldID fieldID = env->GetStaticFieldID(cls_SyncType, "UNREAD", "Lorg/iotivity/service/ns/common/SyncInfo$SyncType;"); - syncType = env->GetStaticObjectField(cls_SyncType, fieldID); + return env->GetStaticObjectField(cls_SyncType, fieldID); } case OIC::Service::NSSyncInfo::NSSyncType::NS_SYNC_READ : { static jfieldID fieldID = env->GetStaticFieldID(cls_SyncType, "READ", "Lorg/iotivity/service/ns/common/SyncInfo$SyncType;"); - syncType = env->GetStaticObjectField(cls_SyncType, fieldID); + return env->GetStaticObjectField(cls_SyncType, fieldID); } case OIC::Service::NSSyncInfo::NSSyncType::NS_SYNC_DELETED : { static jfieldID fieldID = env->GetStaticFieldID(cls_SyncType, "DELETED", "Lorg/iotivity/service/ns/common/SyncInfo$SyncType;"); - syncType = env->GetStaticObjectField(cls_SyncType, fieldID); + return env->GetStaticObjectField(cls_SyncType, fieldID); } - - } - - if (syncType == NULL) - { - LOGE("Error: object of field Synctype is null"); + default: + return NULL; } - env->DeleteLocalRef(cls_SyncType); LOGD ("JNIProviderService: getJavaSyncType - OUT"); - return syncType; + return NULL; } @@ -597,7 +665,7 @@ void onSubscribeListenerCb(OIC::Service::NSConsumer *consumer) if (!jSubscriptionListener) { LOGE ("Failed to Get jSubscriptionListener"); - if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread(); + if (JNI_EDETACHED == envRet) g_jvm_provider->DetachCurrentThread(); return ; } @@ -609,7 +677,7 @@ void onSubscribeListenerCb(OIC::Service::NSConsumer *consumer) if (!cls_consumer) { LOGE ("Failed to Get ObjectClass for Consumer"); - if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread(); + if (JNI_EDETACHED == envRet) g_jvm_provider->DetachCurrentThread(); return ; } @@ -620,7 +688,7 @@ void onSubscribeListenerCb(OIC::Service::NSConsumer *consumer) if (!mid_consumer) { LOGE ("Failed to Get MethodID for Consumer"); - if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread(); + if (JNI_EDETACHED == envRet) g_jvm_provider->DetachCurrentThread(); return ; } jobject obj_consumer = env->NewObject( cls_consumer, mid_consumer, jConsumerId); @@ -629,7 +697,7 @@ void onSubscribeListenerCb(OIC::Service::NSConsumer *consumer) if (!cls) { LOGE("Failed to Get ObjectClass of jSubscriptionListener"); - if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread(); + if (JNI_EDETACHED == envRet) g_jvm_provider->DetachCurrentThread(); return; } jmethodID mid = env->GetMethodID( @@ -639,14 +707,14 @@ void onSubscribeListenerCb(OIC::Service::NSConsumer *consumer) if (!mid) { LOGE("Failed to Get MethodID of onConsumerSubscribed"); - if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread(); + if (JNI_EDETACHED == envRet) g_jvm_provider->DetachCurrentThread(); return; } env->CallVoidMethod( jSubscriptionListener, mid, obj_consumer); env->DeleteLocalRef(jSubscriptionListener); env->DeleteLocalRef(cls_consumer); - if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread(); + if (JNI_EDETACHED == envRet) g_jvm_provider->DetachCurrentThread(); LOGD("JNIProviderService_onSubscribeListenerCb - OUT"); return; } @@ -663,7 +731,7 @@ void onSyncInfoListenerCb(OIC::Service::NSSyncInfo *sync) if (!jSyncListener) { LOGE ("Failed to Get jSyncListener"); - if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread(); + if (JNI_EDETACHED == envRet) g_jvm_provider->DetachCurrentThread(); return ; } @@ -676,14 +744,14 @@ void onSyncInfoListenerCb(OIC::Service::NSSyncInfo *sync) if (!syncType) { LOGE ("Failed to Get syncType for SyncInfo"); - if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread(); + if (JNI_EDETACHED == envRet) g_jvm_provider->DetachCurrentThread(); return ; } jclass cls_SyncInfo = (jclass) (env->NewLocalRef(g_cls_SyncInfo)); if (!cls_SyncInfo) { LOGE ("Failed to Get ObjectClass for SyncInfo"); - if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread(); + if (JNI_EDETACHED == envRet) g_jvm_provider->DetachCurrentThread(); return ; } jmethodID mid_syncInfo = env->GetMethodID( @@ -693,7 +761,7 @@ void onSyncInfoListenerCb(OIC::Service::NSSyncInfo *sync) if (!mid_syncInfo) { LOGE ("Failed to Get MethodID for SyncInfo"); - if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread(); + if (JNI_EDETACHED == envRet) g_jvm_provider->DetachCurrentThread(); return ; } @@ -702,7 +770,7 @@ void onSyncInfoListenerCb(OIC::Service::NSSyncInfo *sync) if (!obj_syncInfo) { LOGE ("Failed to Get Object for SyncInfo"); - if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread(); + if (JNI_EDETACHED == envRet) g_jvm_provider->DetachCurrentThread(); return ; } @@ -710,24 +778,24 @@ void onSyncInfoListenerCb(OIC::Service::NSSyncInfo *sync) if (!cls) { LOGE("Failed to Get ObjectClass"); - if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread(); + if (JNI_EDETACHED == envRet) g_jvm_provider->DetachCurrentThread(); return; } jmethodID mid = env->GetMethodID( cls, - "onSyncInfoReceived", + "onMessageSynchronized", "(Lorg/iotivity/service/ns/common/SyncInfo;)V"); if (!mid) { LOGE("Failed to Get MethodID"); - if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread(); + if (JNI_EDETACHED == envRet) g_jvm_provider->DetachCurrentThread(); return; } env->CallVoidMethod( jSyncListener, mid, obj_syncInfo); env->DeleteLocalRef(jSyncListener); env->DeleteLocalRef(cls_SyncInfo); - if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread(); + if (JNI_EDETACHED == envRet) g_jvm_provider->DetachCurrentThread(); LOGD("JNIProviderService: OnSyncInfoListenerCb - OUT"); return; @@ -735,7 +803,8 @@ void onSyncInfoListenerCb(OIC::Service::NSSyncInfo *sync) } JNIEXPORT jint JNICALL Java_org_iotivity_service_ns_provider_ProviderService_nativeStart -(JNIEnv *env, jobject jObj, jboolean jPolicy, jobject jSubscriptionListener, jobject jSyncListener) +(JNIEnv *env, jobject jObj, jobject jSubscriptionListener, jobject jSyncListener, + jboolean jPolicy, jstring jUserInfo, jboolean jResourceSecurity) { LOGD("JNIProviderService: nativeStart - IN"); if (!jSubscriptionListener || !jSyncListener) @@ -762,9 +831,16 @@ JNIEXPORT jint JNICALL Java_org_iotivity_service_ns_provider_ProviderService_nat OIC::Service::NSProviderService::ProviderConfig cfg; cfg.m_subscribeRequestCb = onSubscribeListenerCb; cfg.m_syncInfoCb = onSyncInfoListenerCb; - cfg.policy = (bool) jPolicy; + cfg.subControllability = (bool) jPolicy; + if (!jUserInfo) + { + const char *info = env->GetStringUTFChars( jUserInfo, NULL); + std::string userInfo(info); + cfg.userInfo = userInfo; + } + cfg.resourceSecurity = (bool) jResourceSecurity; - OIC::Service::NSResult result = OIC::Service::NSProviderService::getInstance()->Start(cfg); + OIC::Service::NSResult result = OIC::Service::NSProviderService::getInstance()->start(cfg); if (result != OIC::Service::NSResult::OK) { LOGE("Fail to start NSProviderService"); @@ -780,7 +856,7 @@ JNIEXPORT jint JNICALL Java_org_iotivity_service_ns_provider_ProviderService_nat { LOGD("JNIProviderService: nativeStop - IN"); - OIC::Service::NSResult result = OIC::Service::NSProviderService::getInstance()->Stop(); + OIC::Service::NSResult result = OIC::Service::NSProviderService::getInstance()->stop(); if (result != OIC::Service::NSResult::OK) { LOGD("Fail to stop NSProvider service"); @@ -813,7 +889,7 @@ JNIEXPORT jint JNICALL Java_org_iotivity_service_ns_provider_ProviderService_nat return (jint) OIC::Service::NSResult::ERROR; } - OIC::Service::NSResult result = OIC::Service::NSProviderService::getInstance()->SendMessage(nsMsg); + OIC::Service::NSResult result = OIC::Service::NSProviderService::getInstance()->sendMessage(nsMsg); if (result != OIC::Service::NSResult::OK) { LOGD("Fail to send NSProvider Message"); @@ -826,7 +902,7 @@ JNIEXPORT void JNICALL Java_org_iotivity_service_ns_provider_ProviderService_nat (JNIEnv *env, jobject jObj, jlong messageId , jint syncState) { LOGD("JNIProviderService: nativeSendSyncInfo - IN"); - OIC::Service::NSProviderService::getInstance()->SendSyncInfo( messageId, + OIC::Service::NSProviderService::getInstance()->sendSyncInfo( messageId, (OIC::Service::NSSyncInfo::NSSyncType) syncState); LOGD("JNIProviderService: nativeSendSyncInfo - OUT"); return; @@ -836,15 +912,15 @@ JNIEXPORT jobject JNICALL Java_org_iotivity_service_ns_provider_ProviderService_ (JNIEnv *env, jobject jObj) { LOGD("JNIProviderService: nativeCreateMessage - IN"); - OIC::Service::NSMessage* message = - OIC::Service::NSProviderService::getInstance()->CreateMessage(); - if(message == nullptr) + OIC::Service::NSMessage *message = + OIC::Service::NSProviderService::getInstance()->createMessage(); + if (message == nullptr) { ThrowNSException(NS_ERROR, "Couldn't get Native Message"); return NULL; } jobject jMsg = getJavaMessage(env, message); - if(!jMsg) + if (!jMsg) { ThrowNSException(NS_ERROR, "Couldn't create Java Message"); return NULL; @@ -853,8 +929,9 @@ JNIEXPORT jobject JNICALL Java_org_iotivity_service_ns_provider_ProviderService_ return jMsg; } -JNIEXPORT jint JNICALL Java_org_iotivity_service_ns_provider_ProviderService_nativeEnableRemoteService -(JNIEnv *env,jobject jObj, jstring jstr) +JNIEXPORT jint JNICALL +Java_org_iotivity_service_ns_provider_ProviderService_nativeEnableRemoteService +(JNIEnv *env, jobject jObj, jstring jstr) { LOGD("JNIProviderService: nativeEnableRemoteService - IN"); if (!jstr) @@ -866,7 +943,7 @@ JNIEXPORT jint JNICALL Java_org_iotivity_service_ns_provider_ProviderService_nat const char *address = env->GetStringUTFChars( jstr, NULL); std::string servAddress(address); OIC::Service::NSResult result = - OIC::Service::NSProviderService::getInstance()->EnableRemoteService( + OIC::Service::NSProviderService::getInstance()->enableRemoteService( servAddress); if (result != OIC::Service::NSResult::OK) { @@ -877,8 +954,9 @@ JNIEXPORT jint JNICALL Java_org_iotivity_service_ns_provider_ProviderService_nat return (jint) result; } -JNIEXPORT jint JNICALL Java_org_iotivity_service_ns_provider_ProviderService_nativeDisableRemoteService -(JNIEnv *env,jobject jObj, jstring jstr) +JNIEXPORT jint JNICALL +Java_org_iotivity_service_ns_provider_ProviderService_nativeDisableRemoteService +(JNIEnv *env, jobject jObj, jstring jstr) { LOGD("JNIProviderService: nativeDisableRemoteService - IN"); if (!jstr) @@ -890,7 +968,7 @@ JNIEXPORT jint JNICALL Java_org_iotivity_service_ns_provider_ProviderService_nat const char *address = env->GetStringUTFChars( jstr, NULL); std::string servAddress(address); OIC::Service::NSResult result = - OIC::Service::NSProviderService::getInstance()->DisableRemoteService( + OIC::Service::NSProviderService::getInstance()->disableRemoteService( servAddress); if (result != OIC::Service::NSResult::OK) { @@ -901,10 +979,10 @@ JNIEXPORT jint JNICALL Java_org_iotivity_service_ns_provider_ProviderService_nat return (jint) result; } -JNIEXPORT jint JNICALL Java_org_iotivity_service_ns_provider_ProviderService_nativeAddTopic +JNIEXPORT jint JNICALL Java_org_iotivity_service_ns_provider_ProviderService_nativeRegisterTopic (JNIEnv *env, jobject jObj, jstring jTopicName) { - LOGD("JNIProviderService: nativeAddTopic - IN"); + LOGD("JNIProviderService: nativeRegisterTopic - IN"); if (!jTopicName) { ThrowNSException(NS_ERROR, "Topic Name Can't be NULL"); @@ -912,20 +990,20 @@ JNIEXPORT jint JNICALL Java_org_iotivity_service_ns_provider_ProviderService_nat } const char *name = env->GetStringUTFChars( jTopicName, NULL); std::string topicName(name); - OIC::Service::NSResult result = OIC::Service::NSProviderService::getInstance()->AddTopic( + OIC::Service::NSResult result = OIC::Service::NSProviderService::getInstance()->registerTopic( topicName); if (result != OIC::Service::NSResult::OK) { - LOGE("Fail to Add Topic"); + LOGE("Fail to Register Topic"); } env->ReleaseStringUTFChars(jTopicName, name); - LOGD("JNIProviderService: nativeAddTopic - OUT"); + LOGD("JNIProviderService: nativeRegisterTopic - OUT"); return (jint) result; } -JNIEXPORT jint JNICALL Java_org_iotivity_service_ns_provider_ProviderService_nativeDeleteTopic +JNIEXPORT jint JNICALL Java_org_iotivity_service_ns_provider_ProviderService_nativeUnregisterTopic (JNIEnv *env, jobject jObj, jstring jTopicName) { - LOGD("JNIProviderService: nativeDeleteTopic - IN"); + LOGD("JNIProviderService: nativeUnregisterTopic - IN"); if (!jTopicName) { ThrowNSException(NS_ERROR, "Topic Name Can't be NULL"); @@ -933,24 +1011,25 @@ JNIEXPORT jint JNICALL Java_org_iotivity_service_ns_provider_ProviderService_nat } const char *name = env->GetStringUTFChars( jTopicName, NULL); std::string topicName(name); - OIC::Service::NSResult result = OIC::Service::NSProviderService::getInstance()->DeleteTopic( + OIC::Service::NSResult result = OIC::Service::NSProviderService::getInstance()->unregisterTopic( topicName); if (result != OIC::Service::NSResult::OK) { - LOGE("Fail to Add Topic"); + LOGE("Fail to Unregister Topic"); } env->ReleaseStringUTFChars(jTopicName, name); - LOGD("JNIProviderService: nativeDeleteTopic - OUT"); + LOGD("JNIProviderService: nativeUnregisterTopic - OUT"); return (jint) result; } -JNIEXPORT jobject JNICALL Java_org_iotivity_service_ns_provider_ProviderService_nativeGetTopics +JNIEXPORT jobject JNICALL +Java_org_iotivity_service_ns_provider_ProviderService_nativeGetRegisteredTopicList (JNIEnv *env, jobject jObj) { - LOGD("JNIProviderService: nativeGetTopics - IN"); + LOGD("JNIProviderService: nativeGetRegisteredTopicList - IN"); OIC::Service::NSTopicsList *topicList = - OIC::Service::NSProviderService::getInstance()->GetTopics(); + OIC::Service::NSProviderService::getInstance()->getRegisteredTopicList(); if (topicList == nullptr) { ThrowNSException(NS_ERROR, "Topic List doesn't exist"); @@ -959,56 +1038,36 @@ JNIEXPORT jobject JNICALL Java_org_iotivity_service_ns_provider_ProviderService_ jobject obj_topicList = getJavaTopicsList(env, topicList); - LOGD("JNIProviderService: nativeGetTopics - OUT"); + LOGD("JNIProviderService: nativeGetRegisteredTopicList - OUT"); return obj_topicList; } JNIEXPORT jint JNICALL Java_org_iotivity_service_ns_provider_Consumer_nativeAcceptSubscription -(JNIEnv *env, jobject jObj, jobject jConsumer, jboolean jAccepted) +(JNIEnv *env, jobject jObj, jstring jConsumerId, jboolean jAccepted) { LOGD("JNIProviderService: nativeAcceptSubscription - IN"); - - jclass consumerClass = env->GetObjectClass( jConsumer); - if (!consumerClass) - { - ThrowNSException(NS_ERROR, "Failed to Get ObjectClass for Consumer"); - return (jint) OIC::Service::NSResult::ERROR; - } - - // Consumer ID - jfieldID fid_id = env->GetFieldID(consumerClass, "mConsumerId", "Ljava/lang/String;"); - if (fid_id == NULL) - { - LOGE("Error: jfieldID for mConsumerId is null"); - ThrowNSException(NS_ERROR, "ConsumerId not found"); - return (jint) OIC::Service::NSResult::ERROR; - } - - jstring jconId = (jstring)env->GetObjectField( jConsumer, fid_id); - if (!jconId) + if (!jConsumerId) { - ThrowNSException(NS_ERROR, "ProviderId cannot be null"); + ThrowNSException(NS_ERROR, "ConsumerId Can't be NULL"); return (jint) OIC::Service::NSResult::ERROR; } - const char *conId = env->GetStringUTFChars( jconId, NULL); - std::string consumerId(conId); - env->ReleaseStringUTFChars(jconId, conId); - + const char *id = env->GetStringUTFChars( jConsumerId, NULL); + std::string consumerId(id); LOGD("Consumer ID: %s\n", consumerId.c_str()); OIC::Service::NSConsumer *consumer = OIC::Service::NSProviderService::getInstance()->getConsumer(consumerId); if (consumer) - return (jint) consumer->acceptSubscription(consumer, (bool)jAccepted); + return (jint) consumer->acceptSubscription((bool)jAccepted); LOGE("Couldn't find consumer"); LOGD("JNIProviderService: nativeAcceptSubscription - OUT"); return (jint) OIC::Service::NSResult::ERROR; } -JNIEXPORT jint JNICALL Java_org_iotivity_service_ns_provider_Consumer_nativeSelectTopic +JNIEXPORT jint JNICALL Java_org_iotivity_service_ns_provider_Consumer_nativeSetConsumerTopic (JNIEnv *env, jobject jObj, jstring jConsumerId, jstring jTopicName) { - LOGD("JNIProviderService: nativeSelectTopic - IN"); + LOGD("JNIProviderService: nativeSetConsumerTopic - IN"); if (!jConsumerId || !jTopicName) { ThrowNSException(NS_ERROR, "Topic Name or ConsumerId Can't be NULL"); @@ -1025,7 +1084,7 @@ JNIEXPORT jint JNICALL Java_org_iotivity_service_ns_provider_Consumer_nativeSele ThrowNSException(NS_ERROR, "Consumer does exists"); return (jint) OIC::Service::NSResult::ERROR; } - OIC::Service::NSResult result = nsConsumer->selectTopic(topicName); + OIC::Service::NSResult result = nsConsumer->setTopic(topicName); if (result != OIC::Service::NSResult::OK) { @@ -1033,13 +1092,13 @@ JNIEXPORT jint JNICALL Java_org_iotivity_service_ns_provider_Consumer_nativeSele } env->ReleaseStringUTFChars(jTopicName, name); env->ReleaseStringUTFChars(jConsumerId, id); - LOGD("JNIProviderService: nativeSelectTopic - OUT"); + LOGD("JNIProviderService: nativeSetConsumerTopic - OUT"); return (jint) result; } -JNIEXPORT jint JNICALL Java_org_iotivity_service_ns_provider_Consumer_nativeUnselectTopic +JNIEXPORT jint JNICALL Java_org_iotivity_service_ns_provider_Consumer_nativeUnsetConsumerTopic (JNIEnv *env, jobject jObj, jstring jConsumerId, jstring jTopicName) { - LOGD("JNIProviderService: nativeUnselectTopic - IN"); + LOGD("JNIProviderService: nativeUnsetConsumerTopic - IN"); if (!jConsumerId || !jTopicName) { ThrowNSException(NS_ERROR, "Topic Name or ConsumerId Can't be NULL"); @@ -1056,7 +1115,7 @@ JNIEXPORT jint JNICALL Java_org_iotivity_service_ns_provider_Consumer_nativeUnse ThrowNSException(NS_ERROR, "Consumer does exists"); return (jint) OIC::Service::NSResult::ERROR; } - OIC::Service::NSResult result = nsConsumer->unselectTopic(topicName); + OIC::Service::NSResult result = nsConsumer->unsetTopic(topicName); if (result != OIC::Service::NSResult::OK) { @@ -1064,14 +1123,14 @@ JNIEXPORT jint JNICALL Java_org_iotivity_service_ns_provider_Consumer_nativeUnse } env->ReleaseStringUTFChars(jTopicName, name); env->ReleaseStringUTFChars(jConsumerId, id); - LOGD("JNIProviderService: nativeUnselectTopic - OUT"); + LOGD("JNIProviderService: nativeUnsetConsumerTopic - OUT"); return (jint) result; } -JNIEXPORT jobject JNICALL Java_org_iotivity_service_ns_provider_Consumer_nativeGetConsumerTopics +JNIEXPORT jobject JNICALL Java_org_iotivity_service_ns_provider_Consumer_nativeGetConsumerTopicList (JNIEnv *env, jobject jObj, jstring jConsumerId) { - LOGD("JNIProviderService: nativeGetConsumerTopics - IN"); + LOGD("JNIProviderService: nativeGetConsumerTopicList - IN"); if (!jConsumerId) { ThrowNSException(NS_ERROR, "Topic Name or ConsumerId Can't be NULL"); @@ -1087,14 +1146,14 @@ JNIEXPORT jobject JNICALL Java_org_iotivity_service_ns_provider_Consumer_nativeG return NULL; } env->ReleaseStringUTFChars(jConsumerId, id); - OIC::Service::NSTopicsList *topicList = nsConsumer->getConsumerTopics(); + OIC::Service::NSTopicsList *topicList = nsConsumer->getConsumerTopicList(); if (topicList == nullptr) { ThrowNSException(NS_ERROR, "Topic List doesn't exist"); return NULL; } jobject obj_topicList = getJavaTopicsList(env, topicList); - LOGD("JNIProviderService: nativeGetConsumerTopics - OUT"); + LOGD("JNIProviderService: nativeGetConsumerTopicList - OUT"); return obj_topicList; } @@ -1102,7 +1161,7 @@ JNIEXPORT jobject JNICALL Java_org_iotivity_service_ns_provider_Consumer_nativeG JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *jvm, void *reserved) { LOGD("ProviderService_JNI_OnLoad"); - g_jvm = jvm; + g_jvm_provider = jvm; JNIEnv *env; if (jvm->GetEnv((void **)&env, JNI_CURRENT_VERSION) != JNI_OK) @@ -1237,6 +1296,27 @@ JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *jvm, void *reserved) return JNI_ERR; } + //OcRepresentation + jclass localOcRepresentation = env->FindClass("org/iotivity/base/OcRepresentation"); + if (!localOcRepresentation) + { + LOGE("Failed to get local OcRepresentation class"); + return JNI_ERR; + } + g_cls_OcRepresentation = (jclass) env->NewGlobalRef(localOcRepresentation); + if (!g_cls_OcRepresentation) + { + LOGE("Failed to set Global OcRepresentation reference"); + return JNI_ERR; + } + + g_mid_OcRepresentation_N_ctor_bool = env->GetMethodID(g_cls_OcRepresentation, "", "(JZ)V"); + if (!g_mid_OcRepresentation_N_ctor_bool) + { + LOGE("Failed to get Global OcRepresentation Constructor reference"); + return JNI_ERR; + } + env->DeleteLocalRef(localMessage); env->DeleteLocalRef(localMessageType); env->DeleteLocalRef(localConsumer); @@ -1246,6 +1326,7 @@ JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *jvm, void *reserved) env->DeleteLocalRef(localTopic); env->DeleteLocalRef(localTopicsList); env->DeleteLocalRef(localTopicState); + env->DeleteLocalRef(localOcRepresentation); return NSExceptionInit(env); } @@ -1270,4 +1351,5 @@ JNIEXPORT void JNICALL JNI_OnUnload(JavaVM *jvm, void *reserved) env->DeleteGlobalRef(g_cls_Topic); env->DeleteGlobalRef(g_cls_TopicsList); env->DeleteGlobalRef(g_cls_TopicState); + env->DeleteGlobalRef(g_cls_OcRepresentation); }