Implement
authorsaerome.kim <saerome.kim@samsung.com>
Wed, 3 Jan 2018 07:38:40 +0000 (16:38 +0900)
committersaerome.kim <saerome.kim@samsung.com>
Mon, 2 Jul 2018 10:38:38 +0000 (19:38 +0900)
- get_device_id method
- Add Self-OTM
- make d2d-subowner's device ID baesed on fake MAC

Signed-off-by: saerome.kim <saerome.kim@samsung.com>
src/d2d-subowner/d2ds-service-interface.c
src/d2d-subowner/d2ds-subowner.c
src/d2d-subowner/d2ds-subowner.h
src/d2d-subowner/introspection/d2ds.xml

index fc5f84c..ead3a5a 100644 (file)
@@ -223,6 +223,28 @@ static gboolean _d2ds_dbus_handle_prov_cred(NetD2ds *object,
        return TRUE;\r
 }\r
 \r
+static gboolean _d2ds_dbus_handle_get_ownerid(NetD2ds *object,\r
+               GDBusMethodInvocation *invocation,\r
+               gpointer user_data)\r
+{\r
+       gchar *uuid_str = NULL;\r
+       int ret = D2DS_ERROR_NONE;\r
+       d2ds_service *service = (d2ds_service *)user_data;\r
+\r
+       d2ds_check_null_ret_error("service", service, FALSE);\r
+\r
+       ret = d2ds_request_get_ownerid(service, &uuid_str);\r
+       if (D2DS_ERROR_NONE != ret)\r
+               D2DS_LOGE("Failed to d2ds_request_get_ownerid = %d", ret);\r
+\r
+       net_d2ds_complete_get_ownerid(object, invocation, uuid_str, ret);\r
+\r
+       if (uuid_str)\r
+               g_free(uuid_str);\r
+\r
+       return TRUE;\r
+}\r
+\r
 static void _d2ds_dbus_on_bus_acquired(GDBusConnection *conn, const gchar *name,\r
                gpointer user_data)\r
 {\r
@@ -248,6 +270,8 @@ static void _d2ds_dbus_on_bus_acquired(GDBusConnection *conn, const gchar *name,
                        G_CALLBACK(_d2ds_dbus_handle_prov_acl), service);\r
        g_signal_connect(d2ds_dbus_object, "handle-prov-cred",\r
                        G_CALLBACK(_d2ds_dbus_handle_prov_cred), service);\r
+       g_signal_connect(d2ds_dbus_object, "handle-get-ownerid",\r
+                       G_CALLBACK(_d2ds_dbus_handle_get_ownerid), service);\r
 \r
        ret = g_dbus_interface_skeleton_export(G_DBUS_INTERFACE_SKELETON(d2ds_dbus_object),\r
                        conn, D2DS_DBUS_OBJPATH, &error);\r
index 12b450d..8b2c722 100644 (file)
@@ -36,6 +36,7 @@
 #include "ocprovisioningmanager.h"
 #include "oxmjustworks.h"
 #include "oxmrandompin.h"
+//#include "srmutility.h"
 #include "securevirtualresourcetypes.h"
 #include "security/srmutility.h"
 #include "pmtypes.h"
@@ -57,7 +58,7 @@
 #define ACL_RESRC_ARRAY_SIZE 3
 
 #define DISCOVERY_TIMEOUT  3 /* 3 sec */
-#define CALLBACK_TIMEOUT_S 5 /* 5 sec */
+#define CALLBACK_TIMEOUT_S 10 /* 10 sec */
 #define CALLBACK_TIMEOUT_MS 10 * 50 /* 5sec = 100ms * 50 */
 
 /* '_' for separaing from the same constant variable in srmresourcestrings.c  */
@@ -215,7 +216,6 @@ static void _print_uuid_res(const OicUuid_t* uuid, int res)
        D2DS_LOGI("%s", uuid_string);
 }
 
