- add file to get platform info (temp_platform.ini) 59/160759/3
authorhhk86.heo <hhk86.heo@samsung.com>
Mon, 20 Nov 2017 04:42:13 +0000 (13:42 +0900)
committerhhk86.heo <hhk86.heo@samsung.com>
Mon, 20 Nov 2017 05:07:07 +0000 (14:07 +0900)
- remove code (deinit_ocstack)

- add code to regist device info for "tiu style" (/oic/rd/prop)
 : make thread to publish
 : lock and wait when publish resource

Change-Id: I1920b06bd13316a5aac71e8448109dac7e12b722

.project
CMakeLists.txt
data/temp_platform.ini [new file with mode: 0644]
inc/fmw_update_service_internal.h
packaging/org.example.fwm_update_service.spec
src/fmw_update_service.c
src/fmw_update_service_internal.c

index f8a6c0cd5f58f5d7ba17c7fa40d91c336e922a48..61300844fb29218714ee0ad84348f10118773170 100644 (file)
--- a/.project
+++ b/.project
@@ -3,7 +3,7 @@
        <name>fmw_update_service</name>
        <comment></comment>
        <projects>
-               <project>ua-client</project>
+               <project>ua-client_devel_api</project>
        </projects>
        <buildSpec>
                <buildCommand>
index 437a481459cfd1d6dbfc76ba4cec4ce6a4c03681..37ee2827d01d765725dd8681c5a63893cbda01bd 100755 (executable)
@@ -9,8 +9,8 @@ SET(CMAKE_VERBOSE_MAKEFILE 0)
 SET(PROJECT_ROOT_DIR "${CMAKE_SOURCE_DIR}")
 SET(PROJECT_RESOURCES_DIR "${PROJECT_ROOT_DIR}/res")
 
-ADD_DEFINITIONS(-D__WITH_DTLS__ -D__WITH_TLS__ -DRD_CLIENT -D_USE_WWST_ -D_USE_WWST_PRD_)
-#ADD_DEFINITIONS(-DRD_CLIENT)
+#ADD_DEFINITIONS(-D__WITH_DTLS__ -D__WITH_TLS__ -DRD_CLIENT -D_USE_WWST_ -D_USE_WWST_PRD_)
+ADD_DEFINITIONS(-DRD_CLIENT)
 
 INCLUDE(FindPkgConfig)
 pkg_check_modules(APP_PKGS REQUIRED
@@ -62,5 +62,6 @@ INSTALL(FILES ${PROJECT_ROOT_DIR}/shared/res/fmw_update_service.png DESTINATION
 INSTALL(FILES ${PROJECT_ROOT_DIR}/data/oic_svr_db_client.dat DESTINATION /opt/usr/home/owner/apps_rw/org.example.fmw_update_service/data)
 INSTALL(FILES ${PROJECT_ROOT_DIR}/data/thawte.cert.pem DESTINATION /opt/usr/home/owner/apps_rw/org.example.fmw_update_service/data)
 INSTALL(FILES ${PROJECT_ROOT_DIR}/data/temp_oauth.ini DESTINATION /opt/usr/home/owner/apps_rw/org.example.fmw_update_service/data)
+INSTALL(FILES ${PROJECT_ROOT_DIR}/data/temp_platform.ini DESTINATION /opt/usr/home/owner/apps_rw/org.example.fmw_update_service/data)
 
 # End of a file
diff --git a/data/temp_platform.ini b/data/temp_platform.ini
new file mode 100644 (file)
index 0000000..87bfc7e
--- /dev/null
@@ -0,0 +1,12 @@
+[platform_info]
+platformID=1234
+manufacturerName=hhk86.heo@samsung.com
+manufacturerUrl=https://www.example.com
+modelNumber=Tizen2017-AAA
+dateOfManufacture=2017-07-19
+platformVersion=AAA
+operatingSystemVersion=4.0
+hardwareVersion=HW-001
+firmwareVersion=3.0
+supportUrl=https://www.examplesupport.com
+systemTime=2017-07-19T12.00
\ No newline at end of file
index 04ac52e00db540ec9182e1b7fee8693e5d7c3dbb..5fb4172f1e8b4dcb05c6b983009dff08513e6dda 100644 (file)
@@ -26,6 +26,8 @@
 #define FWR_ENTER      FWR_LOGD("(%s) ENTER", __FUNCTION__);
 #define FWR_EXIT       FWR_LOGD("(%s) EXIT", __FUNCTION__);
 
+#define G_FREE(p) do { if (p) { g_free(p); p = NULL; } } while (0);
+
 int init_oc_stack();
 int init_default_test_res();
 int init_fw_res();
index 2c0bf70ca710bac8256dd18a88ae9b4f1a60fb68..ef76d1331f616c088a8986d88bed6fb9092ad5d3 100755 (executable)
@@ -103,6 +103,7 @@ chown owner:system_share  /opt/usr/home/owner/apps_rw/org.example.fmw_update_ser
 /opt/usr/home/owner/apps_rw/org.example.fmw_update_service/data/oic_svr_db_client.dat
 /opt/usr/home/owner/apps_rw/org.example.fmw_update_service/data/thawte.cert.pem
 /opt/usr/home/owner/apps_rw/org.example.fmw_update_service/data/temp_oauth.ini
+/opt/usr/home/owner/apps_rw/org.example.fmw_update_service/data/temp_platform.ini
 
 %defattr(-,root,root,-)
 %{_pkg_dir}/bin/fmw_update_service
@@ -115,3 +116,4 @@ chown owner:system_share  /opt/usr/home/owner/apps_rw/org.example.fmw_update_ser
 #%{_pkg_data_dir}/oic_svr_db_client.dat
 #%{_pkg_data_dir}/thawte.cert.pem
 #%{_pkg_data_dir}/temp_oauth.ini
+#%{_pkg_data_dir}/temp_platform.ini
index 74f4874dcf36586e24190764a9c466e5861f767a..0e3e98e504c7822ed4072e285aba719ee2831882 100644 (file)
@@ -62,9 +62,9 @@ void service_app_terminate(void *data)
                FWR_LOGE("Failed destory_default_res");
        }
 
-       if (deinit_oc_stack() != 0) {
-               FWR_LOGE("Failed deinit_oc_stack");
-       }
+//     if (deinit_oc_stack() != 0) {
+//             FWR_LOGE("Failed deinit_oc_stack");
+//     }
        FWR_EXIT
     return;
 }
