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());
144 * Class: org_iotivity_base_OcProvisioning
145 * Method: provisionInit
146 * Signature: (Ljava/lang/String;)V
148 JNIEXPORT void JNICALL Java_org_iotivity_base_OcProvisioning_provisionInit
149 (JNIEnv *env, jclass calzz, jstring jdbPath)
151 LOGI("OcProvisioning_provisionInit");
156 ThrowOcException(OC_STACK_INVALID_PARAM, "SVR db path cannot be null");
162 dbpath = (char*)env->GetStringUTFChars(jdbPath, NULL);
163 OCStackResult result = OCSecure::provisionInit(env->GetStringUTFChars(jdbPath, NULL));
165 if (OC_STACK_OK != result)
167 env->ReleaseStringUTFChars(jdbPath, (const char*)dbpath);
168 ThrowOcException(result, "Failed to Init Provisioning Manager");
171 env->ReleaseStringUTFChars(jdbPath, (const char*)dbpath);
173 catch (OCException& e)
175 LOGE("%s", e.reason().c_str());
176 ThrowOcException(OC_STACK_ERROR, e.reason().c_str());
181 * Class: org_iotivity_base_OcProvisioning
182 * Method: discoverOwnedDevices
183 * Signature: (I)[Lorg/iotivity/base/OcSecureResource;
185 JNIEXPORT jobjectArray JNICALL Java_org_iotivity_base_OcProvisioning_discoverOwnedDevices1
186 (JNIEnv *env, jclass clazz , jint timeout)
188 LOGI("OcProvisioning_discoverOwnedDevices");
193 OCStackResult result = OCSecure::discoverOwnedDevices((unsigned short)timeout, list);
194 if (OC_STACK_OK != result)
196 ThrowOcException(result, "Failed to discover Owned devices");
200 return JniSecureUtils::convertDeviceVectorToJavaArray(env, list);
202 catch (OCException& e)
204 LOGE("%s", e.reason().c_str());
205 ThrowOcException(OC_STACK_ERROR, e.reason().c_str());
210 * Class: org_iotivity_base_OcProvisioning
211 * Method: getDevicestatusLists
212 * Signature: (I)[Lorg/iotivity/base/OcSecureResource;
214 JNIEXPORT jobjectArray JNICALL Java_org_iotivity_base_OcProvisioning_getDeviceStatusList1
215 (JNIEnv *env, jclass clazz, jint timeout)
217 LOGI("OcProvisioning_getDeviceStatusList");
218 DeviceList_t ownedDevList, unownedDevList;
222 OCStackResult result = OCSecure::getDevInfoFromNetwork((unsigned short)timeout,
223 ownedDevList, unownedDevList);
224 if (OC_STACK_OK != result)
226 ThrowOcException(result, "Failed to get Device Status List");
229 ownedDevList.insert(ownedDevList.end(), unownedDevList.begin(), unownedDevList.end());
230 return JniSecureUtils::convertDeviceVectorToJavaArray(env, ownedDevList);
232 catch (OCException& e)
234 LOGE("%s", e.reason().c_str());
235 ThrowOcException(OC_STACK_ERROR, e.reason().c_str());
240 * Class: org_iotivity_base_OcProvisioning
241 * Method: setDisplayPinListener
242 * Signature: (Lorg/iotivity/base/OcProvisioning/DisplayPinListener;)V
244 JNIEXPORT void JNICALL Java_org_iotivity_base_OcProvisioning_setDisplayPinListener
245 (JNIEnv *env, jclass thiz, jobject jListener)
248 LOGI("OcProvisioning_setDisplayPinListener");
252 ThrowOcException(OC_STACK_INVALID_PARAM, "displayPinListener can't be null");
255 delete jniDisplayPinListener;
256 jniDisplayPinListener = new JniDisplayPinListener(env, jListener);
260 OCStackResult result = OCSecure::setDisplayPinCB(displayPinCB);
261 if (OC_STACK_OK != result)
263 ThrowOcException(result, "Failed to set displayPinListener");
267 catch (OCException& e)
269 LOGE("%s", e.reason().c_str());
270 ThrowOcException(OC_STACK_ERROR, e.reason().c_str());