char **res_body,
void *user_data)
{
+ FWR_ENTER
CURLcode curl_ret_code;
long response = 0;
curl_ret_code = curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &response);
- if (CURLE_OK != curl_ret_code)
+ if (CURLE_OK != curl_ret_code) {
+ FWR_LOGE("curl_easy_perform(): [%s][%d]", curl_easy_strerror(curl_ret_code), curl_ret_code);
return;
+ }
char *tmp_header = g_strndup((const gchar *)response_header->data, response_header->len);
char *tmp_body = g_strndup((const gchar *)response_body->data, response_body->len);
*res_header = tmp_header;
*res_body = tmp_body;
+ FWR_EXIT
}
int fmwup_http_send_request(fmwup_http_req_e type, char *req_url, char **res_header, char **res_body)
{
- //LOG("Enter http_send_request()");
+ FWR_ENTER
CURL *curl;
GByteArray *response_header = NULL;
//LOG("Start curl_easy_perform......");
error_code = curl_easy_perform(curl);
- //LOG("curl_easy_perform(curl): %s (%d)", curl_easy_strerror(error_code), error_code);
+ FWR_LOGI("curl_easy_perform(): [%s][%d]", curl_easy_strerror(error_code), error_code);
if (error_code == CURLE_ABORTED_BY_CALLBACK) {
ret = -1;
_curl_set_response(curl, response_header, response_body, res_header, res_body, NULL);
_END_OF_FUNC_:
+
if (response_header) {
g_byte_array_free(response_header, TRUE);
}
}
curl_easy_cleanup(curl);
+ FWR_EXIT
return ret;
}
int fmwup_http_download_file(const char *download_url, const char *download_path)
{
- //LOG("http_download_file() enter");
-
- if (!download_url)
- return -1;
-
- int ret = 0;
- CURL *curl;
- FILE *fp;
- CURLcode error_code;
-
- curl = curl_easy_init();
- if (curl)
- {
- fp = fopen(download_path, "wb");
- curl_easy_setopt(curl, CURLOPT_URL, download_url);
- curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, NULL);
- curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);
- error_code = curl_easy_perform(curl);
- //LOG("curl_easy_perform() [%d]", error_code);
- curl_easy_cleanup(curl);
- fclose(fp);
-
- if (error_code != CURLE_OK) {
- remove(download_path);
- ret = -1;
- }
- } else {
- ret = -1;
- }
-
- return ret;
+ FWR_ENTER
+
+ if (!download_url || !download_path) {
+ FWR_LOGE("Invalid parameter");
+ return -1;
+ }
+
+ int ret = 0;
+ CURL *curl;
+ FILE *fp;
+ CURLcode error_code;
+
+ curl = curl_easy_init();
+ if (curl)
+ {
+ fp = fopen(download_path, "wb");
+ curl_easy_setopt(curl, CURLOPT_URL, download_url);
+ curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, NULL);
+ curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);
+ error_code = curl_easy_perform(curl);
+ FWR_LOGI("curl_easy_perform() [%s][%d]", curl_easy_strerror(error_code), error_code);
+ curl_easy_cleanup(curl);
+ fclose(fp);
+
+ if (error_code != CURLE_OK) {
+ remove(download_path);
+ ret = -1;
+ }
+ } else {
+ ret = -1;
+ }
+
+ FWR_EXIT
+ return ret;
}
#include <app_common.h>
#include <fmwup_resource_internal.h>
-
extern fmwup_s* g_firmware_resource;
extern char *g_download_path;
extern state_changed_cb g_state_changed_cb;
#define UPDATE_FILE "/opt/usr/data/fota/tota_init"
+#define FIRMWARE_FILE_NAME "fmwup.zip"
+
+#ifdef _USE_WWST_
+#define REST_API_DOWNLOAD_URL "/api/v1/firmwares/downloadUrl/"
+#define CURRENT_VERSION "?currentVersion="
+#define TOKEN "&token="
+#define TOKEN_KEY_TEMP "ZjExNGM1MGUtMWE5YS00NDJiLWE2ZGItNmUzZGM0Y2I4MGE4LnppcA=="
+#endif
char *g_app_data_path = NULL;
+bool _parse_secure_url(char *json, char **url_value)
+{
+ if (!json && *json != '{' && *(json+1) != '\"') {
+
+ return false;
+ }
+
+ char *ret_str;
+ ret_str = strtok(json,"{\"");
+
+ if (ret_str == NULL && g_strcmp0(ret_str, "url") != 0) {
+ FWR_LOGE("Invalid json [url]");
+ return false;
+ }
+
+ ret_str = strtok(NULL,"\"");
+ if (ret_str == NULL && g_strcmp0(ret_str, ":") != 0) {
+ FWR_LOGE("Invalid delimeter [:]");
+ return false;
+ }
+
+ ret_str = strtok(NULL,"\"");
+ if (ret_str == NULL)
+ return false;
+
+ *url_value = g_strdup(ret_str);
+
+ return true;
+}
+
bool _compare_resource_interface(char *from, char *iface)
{
char *str = g_strdup(from);
void _handle_update_command(int64_t update_type)
{
+ int result = 0;
+
if (g_strcmp0(g_firmware_resource->package_uri, "") && (
(g_firmware_resource->state == 0 && update_type == FMWUP_EXEC_DOWNLOAD) ||
(g_firmware_resource->state == 0 && update_type == FMWUP_EXEC_DOWNLOAD_AND_UPGRADE))) {
g_state_changed_cb(g_firmware_resource->state);
}
+#ifdef _USE_WWST_
+ //int fmwup_http_send_request(fmwup_http_req_e type, char *req_url, char **res_header, char **res_body)
+ char *res_header = NULL;
+ char *res_body = NULL;
+ char *request_uri = g_strconcat(g_firmware_resource->package_uri, REST_API_DOWNLOAD_URL, CURRENT_VERSION,
+ g_firmware_resource->current_version, TOKEN, TOKEN_KEY_TEMP, NULL);
+
+ FWR_LOGI("request_uri[%s]", request_uri);
+
+ if (fmwup_http_send_request(FMWUP_HTTP_GET, request_uri, &res_header, &res_body) != 0) {
+ FWR_LOGE("cannot get Secure URL");
+ } else {
+ //parsing
+ FWR_LOGI("res_header[%s] res_body[%s]",res_header, res_body);
+
+ char *sec_download_url = NULL;
+ if (_parse_secure_url(res_body, &sec_download_url)) {
+
+ char *download_path = g_strconcat(g_download_path, FIRMWARE_FILE_NAME, NULL);
+ FWR_LOGI("download url[%s] download path[%s]",sec_download_url, download_path);
+
+ if (fmwup_http_download_file(sec_download_url, (const char *)download_path) != 0) {
+ g_firmware_resource->state = FMWUP_STATE_IDLE;
+ vconf_set_int(VCONF_FIRMWARE_UPDATE_STATE, g_firmware_resource->state);
+ g_firmware_resource->result = 6;
+ vconf_set_int(VCONF_FIRMWARE_UPDATE_RESULT, g_firmware_resource->result);
+
+ fmwup_propagate_firmware_resource();
+ if (g_state_changed_cb) {
+ g_state_changed_cb(g_firmware_resource->state);
+ }
+
+ g_free(download_path);
+ return;
+ }
+
+ g_free(download_path);
+ g_free(sec_download_url);
+ } else {
+ FWR_LOGE("_parse_secure_url failed");
+ }
+ }
+
+ g_free(request_uri);
+
+#else
if (fmwup_http_download_file(g_firmware_resource->package_uri, (const char *)g_download_path) != 0) {
g_firmware_resource->state = FMWUP_STATE_IDLE;
vconf_set_int(VCONF_FIRMWARE_UPDATE_STATE, g_firmware_resource->state);
}
return;
}
+#endif
FWR_LOGD("*** Firmware image downloaded ***");
g_firmware_resource->state = FMWUP_STATE_DOWNLOADED;
}
g_free(new_firmware);
FWR_LOGD("g_firmware_resource->new_version = [%s]", g_firmware_resource->new_version);
- }
- char *package_uri = NULL;
- if (OCRepPayloadGetPropString(input, OC_RSRVD_FIRMWARE_PACKAGE_URI, &package_uri)) {
- if (g_strcmp0(package_uri, g_firmware_resource->package_uri)) {
- g_free(g_firmware_resource->package_uri);
- g_firmware_resource->package_uri = g_strdup(new_firmware);
- vconf_set_str(VCONF_FIRMWARE_UPDATE_PACKAGE_URL, new_firmware);
+ char *package_uri = NULL;
+ if (OCRepPayloadGetPropString(input, OC_RSRVD_FIRMWARE_PACKAGE_URI, &package_uri)) {
+ FWR_LOGD("g_firmware_resource->package_uri = [%s]", package_uri);
+ if (g_strcmp0(package_uri, g_firmware_resource->package_uri)) {
+ g_free(g_firmware_resource->package_uri);
+ g_firmware_resource->package_uri = g_strdup(package_uri);
+ vconf_set_str(VCONF_FIRMWARE_UPDATE_PACKAGE_URL, package_uri);
+ }
+ g_free(package_uri);
+ FWR_LOGD("g_firmware_resource->package_uri = [%s]", g_firmware_resource->package_uri);
+ } else {
+ FWR_LOGE("package uri none");
}
- g_free(package_uri);
- FWR_LOGD("g_firmware_resource->package_uri = [%s]", g_firmware_resource->package_uri);
}
int64_t package_size;
g_firmware_resource->package_md5 = g_strdup(package_md5);
vconf_set_str(VCONF_FIRMWARE_UPDATE_PACKAGE_MD5, package_md5);
}
- g_free(package_uri);
+ g_free(package_md5);
FWR_LOGD("g_firmware_resource->package_md5 = [%s]", g_firmware_resource->package_md5);
}