index 0b7bd0c7a11b43f77717ee133e054b0632fb09c8..75debe104e80dfc71487bb33a1d9574693b1e683 100644 (file)
 #define DEFAULT_CONTEXT_VALUE 0x99
 #define LOGIN_OK 4
 
-#define OC_FMWUP_DAT_FILE_PATH         "/opt/usr/data/ua-client/oic_svr_db_client.dat"
-#define OC_FMWUP_DAT_FILE_NAME         "oic_svr_db_client.dat"
+#define OC_FMWUP_DAT_FILE_PATH                 "/opt/usr/data/ua-client/oic_svr_db_client.dat"
+#define OC_FMWUP_DAT_FILE_NAME                 "oic_svr_db_client.dat"
+#define PLATFORM_INFO_FILE_NAME                        "temp_platform.ini"
+
 #ifdef _USE_WWST_
 #define OC_SECURITY_SQL_DB_FILE_PATH   "/opt/usr/data/ua-client/PDM.db"
 #define OC_SECURITY_SQL_DB_FILE_NAME   "PDM.db"
@@ -33,38 +35,38 @@ OCResourceHandle res_handle[2];
 
 OCPersistentStorage *ps;
 #ifdef _USE_WWST_PRD_
-#define CLOUD_SERVER_PREFIX            "coaps+tcp://"
-#define STG_SERVER_DN                  "stg-ocfcon.samsungiots.com"
-#define DEV_SERVER_DN                  "dev-ocfcon.samsungiots.com"
-#define PROD_SERVER_DN                 "connect.samsungiotcloud.com"
-#define CLOUD_SERVER_PORT              ":443"
-#define CLOUD_PRD_SIGN_UP_SERVER                       "52.78.147.137:443" //connect.samsungiotcloud.com
-#define CLOUD_PRD_SIGN_IN_SERVER                       "52.14.174.17:443" //Region CI : ocfconnect-shard-eu02-euwest1.samsungiotcloud.com:443
+#define CLOUD_SERVER_PREFIX                            "coaps+tcp://"
+#define STG_SERVER_DN                                  "stg-ocfcon.samsungiots.com"
+#define DEV_SERVER_DN                                  "dev-ocfcon.samsungiots.com"
+#define PROD_SERVER_DN                                 "connect.samsungiotcloud.com"
+#define CLOUD_SERVER_PORT                              ":443"
+#define CLOUD_PRD_SIGN_UP_SERVER               "52.78.147.137:443" //connect.samsungiotcloud.com
+#define CLOUD_PRD_SIGN_IN_SERVER               "52.14.174.17:443" //Region CI : ocfconnect-shard-eu02-euwest1.samsungiotcloud.com:443
 
 #endif
 #ifdef _USE_WWST_
