package org.iotivity.base.examples.provisioningclient;
import android.app.Activity;
+import android.app.AlertDialog;
+import android.content.DialogInterface;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.view.Gravity;
import android.widget.LinearLayout;
import android.widget.TextView;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.os.Environment;
+import android.widget.Toast;
import org.iotivity.base.CredType;
import org.iotivity.base.EncodingType;
import org.iotivity.base.OcException;
import org.iotivity.base.OcPlatform;
import org.iotivity.base.OcProvisioning;
+import org.iotivity.base.MVJustWorksOptionMask;
import org.iotivity.base.OcSecureResource;
import org.iotivity.base.OicSecAcl;
import org.iotivity.base.OicSecAce;
import java.io.File;
import java.io.FileNotFoundException;
+import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.EnumSet;
import java.util.List;
+import java.nio.channels.FileChannel;
import org.iotivity.ca.OicCipher;
import org.iotivity.base.OcConnectivityType;
private static final String TAG = "Provisioning Client: ";
private static final int BUFFER_SIZE = 1024;
private int credId=0;
+ private int verifyVal=1;
+ private String verifyNumber;
int unownedDevCount = StringConstants.NUMBER_ZERO;
OcProvisioning.PinCallbackListener pinCallbackListener =
new OcProvisioning.PinCallbackListener() {
}
};
+ OcProvisioning.DisplayNumListener displayNumListener = new OcProvisioning.DisplayNumListener() {
+ @Override
+ public int displayNumListener(String verifyNum) {
+ Log.d(TAG, "Inside verifySecretListener ");
+ logMessage(TAG + "DisplayMutualVerifyNumListener verify Number = " + verifyNum);
+ verifyNumber = verifyNum;
+ return 0;
+ }
+ };
+
+ OcProvisioning.ConfirmNumListener confirmNumListener = new OcProvisioning.ConfirmNumListener() {
+ @Override
+ public int confirmNumListener() {
+ Log.d(TAG, "Inside confirmMutualVerifyNumListener ");
+ final String message = "Is number matches with " + verifyNumber;
+ final Object lock = new Object();
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+
+ AlertDialog.Builder alertDialog = new AlertDialog.Builder(ProvisioningClient.this);
+ alertDialog.setTitle("Confirm Number");
+ alertDialog.setMessage(message);
+ alertDialog.setCancelable(false);
+ alertDialog.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ dialog.dismiss();
+ try {
+ synchronized (lock) {
+ verifyVal = 0;
+ lock.notifyAll();
+ }
+ } catch (Exception e) {
+ Log.d(TAG, e + "");
+ }
+ }
+ });
+ alertDialog.setNegativeButton("No", new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ dialog.dismiss();
+ try {
+ synchronized (lock) {
+ lock.notifyAll();
+ }
+ } catch (Exception e) {
+ Log.d(TAG, e + "");
+ }
+ }
+ }).show();
+ }
+ });
+ synchronized (lock) {
+ try {
+ lock.wait();
+ } catch (InterruptedException e) {
+ Log.d(TAG, e + "");
+ }
+ }
+ Log.d(TAG, "VerifyVal after submit =" + verifyVal);
+ logMessage(TAG + " confirmMutualVerifyNumListener " + verifyVal);
+ return verifyVal;
+ }
+ };
+
OcSecureResource.ProvisionAclListener provisionAclListener =
new OcSecureResource.ProvisionAclListener() {
@Override
SharedPreferences wmbPreference = PreferenceManager.getDefaultSharedPreferences(this);
boolean isFirstRun = wmbPreference.getBoolean("FIRSTRUN", true);
if (isFirstRun) {
- copyCborFromAsset();
+ copyCborFromAsset(StringConstants.OIC_CLIENT_CBOR_DB_FILE_PLAIN);
+ copyCborFromAsset(StringConstants.OIC_CLIENT_CBOR_DB_FILE_ENC);
+ copyCborFromAsset(StringConstants.OIC_CLIENT_CBOR_DB_FILE_RESCUE);
SharedPreferences.Editor editor = wmbPreference.edit();
editor.putBoolean("FIRSTRUN", false);
editor.commit();
* configure OIC platform and call findResource
*/
private void initOICStack() {
+ byte [] key = {(byte)0xa5, (byte)0x84, (byte)0x99, (byte)0x8d, (byte)0x0d, (byte)0xbd, (byte)0xb1, (byte)0x54,
+ (byte)0xbb, (byte)0xc5, (byte)0x4f, (byte)0xed, (byte)0x86, (byte)0x9a, (byte)0x66, (byte)0x11,
+ (byte)0xa5, (byte)0x84, (byte)0x99, (byte)0x8d, (byte)0x0d, (byte)0xbd, (byte)0xb1, (byte)0x54,
+ (byte)0xbb, (byte)0xc5, (byte)0x4f, (byte)0xed, (byte)0x86, (byte)0x9a, (byte)0x66, (byte)0x11
+ };
//create platform config
PlatformConfig cfg = new PlatformConfig(
this,
ModeType.CLIENT_SERVER,
"0.0.0.0", // bind to all available interfaces
0,
- QualityOfService.LOW, filePath + StringConstants.OIC_CLIENT_CBOR_DB_FILE);
+ QualityOfService.LOW, filePath + StringConstants.OIC_CLIENT_CBOR_DB_FILE_PLAIN,
+ filePath + StringConstants.OIC_CLIENT_CBOR_DB_FILE_ENC,
+ filePath + StringConstants.OIC_CLIENT_CBOR_DB_FILE_RESCUE, 256, key);
OcPlatform.Configure(cfg);
//Get deviceId
- byte [] deviceIdBytes= OcPlatform.getDeviceId();
- String devId = new String(deviceIdBytes);
- Log.d(TAG, "Get Device Id "+devId);
+ /*byte [] deviceIdBytes= OcPlatform.getDeviceId();
+ String devId = new String(deviceIdBytes);
+ Log.d(TAG, "Get Device Id "+devId);
//Set deviceId
try {
- String setId = "adminDeviceUuid1";
- OcPlatform.setDeviceId(setId.getBytes());
- Log.d(TAG, "Set Device Id done");
+ String setId = "adminDeviceUuid1";
+ OcPlatform.setDeviceId(setId.getBytes());
+ Log.d(TAG, "Set Device Id done");
+ setId = "adminDeviceUuid0";
+ OcPlatform.setDeviceId(setId.getBytes());
+ Log.d(TAG, "Set Device Id Reverted");
}
catch (OcException e) {
- Log.d(TAG, e.getMessage());
- }
+ Log.d(TAG, e.getMessage());
+ }*/
try {
/*
}
Log.d(TAG, "Sql db directory exists at " + sqlDbPath);
OcProvisioning.provisionInit(sqlDbPath + StringConstants.OIC_SQL_DB_FILE);
+
+ try {
+ OcProvisioning.setMVJustWorksOptions(EnumSet.of(MVJustWorksOptionMask.DISPLAY_MUTUAL_VERIF_NUM,
+ MVJustWorksOptionMask.CONFIRM_MUTUAL_VERIF_NUM));
+ OcProvisioning.setDisplayNumListener(displayNumListener);
+ OcProvisioning.setConfirmNumListener(confirmNumListener);
+ } catch (OcException e) {
+ e.printStackTrace();
+ }
} catch (OcException e) {
logMessage(TAG + "provisionInit error: " + e.getMessage());
Log.e(TAG, e.getMessage());
/**
* Copy svr db CBOR dat file from assets folder to app data files dir
*/
- private void copyCborFromAsset() {
+ private void copyCborFromAsset(String filep) {
InputStream inputStream = null;
OutputStream outputStream = null;
int length;
byte[] buffer = new byte[BUFFER_SIZE];
try {
- inputStream = getAssets().open(StringConstants.OIC_CLIENT_CBOR_DB_FILE);
+ inputStream = getAssets().open(filep);
File file = new File(filePath);
//check files directory exists
if (!(file.exists() && file.isDirectory())) {
file.mkdirs();
}
- outputStream = new FileOutputStream(filePath + StringConstants.OIC_CLIENT_CBOR_DB_FILE);
+ outputStream = new FileOutputStream(filePath + filep);
while ((length = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, length);
}
logMessage(TAG + "CBOR svr db file not found " + e.getMessage());
Log.e(TAG, e.getMessage());
} catch (IOException e) {
- logMessage(TAG + StringConstants.OIC_CLIENT_CBOR_DB_FILE + " file copy failed");
+ logMessage(TAG + filep + " file copy failed");
Log.e(TAG, e.getMessage());
} finally {
if (inputStream != null) {
}
}
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ // Inflate the menu; this adds items to the action bar if it is present.
+ getMenuInflater().inflate(R.menu.menu_secure_provision_client, menu);
+ return true;
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ int id = item.getItemId();
+
+
+ if (id == R.id.export_dat) {
+ try {
+ File sd = Environment.getExternalStorageDirectory();
+ File data = Environment.getDataDirectory();
+ if (sd.canWrite()) {
+ String currentDBPath = "/data/data/" + getPackageName() + "/files/" + StringConstants.OIC_CLIENT_CBOR_DB_FILE_ENC;
+
+ File currentDB = new File(currentDBPath);
+ File backupDB = new File(sd, StringConstants.OIC_CLIENT_CBOR_DB_FILE_ENC);
+ if (currentDB.exists()) {
+ FileChannel src = new FileInputStream(currentDB).getChannel();
+ FileChannel dst = new FileOutputStream(backupDB).getChannel();
+ dst.transferFrom(src, 0, src.size());
+ src.close();
+ dst.close();
+ }
+ }
+ } catch (Exception e) {
+ Toast.makeText(ProvisioningClient.this, e.getMessage(), Toast.LENGTH_SHORT).show();
+ }
+
+ Toast.makeText(ProvisioningClient.this, StringConstants.OIC_CLIENT_CBOR_DB_FILE_ENC + " File export to sdcard", Toast.LENGTH_SHORT).show();
+ return true;
+ }
+ return super.onOptionsItemSelected(item);
+ }
+
/**
* to display on Server Message on Client screen
*/