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.DeviceStatus;
20 import org.iotivity.base.KeySize;
21 import org.iotivity.base.ModeType;
22 import org.iotivity.base.OcException;
23 import org.iotivity.base.OcPlatform;
24 import org.iotivity.base.OcProvisioning;
25 import org.iotivity.base.OcSecureResource;
26 import org.iotivity.base.OicSecAcl;
27 import org.iotivity.base.OicSecAce;
28 import org.iotivity.base.OicSecResr;
29 import org.iotivity.base.OicSecValidity;
30 import org.iotivity.base.OicSecPdAcl;
31 import org.iotivity.base.OcPrmType;
32 import org.iotivity.base.OxmType;
33 import org.iotivity.base.PlatformConfig;
34 import org.iotivity.base.ProvisionResult;
35 import org.iotivity.base.QualityOfService;
36 import org.iotivity.base.ServiceType;
39 import java.io.FileNotFoundException;
40 import java.io.FileOutputStream;
41 import java.io.IOException;
42 import java.io.InputStream;
43 import java.io.OutputStream;
44 import java.util.ArrayList;
45 import java.util.EnumSet;
46 import java.util.List;
48 public class ProvisioningClient extends Activity implements
49 OcSecureResource.DoOwnershipTransferListener, OcSecureResource.ProvisionPairwiseDevicesListener {
51 private static final String TAG = "Provisioning Client: ";
52 private static final int BUFFER_SIZE = 1024;
53 int unownedDevCount = StringConstants.NUMBER_ZERO;
54 OcProvisioning.PinCallbackListener pinCallbackListener =
55 new OcProvisioning.PinCallbackListener() {
57 public String pinCallbackListener() {
58 Log.d(TAG, "Inside Pin Callback ");
62 private String filePath = "";
63 private OcSecureResource newSecureResource;
64 private List<OcSecureResource> deviceList;
65 private List<OcSecureResource> ownedDeviceList;
66 private TextView mEventsTextView;
68 OcSecureResource.ProvisionDirectPairingListener provisionDPListener =
69 new OcSecureResource.ProvisionDirectPairingListener() {
71 public void provisionDirectPairingListener(List<ProvisionResult> provisionResults,
73 Log.d(TAG, "Inside provisionDPListener");
74 ProvisionResult pResult = provisionResults.get(0);
75 if (hasError == StringConstants.ERROR_CODE) {
76 logMessage(TAG + "Provision direct pairing Failed for " + pResult.getDevId());
78 logMessage(TAG + "Provision direct pairing Successful for " + pResult.getDevId());
79 if (ownedDeviceList.size() == 1) {
80 new ProvisionACLAsyncTask().execute();
82 if (ownedDeviceList.size() > 1) {
83 new GetLinkedDevicesAsyncTask().execute();
89 OcSecureResource.ProvisionAclListener provisionAclListener =
90 new OcSecureResource.ProvisionAclListener() {
92 public void provisionAclListener(List<ProvisionResult> provisionResults,
94 Log.d(TAG, "Inside ProvisionAclListener ");
95 if (hasError == StringConstants.ERROR_CODE) {
96 logMessage("Error: ACL Provision failed !!");
98 logMessage("ACL Provision Done !!");
99 new DeviceRevocationAsyncTask().execute();
103 OcSecureResource.ProvisionCredentialsListener provisionCredentialsListener =
104 new OcSecureResource.ProvisionCredentialsListener() {
106 public void provisionCredentialsListener(List<ProvisionResult> provisionResults,
108 Log.d(TAG, "Inside ProvisionCredentialsListener ");
109 if (hasError == StringConstants.ERROR_CODE) {
110 logMessage("Error: Provision Credentials failed !!");
112 logMessage("Provision Credentials Done !!");
113 new ProvisionACLAsyncTask().execute();
117 OcSecureResource.UnlinkDevicesListener unlinkDevicesListener =
118 new OcSecureResource.UnlinkDevicesListener() {
120 public void unlinkDevicesListener(List<ProvisionResult> provisionResults,
122 Log.d(TAG, "Inside unlinkDevicesListener ");
123 if (hasError == StringConstants.ERROR_CODE) {
124 logMessage("Error: UnLinking device !!");
126 logMessage("Unlink Done !!");
127 new ProvisionCredentialAsyncTask().execute();
131 OcSecureResource.RemoveDeviceListener removeDeviceListener =
132 new OcSecureResource.RemoveDeviceListener() {
134 public void removeDeviceListener(List<ProvisionResult> provisionResults,
136 if (hasError == StringConstants.ERROR_CODE) {
137 logMessage("Error: Remove Fail !!");
139 logMessage("Remove Device done !!");
145 protected void onCreate(Bundle savedInstanceState) {
146 super.onCreate(savedInstanceState);
147 setContentView(R.layout.activity_secure_provision_client);
148 mEventsTextView = new TextView(this);
149 mEventsTextView.setGravity(Gravity.BOTTOM);
150 mEventsTextView.setMovementMethod(new ScrollingMovementMethod());
151 LinearLayout layout = (LinearLayout) findViewById(R.id.linearLayout);
152 layout.addView(mEventsTextView, new LinearLayout.LayoutParams(
153 LinearLayout.LayoutParams.MATCH_PARENT, 0, 1f)
155 filePath = getFilesDir().getPath() + "/"; // data/data/<package>/files/
156 //copy CBOR file when application runs first time
157 SharedPreferences wmbPreference = PreferenceManager.getDefaultSharedPreferences(this);
158 boolean isFirstRun = wmbPreference.getBoolean("FIRSTRUN", true);
161 SharedPreferences.Editor editor = wmbPreference.edit();
162 editor.putBoolean("FIRSTRUN", false);
169 * configure OIC platform and call findResource
171 private void initOICStack() {
172 //create platform config
173 PlatformConfig cfg = new PlatformConfig(
176 ModeType.CLIENT_SERVER,
177 "0.0.0.0", // bind to all available interfaces
179 QualityOfService.LOW, filePath + StringConstants.OIC_CLIENT_CBOR_DB_FILE);
180 OcPlatform.Configure(cfg);
183 * Initialize DataBase
185 String sqlDbPath = getFilesDir().getAbsolutePath().replace("files", "databases") +
187 File file = new File(sqlDbPath);
188 //check files directory exists
189 if (!(file.isDirectory())) {
191 Log.d(TAG, "Sql db directory created at " + sqlDbPath);
193 Log.d(TAG, "Sql db directory exists at " + sqlDbPath);
194 OcProvisioning.provisionInit(sqlDbPath + StringConstants.OIC_SQL_DB_FILE);
195 } catch (OcException e) {
196 logMessage(TAG + "provisionInit error: " + e.getMessage());
197 Log.e(TAG, e.getMessage());
199 new DiscoveryOTTransferAsyncTask().execute();
203 synchronized public void doOwnershipTransferListener(List<ProvisionResult> ProvisionResultList,
205 ProvisionResult pResult = ProvisionResultList.get(0);
206 if (hasError == StringConstants.ERROR_CODE) {
207 logMessage(TAG + "Ownership Transfer Failed for " + pResult.getDevId());
209 logMessage(TAG + "Ownership Transfer Successful for "
210 + pResult.getDevId());
213 if (unownedDevCount == 0) { //When done with Ownership Transfer
214 new OwnedDiscoveryAsyncTask().execute();
219 private void doDPProvisioning() {
221 logMessage(TAG + "Provision direct pairing for " + ownedDeviceList.get(0).getDeviceID());
222 newSecureResource = ownedDeviceList.get(0);
223 String pin = "00000000";
224 List<OcPrmType> prmTypes = new ArrayList<OcPrmType>();
225 prmTypes.add(OcPrmType.DP_PRE_CONFIGURED);
227 List<String> resources = new ArrayList<String>();
228 List<String> periods = new ArrayList<String>();
229 List<String> recurrences = new ArrayList<String>();
230 resources.add(StringConstants.DEFAULT_RESOURCES);
231 OicSecPdAcl pdAcl = new OicSecPdAcl(recurrences, periods,
232 StringConstants.DEFAULT_PERMISSION, resources);
233 OicSecPdAcl[] oicSecPdAcls = new OicSecPdAcl[1];
234 oicSecPdAcls[0] = pdAcl;
235 newSecureResource.doProvisionDirectPairing(pin, oicSecPdAcls, prmTypes, edp,
236 provisionDPListener);
237 } catch (Exception e) {
238 logMessage(TAG + "Direct Pairing Provisioning error: " + e.getMessage());
239 Log.e(TAG, e.getMessage());
244 private void doPairwiseProvisioning() {
246 logMessage(TAG + "Pairwise Provisioning b/w " + ownedDeviceList.get(0).getDeviceID()
247 + " and " + ownedDeviceList.get(1).getDeviceID());
248 newSecureResource = ownedDeviceList.get(0);
250 List<OicSecResr> resources1 = new ArrayList<OicSecResr>();
251 List<OicSecResr> resources2 = new ArrayList<OicSecResr>();
252 List<OicSecValidity> validities = new ArrayList<OicSecValidity>();
254 List<String> types1 = new ArrayList<String>();
255 types1.add(StringConstants.RESOURCE_TYPE_1A);
256 types1.add(StringConstants.RESOURCE_TYPE_1B);
257 List<String> types2 = new ArrayList<String>();
258 types2.add(StringConstants.RESOURCE_TYPE_2A);
259 types2.add(StringConstants.RESOURCE_TYPE_2B);
260 List<String> interfaces = new ArrayList<String>();
261 interfaces.add(StringConstants.RESOURCE_INTERFACE_1);
262 interfaces.add(StringConstants.RESOURCE_INTERFACE_2);
264 OicSecResr oicSecResr1a = new OicSecResr(StringConstants.HREF_RESOURCES_1A, "", types1, 2, interfaces, 2);
265 OicSecResr oicSecResr1b = new OicSecResr(StringConstants.HREF_RESOURCES_1B, "", types1, 2, interfaces, 2);
266 resources1.add(oicSecResr1a);
267 resources1.add(oicSecResr1b);
269 OicSecResr oicSecResr2a = new OicSecResr(StringConstants.HREF_RESOURCES_2A, "", types2, 2, interfaces, 2);
270 OicSecResr oicSecResr2b = new OicSecResr(StringConstants.HREF_RESOURCES_2B, "", types2, 2, interfaces, 2);
271 resources2.add(oicSecResr2a);
272 resources2.add(oicSecResr2b);
274 List<String> recurrences = new ArrayList<String>();
275 recurrences.add(StringConstants.DEFAULT_RECURRENCES_1);
276 recurrences.add(StringConstants.DEFAULT_RECURRENCES_2);
277 OicSecValidity oicSecValidity = new OicSecValidity(StringConstants.DEFAULT_PERIOD,
279 validities.add(oicSecValidity);
281 OicSecAce oicsecace1 = new OicSecAce(newSecureResource.getDeviceID(),
282 StringConstants.DEFAULT_PERMISSION, resources1, validities);
283 OcSecureResource newSecureResource2 = ownedDeviceList.get(1);
284 OicSecAce oicsecace2 = new OicSecAce(newSecureResource2.getDeviceID(),
285 StringConstants.DEFAULT_PERMISSION, resources2, validities);
287 List<OicSecAce> oicSecAces1=new ArrayList<OicSecAce>();
288 oicSecAces1.add(oicsecace1);
289 List<OicSecAce> oicSecAces2=new ArrayList<OicSecAce>();
290 oicSecAces2.add(oicsecace2);
291 OicSecAcl acl1 = new OicSecAcl(StringConstants.DEFAULT_ROWNER_ID,oicSecAces1);
292 OicSecAcl acl2 = new OicSecAcl(StringConstants.DEFAULT_ROWNER_ID,oicSecAces2);
294 newSecureResource.provisionPairwiseDevices(EnumSet.of(CredType.SYMMETRIC_PAIR_WISE_KEY),
295 KeySize.OWNER_PSK_LENGTH_128, acl1, newSecureResource2, acl2, this);
296 } catch (Exception e) {
297 logMessage(TAG + "Pairwise Provisioning error: " + e.getMessage());
298 Log.e(TAG, e.getMessage());
303 public void provisionPairwiseDevicesListener(List<ProvisionResult> ProvisionResultList,
305 if (hasError == StringConstants.ERROR_CODE) {
306 logMessage(TAG + "provisionPairwiseDevices Failed");
308 for (int i = 0; i < ProvisionResultList.size(); i++) {
309 ProvisionResult pResult = ProvisionResultList.get(i);
310 logMessage(TAG + "provisionPairwiseDevices Result for "
311 + pResult.getDevId() + "is " + pResult.getResult());
318 * Copy svr db CBOR dat file from assets folder to app data files dir
320 private void copyCborFromAsset() {
321 InputStream inputStream = null;
322 OutputStream outputStream = null;
324 byte[] buffer = new byte[BUFFER_SIZE];
326 inputStream = getAssets().open(StringConstants.OIC_CLIENT_CBOR_DB_FILE);
327 File file = new File(filePath);
328 //check files directory exists
329 if (!(file.exists() && file.isDirectory())) {
332 outputStream = new FileOutputStream(filePath + StringConstants.OIC_CLIENT_CBOR_DB_FILE);
333 while ((length = inputStream.read(buffer)) != -1) {
334 outputStream.write(buffer, 0, length);
336 } catch (NullPointerException e) {
337 logMessage(TAG + "Null pointer exception " + e.getMessage());
338 Log.e(TAG, e.getMessage());
339 } catch (FileNotFoundException e) {
340 logMessage(TAG + "CBOR svr db file not found " + e.getMessage());
341 Log.e(TAG, e.getMessage());
342 } catch (IOException e) {
343 logMessage(TAG + StringConstants.OIC_CLIENT_CBOR_DB_FILE + " file copy failed");
344 Log.e(TAG, e.getMessage());
346 if (inputStream != null) {
349 } catch (IOException e) {
350 Log.e(TAG, e.getMessage());
353 if (outputStream != null) {
355 outputStream.close();
356 } catch (IOException e) {
357 Log.e(TAG, e.getMessage());
363 public void logMessage(String text) {
367 public void logMsg(final String text) {
368 runOnUiThread(new Runnable() {
370 Message msg = new Message();
372 mEventsTextView.append(text);
373 mEventsTextView.append("\n\n");
377 Intent intent = new Intent(getPackageName());
378 intent.putExtra(StringConstants.MESSAGE, text);
379 sendBroadcast(intent);
382 private class DiscoveryOTTransferAsyncTask extends AsyncTask<Void, String, String> {
385 protected void onPreExecute() {
386 super.onPreExecute();
390 protected String doInBackground(Void... params) {
393 * Discover Un-owned devices
395 publishProgress(TAG + "Discovering Unowned Devices");
396 deviceList = new ArrayList<OcSecureResource>(OcProvisioning.discoverUnownedDevices
397 (StringConstants.DISCOVERY_TIMEOUT_10));
398 if (deviceList.size() > 0) {
399 unownedDevCount = deviceList.size();
400 for (int i = 0; i < deviceList.size(); i++) {
401 publishProgress(TAG + "Un-owned Discovered Device " + (i + 1) + "= " +
402 deviceList.get(i).getDeviceID());
405 OcProvisioning.SetownershipTransferCBdata(OxmType.OIC_JUST_WORKS,
406 pinCallbackListener);
407 for (int i = 0; i < deviceList.size(); i++) {
408 publishProgress(TAG + "Doing Ownership Transfer for " +
409 deviceList.get(i).getDeviceID());
410 deviceList.get(i).doOwnershipTransfer(ProvisioningClient.this);
412 } catch (OcException e) {
413 publishProgress(TAG + "Ownership Transfer error: " + e.getMessage());
414 return "Ownership Transfer error: " + e.getMessage();
418 publishProgress(TAG + "No un-owned devices present");
419 new OwnedDiscoveryAsyncTask().execute();
421 } catch (OcException e) {
422 publishProgress(TAG + "Un-owned discovery error: " + e.getMessage());
423 return "Un-owned discovery error: " + e.getMessage();
429 protected void onProgressUpdate(String... values) {
430 logMessage(values[0]);
434 protected void onPostExecute(String s) {
435 super.onPostExecute(s);
439 private class ProvisionACLAsyncTask extends AsyncTask<Void, String, Void> {
442 protected void onPreExecute() {
443 super.onPreExecute();
447 protected Void doInBackground(Void... params) {
449 if (ownedDeviceList.size() > 0) {
450 OcSecureResource ocSecureResource = ownedDeviceList.get(0);
452 publishProgress(TAG + "ACL Provision for " + ocSecureResource.getDeviceID());
453 List<OicSecResr> resources1 = new ArrayList<OicSecResr>();
454 List<OicSecResr> resources2 = new ArrayList<OicSecResr>();
455 List<OicSecValidity> validities = new ArrayList<OicSecValidity>();
457 List<String> types1 = new ArrayList<String>();
458 types1.add(StringConstants.RESOURCE_TYPE_1A);
459 types1.add(StringConstants.RESOURCE_TYPE_1B);
460 List<String> types2 = new ArrayList<String>();
461 types2.add(StringConstants.RESOURCE_TYPE_2A);
462 types2.add(StringConstants.RESOURCE_TYPE_2B);
463 List<String> interfaces = new ArrayList<String>();
464 interfaces.add(StringConstants.RESOURCE_INTERFACE_1);
465 interfaces.add(StringConstants.RESOURCE_INTERFACE_2);
467 OicSecResr oicSecResr1a = new OicSecResr(StringConstants.HREF_RESOURCES_1A, "", types1, 2, interfaces, 2);
468 OicSecResr oicSecResr1b = new OicSecResr(StringConstants.HREF_RESOURCES_1B, "", types1, 2, interfaces, 2);
469 resources1.add(oicSecResr1a);
470 resources1.add(oicSecResr1b);
472 OicSecResr oicSecResr2a = new OicSecResr(StringConstants.HREF_RESOURCES_2A, "", types2, 2, interfaces, 2);
473 OicSecResr oicSecResr2b = new OicSecResr(StringConstants.HREF_RESOURCES_2B, "", types2, 2, interfaces, 2);
474 resources2.add(oicSecResr2a);
475 resources2.add(oicSecResr2b);
477 List<String> recurrences = new ArrayList<String>();
478 recurrences.add(StringConstants.DEFAULT_RECURRENCES_1);
479 recurrences.add(StringConstants.DEFAULT_RECURRENCES_2);
480 OicSecValidity oicSecValidity = new OicSecValidity(StringConstants.DEFAULT_PERIOD,
482 validities.add(oicSecValidity);
484 OicSecAce oicsecace1 = new OicSecAce(StringConstants.DEFAULT_SUBJECT_ID1,
485 StringConstants.DEFAULT_PERMISSION, resources1, validities);
487 OicSecAce oicsecace2 = new OicSecAce(StringConstants.DEFAULT_SUBJECT_ID2,
488 StringConstants.DEFAULT_PERMISSION, resources2, validities);
490 List<OicSecAce> oicSecAces=new ArrayList<OicSecAce>();
491 oicSecAces.add(oicsecace1);
492 oicSecAces.add(oicsecace2);
494 OicSecAcl aclObject = new OicSecAcl(StringConstants.DEFAULT_ROWNER_ID, oicSecAces);
496 ocSecureResource.provisionACL(aclObject, provisionAclListener);
498 publishProgress(TAG + "No Owned devices present");
500 } catch (Exception e) {
501 publishProgress(TAG + "ProvisionACL error: " + e.getMessage());
507 protected void onProgressUpdate(String... values) {
508 logMessage(values[0]);
512 private class ProvisionCredentialAsyncTask extends AsyncTask<Void, String, Void> {
515 protected void onPreExecute() {
516 super.onPreExecute();
520 protected Void doInBackground(Void... params) {
522 if (ownedDeviceList.size() > 1) {
523 OcSecureResource ocSecureResource = ownedDeviceList.get(0);
524 OcSecureResource ocSecureResourceDest = ownedDeviceList.get(1);
525 publishProgress(TAG + "ProvisionCredential for " +
526 ocSecureResource.getDeviceID() + " with " +
527 ocSecureResourceDest.getDeviceID());
528 ocSecureResource.provisionCredentials(EnumSet.of(CredType.SYMMETRIC_PAIR_WISE_KEY),
529 KeySize.OWNER_PSK_LENGTH_128,
530 ocSecureResourceDest, provisionCredentialsListener);
532 publishProgress(TAG + "Cannot perform credentials between devices");
534 } catch (Exception e) {
535 publishProgress(TAG + "Provision credentials error: " + e.getMessage());
541 protected void onProgressUpdate(String... values) {
542 logMessage(values[0]);
546 private class GetLinkedDevicesAsyncTask extends AsyncTask<Void, String, String> {
549 protected void onPreExecute() {
550 super.onPreExecute();
554 protected String doInBackground(Void... params) {
556 if (ownedDeviceList.size() > 1) {
557 OcSecureResource ocSecureResource = ownedDeviceList.get(0);
558 publishProgress(TAG + "Get linked devices of " + ocSecureResource.getDeviceID());
559 List<String> linkedDevices = ocSecureResource.getLinkedDevices();
560 if (linkedDevices.size() > 0) {
561 for (int i = 0; i < linkedDevices.size(); i++) {
562 publishProgress(TAG + "Linked Devices " +
563 (i + 1) + "= " + linkedDevices.get(i));
566 publishProgress(TAG + "No linked Devices found");
569 publishProgress(TAG + "Cannot perform linked devices");
571 } catch (Exception e) {
572 publishProgress(TAG + "getLinked device error: " + e.getMessage());
579 protected void onProgressUpdate(String... values) {
580 logMessage(values[0]);
584 protected void onPostExecute(String s) {
585 if ("success".equals(s)) {
586 new ProvisionUnlinkAsyncTask().execute();
591 private class ProvisionUnlinkAsyncTask extends AsyncTask<Void, String, Void> {
594 protected void onPreExecute() {
595 super.onPreExecute();
599 protected Void doInBackground(Void... params) {
601 if (ownedDeviceList.size() > 1) {
602 OcSecureResource ocSecureResource = ownedDeviceList.get(0);
603 OcSecureResource ocSecureResourceDest = ownedDeviceList.get(1);
604 publishProgress(TAG + "Un linking " + ocSecureResource.getDeviceID() +
605 " with " + ocSecureResourceDest.getDeviceID());
606 ocSecureResource.unlinkDevices(ocSecureResourceDest, unlinkDevicesListener);
608 publishProgress(TAG + "Cannot perform unlink devices");
610 } catch (Exception e) {
611 publishProgress(TAG + "Unlink error: " + e.getMessage());
617 protected void onProgressUpdate(String... values) {
618 logMessage(values[0]);
622 private class DeviceRevocationAsyncTask extends AsyncTask<Void, String, Void> {
625 protected void onPreExecute() {
626 super.onPreExecute();
630 protected Void doInBackground(Void... params) {
632 if (ownedDeviceList.size() > 0) {
633 OcSecureResource ocSecureResource = ownedDeviceList.get(0);
634 publishProgress(TAG + "Removing " + ocSecureResource.getDeviceID());
635 ocSecureResource.removeDevice(StringConstants.DISCOVERY_TIMEOUT_20,
636 removeDeviceListener);
638 publishProgress(TAG + "Cannot remove");
640 } catch (Exception e) {
641 publishProgress(TAG + "Remove Device error: " + e.getMessage());
647 protected void onProgressUpdate(String... values) {
648 logMessage(values[0]);
652 private class OwnedDiscoveryAsyncTask extends AsyncTask<Void, String, String> {
655 protected void onPreExecute() {
656 super.onPreExecute();
660 protected String doInBackground(Void... params) {
662 publishProgress(TAG + "Initiate Owned device Discovery");
663 ownedDeviceList = OcProvisioning.discoverOwnedDevices
664 (StringConstants.DISCOVERY_TIMEOUT_10);
665 if (ownedDeviceList.size() > 0) {
666 for (int i = 0; i < ownedDeviceList.size(); i++) {
667 publishProgress(TAG + "Owned Discovered Device " + (i + 1) + "= " +
668 ownedDeviceList.get(i).getDeviceID()
669 + "\nIP Address= " + ownedDeviceList.get(i).getIpAddr()
670 + "\nOwned Status= " + ownedDeviceList.get(i).getOwnedStatus()
671 + "\nDevice Status= " + ((ownedDeviceList.get(i).
672 getDeviceStatus() == DeviceStatus.ON) ? "ON" : "OFF")
676 publishProgress(TAG + "No Owned devices present");
678 } catch (OcException e) {
679 publishProgress(TAG + "Owned device Discovery error: " + e.getMessage());
680 return "Owned device Discovery error: " + e.getMessage();
686 protected void onProgressUpdate(String... values) {
687 logMessage(values[0]);
691 protected void onPostExecute(String s) {
694 if (ownedDeviceList.size() == 1 && "success".equals(s)) {
697 if (ownedDeviceList.size() > 1 && "success".equals(s)) {
698 doPairwiseProvisioning();
705 * to display on Server Message on Client screen
707 public class MessageReceiver extends BroadcastReceiver {
709 public void onReceive(Context context, Intent intent) {
710 final String message = intent.getStringExtra(StringConstants.MESSAGE);