1 /******************************************************************
3 * Copyright 2015 Samsung Electronics All Rights Reserved.
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
19 ******************************************************************/
21 #include "JniRcsResourceObject.h"
23 #include "JniRcsObject.h"
24 #include "JniRcsResourceAttributes.h"
25 #include "JavaClasses.h"
26 #include "JavaExceptions.h"
27 #include "JavaGlobalRef.h"
28 #include "JniRcsValue.h"
30 #include "ScopedEnv.h"
33 #include "RCSResourceObject.h"
34 #include "RCSResponse.h"
35 #include "RCSRequest.h"
36 #include "RequestHandler.h"
38 #define LOG_TAG "JNI-RCSResourceObject"
40 #define CLS_NAME_RCS_RESOURCE_OBJECT PACKAGE_NAME "/server/RcsResourceObject"
41 #define CLS_NAME_RCS_REQUEST PACKAGE_NAME "/server/RcsRequest"
43 #define CLS_NAME_AUTO_NOTIFY_POLICY CLS_NAME_RCS_RESOURCE_OBJECT "$AutoNotifyPolicy"
44 #define CLS_NAME_SET_REQUEST_HANDLER_POLICY CLS_NAME_RCS_RESOURCE_OBJECT "$SetRequestHandlerPolicy"
46 #define CLS_NAME_GET_REQUEST_HANDLER CLS_NAME_RCS_RESOURCE_OBJECT "$GetRequestHandler"
47 #define CLS_NAME_SET_REQUEST_HANDLER CLS_NAME_RCS_RESOURCE_OBJECT "$SetRequestHandler"
48 #define CLS_NAME_ON_ATTRIBUTE_UPDATESD_LISTENER \
49 CLS_NAME_RCS_RESOURCE_OBJECT "$OnAttributeUpdatedListener"
51 #define CLS_NAME_RCS_RESPONSE PACKAGE_NAME "/server/RcsResponse"
53 #define CLS_NAME_RCS_GET_RESPONSE PACKAGE_NAME "/server/RcsGetResponse"
54 #define CLS_NAME_RCS_SET_RESPONSE PACKAGE_NAME "/server/RcsSetResponse"
55 #define CLS_NAME_RCS_SET_RESPONSE_ACCEPTANCE_METHOD CLS_NAME_RCS_SET_RESPONSE "$AcceptanceMethod"
57 using namespace OIC::Service;
61 jclass g_cls_RCSRequest;
62 jclass g_cls_RCSResourceObject;
64 jmethodID g_ctor_RCSRequest;
65 jmethodID g_ctor_RCSResourceObject;
67 jmethodID g_method_GetRequestHandler_onGetRequested;
68 jmethodID g_method_SetRequestHandler_onSetRequested;
69 jmethodID g_method_OnAttributeUpdatedListener_onAttributeUpdated;
71 jfieldID g_field_RCSResponse_mErrorCode;
72 jfieldID g_field_RCSResponse_mAttrs;
73 jfieldID g_field_RCSSetResponse_mAcceptanceMethod;
75 jobject g_obj_RCSSetResponse_AcceptanceMethod_DEFAULT;
76 jobject g_obj_RCSSetResponse_AcceptanceMethod_ACCEPT;
77 jobject g_obj_RCSSetResponse_AcceptanceMethod_IGNORE;
79 jobject g_obj_AutoNotifyPolicy_NEVER;
80 jobject g_obj_AutoNotifyPolicy_ALWAYS;
81 jobject g_obj_AutoNotifyPolicy_UPDATED;
83 jobject g_obj_SetRequestHandlerPolicy_NEVER;
84 jobject g_obj_SetRequestHandlerPolicy_ACCEPT;
86 inline RCSResourceObject::Ptr& getResource(JNIEnv* env, jobject obj)
88 return getNativeHandleAs< RCSResourceObject::Ptr >(env, obj);
91 inline RCSResourceObject::AutoNotifyPolicy convertAutoNotifyPolicy(JNIEnv* env, jobject obj)
93 if (env->IsSameObject(g_obj_AutoNotifyPolicy_NEVER, obj))
95 return RCSResourceObject::AutoNotifyPolicy::NEVER;
98 if (env->IsSameObject(g_obj_AutoNotifyPolicy_ALWAYS, obj))
100 return RCSResourceObject::AutoNotifyPolicy::ALWAYS;
103 if (env->IsSameObject(g_obj_AutoNotifyPolicy_UPDATED, obj))
105 return RCSResourceObject::AutoNotifyPolicy::UPDATED;
108 throwRCSException(env, "Failed to convert AutoNotifyPolicy");
112 inline jobject convertAutoNotifyPolicy(JNIEnv* env, RCSResourceObject::AutoNotifyPolicy policy)
116 case RCSResourceObject::AutoNotifyPolicy::NEVER: return g_obj_AutoNotifyPolicy_NEVER;
117 case RCSResourceObject::AutoNotifyPolicy::ALWAYS: return g_obj_AutoNotifyPolicy_ALWAYS;
118 case RCSResourceObject::AutoNotifyPolicy::UPDATED: return g_obj_AutoNotifyPolicy_UPDATED;
121 throwRCSException(env, "Failed to convert AutoNotifyPolicy");
125 inline RCSResourceObject::SetRequestHandlerPolicy convertSetRequestHandlerPolicy(JNIEnv* env,
128 if (env->IsSameObject(g_obj_SetRequestHandlerPolicy_NEVER, obj))
130 return RCSResourceObject::SetRequestHandlerPolicy::NEVER;
133 if (env->IsSameObject(g_obj_SetRequestHandlerPolicy_ACCEPT, obj))
135 return RCSResourceObject::SetRequestHandlerPolicy::ACCEPTANCE;
138 throwRCSException(env, "Failed to convert SetRequestHandlerPolicy");
142 inline jobject convertSetRequestHandlerPolicy(JNIEnv* env,
143 RCSResourceObject::SetRequestHandlerPolicy policy)
147 case RCSResourceObject::SetRequestHandlerPolicy::NEVER:
148 return g_obj_SetRequestHandlerPolicy_NEVER;
149 case RCSResourceObject::SetRequestHandlerPolicy::ACCEPTANCE:
150 return g_obj_SetRequestHandlerPolicy_ACCEPT;
153 throwRCSException(env, "Failed to convert SetRequestHandlerPolicy");
158 template< typename ENV >
159 inline jobject getAttrsObj(ENV& env, jobject responseObj)
161 return env->GetObjectField(responseObj, g_field_RCSResponse_mAttrs);
164 template< typename ENV >
165 inline int getErrorCode(ENV& env, jobject responseObj)
167 return env->GetIntField(responseObj, g_field_RCSResponse_mErrorCode);
170 template< typename ENV >
171 inline RCSSetResponse::AcceptanceMethod getAcceptanceMethod(ENV& env, jobject responseObj)
173 auto methodObj = env->GetObjectField(responseObj, g_field_RCSSetResponse_mAcceptanceMethod);
175 if (env->IsSameObject(methodObj, g_obj_RCSSetResponse_AcceptanceMethod_IGNORE))
177 return RCSSetResponse::AcceptanceMethod::IGNORE;
180 if (env->IsSameObject(methodObj, g_obj_RCSSetResponse_AcceptanceMethod_ACCEPT))
182 return RCSSetResponse::AcceptanceMethod::ACCEPT;
185 return RCSSetResponse::AcceptanceMethod::DEFAULT;
188 inline jobject callHandler(ScopedEnvWrapper& env, jobject listener, jmethodID methodId,
189 const RCSRequest& request, const RCSResourceAttributes& attrs)
191 auto requestObj = env->NewObject(g_cls_RCSRequest, g_ctor_RCSRequest,
192 env->NewStringUTF(request.getResourceUri().c_str()));
193 auto attrsObj = newAttributesObject(env.get(), attrs);
195 return env->CallObjectMethod(listener, methodId, requestObj, attrsObj);
198 template< typename RESPONSE >
199 inline RESPONSE createResponse(ScopedEnvWrapper& env, jobject responseObj)
201 auto errorCode = getErrorCode(env, responseObj);
202 auto responseAttrsObj = getAttrsObj(env, responseObj);
204 if (responseAttrsObj)
206 return RESPONSE::create(toNativeAttributes(env.get(), responseAttrsObj), errorCode);
209 return RESPONSE::create(errorCode);
212 RCSGetResponse onGetRequest(const RCSRequest& request, const RCSResourceAttributes& attrs,
213 const JavaGlobalRef& listener)
215 ScopedEnvWrapper env;
216 EXPECT_RET(env, "env is null!", RCSGetResponse::create(-1));
220 auto responseObj = callHandler(env, listener, g_method_GetRequestHandler_onGetRequested,
223 return createResponse< RCSGetResponse >(env, responseObj);
225 catch (const JavaException&)
227 env->ExceptionDescribe();
228 env->ExceptionClear();
230 return RCSGetResponse::create({ }, -1);
233 RCSSetResponse onSetRequest(const RCSRequest& request, const RCSResourceAttributes& attrs,
234 const JavaGlobalRef& listener)
236 ScopedEnvWrapper env;
237 EXPECT_RET(env, "env is null!", RCSSetResponse::create(-1));
241 auto responseObj = callHandler(env, listener, g_method_SetRequestHandler_onSetRequested,
244 auto acceptanceMethod = getAcceptanceMethod(env, responseObj);
246 return createResponse< RCSSetResponse >(env, responseObj).
247 setAcceptanceMethod(acceptanceMethod);
249 catch (const JavaException&)
251 env->ExceptionDescribe();
252 env->ExceptionClear();
254 return RCSSetResponse::create(-1);
258 void onAttributeUpdated(const RCSResourceAttributes::Value& oldVal,
259 const RCSResourceAttributes::Value& newVal, const JavaGlobalRef& listener)
261 ScopedEnvWrapper env;
262 EXPECT(env, "env is null!");
266 env->CallVoidMethod(listener, g_method_OnAttributeUpdatedListener_onAttributeUpdated,
267 newRCSValueObject(env.get(), oldVal), newRCSValueObject(env.get(), newVal));
269 catch (const JavaException&)
271 env->ExceptionDescribe();
272 env->ExceptionClear();
276 void initRCSResponse(JNIEnvWrapper* env)
278 auto clsRCSResponse = env->FindClass(CLS_NAME_RCS_RESPONSE);
280 g_field_RCSResponse_mErrorCode = env->GetFieldID(clsRCSResponse, "mErrorCode", "I");
282 g_field_RCSResponse_mAttrs = env->GetFieldID(clsRCSResponse, "mAttrs",
283 AS_SIG(CLS_NAME_RESOURCEATTRIBUTES));
285 auto clsRCSSetResponse = env->FindClass(CLS_NAME_RCS_SET_RESPONSE);
287 g_field_RCSSetResponse_mAcceptanceMethod = env->GetFieldID(clsRCSSetResponse,
288 "mAcceptanceMethod", AS_SIG(CLS_NAME_RCS_SET_RESPONSE_ACCEPTANCE_METHOD));
290 auto clsAcceptanceMethod = env->FindClass(CLS_NAME_RCS_SET_RESPONSE_ACCEPTANCE_METHOD);
292 g_obj_RCSSetResponse_AcceptanceMethod_DEFAULT = env->NewGlobalRef(
293 env->GetStaticObjectField(clsAcceptanceMethod, "DEFAULT",
294 AS_SIG(CLS_NAME_RCS_SET_RESPONSE_ACCEPTANCE_METHOD)));
296 g_obj_RCSSetResponse_AcceptanceMethod_ACCEPT = env->NewGlobalRef(
297 env->GetStaticObjectField(clsAcceptanceMethod, "ACCEPT",
298 AS_SIG(CLS_NAME_RCS_SET_RESPONSE_ACCEPTANCE_METHOD)));
300 g_obj_RCSSetResponse_AcceptanceMethod_IGNORE = env->NewGlobalRef(
301 env->GetStaticObjectField(clsAcceptanceMethod, "IGNORE",
302 AS_SIG(CLS_NAME_RCS_SET_RESPONSE_ACCEPTANCE_METHOD)));
306 void initRCSResourceObject(JNIEnvWrapper* env)
308 g_cls_RCSResourceObject = env->FindClassAsGlobalRef(CLS_NAME_RCS_RESOURCE_OBJECT);
310 g_ctor_RCSResourceObject = env->GetMethodID(g_cls_RCSResourceObject, "<init>", "()V");
312 g_cls_RCSRequest = env->FindClassAsGlobalRef(CLS_NAME_RCS_REQUEST);
314 g_ctor_RCSRequest = env->GetMethodID(g_cls_RCSRequest, "<init>",
315 "(" AS_SIG(CLS_NAME_STRING) ")V");
317 auto clsGetRequestHandler = env->FindClass(CLS_NAME_GET_REQUEST_HANDLER);
319 g_method_GetRequestHandler_onGetRequested = env->GetMethodID(clsGetRequestHandler,
321 "(" AS_SIG(CLS_NAME_RCS_REQUEST) AS_SIG(CLS_NAME_RESOURCEATTRIBUTES) ")"
322 AS_SIG(CLS_NAME_RCS_GET_RESPONSE));
324 auto clsSetRequestHandler = env->FindClass(CLS_NAME_SET_REQUEST_HANDLER);
326 g_method_SetRequestHandler_onSetRequested = env->GetMethodID(clsSetRequestHandler,
328 "(" AS_SIG(CLS_NAME_RCS_REQUEST) AS_SIG(CLS_NAME_RESOURCEATTRIBUTES) ")"
329 AS_SIG(CLS_NAME_RCS_SET_RESPONSE));
331 auto clsOnAttributeUpdatedListener = env->FindClass(CLS_NAME_ON_ATTRIBUTE_UPDATESD_LISTENER);
333 g_method_OnAttributeUpdatedListener_onAttributeUpdated = env->GetMethodID(
334 clsOnAttributeUpdatedListener, "onAttributeUpdated",
335 "(" AS_SIG(CLS_NAME_VALUE) AS_SIG(CLS_NAME_VALUE) ")V");
337 auto clsAutoNotifyPolicy = env->FindClass(CLS_NAME_AUTO_NOTIFY_POLICY);
339 g_obj_AutoNotifyPolicy_NEVER = env->NewGlobalRef(
340 env->GetStaticObjectField(clsAutoNotifyPolicy, "NEVER",
341 AS_SIG(CLS_NAME_AUTO_NOTIFY_POLICY)));
343 g_obj_AutoNotifyPolicy_ALWAYS = env->NewGlobalRef(
344 env->GetStaticObjectField(clsAutoNotifyPolicy, "ALWAYS",
345 AS_SIG(CLS_NAME_AUTO_NOTIFY_POLICY)));
348 g_obj_AutoNotifyPolicy_UPDATED = env->NewGlobalRef(
349 env->GetStaticObjectField(clsAutoNotifyPolicy, "UPDATED",
350 AS_SIG(CLS_NAME_AUTO_NOTIFY_POLICY)));
352 auto clsSetRequestHandlerPolicy = env->FindClass(CLS_NAME_SET_REQUEST_HANDLER_POLICY);
354 g_obj_SetRequestHandlerPolicy_NEVER = env->NewGlobalRef(
355 env->GetStaticObjectField(clsSetRequestHandlerPolicy, "NEVER",
356 AS_SIG(CLS_NAME_SET_REQUEST_HANDLER_POLICY)));
358 g_obj_SetRequestHandlerPolicy_ACCEPT = env->NewGlobalRef(
359 env->GetStaticObjectField(clsSetRequestHandlerPolicy, "ACCEPT",
360 AS_SIG(CLS_NAME_SET_REQUEST_HANDLER_POLICY)));
362 initRCSResponse(env);
365 void clearRCSResourceObject(JNIEnvWrapper* env)
367 env->DeleteGlobalRef(g_cls_RCSRequest);
369 env->DeleteGlobalRef(g_obj_RCSSetResponse_AcceptanceMethod_DEFAULT);
370 env->DeleteGlobalRef(g_obj_RCSSetResponse_AcceptanceMethod_ACCEPT);
371 env->DeleteGlobalRef(g_obj_RCSSetResponse_AcceptanceMethod_IGNORE);
373 env->DeleteGlobalRef(g_obj_AutoNotifyPolicy_NEVER);
374 env->DeleteGlobalRef(g_obj_AutoNotifyPolicy_ALWAYS);
375 env->DeleteGlobalRef(g_obj_AutoNotifyPolicy_UPDATED);
377 env->DeleteGlobalRef(g_obj_SetRequestHandlerPolicy_NEVER);
378 env->DeleteGlobalRef(g_obj_SetRequestHandlerPolicy_ACCEPT);
381 JNIEXPORT jint JNICALL
382 Java_org_iotivity_service_server_RcsResponse_nativeGetDefaultErrorCode
385 return RequestHandler::DEFAULT_ERROR_CODE;
388 JNIEXPORT jobject JNICALL
389 Java_org_iotivity_service_server_RcsResourceObject_nativeBuild
390 (JNIEnv* env, jclass, jstring uriObj, jstring typeObj, jstring interfaceObj, jboolean isObservable,
391 jboolean isDiscoverable, jobject attrsObj)
395 EXPECT_RET_DEF(uriObj, "uri is null.");
397 auto uri = toStdString(env, uriObj);
398 auto type = toStdString(env, typeObj);
399 auto interface = toStdString(env, interfaceObj);
401 RCSResourceAttributes attrs;
404 attrs = toNativeAttributes(env, attrsObj);
405 VERIFY_NO_EXC_RET_DEF(env);
410 auto resource = RCSResourceObject::Builder(uri, type,interface).
411 setDiscoverable(isDiscoverable). setObservable(isObservable).setAttributes(attrs).
414 auto resourceObj = env->NewObject(g_cls_RCSResourceObject, g_ctor_RCSResourceObject);
415 VERIFY_NO_EXC_RET_DEF(env);
417 setSafeNativeHandle< decltype(resource) >(env, resourceObj, resource);
421 catch (const RCSPlatformException& e)
423 LOGE("%s", e.what());
424 throwPlatformException(env, e);
431 JNIEXPORT void JNICALL
432 Java_org_iotivity_service_server_RcsResourceObject_nativeSetAttribute
433 (JNIEnv* env, jobject obj, jstring keyObj, jobject valueObj)
435 LOGD("nativeSetAttributeInteger");
437 EXPECT(keyObj, "key is null.");
438 EXPECT(valueObj, "value is null.");
440 auto res = getResource(env, obj);
443 res->setAttribute(toStdString(env, keyObj), toNativeAttrsValue(env, valueObj));
446 JNIEXPORT jobject JNICALL
447 Java_org_iotivity_service_server_RcsResourceObject_nativeGetAttributeValue
448 (JNIEnv *env, jobject obj, jstring keyObj)
450 LOGD("nativeGetAttributeValue");
452 EXPECT_RET_DEF(keyObj, "key is null.");
454 auto res = getResource(env, obj);
455 VERIFY_NO_EXC_RET_DEF(env);
459 auto valueObj = newRCSValueObject(env, res->getAttributeValue(toStdString(env, keyObj)));
460 VERIFY_NO_EXC_RET_DEF(env);
464 catch(const RCSInvalidKeyException& e)
470 JNIEXPORT jboolean JNICALL
471 Java_org_iotivity_service_server_RcsResourceObject_nativeRemoveAttribute
472 (JNIEnv* env, jobject obj, jstring keyObj)
474 LOGD("nativeRemoveAttribute");
476 EXPECT_RET_DEF(keyObj, "key is null.");
478 auto res = getResource(env, obj);
479 VERIFY_NO_EXC_RET_DEF(env);
481 return res->removeAttribute(toStdString(env, keyObj));
484 JNIEXPORT jboolean JNICALL
485 Java_org_iotivity_service_server_RcsResourceObject_nativeContainsAttribute
486 (JNIEnv* env, jobject obj, jstring keyObj)
488 LOGD("nativeContainsAttribute");
490 EXPECT_RET_DEF(keyObj, "key is null.");
492 auto res = getResource(env, obj);
493 VERIFY_NO_EXC_RET_DEF(env);
495 return res->containsAttribute(toStdString(env, keyObj));
498 JNIEXPORT jobject JNICALL
499 Java_org_iotivity_service_server_RcsResourceObject_nativeGetAttributes
500 (JNIEnv* env, jobject obj)
502 LOGD("nativeGetAttributes");
504 auto res = getResource(env, obj);
505 VERIFY_NO_EXC_RET_DEF(env);
507 RCSResourceObject::LockGuard lock{ res, RCSResourceObject::AutoNotifyPolicy::NEVER };
508 return newAttributesObject(env, res->getAttributes());
511 JNIEXPORT jboolean JNICALL
512 Java_org_iotivity_service_server_RcsResourceObject_nativeIsObservable
513 (JNIEnv* env, jobject obj)
515 LOGD("nativeIsObservable");
517 auto res = getResource(env, obj);
518 VERIFY_NO_EXC_RET_DEF(env);
520 return res->isObservable();
523 JNIEXPORT jboolean JNICALL
524 Java_org_iotivity_service_server_RcsResourceObject_nativeIsDiscoverable
525 (JNIEnv *env, jobject obj)
527 LOGD("nativeIsDiscoverable");
529 auto res = getResource(env, obj);
530 VERIFY_NO_EXC_RET_DEF(env);
532 return res->isDiscoverable();
535 JNIEXPORT void JNICALL
536 Java_org_iotivity_service_server_RcsResourceObject_nativeSetGetRequestHandler
537 (JNIEnv *env, jobject obj, jobject listenerObj)
539 LOGD("nativeSetGetRequestHandler");
541 auto res = getResource(env, obj);
546 res->setGetRequestHandler(std::bind(onGetRequest, std::placeholders::_1, std::placeholders::_2,
547 JavaGlobalRef{ env, listenerObj }));
551 res->setGetRequestHandler({ });
555 JNIEXPORT void JNICALL
556 Java_org_iotivity_service_server_RcsResourceObject_nativeSetSetRequestHandler
557 (JNIEnv* env, jobject obj, jobject listenerObj)
559 LOGD("nativeSetSetRequestHandler");
561 auto res = getResource(env, obj);
566 res->setSetRequestHandler(std::bind(onSetRequest, std::placeholders::_1,
567 std::placeholders::_2, JavaGlobalRef{ env, listenerObj }));
571 res->setSetRequestHandler({ });
575 JNIEXPORT void JNICALL
576 Java_org_iotivity_service_server_RcsResourceObject_nativeAddAttributeUpdatedListener
577 (JNIEnv* env, jobject obj, jstring keyObj, jobject listenerObj)
579 LOGD("nativeAddAttributeUpdatedListener");
581 auto res = getResource(env, obj);
584 auto key = toStdString(env, keyObj);
587 res->addAttributeUpdatedListener(std::move(key), std::bind(onAttributeUpdated,
588 std::placeholders::_1, std::placeholders::_2, JavaGlobalRef{ env, listenerObj }));
591 JNIEXPORT jboolean JNICALL
592 Java_org_iotivity_service_server_RcsResourceObject_nativeRemoveAttributeUpdatedListener
593 (JNIEnv* env, jobject obj, jstring keyObj)
595 LOGD("nativeAddAttributeUpdatedListener");
597 EXPECT_RET_DEF(keyObj, "key is null");
599 auto res = getResource(env, obj);
600 VERIFY_NO_EXC_RET_DEF(env);
602 auto key = toStdString(env, keyObj);
603 VERIFY_NO_EXC_RET_DEF(env);
605 return res->removeAttributeUpdatedListener(key);
608 JNIEXPORT void JNICALL Java_org_iotivity_service_server_RcsResourceObject_nativeNotify
609 (JNIEnv* env, jobject obj)
611 LOGD("nativeNotify");
613 auto res = getResource(env, obj);
620 catch (const RCSPlatformException& e) {
621 throwPlatformException(env, e);
625 JNIEXPORT void JNICALL
626 Java_org_iotivity_service_server_RcsResourceObject_nativeSetAutoNotifyPolicy
627 (JNIEnv* env, jobject obj, jobject policyObj)
629 LOGD("nativeSetAutoNotifyPolicy");
631 EXPECT(policyObj, "policyObj is null");
633 auto res = getResource(env, obj);
636 auto policy = convertAutoNotifyPolicy(env, policyObj);
639 res->setAutoNotifyPolicy(policy);
642 JNIEXPORT jobject JNICALL
643 Java_org_iotivity_service_server_RcsResourceObject_nativeGetAutoNotifyPolicy
644 (JNIEnv* env, jobject obj)
646 LOGD("nativeGetAutoNotifyPolicy");
648 auto res = getResource(env, obj);
649 VERIFY_NO_EXC_RET_DEF(env);
651 return convertAutoNotifyPolicy(env, res->getAutoNotifyPolicy());
654 JNIEXPORT void JNICALL
655 Java_org_iotivity_service_server_RcsResourceObject_nativeSetSetRequestHandlerPolicy
656 (JNIEnv* env, jobject obj, jobject policyObj)
658 LOGD("nativeSetSetRequestHandlerPolicy");
660 EXPECT(policyObj, "policyObj is null");
662 auto res = getResource(env, obj);
665 auto policy = convertSetRequestHandlerPolicy(env, policyObj);
668 res->setSetRequestHandlerPolicy(policy);
671 JNIEXPORT jobject JNICALL
672 Java_org_iotivity_service_server_RcsResourceObject_nativeGetSetRequestHandlerPolicy
673 (JNIEnv* env, jobject obj)
675 LOGD("nativeGetSetRequestHandlerPolicy");
677 auto res = getResource(env, obj);
678 VERIFY_NO_EXC_RET_DEF(env);
680 return convertSetRequestHandlerPolicy(env, res->getSetRequestHandlerPolicy());