-#define CLOUD_STG_SERVER                       "52.202.112.20:443"
-#define CLOUD_DEV_SERVER                       "54.86.109.131:443"
-#define CLOUD_AUTH_PROVIDER            "samsung-us"
-#define CLOUD_DEVICE_TYPE              "device"
-#define CLOUD_PROTOCOL                 "coaps+tcp://"
+#define CLOUD_STG_SERVER                                       "52.202.112.20:443"
+#define CLOUD_DEV_SERVER                                       "54.86.109.131:443"
+#define CLOUD_AUTH_PROVIDER                            "samsung-us"
+#define CLOUD_DEVICE_TYPE                              "device"
+#define CLOUD_PROTOCOL                                 "coaps+tcp://"
 #else
-#define CLOUD_STG_SERVER                       "52.78.68.250:5683"
-#define CLOUD_AUTH_PROVIDER            "tdc"
-#define CLOUD_PROTOCOL                 "coap+tcp://"
+#define CLOUD_STG_SERVER                                       "52.78.68.250:5683"
+#define CLOUD_AUTH_PROVIDER                            "tdc"
+#define CLOUD_PROTOCOL                                 "coap+tcp://"
 #endif
 
-#define DEVICE_ID                      "di"
-#define CLIENT_ID                      "clientid"
-#define AUTH_PROVIDER          "authprovider"
-#define DEVICE_TYPE                    "devicetype"
-#define ACCESS_TOKEN           "accesstoken"
-#define USER_ID                                "uid"
-#define CLOUD_LOGIN                    "login"
-#define AUTH_CODE                      "authcode"
+#define DEVICE_ID                                                      "di"
+#define CLIENT_ID                                                      "clientid"
+#define AUTH_PROVIDER                                  "authprovider"
+#define DEVICE_TYPE                                            "devicetype"
+#define ACCESS_TOKEN                                           "accesstoken"
+#define USER_ID                                                        "uid"
+#define CLOUD_LOGIN                                            "login"
+#define AUTH_CODE                                                      "authcode"
 
-#define CLOUD_ACCOUNT_RES_TYPE         "oic.wk.account"
-#define CLOUD_SESSION_RES_TYPE         "oic.wk.session"
+#define CLOUD_ACCOUNT_RES_TYPE                 "oic.wk.account"
+#define CLOUD_SESSION_RES_TYPE                 "oic.wk.session"
 
 #define MAX_INTERVAL_NUMBER (4)
 
@@ -89,7 +91,6 @@ bool g_auto_publish;
 bool bSignin;
 bool isExit;
 uint16_t g_cred_id = 0;
-CloudLoginInfo loginDetails;
 char *g_app_data_path = NULL;
 char *g_fmwup_dat_file = NULL;
 
@@ -99,20 +100,8 @@ static pthread_cond_t _cond = PTHREAD_COND_INITIALIZER;
 static bool is_ping_timer = false;
 static bool switch_power = true;
 
