1 package org.iotivity.base.examples.provisioningclient;
3 import android.app.Activity;
4 import android.content.BroadcastReceiver;
5 import android.content.Context;
6 import android.content.Intent;
7 import android.content.SharedPreferences;
8 import android.os.AsyncTask;
9 import android.os.Bundle;
10 import android.os.Message;
11 import android.preference.PreferenceManager;
12 import android.text.method.ScrollingMovementMethod;
13 import android.util.Log;
14 import android.view.Gravity;
15 import android.widget.LinearLayout;
16 import android.widget.TextView;
18 import org.iotivity.base.CredType;
19 import org.iotivity.base.EncodingType;
20 import org.iotivity.base.DeviceStatus;
21 import org.iotivity.base.KeySize;
22 import org.iotivity.base.ModeType;
23 import org.iotivity.base.OcException;
24 import org.iotivity.base.OcPlatform;
25 import org.iotivity.base.OcProvisioning;
26 import org.iotivity.base.OcSecureResource;
27 import org.iotivity.base.OicSecAcl;
28 import org.iotivity.base.OicSecAce;
29 import org.iotivity.base.OicSecResr;
30 import org.iotivity.base.OicSecValidity;
31 import org.iotivity.base.OicSecPdAcl;
32 import org.iotivity.base.OcPrmType;
33 import org.iotivity.base.OxmType;
34 import org.iotivity.base.PlatformConfig;
35 import org.iotivity.base.ProvisionResult;
36 import org.iotivity.base.QualityOfService;
37 import org.iotivity.base.ServiceType;
40 import java.io.FileNotFoundException;
41 import java.io.FileOutputStream;
42 import java.io.IOException;
43 import java.io.InputStream;
44 import java.io.OutputStream;
45 import java.util.ArrayList;
46 import java.util.EnumSet;
47 import java.util.List;
49 import org.iotivity.ca.OicCipher;
50 import org.iotivity.base.OcConnectivityType;
51 import org.iotivity.ca.CaInterface;
54 public class ProvisioningClient extends Activity implements
55 OcSecureResource.DoOwnershipTransferListener, OcSecureResource.ProvisionPairwiseDevicesListener {
57 private static final String TAG = "Provisioning Client: ";
58 private static final int BUFFER_SIZE = 1024;
60 int unownedDevCount = StringConstants.NUMBER_ZERO;
61 OcProvisioning.PinCallbackListener pinCallbackListener =
62 new OcProvisioning.PinCallbackListener() {
64 public String pinCallbackListener() {
65 Log.d(TAG, "Inside Pin Callback ");
69 private String filePath = "";
70 private OcSecureResource newSecureResource;
71 private List<OcSecureResource> deviceList;
72 private List<OcSecureResource> ownedDeviceList;
73 private TextView mEventsTextView;
75 OcSecureResource.ProvisionDirectPairingListener provisionDPListener =
76 new OcSecureResource.ProvisionDirectPairingListener() {
78 public void provisionDirectPairingListener(List<ProvisionResult> provisionResults,
80 Log.d(TAG, "Inside provisionDPListener");
81 ProvisionResult pResult = provisionResults.get(0);
82 if (hasError == StringConstants.ERROR_CODE) {
83 logMessage(TAG + "Provision direct pairing Failed for " + pResult.getDevId());
85 logMessage(TAG + "Provision direct pairing Successful for " + pResult.getDevId());
86 if (ownedDeviceList.size() == 1) {
87 new ProvisionACLAsyncTask().execute();
89 if (ownedDeviceList.size() > 1) {
90 new GetLinkedDevicesAsyncTask().execute();
96 OcSecureResource.ProvisionAclListener provisionAclListener =
97 new OcSecureResource.ProvisionAclListener() {
99 public void provisionAclListener(List<ProvisionResult> provisionResults,
101 Log.d(TAG, "Inside ProvisionAclListener ");
102 if (hasError == StringConstants.ERROR_CODE) {
103 logMessage("Error: ACL Provision failed !!");
105 logMessage("ACL Provision Done !!");
106 provisionCertChain();
110 OcSecureResource.ProvisionCredentialsListener provisionCredentialsListener =
111 new OcSecureResource.ProvisionCredentialsListener() {
113 public void provisionCredentialsListener(List<ProvisionResult> provisionResults,
115 Log.d(TAG, "Inside ProvisionCredentialsListener ");
116 if (hasError == StringConstants.ERROR_CODE) {
117 logMessage("Error: Provision Credentials failed !!");
119 logMessage("Provision Credentials Done !!");
120 new ProvisionACLAsyncTask().execute();
125 OcSecureResource.ProvisionTrustCertChainListener provisionTrustCertListener =
126 new OcSecureResource.ProvisionTrustCertChainListener() {
128 public void provisionTrustCertChainListener(List<ProvisionResult> provisionResults,
130 Log.d(TAG, "Inside provisionTrustCertChainListener ");
131 if (hasError == StringConstants.ERROR_CODE) {
132 logMessage("Error: Provision TrustCertChain failed !!");
134 logMessage("Provision TrustCertChain Done !!");
135 new DeviceRevocationAsyncTask().execute();
140 OcSecureResource.UnlinkDevicesListener unlinkDevicesListener =
141 new OcSecureResource.UnlinkDevicesListener() {
143 public void unlinkDevicesListener(List<ProvisionResult> provisionResults,
145 Log.d(TAG, "Inside unlinkDevicesListener ");
146 if (hasError == StringConstants.ERROR_CODE) {
147 logMessage("Error: UnLinking device !!");
149 logMessage("Unlink Done !!");
150 new ProvisionCredentialAsyncTask().execute();
154 OcSecureResource.RemoveDeviceListener removeDeviceListener =
155 new OcSecureResource.RemoveDeviceListener() {
157 public void removeDeviceListener(List<ProvisionResult> provisionResults,
159 if (hasError == StringConstants.ERROR_CODE) {
160 logMessage("Error: Remove Fail !!");
162 logMessage("Remove Device done !!");
168 protected void onCreate(Bundle savedInstanceState) {
169 super.onCreate(savedInstanceState);
170 setContentView(R.layout.activity_secure_provision_client);
171 mEventsTextView = new TextView(this);
172 mEventsTextView.setGravity(Gravity.BOTTOM);
173 mEventsTextView.setMovementMethod(new ScrollingMovementMethod());
174 LinearLayout layout = (LinearLayout) findViewById(R.id.linearLayout);
175 layout.addView(mEventsTextView, new LinearLayout.LayoutParams(
176 LinearLayout.LayoutParams.MATCH_PARENT, 0, 1f)
178 filePath = getFilesDir().getPath() + "/"; // data/data/<package>/files/
179 //copy CBOR file when application runs first time
180 SharedPreferences wmbPreference = PreferenceManager.getDefaultSharedPreferences(this);
181 boolean isFirstRun = wmbPreference.getBoolean("FIRSTRUN", true);
184 SharedPreferences.Editor editor = wmbPreference.edit();
185 editor.putBoolean("FIRSTRUN", false);
190 int ret = CaInterface.setCipherSuite(OicCipher.TLS_ECDH_anon_WITH_AES_128_CBC_SHA,
191 OcConnectivityType.CT_ADAPTER_IP);
192 Log.e(TAG,"CaInterface.setCipherSuite returned = "+ret);
196 * configure OIC platform and call findResource
198 private void initOICStack() {
199 //create platform config
200 PlatformConfig cfg = new PlatformConfig(
203 ModeType.CLIENT_SERVER,
204 "0.0.0.0", // bind to all available interfaces
206 QualityOfService.LOW, filePath + StringConstants.OIC_CLIENT_CBOR_DB_FILE);
207 OcPlatform.Configure(cfg);
210 byte [] deviceIdBytes= OcPlatform.getDeviceId();
211 String devId = new String(deviceIdBytes);
212 Log.d(TAG, "Get Device Id "+devId);
215 String setId = "adminDeviceUuid1";
216 OcPlatform.setDeviceId(setId.getBytes());
217 Log.d(TAG, "Set Device Id done");
219 catch (OcException e) {
220 Log.d(TAG, e.getMessage());
225 * Initialize DataBase
227 String sqlDbPath = getFilesDir().getAbsolutePath().replace("files", "databases") +
229 File file = new File(sqlDbPath);
230 //check files directory exists
231 if (!(file.isDirectory())) {
233 Log.d(TAG, "Sql db directory created at " + sqlDbPath);
235 Log.d(TAG, "Sql db directory exists at " + sqlDbPath);
236 OcProvisioning.provisionInit(sqlDbPath + StringConstants.OIC_SQL_DB_FILE);
237 } catch (OcException e) {
238 logMessage(TAG + "provisionInit error: " + e.getMessage());
239 Log.e(TAG, e.getMessage());
241 new DiscoveryOTTransferAsyncTask().execute();
245 synchronized public void doOwnershipTransferListener(List<ProvisionResult> ProvisionResultList,
247 ProvisionResult pResult = ProvisionResultList.get(0);
248 if (hasError == StringConstants.ERROR_CODE) {
249 logMessage(TAG + "Ownership Transfer Failed for " + pResult.getDevId());
251 logMessage(TAG + "Ownership Transfer Successful for "
252 + pResult.getDevId());
255 if (unownedDevCount == 0) { //When done with Ownership Transfer
256 new OwnedDiscoveryAsyncTask().execute();
261 private void doDPProvisioning() {
263 logMessage(TAG + "Provision direct pairing for " + ownedDeviceList.get(0).getDeviceID());
264 newSecureResource = ownedDeviceList.get(0);
265 String pin = "00000000";
266 List<OcPrmType> prmTypes = new ArrayList<OcPrmType>();
267 prmTypes.add(OcPrmType.DP_PRE_CONFIGURED);
269 List<String> resources = new ArrayList<String>();
270 List<String> periods = new ArrayList<String>();
271 List<String> recurrences = new ArrayList<String>();
272 resources.add(StringConstants.DEFAULT_RESOURCES);
273 OicSecPdAcl pdAcl = new OicSecPdAcl(recurrences, periods,
274 StringConstants.DEFAULT_PERMISSION, resources);
275 OicSecPdAcl[] oicSecPdAcls = new OicSecPdAcl[1];
276 oicSecPdAcls[0] = pdAcl;
277 newSecureResource.doProvisionDirectPairing(pin, oicSecPdAcls, prmTypes, edp,
278 provisionDPListener);
279 } catch (Exception e) {
280 logMessage(TAG + "Direct Pairing Provisioning error: " + e.getMessage());
281 Log.e(TAG, e.getMessage());
286 private void doPairwiseProvisioning() {
288 logMessage(TAG + "Pairwise Provisioning b/w " + ownedDeviceList.get(0).getDeviceID()
289 + " and " + ownedDeviceList.get(1).getDeviceID());
290 newSecureResource = ownedDeviceList.get(0);
292 List<OicSecResr> resources1 = new ArrayList<OicSecResr>();
293 List<OicSecResr> resources2 = new ArrayList<OicSecResr>();
294 List<OicSecValidity> validities = new ArrayList<OicSecValidity>();
296 List<String> types1 = new ArrayList<String>();
297 types1.add(StringConstants.RESOURCE_TYPE_1A);
298 types1.add(StringConstants.RESOURCE_TYPE_1B);
299 List<String> types2 = new ArrayList<String>();
300 types2.add(StringConstants.RESOURCE_TYPE_2A);
301 types2.add(StringConstants.RESOURCE_TYPE_2B);
302 List<String> interfaces = new ArrayList<String>();
303 interfaces.add(StringConstants.RESOURCE_INTERFACE_1);
304 interfaces.add(StringConstants.RESOURCE_INTERFACE_2);
306 OicSecResr oicSecResr1a = new OicSecResr(StringConstants.HREF_RESOURCES_1A, "", types1, 2, interfaces, 2);
307 OicSecResr oicSecResr1b = new OicSecResr(StringConstants.HREF_RESOURCES_1B, "", types1, 2, interfaces, 2);
308 resources1.add(oicSecResr1a);
309 resources1.add(oicSecResr1b);
311 OicSecResr oicSecResr2a = new OicSecResr(StringConstants.HREF_RESOURCES_2A, "", types2, 2, interfaces, 2);
312 OicSecResr oicSecResr2b = new OicSecResr(StringConstants.HREF_RESOURCES_2B, "", types2, 2, interfaces, 2);
313 resources2.add(oicSecResr2a);
314 resources2.add(oicSecResr2b);
316 List<String> recurrences = new ArrayList<String>();
317 recurrences.add(StringConstants.DEFAULT_RECURRENCES_1);
318 recurrences.add(StringConstants.DEFAULT_RECURRENCES_2);
319 OicSecValidity oicSecValidity = new OicSecValidity(StringConstants.DEFAULT_PERIOD,
321 validities.add(oicSecValidity);
323 OicSecAce oicsecace1 = new OicSecAce(newSecureResource.getDeviceID(),
324 StringConstants.DEFAULT_PERMISSION, resources1, validities);
325 OcSecureResource newSecureResource2 = ownedDeviceList.get(1);
326 OicSecAce oicsecace2 = new OicSecAce(newSecureResource2.getDeviceID(),
327 StringConstants.DEFAULT_PERMISSION, resources2, validities);
329 List<OicSecAce> oicSecAces1=new ArrayList<OicSecAce>();
330 oicSecAces1.add(oicsecace1);
331 List<OicSecAce> oicSecAces2=new ArrayList<OicSecAce>();
332 oicSecAces2.add(oicsecace2);
333 OicSecAcl acl1 = new OicSecAcl(StringConstants.DEFAULT_ROWNER_ID,oicSecAces1);
334 OicSecAcl acl2 = new OicSecAcl(StringConstants.DEFAULT_ROWNER_ID,oicSecAces2);
336 newSecureResource.provisionPairwiseDevices(EnumSet.of(CredType.SYMMETRIC_PAIR_WISE_KEY),
337 KeySize.OWNER_PSK_LENGTH_128, acl1, newSecureResource2, acl2, this);
338 } catch (Exception e) {
339 logMessage(TAG + "Pairwise Provisioning error: " + e.getMessage());
340 Log.e(TAG, e.getMessage());
345 public void provisionPairwiseDevicesListener(List<ProvisionResult> ProvisionResultList,
347 if (hasError == StringConstants.ERROR_CODE) {
348 logMessage(TAG + "provisionPairwiseDevices Failed");
350 for (int i = 0; i < ProvisionResultList.size(); i++) {
351 ProvisionResult pResult = ProvisionResultList.get(i);
352 logMessage(TAG + "provisionPairwiseDevices Result for "
353 + pResult.getDevId() + "is " + pResult.getResult());
359 * get cert from asset folder & save trusted cert chain
361 private void saveCertChain() {
362 InputStream inputStream = null;
365 inputStream = getAssets().open(StringConstants.CRT_FILE);
366 byte[] fileBytes = new byte[inputStream.available()+1];
367 inputStream.read(fileBytes);
368 fileBytes[inputStream.available()]=0x00;
369 credId = OcProvisioning.saveTrustCertChain(fileBytes,
370 EncodingType.OIC_ENCODING_PEM);
371 logMessage(TAG + "saveTrustCertChain return credId = " + credId);
372 } catch (IOException e) {
373 logMessage(TAG + "Cert file not exist in Assets" + e.getMessage());
374 Log.e(TAG, e.getMessage());
375 } catch (OcException e) {
376 logMessage(TAG + "saveTrustCertChain failed " + e.getMessage());
377 Log.e(TAG, e.getMessage());
379 if (inputStream != null) {
382 } catch (IOException e) {
383 Log.e(TAG, e.getMessage());
391 * Provision cert chain
393 private void provisionCertChain() {
395 if (ownedDeviceList.size() > 0) {
397 OcSecureResource ocSecureResource = ownedDeviceList.get(0);
398 logMessage(TAG + "Initiate provision cert chain credId = "
400 ocSecureResource.provisionTrustCertChain(
401 EnumSet.of(CredType.SIGNED_ASYMMETRIC_KEY), credId,
402 provisionTrustCertListener);
403 } catch (OcException e) {
404 logMessage(TAG + "Provision cert chain error: "
406 Log.e(TAG, e.getMessage());
413 * Copy svr db CBOR dat file from assets folder to app data files dir
415 private void copyCborFromAsset() {
416 InputStream inputStream = null;
417 OutputStream outputStream = null;
419 byte[] buffer = new byte[BUFFER_SIZE];
421 inputStream = getAssets().open(StringConstants.OIC_CLIENT_CBOR_DB_FILE);
422 File file = new File(filePath);
423 //check files directory exists
424 if (!(file.exists() && file.isDirectory())) {
427 outputStream = new FileOutputStream(filePath + StringConstants.OIC_CLIENT_CBOR_DB_FILE);
428 while ((length = inputStream.read(buffer)) != -1) {
429 outputStream.write(buffer, 0, length);
431 } catch (NullPointerException e) {
432 logMessage(TAG + "Null pointer exception " + e.getMessage());
433 Log.e(TAG, e.getMessage());
434 } catch (FileNotFoundException e) {
435 logMessage(TAG + "CBOR svr db file not found " + e.getMessage());
436 Log.e(TAG, e.getMessage());
437 } catch (IOException e) {
438 logMessage(TAG + StringConstants.OIC_CLIENT_CBOR_DB_FILE + " file copy failed");
439 Log.e(TAG, e.getMessage());
441 if (inputStream != null) {
444 } catch (IOException e) {
445 Log.e(TAG, e.getMessage());
448 if (outputStream != null) {
450 outputStream.close();
451 } catch (IOException e) {
452 Log.e(TAG, e.getMessage());
458 public void logMessage(String text) {
462 public void logMsg(final String text) {
463 runOnUiThread(new Runnable() {
465 Message msg = new Message();
467 mEventsTextView.append(text);
468 mEventsTextView.append("\n\n");
472 Intent intent = new Intent(getPackageName());
473 intent.putExtra(StringConstants.MESSAGE, text);
474 sendBroadcast(intent);
477 private class DiscoveryOTTransferAsyncTask extends AsyncTask<Void, String, String> {
480 protected void onPreExecute() {
481 super.onPreExecute();
485 protected String doInBackground(Void... params) {
488 * Discover Un-owned devices
490 publishProgress(TAG + "Discovering Unowned Devices");
491 deviceList = new ArrayList<OcSecureResource>(OcProvisioning.discoverUnownedDevices
492 (StringConstants.DISCOVERY_TIMEOUT_10));
493 if (deviceList.size() > 0) {
494 unownedDevCount = deviceList.size();
495 for (int i = 0; i < deviceList.size(); i++) {
496 publishProgress(TAG + "Un-owned Discovered Device " + (i + 1) + "= " +
497 deviceList.get(i).getDeviceID());
500 OcProvisioning.SetownershipTransferCBdata(OxmType.OIC_JUST_WORKS,
501 pinCallbackListener);
502 for (int i = 0; i < deviceList.size(); i++) {
503 publishProgress(TAG + "Doing Ownership Transfer for " +
504 deviceList.get(i).getDeviceID());
505 deviceList.get(i).doOwnershipTransfer(ProvisioningClient.this);
507 } catch (OcException e) {
508 publishProgress(TAG + "Ownership Transfer error: " + e.getMessage());
509 return "Ownership Transfer error: " + e.getMessage();
513 publishProgress(TAG + "No un-owned devices present");
514 new OwnedDiscoveryAsyncTask().execute();
516 } catch (OcException e) {
517 publishProgress(TAG + "Un-owned discovery error: " + e.getMessage());
518 return "Un-owned discovery error: " + e.getMessage();
524 protected void onProgressUpdate(String... values) {
525 logMessage(values[0]);
529 protected void onPostExecute(String s) {
530 super.onPostExecute(s);
534 private class ProvisionACLAsyncTask extends AsyncTask<Void, String, Void> {
537 protected void onPreExecute() {
538 super.onPreExecute();
542 protected Void doInBackground(Void... params) {
544 if (ownedDeviceList.size() > 0) {
545 OcSecureResource ocSecureResource = ownedDeviceList.get(0);
547 publishProgress(TAG + "ACL Provision for " + ocSecureResource.getDeviceID());
548 List<OicSecResr> resources1 = new ArrayList<OicSecResr>();
549 List<OicSecResr> resources2 = new ArrayList<OicSecResr>();
550 List<OicSecValidity> validities = new ArrayList<OicSecValidity>();
552 List<String> types1 = new ArrayList<String>();
553 types1.add(StringConstants.RESOURCE_TYPE_1A);
554 types1.add(StringConstants.RESOURCE_TYPE_1B);
555 List<String> types2 = new ArrayList<String>();
556 types2.add(StringConstants.RESOURCE_TYPE_2A);
557 types2.add(StringConstants.RESOURCE_TYPE_2B);
558 List<String> interfaces = new ArrayList<String>();
559 interfaces.add(StringConstants.RESOURCE_INTERFACE_1);
560 interfaces.add(StringConstants.RESOURCE_INTERFACE_2);
562 OicSecResr oicSecResr1a = new OicSecResr(StringConstants.HREF_RESOURCES_1A, "", types1, 2, interfaces, 2);
563 OicSecResr oicSecResr1b = new OicSecResr(StringConstants.HREF_RESOURCES_1B, "", types1, 2, interfaces, 2);
564 resources1.add(oicSecResr1a);
565 resources1.add(oicSecResr1b);
567 OicSecResr oicSecResr2a = new OicSecResr(StringConstants.HREF_RESOURCES_2A, "", types2, 2, interfaces, 2);
568 OicSecResr oicSecResr2b = new OicSecResr(StringConstants.HREF_RESOURCES_2B, "", types2, 2, interfaces, 2);
569 resources2.add(oicSecResr2a);
570 resources2.add(oicSecResr2b);
572 List<String> recurrences = new ArrayList<String>();
573 recurrences.add(StringConstants.DEFAULT_RECURRENCES_1);
574 recurrences.add(StringConstants.DEFAULT_RECURRENCES_2);
575 OicSecValidity oicSecValidity = new OicSecValidity(StringConstants.DEFAULT_PERIOD,
577 validities.add(oicSecValidity);
579 OicSecAce oicsecace1 = new OicSecAce(StringConstants.DEFAULT_SUBJECT_ID1,
580 StringConstants.DEFAULT_PERMISSION, resources1, validities);
582 OicSecAce oicsecace2 = new OicSecAce(StringConstants.DEFAULT_SUBJECT_ID2,
583 StringConstants.DEFAULT_PERMISSION, resources2, validities);
585 List<OicSecAce> oicSecAces=new ArrayList<OicSecAce>();
586 oicSecAces.add(oicsecace1);
587 oicSecAces.add(oicsecace2);
589 OicSecAcl aclObject = new OicSecAcl(StringConstants.DEFAULT_ROWNER_ID, oicSecAces);
591 ocSecureResource.provisionACL(aclObject, provisionAclListener);
593 publishProgress(TAG + "No Owned devices present");
595 } catch (Exception e) {
596 publishProgress(TAG + "ProvisionACL error: " + e.getMessage());
602 protected void onProgressUpdate(String... values) {
603 logMessage(values[0]);
607 private class ProvisionCredentialAsyncTask extends AsyncTask<Void, String, Void> {
610 protected void onPreExecute() {
611 super.onPreExecute();
615 protected Void doInBackground(Void... params) {
617 if (ownedDeviceList.size() > 1) {
618 OcSecureResource ocSecureResource = ownedDeviceList.get(0);
619 OcSecureResource ocSecureResourceDest = ownedDeviceList.get(1);
620 publishProgress(TAG + "ProvisionCredential for " +
621 ocSecureResource.getDeviceID() + " with " +
622 ocSecureResourceDest.getDeviceID());
623 ocSecureResource.provisionCredentials(EnumSet.of(CredType.SYMMETRIC_PAIR_WISE_KEY),
624 KeySize.OWNER_PSK_LENGTH_128,
625 ocSecureResourceDest, provisionCredentialsListener);
627 publishProgress(TAG + "Cannot perform credentials between devices");
629 } catch (Exception e) {
630 publishProgress(TAG + "Provision credentials error: " + e.getMessage());
636 protected void onProgressUpdate(String... values) {
637 logMessage(values[0]);
641 private class GetLinkedDevicesAsyncTask extends AsyncTask<Void, String, String> {
644 protected void onPreExecute() {
645 super.onPreExecute();
649 protected String doInBackground(Void... params) {
651 if (ownedDeviceList.size() > 1) {
652 OcSecureResource ocSecureResource = ownedDeviceList.get(0);
653 publishProgress(TAG + "Get linked devices of " + ocSecureResource.getDeviceID());
654 List<String> linkedDevices = ocSecureResource.getLinkedDevices();
655 if (linkedDevices.size() > 0) {
656 for (int i = 0; i < linkedDevices.size(); i++) {
657 publishProgress(TAG + "Linked Devices " +
658 (i + 1) + "= " + linkedDevices.get(i));
661 publishProgress(TAG + "No linked Devices found");
664 publishProgress(TAG + "Cannot perform linked devices");
666 } catch (Exception e) {
667 publishProgress(TAG + "getLinked device error: " + e.getMessage());
674 protected void onProgressUpdate(String... values) {
675 logMessage(values[0]);
679 protected void onPostExecute(String s) {
680 if ("success".equals(s)) {
681 new ProvisionUnlinkAsyncTask().execute();
686 private class ProvisionUnlinkAsyncTask extends AsyncTask<Void, String, Void> {
689 protected void onPreExecute() {
690 super.onPreExecute();
694 protected Void doInBackground(Void... params) {
696 if (ownedDeviceList.size() > 1) {
697 OcSecureResource ocSecureResource = ownedDeviceList.get(0);
698 OcSecureResource ocSecureResourceDest = ownedDeviceList.get(1);
699 publishProgress(TAG + "Un linking " + ocSecureResource.getDeviceID() +
700 " with " + ocSecureResourceDest.getDeviceID());
701 ocSecureResource.unlinkDevices(ocSecureResourceDest, unlinkDevicesListener);
703 publishProgress(TAG + "Cannot perform unlink devices");
705 } catch (Exception e) {
706 publishProgress(TAG + "Unlink error: " + e.getMessage());
712 protected void onProgressUpdate(String... values) {
713 logMessage(values[0]);
717 private class DeviceRevocationAsyncTask extends AsyncTask<Void, String, Void> {
720 protected void onPreExecute() {
721 super.onPreExecute();
725 protected Void doInBackground(Void... params) {
727 if (ownedDeviceList.size() > 0) {
728 OcSecureResource ocSecureResource = ownedDeviceList.get(0);
729 publishProgress(TAG + "Removing " + ocSecureResource.getDeviceID());
730 ocSecureResource.removeDevice(StringConstants.DISCOVERY_TIMEOUT_20,
731 removeDeviceListener);
733 publishProgress(TAG + "Cannot remove");
735 } catch (Exception e) {
736 publishProgress(TAG + "Remove Device error: " + e.getMessage());
742 protected void onProgressUpdate(String... values) {
743 logMessage(values[0]);
747 private class OwnedDiscoveryAsyncTask extends AsyncTask<Void, String, String> {
750 protected void onPreExecute() {
751 super.onPreExecute();
755 protected String doInBackground(Void... params) {
757 publishProgress(TAG + "Initiate Owned device Discovery");
758 ownedDeviceList = OcProvisioning.discoverOwnedDevices
759 (StringConstants.DISCOVERY_TIMEOUT_10);
760 if (ownedDeviceList.size() > 0) {
761 for (int i = 0; i < ownedDeviceList.size(); i++) {
762 publishProgress(TAG + "Owned Discovered Device " + (i + 1) + "= " +
763 ownedDeviceList.get(i).getDeviceID()
764 + "\nIP Address= " + ownedDeviceList.get(i).getIpAddr()
765 + "\nOwned Status= " + ownedDeviceList.get(i).getOwnedStatus()
766 + "\nDevice Status= " + ((ownedDeviceList.get(i).
767 getDeviceStatus() == DeviceStatus.ON) ? "ON" : "OFF")
771 publishProgress(TAG + "No Owned devices present");
773 } catch (OcException e) {
774 publishProgress(TAG + "Owned device Discovery error: " + e.getMessage());
775 return "Owned device Discovery error: " + e.getMessage();
781 protected void onProgressUpdate(String... values) {
782 logMessage(values[0]);
786 protected void onPostExecute(String s) {
789 if (ownedDeviceList.size() == 1 && "success".equals(s)) {
792 if (ownedDeviceList.size() > 1 && "success".equals(s)) {
793 doPairwiseProvisioning();
800 * to display on Server Message on Client screen
802 public class MessageReceiver extends BroadcastReceiver {
804 public void onReceive(Context context, Intent intent) {
805 final String message = intent.getStringExtra(StringConstants.MESSAGE);