Modify server to STG WWST 87/164187/3 devel/update_service
authorhhk86.heo <hhk86.heo@samsung.com>
Mon, 18 Dec 2017 02:42:03 +0000 (11:42 +0900)
committerhhk86.heo <hhk86.heo@samsung.com>
Mon, 18 Dec 2017 02:45:59 +0000 (11:45 +0900)
Change-Id: I9ec0449b2558df4ba0046a96c5ecd17f1602dcf2

CMakeLists.txt
src/fmw_update_service_internal.c

index e63dbeab228d2fd133951538e02ebcfe81c6b16f..0dd34b8b8eb38be366eda6fe85e65d7bf74dfb8f 100755 (executable)
@@ -9,8 +9,9 @@ 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_)
 #ADD_DEFINITIONS(-D__WITH_DTLS__ -D__WITH_TLS__ -DRD_CLIENT -D_USE_WWST_ -D_USE_WWST_PRD_)
-ADD_DEFINITIONS(-DRD_CLIENT)
+#ADD_DEFINITIONS(-DRD_CLIENT)
 
 INCLUDE(FindPkgConfig)
 pkg_check_modules(APP_PKGS REQUIRED
index 7f7a9aae67f90e468ac59d482b0353dff5db577c..8ce080a8ddd008ccc9d4f4520fb1288c775f5d4b 100644 (file)
@@ -38,19 +38,25 @@ 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 STG_SERVER_DN                                        "stg-ocfcon.samsungiots.com" //depregated
+#define STG_SERVER_DN                                  "connects.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_PRD_SIGN_IN_SERVER               "52.79.91.46:443" //ocfconnect-shard-na03-useast2.samsungiotcloud.com
 #endif
 #ifdef _USE_WWST_
-#define CLOUD_STG_SERVER                                       "52.202.112.20:443"
+#define CLOUD_STG_SERVER                                       "52.3.63.247:443" // connects.samsungiots.com
+#define CLOUD_STG_SIGN_IN_SERVER               "52.50.233.112:443" //ocfconnect-shard-na01s-useast1.samsungiots.com
+//#define CLOUD_STG_SIGN_IN_SERVER             "54.154.125.225:443" //ocfconnsamsung-eu01seuwest1-ext-1571020506.eu-west-1.elb.amazonaws.com.
+//sign in stg
+//ocfconnect-shard-na01s-useast1.samsungiots.com
 #define CLOUD_DEV_SERVER                                       "54.86.109.131:443"
 #define CLOUD_AUTH_PROVIDER                            "samsung-us"
-#define CLOUD_DEVICE_TYPE                              "device"
+//#define CLOUD_DEVICE_TYPE                            "samsungconnect" //device manager not polling about samsungconnect
+#define CLOUD_DEVICE_TYPE                              "device" //Failed to signIn in STG
+//#define CLOUD_DEVICE_TYPE                            "resource_server" //Failed to signIn in STG
 #define CLOUD_PROTOCOL                                 "coaps+tcp://"
 #else
 #define CLOUD_STG_SERVER                                       "52.78.68.250:5683"
@@ -93,8 +99,13 @@ bool g_auto_publish;
 bool bSignin;
 bool isExit;
 uint16_t g_cred_id = 0;
-char *g_app_data_path = NULL;
-char *g_fmwup_dat_file = NULL;
+static char *g_app_data_path = NULL;
+static char *g_fmwup_dat_file = NULL;
+
+static pthread_mutex_t publish_mutex = PTHREAD_MUTEX_INITIALIZER;
+static int g_publish_cnt = 0;
+static int g_publish_cnt_max = 0;
+
 
 static pthread_mutex_t pingcycle_mutex = PTHREAD_MUTEX_INITIALIZER;
 static pthread_mutex_t _lock = PTHREAD_MUTEX_INITIALIZER;
@@ -150,10 +161,10 @@ static FILE *_client_open(const char *path, const char *mode)
 {
        (void)path;
 
-       if (!strcmp(mode, "rb"))
-               mode = strdup("r");
-       else if(!strcmp(mode, "wb"))
-               mode = strdup("w");
+//     if (!strcmp(mode, "rb"))
+//             mode = strdup("r");
+//     else if(!strcmp(mode, "wb"))
+//             mode = strdup("w");
 
        FWR_LOGD("path [%s], mode[%s]", path, mode);
        char *fmwup_data_file = _get_fmwup_data_file();
@@ -431,14 +442,15 @@ OCStackApplicationResult _handle_rd_delete_callback(void *ctx, OCDoHandle handle
 
 void* _oc_process_thd(void * ptr)
 {
+       FWR_LOGD("_oc_process_thd");
        (void) ptr;
        while (!isExit) {
                if (OCProcess() != OC_STACK_OK) {
-                       FWR_LOGD("OCStack process error\n");
+                       FWR_LOGD("OCStack process error");
                        return NULL;
                }
        }
-
+       sleep(1);
        return NULL;
 }
 
@@ -529,10 +541,11 @@ int _set_auth_cert_info()
 
        loginDetails.certificate = cert->raw_cert;
        loginDetails.certificateLength = cert->cert_size;
-       loginDetails.encodingType = OIC_ENCODING_PEM;
+       loginDetails.encodingType = OIC_ENCODING_DER;
 
        FWR_LOGI("certificate[%s]", cert->raw_cert);
        FWR_LOGI("certificateLength[%d]", cert->cert_size);
+       FWR_LOGI("encodingType[%d]", OIC_ENCODING_DER);
 
        if (loginDetails.certificate) {
                FWR_LOGD("Save cert file Data\n");
@@ -743,6 +756,17 @@ int unset_state_changed_cb()
 }
 
 
+static gboolean polling_cb(gpointer user_param)
+{
+       FWR_ENTER
+       FWR_LOGD("user_param [%s]", (char *)user_param);
+       if (fmwup_get_newest_firmware_from_server() != 0)
+               FWR_LOGE("Failed fmwup_get_newest_firmware_from_server");
+       FWR_EXIT
+       return false;
+}
+
+
 OCStackApplicationResult _handle_rd_publish_callback(void *ctx, OCDoHandle handle,
         OCClientResponse *clientResponse)
 {
@@ -750,8 +774,27 @@ OCStackApplicationResult _handle_rd_publish_callback(void *ctx, OCDoHandle handl
        if (clientResponse) {
                FWR_LOGD("RD resource response received, code: [%d]\n", clientResponse->result);
                FWR_LOGD("############## Publish resource response received [%s]\n", clientResponse->resourceUri);
+       } else {
+               FWR_LOGE("clientResponse NULL");
        }
 
+       pthread_mutex_lock(&publish_mutex);
+       g_publish_cnt++;
+       pthread_mutex_unlock(&publish_mutex);
+
+       if (g_publish_cnt == g_publish_cnt_max) {
+               fmwup_check_firmware_upgraded();
+
+               guint timer_id = 0;
+               timer_id = (unsigned int)g_timeout_add_seconds(10, polling_cb, "user_data");
+
+               FWR_LOGD("polling_cb added : timer_id[%u]", timer_id);
+
+       #ifndef _USE_WWST_
+               _registerDeviceInfo();
+       #endif
+
+       }
        _cond_signal();
 
        return OC_STACK_KEEP_TRANSACTION;
@@ -862,7 +905,7 @@ int _publish_res_to_rd()
 #ifdef _USE_WWST_PRD_
        snprintf(uri, MAX_URI_LENGTH, "%s%s", CLOUD_PROTOCOL, CLOUD_PRD_SIGN_IN_SERVER);
 #else
-       snprintf(uri, MAX_URI_LENGTH, "%s%s", CLOUD_PROTOCOL, CLOUD_STG_SERVER);
+       snprintf(uri, MAX_URI_LENGTH, "%s%s", CLOUD_PROTOCOL, CLOUD_STG_SIGN_IN_SERVER);
 #endif
        FWR_LOGI("publish URI [%s]", uri);
 
@@ -883,28 +926,38 @@ int _publish_res_to_rd()
 //             return -1;
 //     }
 
+       g_publish_cnt = 0;
+       g_publish_cnt_max = 3;
+
        int ocResult = OC_STACK_OK;
        ocResult = OCRDPublish(NULL, uri, (CT_ADAPTER_TCP | CT_IP_USE_V4), NULL, 0, &cb_data, OC_LOW_QOS);
        if (ocResult != OC_STACK_OK) {
                FWR_LOGD("Publish Resource with null handle failed [%d]", ocResult);
                return -1;
+       } else {
+               FWR_LOGD("OCRDPublish success");
        }
        _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;
+       } else {
+               FWR_LOGD("OCRDPublish success");
        }
        _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;
+       } else {
+               FWR_LOGD("OCRDPublish success");
        }
        _lock_and_wait();
 
 #else
-
+       g_publish_cnt = 0;
+       g_publish_cnt_max = 2;
        int ocResult = OC_STACK_OK;
        ocResult = OCRDPublish(NULL, uri, (CT_ADAPTER_TCP | CT_IP_USE_V4), NULL, 0, &cb_data, OC_LOW_QOS);
        if (ocResult != OC_STACK_OK) {
@@ -922,14 +975,6 @@ int _publish_res_to_rd()
        }
        _lock_and_wait();
 #endif
-
-
-       fmwup_check_firmware_upgraded();
-
-#ifndef _USE_WWST_
-       _registerDeviceInfo();
-#endif
-
        return 0;
 }
 
@@ -949,24 +994,78 @@ static void _parse_payload(OCRepPayload *payload)
                return;
 
 #ifdef _USE_WWST_
-       char *sid, *certificate;
+       char *uid = NULL;
+       char *sid = NULL;
+       char *certificate = NULL;
+       char *redirecturi = NULL;
+       int64_t credId, expiresin;
+       char *accesstoken = NULL;
+       char *refreshtoken = NULL;
+
+       if (!OCRepPayloadGetPropString(payload, "accesstoken", &accesstoken))
+               FWR_LOGD("Can't get 'accesstoken'");
+       else
+               FWR_LOGI("accesstoken[%s]", accesstoken);
+       G_FREE(accesstoken);
+
+       if (!OCRepPayloadGetPropString(payload, "refreshtoken", &refreshtoken))
+               FWR_LOGD("Can't get 'refreshtoken'");
+       else
+               FWR_LOGI("refreshtoken[%s]", refreshtoken);
+       G_FREE(refreshtoken);
+
+       if (!OCRepPayloadGetPropInt(payload, "expiresin", &expiresin))
+               FWR_LOGD("Can't get 'expiresin'");
+       else
+               FWR_LOGI("expiresin[%lld]", expiresin);
+
+       if (!OCRepPayloadGetPropString(payload, USER_ID, &uid))
+               FWR_LOGD("Can't get 'uid'");
+       else
+               FWR_LOGI("uid[%s]", uid);
+       G_FREE(uid);
+
        if (!OCRepPayloadGetPropString(payload, "sid", &sid))
-               FWR_LOGD("Can't get 'sid'\n");
+               FWR_LOGD("Can't get 'sid'");
        else
                FWR_LOGI("sid[%s]", sid);
+       G_FREE(sid);
 
-       if (!OCRepPayloadGetPropString(payload, "certificate", &loginDetails.certificate)) {
+       if (!OCRepPayloadGetPropInt(payload, "credid", &credId)) {
+               FWR_LOGD("Can't get 'credid'");
+       } else {
+               FWR_LOGD("credId[%lld]", credId);
+       }
+
+#ifdef _USE_WWST_
+       if (!OCRepPayloadGetPropString(payload, "certificate", &certificate)) {
                FWR_LOGD("Can't get 'certificate'\n");
        } else {
-               FWR_LOGI("certificate[%s]", loginDetails.certificate);
-               loginDetails.certificateLength = strlen(loginDetails.certificate);
+               loginDetails.certificate = (uint8_t *)certificate;
+               loginDetails.certificateLength = strlen(certificate);
+               FWR_LOGI("certificate[%s] len[%d]", (char *)loginDetails.certificate, loginDetails.certificateLength);
        }
 
        if (!OCRepPayloadGetPropString(payload, "redirecturi", &loginDetails.redirecturi))
                FWR_LOGD("Can't get 'redirecturi'\n");
        else
                FWR_LOGI("redirecturi[%s]", loginDetails.redirecturi);
+#else
+       if (!OCRepPayloadGetPropString(payload, "certificate", &certificate)) {
+               FWR_LOGD("Can't get 'certificate'\n");
+       } else {
+               FWR_LOGI("certificate[%s]", certificate);
+               G_FREE(certificate);
+       }
 
+       if (!OCRepPayloadGetPropString(payload, "redirecturi", &redirecturi)) {
+               FWR_LOGD("Can't get 'redirecturi'\n");
+       } else {
+               FWR_LOGI("redirecturi[%s]", redirecturi);
+               G_FREE(redirecturi);
+       }
+
+#endif
 
 #else
        if (!OCRepPayloadGetPropString(payload, USER_ID, &loginDetails.uid))
@@ -1031,6 +1130,7 @@ static void *_send_keep_alive(void *data)
 
                        OCRepPayloadSetPropInt(keepAlivePayload, "in", (int64_t)array[i]);
                        timeout = array[i] * 60;
+                       FWR_LOGD("timeaout min[%lld] sec[%d]", (int64_t)array[i], timeout);
                        ++i;
 
                        char uri[MAX_URI_LENGTH] = { 0 };
@@ -1038,7 +1138,7 @@ static void *_send_keep_alive(void *data)
 #ifdef _USE_WWST_PRD_
                        snprintf(uri, MAX_URI_LENGTH, "%s%s", CLOUD_PROTOCOL, CLOUD_PRD_SIGN_IN_SERVER);
 #else
-                       snprintf(uri, MAX_URI_LENGTH, "%s%s", CLOUD_PROTOCOL, CLOUD_STG_SERVER);
+                       snprintf(uri, MAX_URI_LENGTH, "%s%s", CLOUD_PROTOCOL, CLOUD_STG_SIGN_IN_SERVER);
 #endif
 
                        OCCallbackData cbData = {0,};
@@ -1057,6 +1157,8 @@ static void *_send_keep_alive(void *data)
                pthread_mutex_lock(&pingcycle_mutex);
                ++timer_count;
                pthread_mutex_unlock(&pingcycle_mutex);
+
+               sleep(1);
        }
 
        return NULL;
@@ -1125,7 +1227,7 @@ void *_ping_timer(void *timer)
 #ifdef _USE_WWST_PRD_
        snprintf(uri, MAX_URI_LENGTH, "%s%s", CLOUD_PROTOCOL, CLOUD_PRD_SIGN_IN_SERVER);
 #else
-       snprintf(uri, MAX_URI_LENGTH, "%s%s", CLOUD_PROTOCOL, CLOUD_STG_SERVER);
+       snprintf(uri, MAX_URI_LENGTH, "%s%s", CLOUD_PROTOCOL, CLOUD_STG_SIGN_IN_SERVER);
 #endif
 
        OCCallbackData keepAliveCb = {0,};
@@ -1175,6 +1277,7 @@ static OCStackApplicationResult _handle_signin_response(void *ctx,
                FWR_LOGD("Sign-In Success!!!\n");
 
                if (g_auto_publish) {
+//                     sleep(1);
                        pthread_t publishThread;
                        ret = pthread_create(&publishThread, NULL, _publish_res_to_rd_thread, NULL);
                        if (ret != 0)
@@ -1215,6 +1318,7 @@ static OCStackApplicationResult _handle_signup_response(void *ctx,
        } else {
                _parse_payload((OCRepPayload*)response->payload);
                FWR_LOGD("Sign-Up OK!!!\n");
+//             sleep(1);
                _signin();
        }
 
@@ -1249,30 +1353,32 @@ int _signin()
 {
        char uri[MAX_URI_LENGTH] = { 0 };
        /* TODO : USE loginDetails.redirecturi , DNS lookup */
-#ifdef _USE_WWST_PRD_
-       loginDetails.encodingType = OIC_ENCODING_PEM;
 
        FWR_LOGI("certificate[%s]", loginDetails.certificate);
        FWR_LOGI("certificateLength[%d]", loginDetails.certificateLength);
 
+#ifdef _USE_WWST_
+       loginDetails.encodingType = OIC_ENCODING_PEM;
+       FWR_LOGI("encodingType[%d]", OIC_ENCODING_PEM);
+
        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(loginDetails.certificate);
                        return -1;
                } else {
                        FWR_LOGD("Cred ID from saveCertFile = [%d]\n", g_cred_id);
                }
        }
-       g_free(loginDetails.certificate);
+#endif
 
+#ifdef _USE_WWST_PRD_
        snprintf(uri, MAX_URI_LENGTH, "%s%s%s?rt=%s;if=%s",
                        CLOUD_PROTOCOL, CLOUD_PRD_SIGN_IN_SERVER, OC_RSRVD_ACCOUNT_SESSION_URI, CLOUD_SESSION_RES_TYPE, OC_RSRVD_INTERFACE_DEFAULT);
 #else
        snprintf(uri, MAX_URI_LENGTH, "%s%s%s?rt=%s;if=%s",
-                       CLOUD_PROTOCOL, CLOUD_STG_SERVER, OC_RSRVD_ACCOUNT_SESSION_URI, CLOUD_SESSION_RES_TYPE, OC_RSRVD_INTERFACE_DEFAULT);
+                       CLOUD_PROTOCOL, CLOUD_STG_SIGN_IN_SERVER, OC_RSRVD_ACCOUNT_SESSION_URI, CLOUD_SESSION_RES_TYPE, OC_RSRVD_INTERFACE_DEFAULT);
 #endif
        FWR_LOGD("server uri=[%s]\n", uri);
 
@@ -1335,6 +1441,7 @@ int sign_and_Publish()
 
        OCRepPayloadSetPropString(payload, AUTH_PROVIDER, CLOUD_AUTH_PROVIDER);
 #ifdef _USE_WWST_
+       FWR_LOGD("[%s] = [%s]", DEVICE_TYPE, CLOUD_DEVICE_TYPE);
        OCRepPayloadSetPropString(payload, DEVICE_TYPE, CLOUD_DEVICE_TYPE);
        OCRepPayloadSetPropString(payload, DEVICE_ID, (const char *)loginDetails.deviceId);
        OCRepPayloadSetPropString(payload, CLIENT_ID, (const char *)loginDetails.clientId);