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 "RequestHandler.h"
37 #define LOG_TAG "JNI-RCSResourceObject"
39 #define CLS_NAME_RCS_RESOURCE_OBJECT PACKAGE_NAME "/server/RcsResourceObject"
40 #define CLS_NAME_RCS_REQUEST PACKAGE_NAME "/server/RcsRequest"
42 #define CLS_NAME_AUTO_NOTIFY_POLICY CLS_NAME_RCS_RESOURCE_OBJECT "$AutoNotifyPolicy"
43 #define CLS_NAME_SET_REQUEST_HANDLER_POLICY CLS_NAME_RCS_RESOURCE_OBJECT "$SetRequestHandlerPolicy"
45 #define CLS_NAME_GET_REQUEST_HANDLER CLS_NAME_RCS_RESOURCE_OBJECT "$GetRequestHandler"
46 #define CLS_NAME_SET_REQUEST_HANDLER CLS_NAME_RCS_RESOURCE_OBJECT "$SetRequestHandler"
47 #define CLS_NAME_ON_ATTRIBUTE_UPDATESD_LISTENER \
48 CLS_NAME_RCS_RESOURCE_OBJECT "$OnAttributeUpdatedListener"
50 #define CLS_NAME_RCS_RESPONSE PACKAGE_NAME "/server/RcsResponse"
52 #define CLS_NAME_RCS_GET_RESPONSE PACKAGE_NAME "/server/RcsGetResponse"
53 #define CLS_NAME_RCS_SET_RESPONSE PACKAGE_NAME "/server/RcsSetResponse"
54 #define CLS_NAME_RCS_SET_RESPONSE_ACCEPTANCE_METHOD CLS_NAME_RCS_SET_RESPONSE "$AcceptanceMethod"
56 using namespace OIC::Service;
60 jclass g_cls_RCSRequest;
61 jclass g_cls_RCSResourceObject;
63 jmethodID g_ctor_RCSRequest;
64 jmethodID g_ctor_RCSResourceObject;
66 jmethodID g_method_GetRequestHandler_onGetRequested;
67 jmethodID g_method_SetRequestHandler_onSetRequested;
68 jmethodID g_method_OnAttributeUpdatedListener_onAttributeUpdated;
70 jfieldID g_field_RCSResponse_mErrorCode;
71 jfieldID g_field_RCSResponse_mAttrs;
72 jfieldID g_field_RCSSetResponse_mAcceptanceMethod;
74 jobject g_obj_RCSSetResponse_AcceptanceMethod_DEFAULT;
75 jobject g_obj_RCSSetResponse_AcceptanceMethod_ACCEPT;
76 jobject g_obj_RCSSetResponse_AcceptanceMethod_IGNORE;
78 jobject g_obj_AutoNotifyPolicy_NEVER;
79 jobject g_obj_AutoNotifyPolicy_ALWAYS;
80 jobject g_obj_AutoNotifyPolicy_UPDATED;
82 jobject g_obj_SetRequestHandlerPolicy_NEVER;
83 jobject g_obj_SetRequestHandlerPolicy_ACCEPT;
85 inline RCSResourceObject::Ptr& getResource(JNIEnv* env, jobject obj)
87 return getNativeHandleAs< RCSResourceObject::Ptr >(env, obj);
90 inline RCSResourceObject::AutoNotifyPolicy convertAutoNotifyPolicy(JNIEnv* env, jobject obj)
92 if (env->IsSameObject(g_obj_AutoNotifyPolicy_NEVER, obj))
94 return RCSResourceObject::AutoNotifyPolicy::NEVER;
97 if (env->IsSameObject(g_obj_AutoNotifyPolicy_ALWAYS, obj))
99 return RCSResourceObject::AutoNotifyPolicy::ALWAYS;
102 if (env->IsSameObject(g_obj_AutoNotifyPolicy_UPDATED, obj))
104 return RCSResourceObject::AutoNotifyPolicy::UPDATED;
107 throwRCSException(env, "Failed to convert AutoNotifyPolicy");
111 inline jobject convertAutoNotifyPolicy(JNIEnv* env, RCSResourceObject::AutoNotifyPolicy policy)
115 case RCSResourceObject::AutoNotifyPolicy::NEVER: return g_obj_AutoNotifyPolicy_NEVER;
116 case RCSResourceObject::AutoNotifyPolicy::ALWAYS: return g_obj_AutoNotifyPolicy_ALWAYS;
117 case RCSResourceObject::AutoNotifyPolicy::UPDATED: return g_obj_AutoNotifyPolicy_UPDATED;
120 throwRCSException(env, "Failed to convert AutoNotifyPolicy");
124 inline RCSResourceObject::SetRequestHandlerPolicy convertSetRequestHandlerPolicy(JNIEnv* env,
127 if (env->IsSameObject(g_obj_SetRequestHandlerPolicy_NEVER, obj))
129 return RCSResourceObject::SetRequestHandlerPolicy::NEVER;
132 if (env->IsSameObject(g_obj_SetRequestHandlerPolicy_ACCEPT, obj))
134 return RCSResourceObject::SetRequestHandlerPolicy::ACCEPTANCE;
137 throwRCSException(env, "Failed to convert SetRequestHandlerPolicy");
141 inline jobject convertSetRequestHandlerPolicy(JNIEnv* env,
142 RCSResourceObject::SetRequestHandlerPolicy policy)
146 case RCSResourceObject::SetRequestHandlerPolicy::NEVER:
147 return g_obj_SetRequestHandlerPolicy_NEVER;
148 case RCSResourceObject::SetRequestHandlerPolicy::ACCEPTANCE:
149 return g_obj_SetRequestHandlerPolicy_ACCEPT;
152 throwRCSException(env, "Failed to convert SetRequestHandlerPolicy");
157 template< typename ENV >
158 inline jobject getAttrsObj(ENV& env, jobject responseObj)
160 return env->GetObjectField(responseObj, g_field_RCSResponse_mAttrs);
163 template< typename ENV >
164 inline int getErrorCode(ENV& env, jobject responseObj)
166 return env->GetIntField(responseObj, g_field_RCSResponse_mErrorCode);
169 template< typename ENV >
170 inline RCSSetResponse::AcceptanceMethod getAcceptanceMethod(ENV& env, jobject responseObj)
172 auto methodObj = env->GetObjectField(responseObj, g_field_RCSSetResponse_mAcceptanceMethod);
174 if (env->IsSameObject(methodObj, g_obj_RCSSetResponse_AcceptanceMethod_IGNORE))
176 return RCSSetResponse::AcceptanceMethod::IGNORE;
179 if (env->IsSameObject(methodObj, g_obj_RCSSetResponse_AcceptanceMethod_ACCEPT))
181 return RCSSetResponse::AcceptanceMethod::ACCEPT;
184 return RCSSetResponse::AcceptanceMethod::DEFAULT;
187 inline jobject callHandler(ScopedEnvWrapper& env, jobject listener, jmethodID methodId,
188 const RCSRequest& request, const RCSResourceAttributes& attrs)
190 auto requestObj = env->NewObject(g_cls_RCSRequest, g_ctor_RCSRequest,
191 env->NewStringUTF(request.getResourceUri().c_str()));
192 auto attrsObj = newAttributesObject(env.get(), attrs);
194 return env->CallObjectMethod(listener, methodId, requestObj, attrsObj);
197 template< typename RESPONSE >
198 inline RESPONSE createResponse(ScopedEnvWrapper& env, jobject responseObj)
200 auto errorCode = getErrorCode(env, responseObj);
201 auto responseAttrsObj = getAttrsObj(env, responseObj);
203 if (responseAttrsObj)
205 return RESPONSE::create(toNativeAttributes(env.get(), responseAttrsObj), OC_EH_OK,
209 return RESPONSE::create(OC_EH_OK, 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(OC_EH_ERROR, -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(OC_EH_ERROR, -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(OC_EH_ERROR, -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(OC_EH_ERROR, -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 PlatformException& 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 InvalidKeyException& 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 };
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);
544 res->setGetRequestHandler(std::bind(onGetRequest, std::placeholders::_1, std::placeholders::_2,
545 JavaGlobalRef{ env, listenerObj }));
548 JNIEXPORT void JNICALL
549 Java_org_iotivity_service_server_RcsResourceObject_nativeSetSetRequestHandler
550 (JNIEnv* env, jobject obj, jobject listenerObj)
552 LOGD("nativeSetSetRequestHandler");
554 auto res = getResource(env, obj);
557 res->setSetRequestHandler(std::bind(onSetRequest, std::placeholders::_1, std::placeholders::_2,
558 JavaGlobalRef{ env, listenerObj }));
561 JNIEXPORT void JNICALL
562 Java_org_iotivity_service_server_RcsResourceObject_nativeAddAttributeUpdatedListener
563 (JNIEnv* env, jobject obj, jstring keyObj, jobject listenerObj)
565 LOGD("nativeAddAttributeUpdatedListener");
567 auto res = getResource(env, obj);
570 auto key = toStdString(env, keyObj);
573 res->addAttributeUpdatedListener(std::move(key), std::bind(onAttributeUpdated,
574 std::placeholders::_1, std::placeholders::_2, JavaGlobalRef{ env, listenerObj }));
577 JNIEXPORT jboolean JNICALL
578 Java_org_iotivity_service_server_RcsResourceObject_nativeRemoveAttributeUpdatedListener
579 (JNIEnv* env, jobject obj, jstring keyObj)
581 LOGD("nativeAddAttributeUpdatedListener");
583 EXPECT_RET_DEF(keyObj, "key is null");
585 auto res = getResource(env, obj);
586 VERIFY_NO_EXC_RET_DEF(env);
588 auto key = toStdString(env, keyObj);
589 VERIFY_NO_EXC_RET_DEF(env);
591 return res->removeAttributeUpdatedListener(key);
594 JNIEXPORT void JNICALL Java_org_iotivity_service_server_RcsResourceObject_nativeNotify
595 (JNIEnv* env, jobject obj)
597 LOGD("nativeNotify");
599 auto res = getResource(env, obj);
606 catch (const PlatformException& e) {
607 throwPlatformException(env, e);
611 JNIEXPORT void JNICALL
612 Java_org_iotivity_service_server_RcsResourceObject_nativeSetAutoNotifyPolicy
613 (JNIEnv* env, jobject obj, jobject policyObj)
615 LOGD("nativeSetAutoNotifyPolicy");
617 EXPECT(policyObj, "policyObj is null");
619 auto res = getResource(env, obj);
622 auto policy = convertAutoNotifyPolicy(env, policyObj);
625 res->setAutoNotifyPolicy(policy);
628 JNIEXPORT jobject JNICALL
629 Java_org_iotivity_service_server_RcsResourceObject_nativeGetAutoNotifyPolicy
630 (JNIEnv* env, jobject obj)
632 LOGD("nativeGetAutoNotifyPolicy");
634 auto res = getResource(env, obj);
635 VERIFY_NO_EXC_RET_DEF(env);
637 return convertAutoNotifyPolicy(env, res->getAutoNotifyPolicy());
640 JNIEXPORT void JNICALL
641 Java_org_iotivity_service_server_RcsResourceObject_nativeSetSetRequestHandlerPolicy
642 (JNIEnv* env, jobject obj, jobject policyObj)
644 LOGD("nativeSetSetRequestHandlerPolicy");
646 EXPECT(policyObj, "policyObj is null");
648 auto res = getResource(env, obj);
651 auto policy = convertSetRequestHandlerPolicy(env, policyObj);
654 res->setSetRequestHandlerPolicy(policy);
657 JNIEXPORT jobject JNICALL
658 Java_org_iotivity_service_server_RcsResourceObject_nativeGetSetRequestHandlerPolicy
659 (JNIEnv* env, jobject obj)
661 LOGD("nativeGetSetRequestHandlerPolicy");
663 auto res = getResource(env, obj);
664 VERIFY_NO_EXC_RET_DEF(env);
666 return convertSetRequestHandlerPolicy(env, res->getSetRequestHandlerPolicy());