-OCPlatformInfo g_platform_info = {
-               "1234",                           /* platformID */
-               "Samsung",                        /* manufacturerName */
-               "https://www.example.com",        /* manufacturerUrl */
-               "Tizen2017-AAA",                  /* modelNumber */
-               "2017-07-19",                     /* dateOfManufacture */
-               "AAA",                            /* platformVersion */
-               "4.0",                            /* operatingSystemVersion */
-               "HW-001",                         /* hardwareVersion */
-               "1.0",                            /* firmwareVersion */
-               "https://www.examplesupport.com", /* supportUrl */
-               "2017-07-19T12.00"                /* systemTime */
-};
-
+static CloudLoginInfo loginDetails = {0,};
+static OCPlatformInfo g_platform_info = {0,};
 
 void _lock_and_wait()
 {
@@ -435,13 +424,120 @@ void* _oc_process_thd(void * ptr)
                        FWR_LOGD("OCStack process error\n");
                        return NULL;
                }
-               sleep(1);
        }
 
        return NULL;
 }
 
 
+void _get_login_info()
+{
+#ifdef _USE_WWST_
+       char tmp[255];
+       GKeyFile *keyfile;
+       GKeyFileFlags flags = G_KEY_FILE_NONE;
+       GError *error = NULL;
+
+       keyfile = g_key_file_new();
+
+       snprintf(tmp, sizeof(tmp), "%s%s", _get_app_data_path(), OAUTH_FILE_NAME);
+       FWR_LOGD("login info [%s]", tmp);
+
+       g_key_file_load_from_file(keyfile, tmp, flags, &error);
+
+       loginDetails.accessToken = g_key_file_get_string(keyfile, "oauth_info", "access_token", NULL);
+       loginDetails.refreshToken = g_key_file_get_string(keyfile, "oauth_info", "refresh_token", NULL);
+       loginDetails.uid = g_key_file_get_string(keyfile, "oauth_info", "user_id", NULL);
+       loginDetails.clientId = g_key_file_get_string(keyfile, "oauth_info", "client_id", NULL);
+
+       FWR_LOGD("access_token : %s\n", loginDetails.accessToken);
+       FWR_LOGD("refresh_token : %s\n", loginDetails.refreshToken);
+       FWR_LOGD("user_id : %s\n", loginDetails.uid);
+       FWR_LOGD("client_id : %s\n", loginDetails.clientId);
+#endif
+       loginDetails.deviceId = g_strdup(OCGetServerInstanceIDString());
+       FWR_LOGD("Device ID = [%s]\n", loginDetails.deviceId);
+
+}
+
+
+void _get_platform_info()
+{
+       char tmp[255];
+       GKeyFile *keyfile;
+       GKeyFileFlags flags = G_KEY_FILE_NONE;
+       GError *error = NULL;
+
+       keyfile = g_key_file_new();
+
+       snprintf(tmp, sizeof(tmp), "%s%s", _get_app_data_path(), PLATFORM_INFO_FILE_NAME);
+       FWR_LOGD("login info [%s]", tmp);
+
+       g_key_file_load_from_file(keyfile, tmp, flags, &error);
+
+       g_platform_info.platformID = g_key_file_get_string(keyfile, "platform_info", "platformID", NULL);
+       g_platform_info.manufacturerName = g_key_file_get_string(keyfile, "platform_info", "manufacturerName", NULL);
+       g_platform_info.manufacturerUrl = g_key_file_get_string(keyfile, "platform_info", "manufacturerUrl", NULL);
+       g_platform_info.modelNumber = g_key_file_get_string(keyfile, "platform_info", "modelNumber", NULL);
+       g_platform_info.dateOfManufacture = g_key_file_get_string(keyfile, "platform_info", "dateOfManufacture", NULL);
+       g_platform_info.platformVersion = g_key_file_get_string(keyfile, "platform_info", "platformVersion", NULL);
+       g_platform_info.operatingSystemVersion = g_key_file_get_string(keyfile, "platform_info", "operatingSystemVersion", NULL);
+       g_platform_info.hardwareVersion = g_key_file_get_string(keyfile, "platform_info", "hardwareVersion", NULL);
+       g_platform_info.firmwareVersion = g_key_file_get_string(keyfile, "platform_info", "firmwareVersion", NULL);
+       g_platform_info.supportUrl = g_key_file_get_string(keyfile, "platform_info", "supportUrl", NULL);
+       g_platform_info.systemTime = g_key_file_get_string(keyfile, "platform_info", "systemTime", NULL);
+
+       FWR_LOGD("platformID : %s\n", g_platform_info.platformID);
+       FWR_LOGD("manufacturerName : %s\n", g_platform_info.manufacturerName);
+       FWR_LOGD("manufacturerUrl : %s\n", g_platform_info.manufacturerUrl);
+       FWR_LOGD("modelNumber : %s\n", g_platform_info.modelNumber);
+       FWR_LOGD("dateOfManufacture : %s\n", g_platform_info.dateOfManufacture);
+       FWR_LOGD("platformVersion : %s\n", g_platform_info.platformVersion);
+       FWR_LOGD("operatingSystemVersion : %s\n", g_platform_info.operatingSystemVersion);
+       FWR_LOGD("hardwareVersion : %s\n", g_platform_info.hardwareVersion);
+       FWR_LOGD("firmwareVersion : %s\n", g_platform_info.firmwareVersion);
+       FWR_LOGD("supportUrl : %s\n", g_platform_info.supportUrl);
+       FWR_LOGD("systemTime : %s\n", g_platform_info.systemTime);
+
+}
+
+int _set_auth_cert_info()
+{
+#ifdef _USE_WWST_
+       char *certFile = g_strconcat(_get_app_data_path(), CERT_FILE_NAME, NULL);
+       FWR_LOGD("cert file [%s]", certFile);
+       ckmc_cert_s* cert = NULL;
+       int ret_cert = ckmc_load_cert_from_file(certFile, &cert);
+       if (CKMC_ERROR_NONE != ret_cert) {
+               FWR_LOGD("ckmc_load_cert_from_file error [%d]\n", ret_cert);
+               free(certFile);
+               return -1;
+       }
+
+       loginDetails.certificate = cert->raw_cert;
+       loginDetails.certificateLength = cert->cert_size;
+       loginDetails.encodingType = OIC_ENCODING_PEM;
+
+       FWR_LOGI("certificate[%s]", cert->raw_cert);
+       FWR_LOGI("certificateLength[%d]", cert->cert_size);
+
+       if (loginDetails.certificate) {
+               FWR_LOGD("Save cert file Data\n");
+               if (OCSaveTrustCertChain(loginDetails.certificate, loginDetails.certificateLength, \
+                               loginDetails.encodingType, &g_cred_id) != OC_STACK_OK) {
+                       FWR_LOGD("OCSaveTrustCertChain() failed\n");
+                       g_free(certFile);
+                       return -1;
+               } else {
+                       FWR_LOGD("Cred ID from saveCertFile = [%d]\n", g_cred_id);
+               }
+       }
+       g_free(certFile);
+#endif
+       return 0;
+}
+
+
 int init_oc_stack()
 {
        bSignin = false;
@@ -487,10 +583,13 @@ int init_oc_stack()
 
 
 #endif
-       _set_platform_info();
 
-       _set_device_info();
+       _get_login_info();
+       _get_platform_info();
 
+       _set_auth_cert_info();
+       _set_platform_info();
+       _set_device_info();
        _set_firmware_download_path();
 
        pthread_t oc_proc_thd;
@@ -640,13 +739,103 @@ OCStackApplicationResult _handle_rd_publish_callback(void *ctx, OCDoHandle handl
                FWR_LOGD("############## Publish resource response received [%s]\n", clientResponse->resourceUri);
        }
 
-//     _cond_signal();
+       _cond_signal();
 
        return OC_STACK_KEEP_TRANSACTION;
 }
 
 
