diff options
author | hhk86.heo <hhk86.heo@samsung.com> | 2017-12-18 11:42:03 +0900 |
---|---|---|
committer | hhk86.heo <hhk86.heo@samsung.com> | 2017-12-18 11:45:59 +0900 |
commit | e1cbca4cb2a6f86d839dbd54240de339a64dc4a7 (patch) | |
tree | d624417408fce38c7b5b39643722c5952deb1baf | |
parent | e55f783c1b41f5b7868ef8b64f7da6f26afb1018 (diff) | |
download | ua-client-devel/update_service.tar.gz ua-client-devel/update_service.tar.bz2 ua-client-devel/update_service.zip |
Modify server to STG WWSTdevel/update_service
Change-Id: I9ec0449b2558df4ba0046a96c5ecd17f1602dcf2
-rwxr-xr-x | CMakeLists.txt | 3 | ||||
-rw-r--r-- | src/fmw_update_service_internal.c | 179 |
2 files changed, 145 insertions, 37 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index e63dbea..0dd34b8 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -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 diff --git a/src/fmw_update_service_internal.c b/src/fmw_update_service_internal.c index 7f7a9aa..8ce080a 100644 --- a/src/fmw_update_service_internal.c +++ b/src/fmw_update_service_internal.c @@ -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); |