-
 #ifdef TEST
 static OCProvisionDev_t* _get_dev_by_id(const OCProvisionDev_t* dev_lst, const int dev_num)
 {
@@ -368,6 +368,7 @@ static int _init_provision_client(void)
 {
        OCStackResult ret = OC_STACK_OK;
        char data_dir[MAX_FILE_PATH_LEN] = {0,};
+       const uint8_t seed[6] = {0x00, 0x12, 0x34, 0x11, 0x22, 0x33};
 
        snprintf(data_dir, MAX_FILE_PATH_LEN, "%s/network/%s",
                        tzplatform_getenv(TZ_SYS_GLOBALUSER_DATA), PRVN_DB_FILE_NAME);
@@ -381,6 +382,13 @@ static int _init_provision_client(void)
                return ret;
        }
 
+       /* Make deviceID based on Wi-Fi MAC address */
+       ret = SetDeviceIdSeed(seed, 6);
+       if (OC_STACK_OK != ret ) {
+               D2DS_LOGE( "SetDeviceIdSeed() error = %d", ret);
+               return ret;
+       }
+
        /* initialize OC stack and provisioning manager */
        ret = OCInit(NULL, 0, OC_CLIENT_SERVER);
        if (OC_STACK_OK != ret ) {
@@ -388,6 +396,13 @@ static int _init_provision_client(void)
                return ret;
        }
 
+       /* Do Self-Ownership Transfer */
+       ret = OCConfigSelfOwnership();
+       if (OC_STACK_OK != ret ) {
+               D2DS_LOGE( "OCConfigSelfOwnership() error = %d", ret);
+               return ret;
+       }
+
        if (access(data_dir, F_OK) != -1)
                D2DS_LOGI("Provisioning DB file already exists");
        else
@@ -691,7 +706,6 @@ static int _disc_owned_devs(d2ds_service *service)
 
 static void _mot_cb(void* ctx, int nOfRes, OCProvisionResult_t* arr, bool has_error)
 {
-       int ret = D2DS_ERROR_NONE;
        d2ds_subowner_s *client = (d2ds_subowner_s *)ctx;
 
        if (!has_error)  {
@@ -732,13 +746,13 @@ static gpointer _mot_func(gpointer data)
 #endif
        ret = OCDoMultipleOwnershipTransfer(g_client, con->target, _mot_cb);
        if (OC_STACK_OK != ret )  {
-               D2DS_LOGE( "OCDoMultipleOwnershipTransfer: ret = %d", ret);
+               D2DS_LOGE( "OCDoMultipleOwnershipTransfer: ret = %d (%s)", ret, _error_to_string(ret));
                goto MOT_ENDED;
        }
 
        ret = _wait_cb_ret(CALLBACK_TIMEOUT_MS);
        if(ret)  {
-               D2DS_LOGE( "OCProvisionCredentials callback error = %d", ret);
+               D2DS_LOGE( "OCProvisionCredentials callback error = %d (%s)", ret, _error_to_string(ret));
                goto MOT_ENDED;
        }
 
@@ -979,6 +993,10 @@ static OicSecAcl_t* _create_target_acl(const OicUuid_t* target, const OicUuid_t*
                return NULL;
        }
 
+       D2DS_LOGE("KSR");
+       _print_uuid(target);
+       _print_uuid(subject);
+
        acl = (OicSecAcl_t*) OICCalloc(1, sizeof(OicSecAcl_t));
        if (!acl) {
                D2DS_LOGE( "acl : OICCalloc failed =%d", errno);
@@ -1092,11 +1110,11 @@ static gpointer _provisioning_acl_func(gpointer data)
 
        ret= OCProvisionACL((void*) g_client, con->subject, acl, _provisioning_acl_cb);
        if (OC_STACK_OK != ret) {
-               D2DS_LOGD( "OCProvisionACL API error: %d", ret);
+               D2DS_LOGD( "OCProvisionACL API error: %d (%s)", ret, _error_to_string(ret));
                goto PVACL_ERROR;
        }
 
-       ret = _wait_cb_ret(CALLBACK_TIMEOUT_MS * 2);
+       ret = _wait_cb_ret(CALLBACK_TIMEOUT_S);
        if (ret) {
                D2DS_LOGE( "OCProvisionCredentials Faild = %d", errno);
                goto PVACL_ERROR;
@@ -1212,15 +1230,15 @@ static gpointer _cred_provisioning_func(gpointer data)
        g_client->g_doneCB = false;
 
        D2DS_LOGI("Provisioning Selected Pairwise Devices..");
-       OCStackResult rst = OCProvisionCredentials((void*) g_client,
-                                               SYMMETRIC_PAIR_WISE_KEY, OWNER_PSK_LENGTH_128,
-                                               con->dev1, con->dev2, _provision_cred_cb);
-       if (OC_STACK_OK != rst)  {
-               D2DS_LOGD( "OCProvisionPairwiseDevices API error: %d", rst);
+       ret = OCProvisionCredentials((void*) g_client,
+               SYMMETRIC_PAIR_WISE_KEY, OWNER_PSK_LENGTH_128,
+               con->dev1, con->dev2, _provision_cred_cb);
+       if (OC_STACK_OK != ret)  {
+               D2DS_LOGD( "OCProvisionPairwiseDevices API error: %d (%s)", ret, _error_to_string(ret));
                goto PVPWS_ERROR;
        }
 
-       ret = _wait_cb_ret(CALLBACK_TIMEOUT_MS);
+       ret = _wait_cb_ret(CALLBACK_TIMEOUT_S);
        if (ret)  {
                D2DS_LOGE( "OCProvisionCredentials Faild = %d", errno);
                goto PVPWS_ERROR;
@@ -1440,6 +1458,26 @@ int d2ds_request_prov_cred(d2ds_service *service, gchar *uuid_dev1, gchar *uuid_
        return ret;
 }
 
+int d2ds_request_get_ownerid(d2ds_service *service, gchar **uuid_str)
+{
+       int ret =D2DS_ERROR_NONE;
+       OicUuid_t uuid;
+
+       d2ds_check_null_ret_error("service", service, FALSE);
+
+       D2DS_LOGD("[IPC] Get Device ID");
+
+       ret = GetDoxmDevOwnerId(&uuid);
+       if (OC_STACK_OK  != ret)
+               D2DS_LOGE("GetDoxmDevOwnerId faild = [%d][%s]", ret, _error_to_string(ret));
+
+       ret = ConvertUuidToStr(&uuid, uuid_str);
+       if (OC_STACK_OK  != ret)
+               D2DS_LOGE("ConvertUuidToStr faild = [%d][%s]", ret, _error_to_string(ret));
+
+       return ret;
+}
+
 int d2ds_request_disable(d2ds_service *service)
 {
        NOTUSED(service);
@@ -1448,18 +1486,24 @@ int d2ds_request_disable(d2ds_service *service)
                D2DS_LOGE( "OCStack stop error");
        }
 
-       OCDeleteDiscoveredDevices(g_client->g_mowned_list);
-       OCDeleteDiscoveredDevices(g_client->g_motdev_list);
+       OCTerminatePM();
+
+       if (!g_client)
+               return D2DS_ERROR_NONE;
+
+       if (g_client->g_mowned_list)
+               OCDeleteDiscoveredDevices(g_client->g_mowned_list);
+       if (g_client->g_motdev_list)
+               OCDeleteDiscoveredDevices(g_client->g_motdev_list);
 
        if (g_client->rnd_pin) {
                g_free(g_client->rnd_pin);
                g_client->rnd_pin = NULL;
        }
+
        g_free(g_client);
        g_client = NULL;
 
-       OCTerminatePM();
-
        return D2DS_ERROR_NONE;
 }
 
index fd4d081..96e9314 100644 (file)
@@ -51,6 +51,7 @@ int d2ds_request_mot(d2ds_service *service, gchar* uuid, gchar *pin);
 int d2ds_request_prov_acl(d2ds_service *service, gchar *target, gchar *subject,
        gchar *rsrc_uri, gchar *rsrc_type, gchar *rsrc_interface, int permission);
 int d2ds_request_prov_cred(d2ds_service *service, gchar *uuid_dev1, gchar *uuid_dev2);
+int d2ds_request_get_ownerid(d2ds_service *service, gchar **uuid_str);
 int d2ds_request_disable(d2ds_service *service);
 
 #ifdef __cplusplus
index 62d4838..c2f2505 100644 (file)
             <arg type="s" name="dev2" direction="in"/>\r
             <arg type="i" name="result" direction="out"/>\r
         </method>\r
+        <method name="get_ownerid">\r
+            <arg type="s" name="devownerid" direction="out"/>\r
+            <arg type="i" name="result" direction="out"/>\r
+        </method>\r
 \r
         <!-- Signal (D-Bus) definitions -->\r
         <signal name="subowner_enabled">\r