-int _publish_fw_res_to_rd()
+
+
+OCStackApplicationResult _handleRegisterDeviceInfoCB(void *ctx,
+               OCDoHandle handle,
+               OCClientResponse *clientResponse)
+{
+    if (ctx != (void *) DEFAULT_CONTEXT_VALUE)
+    {
+       FWR_LOGD("Invalid Publish callback received");
+    }
+
+    FWR_LOGD("Publish resource response received, code: %d", clientResponse->result);
+
+    return OC_STACK_KEEP_TRANSACTION;
+}
+
+
+
+int _setDeviceProperty(OCRepPayload *devicepayload, int payload_type, char *id)
+{
+       char *data = NULL;
+       OCGetPropertyValue(payload_type, id, (void **)&data);
+       if (data) {
+               FWR_LOGI("[%s][%s]", id, data);
+               OCRepPayloadSetPropString(devicepayload, id, data);
+               G_FREE(data);
+       } else {
+               FWR_LOGI("[%s] is empty", id);
+       }
+       return 0;
+}
+
+
+int _registerDeviceInfo()
+{
+       FWR_ENTER
+
+       OCCallbackData cbData;
+       memset(&cbData, 0, sizeof(OCCallbackData));
+       OCStackResult result = OC_STACK_ERROR;
+       OCRepPayload *payload = NULL;
+       OCRepPayload *devicepayload = NULL;
+
+    cbData.cb = _handleRegisterDeviceInfoCB;
+    cbData.context = (void *)DEFAULT_CONTEXT_VALUE;
+    cbData.cd = NULL;
+
+       devicepayload = OCRepPayloadCreate();
+
+       OCRepPayloadSetPropString(devicepayload, OC_RSRVD_SPEC_VERSION, "core.1.1.0");
+       OCRepPayloadSetPropString(devicepayload, OC_RSRVD_DATA_MODEL_VERSION, IOTIVITY_VERSION);
+       OCRepPayloadSetPropString(devicepayload, OC_RSRVD_RESOURCE_TYPE, "oic.r.firmware");
+       OCRepPayloadSetPropString(devicepayload, OC_RSRVD_DEVICE_ID, loginDetails.deviceId);
+       FWR_LOGI("[%s][%s]", OC_RSRVD_SPEC_VERSION, "core.1.1.0");
+       FWR_LOGI("[%s][%s]", OC_RSRVD_DATA_MODEL_VERSION, IOTIVITY_VERSION);
+       FWR_LOGI("[%s][%s]", OC_RSRVD_RESOURCE_TYPE, "oic.r.firmware");
+       FWR_LOGI("[%d][%s]", PAYLOAD_TYPE_DEVICE, loginDetails.deviceId);
+
+       _setDeviceProperty(devicepayload, PAYLOAD_TYPE_DEVICE, OC_RSRVD_DEVICE_NAME);
+
+       _setDeviceProperty(devicepayload, PAYLOAD_TYPE_PLATFORM, OC_RSRVD_MFG_NAME);
+       _setDeviceProperty(devicepayload, PAYLOAD_TYPE_PLATFORM, OC_RSRVD_MODEL_NUM);
+       _setDeviceProperty(devicepayload, PAYLOAD_TYPE_PLATFORM, OC_RSRVD_PLATFORM_VERSION);
+       _setDeviceProperty(devicepayload, PAYLOAD_TYPE_PLATFORM, OC_RSRVD_OS_VERSION);
+       _setDeviceProperty(devicepayload, PAYLOAD_TYPE_PLATFORM, OC_RSRVD_HARDWARE_VERSION);
+       _setDeviceProperty(devicepayload, PAYLOAD_TYPE_PLATFORM, OC_RSRVD_FIRMWARE_VERSION);
+       _setDeviceProperty(devicepayload, PAYLOAD_TYPE_PLATFORM, OC_RSRVD_VID);
+
+       payload = OCRepPayloadCreate();
+
+       OCRepPayloadSetPropObject(payload, OC_RSRVD_PROPERTY, devicepayload);
+
+       char uri[MAX_URI_LENGTH] = { 0 };
+       snprintf(uri, MAX_URI_LENGTH, "%s%s%s",
+                       CLOUD_PROTOCOL, CLOUD_STG_SERVER, "/oic/rd/prop");
+
+       FWR_LOGI("Uri : [%s]", uri);
+       result = OCDoResource(NULL, OC_REST_PUT, uri, NULL, (OCPayload *)payload,
+                       CT_ADAPTER_TCP, OC_LOW_QOS, &cbData, NULL, 0);
+
+       if(result != OC_STACK_OK ) {
+               FWR_LOGE("Failed OCDoResource [%d]", result);
+               return -1;
+       }
+
+       FWR_EXIT
+       return 0;
+}
+
+
+int _publish_res_to_rd()
 {
        OCCallbackData cb_data = {NULL, NULL, NULL};
        cb_data.cb = _handle_rd_publish_callback;
@@ -683,44 +872,50 @@ int _publish_fw_res_to_rd()
                FWR_LOGD("Publish Resource with null handle failed [%d]", ocResult);
                return -1;
        }
