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), errorCode);
208 return RESPONSE::create(errorCode);
211 RCSGetResponse onGetRequest(const RCSRequest& request, const RCSResourceAttributes& attrs,
212 const JavaGlobalRef& listener)
214 ScopedEnvWrapper env;
215 EXPECT_RET(env, "env is null!", RCSGetResponse::create(-1));
219 auto responseObj = callHandler(env, listener, g_method_GetRequestHandler_onGetRequested,
222 return createResponse< RCSGetResponse >(env, responseObj);
224 catch (const JavaException&)
226 env->ExceptionDescribe();
227 env->ExceptionClear();
229 return RCSGetResponse::create({ }, -1);
232 RCSSetResponse onSetRequest(const RCSRequest& request, const RCSResourceAttributes& attrs,
233 const JavaGlobalRef& listener)
235 ScopedEnvWrapper env;
236 EXPECT_RET(env, "env is null!", RCSSetResponse::create(-1));
240 auto responseObj = callHandler(env, listener, g_method_SetRequestHandler_onSetRequested,
243 auto acceptanceMethod = getAcceptanceMethod(env, responseObj);
245 return createResponse< RCSSetResponse >(env, responseObj).
246 setAcceptanceMethod(acceptanceMethod);
248 catch (const JavaException&)
250 env->ExceptionDescribe();
251 env->ExceptionClear();
253 return RCSSetResponse::create(-1);
257 void onAttributeUpdated(const RCSResourceAttributes::Value& oldVal,
258 const RCSResourceAttributes::Value& newVal, const JavaGlobalRef& listener)
260 ScopedEnvWrapper env;
261 EXPECT(env, "env is null!");
265 env->CallVoidMethod(listener, g_method_OnAttributeUpdatedListener_onAttributeUpdated,
266 newRCSValueObject(env.get(), oldVal), newRCSValueObject(env.get(), newVal));
268 catch (const JavaException&)
270 env->ExceptionDescribe();
271 env->ExceptionClear();
275 void initRCSResponse(JNIEnvWrapper* env)
277 auto clsRCSResponse = env->FindClass(CLS_NAME_RCS_RESPONSE);
279 g_field_RCSResponse_mErrorCode = env->GetFieldID(clsRCSResponse, "mErrorCode", "I");
281 g_field_RCSResponse_mAttrs = env->GetFieldID(clsRCSResponse, "mAttrs",
282 AS_SIG(CLS_NAME_RESOURCEATTRIBUTES));
284 auto clsRCSSetResponse = env->FindClass(CLS_NAME_RCS_SET_RESPONSE);
286 g_field_RCSSetResponse_mAcceptanceMethod = env->GetFieldID(clsRCSSetResponse,
287 "mAcceptanceMethod", AS_SIG(CLS_NAME_RCS_SET_RESPONSE_ACCEPTANCE_METHOD));
289 auto clsAcceptanceMethod = env->FindClass(CLS_NAME_RCS_SET_RESPONSE_ACCEPTANCE_METHOD);
291 g_obj_RCSSetResponse_AcceptanceMethod_DEFAULT = env->NewGlobalRef(
292 env->GetStaticObjectField(clsAcceptanceMethod, "DEFAULT",
293 AS_SIG(CLS_NAME_RCS_SET_RESPONSE_ACCEPTANCE_METHOD)));
295 g_obj_RCSSetResponse_AcceptanceMethod_ACCEPT = env->NewGlobalRef(
296 env->GetStaticObjectField(clsAcceptanceMethod, "ACCEPT",
297 AS_SIG(CLS_NAME_RCS_SET_RESPONSE_ACCEPTANCE_METHOD)));
299 g_obj_RCSSetResponse_AcceptanceMethod_IGNORE = env->NewGlobalRef(
300 env->GetStaticObjectField(clsAcceptanceMethod, "IGNORE",
301 AS_SIG(CLS_NAME_RCS_SET_RESPONSE_ACCEPTANCE_METHOD)));
305 void initRCSResourceObject(JNIEnvWrapper* env)
307 g_cls_RCSResourceObject = env->FindClassAsGlobalRef(CLS_NAME_RCS_RESOURCE_OBJECT);
309 g_ctor_RCSResourceObject = env->GetMethodID(g_cls_RCSResourceObject, "<init>", "()V");
311 g_cls_RCSRequest = env->FindClassAsGlobalRef(CLS_NAME_RCS_REQUEST);
313 g_ctor_RCSRequest = env->GetMethodID(g_cls_RCSRequest, "<init>",
314 "(" AS_SIG(CLS_NAME_STRING) ")V");
316 auto clsGetRequestHandler = env->FindClass(CLS_NAME_GET_REQUEST_HANDLER);
318 g_method_GetRequestHandler_onGetRequested = env->GetMethodID(clsGetRequestHandler,
320 "(" AS_SIG(CLS_NAME_RCS_REQUEST) AS_SIG(CLS_NAME_RESOURCEATTRIBUTES) ")"
321 AS_SIG(CLS_NAME_RCS_GET_RESPONSE));
323 auto clsSetRequestHandler = env->FindClass(CLS_NAME_SET_REQUEST_HANDLER);
325 g_method_SetRequestHandler_onSetRequested = env->GetMethodID(clsSetRequestHandler,
327 "(" AS_SIG(CLS_NAME_RCS_REQUEST) AS_SIG(CLS_NAME_RESOURCEATTRIBUTES) ")"
328 AS_SIG(CLS_NAME_RCS_SET_RESPONSE));
330 auto clsOnAttributeUpdatedListener = env->FindClass(CLS_NAME_ON_ATTRIBUTE_UPDATESD_LISTENER);
332 g_method_OnAttributeUpdatedListener_onAttributeUpdated = env->GetMethodID(
333 clsOnAttributeUpdatedListener, "onAttributeUpdated",
334 "(" AS_SIG(CLS_NAME_VALUE) AS_SIG(CLS_NAME_VALUE) ")V");
336 auto clsAutoNotifyPolicy = env->FindClass(CLS_NAME_AUTO_NOTIFY_POLICY);
338 g_obj_AutoNotifyPolicy_NEVER = env->NewGlobalRef(
339 env->GetStaticObjectField(clsAutoNotifyPolicy, "NEVER",
340 AS_SIG(CLS_NAME_AUTO_NOTIFY_POLICY)));
342 g_obj_AutoNotifyPolicy_ALWAYS = env->NewGlobalRef(
343 env->GetStaticObjectField(clsAutoNotifyPolicy, "ALWAYS",
344 AS_SIG(CLS_NAME_AUTO_NOTIFY_POLICY)));
347 g_obj_AutoNotifyPolicy_UPDATED = env->NewGlobalRef(
348 env->GetStaticObjectField(clsAutoNotifyPolicy, "UPDATED",
349 AS_SIG(CLS_NAME_AUTO_NOTIFY_POLICY)));
351 auto clsSetRequestHandlerPolicy = env->FindClass(CLS_NAME_SET_REQUEST_HANDLER_POLICY);
353 g_obj_SetRequestHandlerPolicy_NEVER = env->NewGlobalRef(
354 env->GetStaticObjectField(clsSetRequestHandlerPolicy, "NEVER",
355 AS_SIG(CLS_NAME_SET_REQUEST_HANDLER_POLICY)));
357 g_obj_SetRequestHandlerPolicy_ACCEPT = env->NewGlobalRef(
358 env->GetStaticObjectField(clsSetRequestHandlerPolicy, "ACCEPT",
359 AS_SIG(CLS_NAME_SET_REQUEST_HANDLER_POLICY)));
361 initRCSResponse(env);
364 void clearRCSResourceObject(JNIEnvWrapper* env)
366 env->DeleteGlobalRef(g_cls_RCSRequest);
368 env->DeleteGlobalRef(g_obj_RCSSetResponse_AcceptanceMethod_DEFAULT);
369 env->DeleteGlobalRef(g_obj_RCSSetResponse_AcceptanceMethod_ACCEPT);
370 env->DeleteGlobalRef(g_obj_RCSSetResponse_AcceptanceMethod_IGNORE);
372 env->DeleteGlobalRef(g_obj_AutoNotifyPolicy_NEVER);
373 env->DeleteGlobalRef(g_obj_AutoNotifyPolicy_ALWAYS);
374 env->DeleteGlobalRef(g_obj_AutoNotifyPolicy_UPDATED);
376 env->DeleteGlobalRef(g_obj_SetRequestHandlerPolicy_NEVER);
377 env->DeleteGlobalRef(g_obj_SetRequestHandlerPolicy_ACCEPT);
380 JNIEXPORT jint JNICALL
381 Java_org_iotivity_service_server_RcsResponse_nativeGetDefaultErrorCode
384 return RequestHandler::DEFAULT_ERROR_CODE;
387 JNIEXPORT jobject JNICALL
388 Java_org_iotivity_service_server_RcsResourceObject_nativeBuild
389 (JNIEnv* env, jclass, jstring uriObj, jstring typeObj, jstring interfaceObj, jboolean isObservable,
390 jboolean isDiscoverable, jobject attrsObj)
394 EXPECT_RET_DEF(uriObj, "uri is null.");
396 auto uri = toStdString(env, uriObj);
397 auto type = toStdString(env, typeObj);
398 auto interface = toStdString(env, interfaceObj);
400 RCSResourceAttributes attrs;
403 attrs = toNativeAttributes(env, attrsObj);
404 VERIFY_NO_EXC_RET_DEF(env);
409 auto resource = RCSResourceObject::Builder(uri, type,interface).
410 setDiscoverable(isDiscoverable). setObservable(isObservable).setAttributes(attrs).
413 auto resourceObj = env->NewObject(g_cls_RCSResourceObject, g_ctor_RCSResourceObject);
414 VERIFY_NO_EXC_RET_DEF(env);
416 setSafeNativeHandle< decltype(resource) >(env, resourceObj, resource);
420 catch (const RCSPlatformException& e)
422 LOGE("%s", e.what());
423 throwPlatformException(env, e);
430 JNIEXPORT void JNICALL
431 Java_org_iotivity_service_server_RcsResourceObject_nativeSetAttribute
432 (JNIEnv* env, jobject obj, jstring keyObj, jobject valueObj)
434 LOGD("nativeSetAttributeInteger");
436 EXPECT(keyObj, "key is null.");
437 EXPECT(valueObj, "value is null.");
439 auto res = getResource(env, obj);
442 res->setAttribute(toStdString(env, keyObj), toNativeAttrsValue(env, valueObj));
445 JNIEXPORT jobject JNICALL
446 Java_org_iotivity_service_server_RcsResourceObject_nativeGetAttributeValue
447 (JNIEnv *env, jobject obj, jstring keyObj)
449 LOGD("nativeGetAttributeValue");
451 EXPECT_RET_DEF(keyObj, "key is null.");
453 auto res = getResource(env, obj);
454 VERIFY_NO_EXC_RET_DEF(env);
458 auto valueObj = newRCSValueObject(env, res->getAttributeValue(toStdString(env, keyObj)));
459 VERIFY_NO_EXC_RET_DEF(env);
463 catch(const RCSInvalidKeyException& e)
469 JNIEXPORT jboolean JNICALL
470 Java_org_iotivity_service_server_RcsResourceObject_nativeRemoveAttribute
471 (JNIEnv* env, jobject obj, jstring keyObj)
473 LOGD("nativeRemoveAttribute");
475 EXPECT_RET_DEF(keyObj, "key is null.");
477 auto res = getResource(env, obj);
478 VERIFY_NO_EXC_RET_DEF(env);
480 return res->removeAttribute(toStdString(env, keyObj));
483 JNIEXPORT jboolean JNICALL
484 Java_org_iotivity_service_server_RcsResourceObject_nativeContainsAttribute
485 (JNIEnv* env, jobject obj, jstring keyObj)
487 LOGD("nativeContainsAttribute");
489 EXPECT_RET_DEF(keyObj, "key is null.");
491 auto res = getResource(env, obj);
492 VERIFY_NO_EXC_RET_DEF(env);
494 return res->containsAttribute(toStdString(env, keyObj));
497 JNIEXPORT jobject JNICALL
498 Java_org_iotivity_service_server_RcsResourceObject_nativeGetAttributes
499 (JNIEnv* env, jobject obj)
501 LOGD("nativeGetAttributes");
503 auto res = getResource(env, obj);
504 VERIFY_NO_EXC_RET_DEF(env);
506 RCSResourceObject::LockGuard lock{ res };
507 return newAttributesObject(env, res->getAttributes());
510 JNIEXPORT jboolean JNICALL
511 Java_org_iotivity_service_server_RcsResourceObject_nativeIsObservable
512 (JNIEnv* env, jobject obj)
514 LOGD("nativeIsObservable");
516 auto res = getResource(env, obj);
517 VERIFY_NO_EXC_RET_DEF(env);
519 return res->isObservable();
522 JNIEXPORT jboolean JNICALL
523 Java_org_iotivity_service_server_RcsResourceObject_nativeIsDiscoverable
524 (JNIEnv *env, jobject obj)
526 LOGD("nativeIsDiscoverable");
528 auto res = getResource(env, obj);
529 VERIFY_NO_EXC_RET_DEF(env);
531 return res->isDiscoverable();
534 JNIEXPORT void JNICALL
535 Java_org_iotivity_service_server_RcsResourceObject_nativeSetGetRequestHandler
536 (JNIEnv *env, jobject obj, jobject listenerObj)
538 LOGD("nativeSetGetRequestHandler");
540 auto res = getResource(env, obj);
543 res->setGetRequestHandler(std::bind(onGetRequest, std::placeholders::_1, std::placeholders::_2,
544 JavaGlobalRef{ env, listenerObj }));
547 JNIEXPORT void JNICALL
548 Java_org_iotivity_service_server_RcsResourceObject_nativeSetSetRequestHandler
549 (JNIEnv* env, jobject obj, jobject listenerObj)
551 LOGD("nativeSetSetRequestHandler");
553 auto res = getResource(env, obj);
556 res->setSetRequestHandler(std::bind(onSetRequest, std::placeholders::_1, std::placeholders::_2,
557 JavaGlobalRef{ env, listenerObj }));
560 JNIEXPORT void JNICALL
561 Java_org_iotivity_service_server_RcsResourceObject_nativeAddAttributeUpdatedListener
562 (JNIEnv* env, jobject obj, jstring keyObj, jobject listenerObj)
564 LOGD("nativeAddAttributeUpdatedListener");
566 auto res = getResource(env, obj);
569 auto key = toStdString(env, keyObj);
572 res->addAttributeUpdatedListener(std::move(key), std::bind(onAttributeUpdated,
573 std::placeholders::_1, std::placeholders::_2, JavaGlobalRef{ env, listenerObj }));
576 JNIEXPORT jboolean JNICALL
577 Java_org_iotivity_service_server_RcsResourceObject_nativeRemoveAttributeUpdatedListener
578 (JNIEnv* env, jobject obj, jstring keyObj)
580 LOGD("nativeAddAttributeUpdatedListener");
582 EXPECT_RET_DEF(keyObj, "key is null");
584 auto res = getResource(env, obj);
585 VERIFY_NO_EXC_RET_DEF(env);
587 auto key = toStdString(env, keyObj);
588 VERIFY_NO_EXC_RET_DEF(env);
590 return res->removeAttributeUpdatedListener(key);
593 JNIEXPORT void JNICALL Java_org_iotivity_service_server_RcsResourceObject_nativeNotify
594 (JNIEnv* env, jobject obj)
596 LOGD("nativeNotify");
598 auto res = getResource(env, obj);
605 catch (const RCSPlatformException& e) {
606 throwPlatformException(env, e);
610 JNIEXPORT void JNICALL
611 Java_org_iotivity_service_server_RcsResourceObject_nativeSetAutoNotifyPolicy
612 (JNIEnv* env, jobject obj, jobject policyObj)
614 LOGD("nativeSetAutoNotifyPolicy");
616 EXPECT(policyObj, "policyObj is null");
618 auto res = getResource(env, obj);
621 auto policy = convertAutoNotifyPolicy(env, policyObj);
624 res->setAutoNotifyPolicy(policy);
627 JNIEXPORT jobject JNICALL
628 Java_org_iotivity_service_server_RcsResourceObject_nativeGetAutoNotifyPolicy
629 (JNIEnv* env, jobject obj)
631 LOGD("nativeGetAutoNotifyPolicy");
633 auto res = getResource(env, obj);
634 VERIFY_NO_EXC_RET_DEF(env);
636 return convertAutoNotifyPolicy(env, res->getAutoNotifyPolicy());
639 JNIEXPORT void JNICALL
640 Java_org_iotivity_service_server_RcsResourceObject_nativeSetSetRequestHandlerPolicy
641 (JNIEnv* env, jobject obj, jobject policyObj)
643 LOGD("nativeSetSetRequestHandlerPolicy");
645 EXPECT(policyObj, "policyObj is null");
647 auto res = getResource(env, obj);
650 auto policy = convertSetRequestHandlerPolicy(env, policyObj);
653 res->setSetRequestHandlerPolicy(policy);
656 JNIEXPORT jobject JNICALL
657 Java_org_iotivity_service_server_RcsResourceObject_nativeGetSetRequestHandlerPolicy
658 (JNIEnv* env, jobject obj)
660 LOGD("nativeGetSetRequestHandlerPolicy");
662 auto res = getResource(env, obj);
663 VERIFY_NO_EXC_RET_DEF(env);
665 return convertSetRequestHandlerPolicy(env, res->getSetRequestHandlerPolicy());