#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"
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)
bool bSignin;
bool isExit;
uint16_t g_cred_id = 0;
-CloudLoginInfo loginDetails;
char *g_app_data_path = NULL;
char *g_fmwup_dat_file = NULL;
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()
{
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;
#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;
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;
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)
{
pthread_mutex_lock(&pingcycle_mutex);
++timer_count;
pthread_mutex_unlock(&pingcycle_mutex);
- sleep(1);
}
return NULL;
#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)
return OC_STACK_DELETE_TRANSACTION;
}
+ int ret = 0;
+
if (response->payload) {
FWR_LOGD("Payload received\n");
}
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_
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
} else {
_parse_payload((OCRepPayload*)response->payload);
FWR_LOGD("Sign-Up OK!!!\n");
- sleep(1);
_signin();
}
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",