-
+       _lock_and_wait();
        ocResult = OCRDPublish(NULL, uri, (CT_ADAPTER_TCP | CT_IP_USE_V4), &res_handle[0], 1, &cb_data, OC_LOW_QOS);
        if (ocResult != OC_STACK_OK) {
                FWR_LOGD("Publish Resource failed [%d]", ocResult);
                return -1;
        }
-
+       _lock_and_wait();
        ocResult = OCRDPublish(NULL, uri, (CT_ADAPTER_TCP | CT_IP_USE_V4), &res_handle[1], 1, &cb_data, OC_LOW_QOS);
        if (ocResult != OC_STACK_OK) {
                FWR_LOGD("Publish firmware Resource failed [%d]", ocResult);
                return -1;
        }
+       _lock_and_wait();
 
 #else
-       if (OCRDPublish(uri, CT_ADAPTER_TCP|CT_IP_USE_V4,
-                       NULL, 0,
-                       &cb_data, OC_LOW_QOS) != OC_STACK_OK) {
-               FWR_LOGD("OCRDPublish() failed\n");
-               return -1;
-       }
-
-//     _lock_and_wait();
-
-       if (OCRDPublish(uri, CT_ADAPTER_TCP|CT_IP_USE_V4,
+       if (OCRDPublish(NULL, uri, CT_ADAPTER_TCP|CT_IP_USE_V4,
                        res_handle, 2,
+//                     &cb_data, OIC_RD_PUBLISH_TTL, OC_LOW_QOS) != OC_STACK_OK) {
                        &cb_data, OC_LOW_QOS) != OC_STACK_OK) {
                FWR_LOGD("OCRDPublish() failed\n");
                return -1;
        }
+       _lock_and_wait();
 #endif
 
-//     _lock_and_wait();
+
        fmwup_check_firmware_upgraded();
 
+#ifndef _USE_WWST_
+       _registerDeviceInfo();
+#endif
+
        return 0;
 }
 
+void *_publish_res_to_rd_thread(void *data)
+{
 
+       if (_publish_res_to_rd() != 0) {
+               FWR_LOGD("publish failed!!!\n");
+       }
+
+       return NULL;
+}
 
 static void _parse_payload(OCRepPayload *payload)
 {
@@ -836,7 +1031,6 @@ static void *_send_keep_alive(void *data)
                pthread_mutex_lock(&pingcycle_mutex);
                ++timer_count;
                pthread_mutex_unlock(&pingcycle_mutex);
-               sleep(1);
        }
 
        return NULL;
@@ -926,75 +1120,6 @@ void *_ping_timer(void *timer)
 #endif
 
 
-
-void _get_login_info()
-{
-#ifdef _USE_WWST_
-       char tmp[255];
-       GKeyFile *keyfile;
-       GKeyFileFlags flags = G_KEY_FILE_NONE;
-       GError *error = NULL;
-
-       keyfile = g_key_file_new();
-
-       snprintf(tmp, sizeof(tmp), "%s%s", _get_app_data_path(), OAUTH_FILE_NAME);
-       FWR_LOGD("login info [%s]", tmp);
-
-       g_key_file_load_from_file(keyfile, tmp, flags, &error);
-
-       loginDetails.accessToken = g_key_file_get_string(keyfile, "oauth_info", "access_token", NULL);
-       loginDetails.refreshToken = g_key_file_get_string(keyfile, "oauth_info", "refresh_token", NULL);
-       loginDetails.uid = g_key_file_get_string(keyfile, "oauth_info", "user_id", NULL);
-       loginDetails.clientId = g_key_file_get_string(keyfile, "oauth_info", "client_id", NULL);
-
-       FWR_LOGD("access_token : %s\n", loginDetails.accessToken);
-       FWR_LOGD("refresh_token : %s\n", loginDetails.refreshToken);
-       FWR_LOGD("user_id : %s\n", loginDetails.uid);
-       FWR_LOGD("client_id : %s\n", loginDetails.clientId);
-#endif
-       loginDetails.deviceId = g_strdup(OCGetServerInstanceIDString());
-       FWR_LOGD("Device ID = [%s]\n", loginDetails.deviceId);
-
-}
-
-
-int _set_auth_cert_info()
-{
-#ifdef _USE_WWST_
-       char *certFile = g_strconcat(_get_app_data_path(), CERT_FILE_NAME, NULL);
-       FWR_LOGD("cert file [%s]", certFile);
-       ckmc_cert_s* cert = NULL;
-       int ret_cert = ckmc_load_cert_from_file(certFile, &cert);
-       if (CKMC_ERROR_NONE != ret_cert) {
-               FWR_LOGD("ckmc_load_cert_from_file error [%d]\n", ret_cert);
-               free(certFile);
-               return -1;
-       }
-
-       loginDetails.certificate = cert->raw_cert;
-       loginDetails.certificateLength = cert->cert_size;
-       loginDetails.encodingType = OIC_ENCODING_PEM;
-
-       FWR_LOGI("certificate[%s]", cert->raw_cert);
-       FWR_LOGI("certificateLength[%d]", cert->cert_size);
-
-       if (loginDetails.certificate) {
-               FWR_LOGD("Save cert file Data\n");
-               if (OCSaveTrustCertChain(loginDetails.certificate, loginDetails.certificateLength, \
-                               loginDetails.encodingType, &g_cred_id) != OC_STACK_OK) {
-                       FWR_LOGD("OCSaveTrustCertChain() failed\n");
-                       g_free(certFile);
-                       return -1;
-               } else {
-                       FWR_LOGD("Cred ID from saveCertFile = [%d]\n", g_cred_id);
-               }
-       }
-       g_free(certFile);
-#endif
-       return 0;
-}
-
-
 static OCStackApplicationResult _handle_signin_response(void *ctx,
                                                                          OCDoHandle handle,
                                                                          OCClientResponse *response)
@@ -1007,6 +1132,8 @@ static OCStackApplicationResult _handle_signin_response(void *ctx,
                return OC_STACK_DELETE_TRANSACTION;
        }
 
+       int ret = 0;
+
        if (response->payload) {
                FWR_LOGD("Payload received\n");
        }
@@ -1021,13 +1148,11 @@ static OCStackApplicationResult _handle_signin_response(void *ctx,
                bSignin = true;
                FWR_LOGD("Sign-In Success!!!\n");
 
-               sleep(1);
-
                if (g_auto_publish) {
-
-                       if (_publish_fw_res_to_rd() != 0) {
-                               FWR_LOGD("publish failed!!!\n");
-                       }
+                       pthread_t publishThread;
+                       ret = pthread_create(&publishThread, NULL, _publish_res_to_rd_thread, NULL);
+                       if (ret != 0)
+                               FWR_LOGD("publish Thread_create fail!\n");
                }
 
 #ifdef _USE_WWST_
@@ -1036,7 +1161,7 @@ static OCStackApplicationResult _handle_signin_response(void *ctx,
                is_ping_timer = true;
                pthread_mutex_unlock(&pingcycle_mutex);
 
-               int ret = pthread_create(&pingThread, NULL, _ping_timer, NULL);
+               ret = pthread_create(&pingThread, NULL, _ping_timer, NULL);
                if (ret != 0)
                        FWR_LOGD("ping pthread_create fail!\n");
 #endif
@@ -1064,7 +1189,6 @@ static OCStackApplicationResult _handle_signup_response(void *ctx,
        } else {
                _parse_payload((OCRepPayload*)response->payload);
                FWR_LOGD("Sign-Up OK!!!\n");
-               sleep(1);
                _signin();
        }
 
@@ -1165,11 +1289,6 @@ int sign_and_Publish()
                return -1;
        }
 
-       memset(&loginDetails, 0x00, sizeof(CloudLoginInfo));
-       _get_login_info();
-
-       _set_auth_cert_info();
-
        char uri[MAX_URI_LENGTH] = { 0 };
 #ifdef _USE_WWST_PRD_
        snprintf(uri, MAX_URI_LENGTH, "%s%s%s?rt=%s;if=%s",