2 * //******************************************************************
4 * // Copyright 2015 Samsung Electronics All Rights Reserved.
6 * //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
8 * // Licensed under the Apache License, Version 2.0 (the "License");
9 * // you may not use this file except in compliance with the License.
10 * // You may obtain a copy of the License at
12 * // http://www.apache.org/licenses/LICENSE-2.0
14 * // Unless required by applicable law or agreed to in writing, software
15 * // distributed under the License is distributed on an "AS IS" BASIS,
16 * // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * // See the License for the specific language governing permissions and
18 * // limitations under the License.
20 * //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
23 #include "JniOcProvisioning.h"
24 #include "JniPinCheckListener.h"
25 #include "JniDisplayPinListener.h"
28 namespace PH = std::placeholders;
30 static JniPinCheckListener *jniPinListener = nullptr;
31 static JniDisplayPinListener *jniDisplayPinListener = nullptr;
33 void Callback(char *buf, size_t size)
37 jniPinListener->PinCallback(buf, size);
41 LOGE("jniPinListener is null");
45 void displayPinCB(char *pinBuf, size_t pinSize)
47 if (jniDisplayPinListener)
49 jniDisplayPinListener->displayPinCallback(pinBuf, pinSize);
53 LOGE("DisplayPinListener is null");
58 * Class: org_iotivity_base_OcProvisioning
59 * Method: ownershipTransferCDdata
62 JNIEXPORT void JNICALL Java_org_iotivity_base_OcProvisioning_ownershipTransferCBdata
63 (JNIEnv *env, jobject thiz, jint OxmType, jobject jListener)
65 LOGD("OcProvisioning_ownershipTransferCBdata");
66 OCStackResult result = OC_STACK_ERROR;
70 OTMCallbackData_t CBData = {0};
71 if (OIC_JUST_WORKS == (OicSecOxm_t)OxmType)
73 CBData.loadSecretCB = LoadSecretJustWorksCallback;
74 CBData.createSecureSessionCB = CreateSecureSessionJustWorksCallback;
75 CBData.createSelectOxmPayloadCB = CreateJustWorksSelectOxmPayload;
76 CBData.createOwnerTransferPayloadCB = CreateJustWorksOwnerTransferPayload;
78 result = OCSecure::setOwnerTransferCallbackData((OicSecOxm_t)OxmType,
81 if (OIC_RANDOM_DEVICE_PIN == (OicSecOxm_t)OxmType)
85 delete jniPinListener;
86 jniPinListener = new JniPinCheckListener(env, jListener);
87 CBData.loadSecretCB = InputPinCodeCallback;
88 CBData.createSecureSessionCB = CreateSecureSessionRandomPinCallbak;
89 CBData.createSelectOxmPayloadCB = CreatePinBasedSelectOxmPayload;
90 CBData.createOwnerTransferPayloadCB = CreatePinBasedOwnerTransferPayload;
91 result = OCSecure::setOwnerTransferCallbackData((OicSecOxm_t)OxmType,
96 result = OC_STACK_ERROR;
100 if (OC_STACK_OK != result)
102 ThrowOcException(result, "OcProvisioning_ownershipTransferCDdata");
106 catch (OCException& e)
108 LOGE("%s", e.reason().c_str());
109 ThrowOcException(e.code(), e.reason().c_str());
114 * Class: org_iotivity_base_OcProvisioning
115 * Method: discoverUnownedDevices
116 * Signature: (I)[Lorg/iotivity/base/OcSecureResource;
118 JNIEXPORT jobjectArray JNICALL Java_org_iotivity_base_OcProvisioning_discoverUnownedDevices1
119 (JNIEnv *env, jclass clazz, jint timeout)
121 LOGI("OcProvisioning_discoverUnownedDevices");
126 OCStackResult result = OCSecure::discoverUnownedDevices((unsigned short)timeout, list);
128 if (OC_STACK_OK != result)
130 ThrowOcException(result, "Failed to discover Unowned devices");
134 return JniSecureUtils::convertDeviceVectorToJavaArray(env, list);
136 catch (OCException& e)
138 LOGE("%s", e.reason().c_str());
139 ThrowOcException(OC_STACK_ERROR, e.reason().c_str());
145 * Class: org_iotivity_base_OcProvisioning
146 * Method: provisionInit
147 * Signature: (Ljava/lang/String;)V
149 JNIEXPORT void JNICALL Java_org_iotivity_base_OcProvisioning_provisionInit
150 (JNIEnv *env, jclass calzz, jstring jdbPath)
152 LOGI("OcProvisioning_provisionInit");
157 ThrowOcException(OC_STACK_INVALID_PARAM, "SVR db path cannot be null");
163 dbpath = (char*)env->GetStringUTFChars(jdbPath, NULL);
164 OCStackResult result = OCSecure::provisionInit(env->GetStringUTFChars(jdbPath, NULL));
166 if (OC_STACK_OK != result)
168 env->ReleaseStringUTFChars(jdbPath, (const char*)dbpath);
169 ThrowOcException(result, "Failed to Init Provisioning Manager");
172 env->ReleaseStringUTFChars(jdbPath, (const char*)dbpath);
174 catch (OCException& e)
176 LOGE("%s", e.reason().c_str());
177 ThrowOcException(OC_STACK_ERROR, e.reason().c_str());
182 * Class: org_iotivity_base_OcProvisioning
183 * Method: discoverOwnedDevices
184 * Signature: (I)[Lorg/iotivity/base/OcSecureResource;
186 JNIEXPORT jobjectArray JNICALL Java_org_iotivity_base_OcProvisioning_discoverOwnedDevices1
187 (JNIEnv *env, jclass clazz , jint timeout)
189 LOGI("OcProvisioning_discoverOwnedDevices");
194 OCStackResult result = OCSecure::discoverOwnedDevices((unsigned short)timeout, list);
195 if (OC_STACK_OK != result)
197 ThrowOcException(result, "Failed to discover Owned devices");
201 return JniSecureUtils::convertDeviceVectorToJavaArray(env, list);
203 catch (OCException& e)
205 LOGE("%s", e.reason().c_str());
206 ThrowOcException(OC_STACK_ERROR, e.reason().c_str());
212 * Class: org_iotivity_base_OcProvisioning
213 * Method: getDevicestatusLists
214 * Signature: (I)[Lorg/iotivity/base/OcSecureResource;
216 JNIEXPORT jobjectArray JNICALL Java_org_iotivity_base_OcProvisioning_getDeviceStatusList1
217 (JNIEnv *env, jclass clazz, jint timeout)
219 LOGI("OcProvisioning_getDeviceStatusList");
220 DeviceList_t ownedDevList, unownedDevList;
224 OCStackResult result = OCSecure::getDevInfoFromNetwork((unsigned short)timeout,
225 ownedDevList, unownedDevList);
226 if (OC_STACK_OK != result)
228 ThrowOcException(result, "Failed to get Device Status List");
231 ownedDevList.insert(ownedDevList.end(), unownedDevList.begin(), unownedDevList.end());
232 return JniSecureUtils::convertDeviceVectorToJavaArray(env, ownedDevList);
234 catch (OCException& e)
236 LOGE("%s", e.reason().c_str());
237 ThrowOcException(OC_STACK_ERROR, e.reason().c_str());
243 * Class: org_iotivity_base_OcProvisioning
244 * Method: setDisplayPinListener
245 * Signature: (Lorg/iotivity/base/OcProvisioning/DisplayPinListener;)V
247 JNIEXPORT void JNICALL Java_org_iotivity_base_OcProvisioning_setDisplayPinListener
248 (JNIEnv *env, jclass thiz, jobject jListener)
251 LOGI("OcProvisioning_setDisplayPinListener");
255 ThrowOcException(OC_STACK_INVALID_PARAM, "displayPinListener can't be null");
258 delete jniDisplayPinListener;
259 jniDisplayPinListener = new JniDisplayPinListener(env, jListener);
263 OCStackResult result = OCSecure::setDisplayPinCB(displayPinCB);
264 if (OC_STACK_OK != result)
266 ThrowOcException(result, "Failed to set displayPinListener");
270 catch (OCException& e)
272 LOGE("%s", e.reason().c_str());
273 ThrowOcException(OC_STACK_ERROR, e.reason().c_str());