summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhhk86.heo <hhk86.heo@samsung.com>2017-12-18 11:42:03 +0900
committerhhk86.heo <hhk86.heo@samsung.com>2017-12-18 11:45:59 +0900
commite1cbca4cb2a6f86d839dbd54240de339a64dc4a7 (patch)
treed624417408fce38c7b5b39643722c5952deb1baf
parente55f783c1b41f5b7868ef8b64f7da6f26afb1018 (diff)
downloadua-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-xCMakeLists.txt3
-rw-r--r--src/fmw_update_service_internal.c179
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);