mirror of
https://dev.iopsys.eu/bbf/icwmp.git
synced 2025-12-10 07:44:41 +01:00
uci option to use ifname in curl option
This commit is contained in:
parent
3d7ce039bd
commit
450d362cbf
11 changed files with 78 additions and 519 deletions
|
|
@ -518,15 +518,16 @@ static int set_management_server_periodic_inform_time(char *refparam, struct dmc
|
||||||
static void get_management_ip_port(char **listen_addr)
|
static void get_management_ip_port(char **listen_addr)
|
||||||
{
|
{
|
||||||
char *ip = NULL, *port = NULL, *interface = NULL, *ip_version = NULL;
|
char *ip = NULL, *port = NULL, *interface = NULL, *ip_version = NULL;
|
||||||
|
char *l3_device = NULL;
|
||||||
|
|
||||||
dmuci_get_option_value_string("cwmp", "cpe", "default_wan_interface", &interface);
|
dmuci_get_option_value_string("cwmp", "cpe", "default_wan_interface", &interface);
|
||||||
|
dmuci_get_option_value_string("cwmp", "cpe", "interface", &l3_device);
|
||||||
dmuci_get_option_value_string("cwmp", "cpe", "port", &port);
|
dmuci_get_option_value_string("cwmp", "cpe", "port", &port);
|
||||||
dmuci_get_option_value_string_varstate("icwmp", "acs", "ip_version", &ip_version);
|
dmuci_get_option_value_string_varstate("icwmp", "acs", "ip_version", &ip_version);
|
||||||
|
|
||||||
if (!DM_STRLEN(interface))
|
if (DM_STRLEN(l3_device) == 0 && DM_STRLEN(interface) != 0)
|
||||||
return;
|
l3_device = get_l3_device(interface);
|
||||||
|
|
||||||
char *l3_device = get_l3_device(interface);
|
|
||||||
if (!DM_STRLEN(l3_device))
|
if (!DM_STRLEN(l3_device))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
|
||||||
File diff suppressed because one or more lines are too long
|
|
@ -194,6 +194,20 @@
|
||||||
"default": "wan",
|
"default": "wan",
|
||||||
"description": "Configure the default wan interface that will be used for IPv4/IPv6 connection."
|
"description": "Configure the default wan interface that will be used for IPv4/IPv6 connection."
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "interface",
|
||||||
|
"type": "string",
|
||||||
|
"required": "no",
|
||||||
|
"default": "",
|
||||||
|
"description": "Use this option to define l3 device ifname directly, if this option is used default_wan_interface shall be ignored"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "use_curl_ifname",
|
||||||
|
"type": "boolean",
|
||||||
|
"required": "no",
|
||||||
|
"default": "false",
|
||||||
|
"description": "If this option is set, then cwmp shall use l3 device ifname as CURLOPT_INTERFACE"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "log_to_console",
|
"name": "log_to_console",
|
||||||
"type": "string",
|
"type": "string",
|
||||||
|
|
|
||||||
|
|
@ -931,7 +931,7 @@ static void ubus_network_interface_callback(struct ubus_request *req __attribute
|
||||||
|
|
||||||
snprintf(cwmp_main->net.interface, sizeof(cwmp_main->net.interface), "%s", l3_device);
|
snprintf(cwmp_main->net.interface, sizeof(cwmp_main->net.interface), "%s", l3_device);
|
||||||
|
|
||||||
CWMP_LOG(DEBUG, "CWMP IFACE - interface: %s && device: %s", cwmp_main->conf.default_wan_iface, cwmp_main->net.interface);
|
CWMP_LOG(DEBUG, "CWMP IFACE - interface: %s && l3_name: %s", cwmp_main->conf.default_wan_iface, cwmp_main->net.interface);
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool is_ipv6_addr_available(const char *device)
|
static bool is_ipv6_addr_available(const char *device)
|
||||||
|
|
|
||||||
|
|
@ -109,6 +109,7 @@ struct connection {
|
||||||
char interface[BUF_SIZE_16];
|
char interface[BUF_SIZE_16];
|
||||||
long ip_resolve;
|
long ip_resolve;
|
||||||
bool ipv6_status;
|
bool ipv6_status;
|
||||||
|
bool use_curl_ifname;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct config {
|
typedef struct config {
|
||||||
|
|
@ -638,7 +639,7 @@ bool file_exists(const char *path);
|
||||||
void cwmp_reboot(char *command_key);
|
void cwmp_reboot(char *command_key);
|
||||||
void cwmp_factory_reset();
|
void cwmp_factory_reset();
|
||||||
void get_firewall_zone_name_by_wan_iface(char *if_wan, char **zone_name);
|
void get_firewall_zone_name_by_wan_iface(char *if_wan, char **zone_name);
|
||||||
int download_file(const char *file_path, const char *url, const char *username, const char *password);
|
int download_file(const char *file_path, const char *url, const char *username, const char *password, const char *interface);
|
||||||
unsigned int get_file_size(char *file_name);
|
unsigned int get_file_size(char *file_name);
|
||||||
int cwmp_check_image();
|
int cwmp_check_image();
|
||||||
int cwmp_apply_firmware();
|
int cwmp_apply_firmware();
|
||||||
|
|
|
||||||
|
|
@ -75,7 +75,7 @@ int icwmp_check_http_connection(void)
|
||||||
curl_easy_setopt(c, CURLOPT_IPRESOLVE, resolve);
|
curl_easy_setopt(c, CURLOPT_IPRESOLVE, resolve);
|
||||||
curl_easy_setopt(c, CURLOPT_TIMEOUT, 2);
|
curl_easy_setopt(c, CURLOPT_TIMEOUT, 2);
|
||||||
|
|
||||||
if (CWMP_STRLEN(cwmp_main->net.interface))
|
if (cwmp_main->net.use_curl_ifname && CWMP_STRLEN(cwmp_main->net.interface))
|
||||||
curl_easy_setopt(c, CURLOPT_INTERFACE, cwmp_main->net.interface);
|
curl_easy_setopt(c, CURLOPT_INTERFACE, cwmp_main->net.interface);
|
||||||
|
|
||||||
ret = curl_easy_perform(c);
|
ret = curl_easy_perform(c);
|
||||||
|
|
|
||||||
|
|
@ -35,7 +35,7 @@ int count_download_queue = 0;
|
||||||
/*
|
/*
|
||||||
* Download File
|
* Download File
|
||||||
*/
|
*/
|
||||||
int download_file(const char *file_path, const char *url, const char *username, const char *password)
|
int download_file(const char *file_path, const char *url, const char *username, const char *password, const char *interface)
|
||||||
{
|
{
|
||||||
if (url == NULL) {
|
if (url == NULL) {
|
||||||
CWMP_LOG(ERROR, "download %s: no url specified", __FUNCTION__);
|
CWMP_LOG(ERROR, "download %s: no url specified", __FUNCTION__);
|
||||||
|
|
@ -59,6 +59,11 @@ int download_file(const char *file_path, const char *url, const char *username,
|
||||||
curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT_MS, 10000L);
|
curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT_MS, 10000L);
|
||||||
curl_easy_setopt(curl, CURLOPT_TCP_KEEPALIVE, 1L);
|
curl_easy_setopt(curl, CURLOPT_TCP_KEEPALIVE, 1L);
|
||||||
curl_easy_setopt(curl, CURLOPT_FTP_SKIP_PASV_IP, 1L);
|
curl_easy_setopt(curl, CURLOPT_FTP_SKIP_PASV_IP, 1L);
|
||||||
|
|
||||||
|
// Use l3 interface name
|
||||||
|
if (CWMP_STRLEN(interface))
|
||||||
|
curl_easy_setopt(curl, CURLOPT_INTERFACE, interface);
|
||||||
|
|
||||||
if (file_path == NULL)
|
if (file_path == NULL)
|
||||||
file_path = "/tmp/download_file";
|
file_path = "/tmp/download_file";
|
||||||
FILE *fp = fopen(file_path, "wb");
|
FILE *fp = fopen(file_path, "wb");
|
||||||
|
|
@ -90,10 +95,10 @@ char *download_file_task_function(char *task)
|
||||||
blob_buf_free(&bbuf);
|
blob_buf_free(&bbuf);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
const struct blobmsg_policy p[5] = { { "task", BLOBMSG_TYPE_STRING }, { "file_path", BLOBMSG_TYPE_STRING }, { "url", BLOBMSG_TYPE_STRING }, { "username", BLOBMSG_TYPE_STRING }, { "password", BLOBMSG_TYPE_STRING } };
|
const struct blobmsg_policy p[6] = { { "task", BLOBMSG_TYPE_STRING }, { "file_path", BLOBMSG_TYPE_STRING }, { "url", BLOBMSG_TYPE_STRING }, { "username", BLOBMSG_TYPE_STRING }, { "password", BLOBMSG_TYPE_STRING }, {"interface", BLOBMSG_TYPE_STRING} };
|
||||||
|
|
||||||
struct blob_attr *tb[5] = { NULL, NULL, NULL, NULL, NULL};
|
struct blob_attr *tb[6] = { NULL, NULL, NULL, NULL, NULL};
|
||||||
blobmsg_parse(p, 5, tb, blobmsg_data(bbuf.head), blobmsg_len(bbuf.head));
|
blobmsg_parse(p, 6, tb, blobmsg_data(bbuf.head), blobmsg_len(bbuf.head));
|
||||||
char *task_name = blobmsg_get_string(tb[0]);
|
char *task_name = blobmsg_get_string(tb[0]);
|
||||||
if (CWMP_STRCMP(task_name, "download") != 0)
|
if (CWMP_STRCMP(task_name, "download") != 0)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
@ -101,8 +106,9 @@ char *download_file_task_function(char *task)
|
||||||
char *url = blobmsg_get_string(tb[2]);
|
char *url = blobmsg_get_string(tb[2]);
|
||||||
char *username = blobmsg_get_string(tb[3]);
|
char *username = blobmsg_get_string(tb[3]);
|
||||||
char *password = blobmsg_get_string(tb[4]);
|
char *password = blobmsg_get_string(tb[4]);
|
||||||
|
char *interface = blobmsg_get_string(tb[5]);
|
||||||
|
|
||||||
int http_code = download_file(file_path, url, username, password);
|
int http_code = download_file(file_path, url, username, password, interface);
|
||||||
char *http_ret = (char *)malloc(4 * sizeof(char));
|
char *http_ret = (char *)malloc(4 * sizeof(char));
|
||||||
snprintf(http_ret, 4, "%d", http_code);
|
snprintf(http_ret, 4, "%d", http_code);
|
||||||
http_ret[3] = 0;
|
http_ret[3] = 0;
|
||||||
|
|
@ -129,6 +135,10 @@ int download_file_in_subprocess(const char *file_path, const char *url, const ch
|
||||||
blobmsg_add_string(&bbuf, "url", url ? url : "");
|
blobmsg_add_string(&bbuf, "url", url ? url : "");
|
||||||
blobmsg_add_string(&bbuf, "username", username ? username : "");
|
blobmsg_add_string(&bbuf, "username", username ? username : "");
|
||||||
blobmsg_add_string(&bbuf, "password", password ? password : "");
|
blobmsg_add_string(&bbuf, "password", password ? password : "");
|
||||||
|
|
||||||
|
if (cwmp_main->net.use_curl_ifname && CWMP_STRLEN(cwmp_main->net.interface))
|
||||||
|
blobmsg_add_string(&bbuf, "interface", cwmp_main->net.interface);
|
||||||
|
|
||||||
char *download_task = blobmsg_format_json(bbuf.head, true);
|
char *download_task = blobmsg_format_json(bbuf.head, true);
|
||||||
blob_buf_free(&bbuf);
|
blob_buf_free(&bbuf);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -133,7 +133,7 @@ static void http_set_connection_options()
|
||||||
curl_easy_setopt(curl, CURLOPT_IPRESOLVE, cwmp_main->net.ip_resolve);
|
curl_easy_setopt(curl, CURLOPT_IPRESOLVE, cwmp_main->net.ip_resolve);
|
||||||
|
|
||||||
|
|
||||||
if (CWMP_STRLEN(cwmp_main->net.interface))
|
if (cwmp_main->net.use_curl_ifname && CWMP_STRLEN(cwmp_main->net.interface))
|
||||||
curl_easy_setopt(curl, CURLOPT_INTERFACE, cwmp_main->net.interface);
|
curl_easy_setopt(curl, CURLOPT_INTERFACE, cwmp_main->net.interface);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -238,8 +238,10 @@ static void config_get_cpe_elements(struct uci_section *s)
|
||||||
UCI_CPE_FORCE_IPV4,
|
UCI_CPE_FORCE_IPV4,
|
||||||
UCI_CPE_KEEP_SETTINGS,
|
UCI_CPE_KEEP_SETTINGS,
|
||||||
UCI_CPE_DEFAULT_WAN_IFACE,
|
UCI_CPE_DEFAULT_WAN_IFACE,
|
||||||
|
UCI_CPE_INTERFACE,
|
||||||
UCI_CPE_CLOCK_SYNC_TIMEOUT,
|
UCI_CPE_CLOCK_SYNC_TIMEOUT,
|
||||||
UCI_CPE_ENABLE,
|
UCI_CPE_ENABLE,
|
||||||
|
UCI_CPE_USE_CURL_IFNAME,
|
||||||
__MAX_NUM_UCI_CPE_ATTRS,
|
__MAX_NUM_UCI_CPE_ATTRS,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -262,8 +264,10 @@ static void config_get_cpe_elements(struct uci_section *s)
|
||||||
[UCI_CPE_FORCE_IPV4] = { .name = "force_ipv4", .type = UCI_TYPE_STRING },
|
[UCI_CPE_FORCE_IPV4] = { .name = "force_ipv4", .type = UCI_TYPE_STRING },
|
||||||
[UCI_CPE_KEEP_SETTINGS] = { .name = "fw_upgrade_keep_settings", .type = UCI_TYPE_STRING },
|
[UCI_CPE_KEEP_SETTINGS] = { .name = "fw_upgrade_keep_settings", .type = UCI_TYPE_STRING },
|
||||||
[UCI_CPE_DEFAULT_WAN_IFACE] = { .name = "default_wan_interface", .type = UCI_TYPE_STRING },
|
[UCI_CPE_DEFAULT_WAN_IFACE] = { .name = "default_wan_interface", .type = UCI_TYPE_STRING },
|
||||||
|
[UCI_CPE_INTERFACE] = { .name = "interface", .type = UCI_TYPE_STRING },
|
||||||
[UCI_CPE_CLOCK_SYNC_TIMEOUT] = { .name = "clock_sync_timeout", .type = UCI_TYPE_STRING },
|
[UCI_CPE_CLOCK_SYNC_TIMEOUT] = { .name = "clock_sync_timeout", .type = UCI_TYPE_STRING },
|
||||||
[UCI_CPE_ENABLE] = { .name = "enable", .type = UCI_TYPE_STRING }
|
[UCI_CPE_ENABLE] = { .name = "enable", .type = UCI_TYPE_STRING },
|
||||||
|
[UCI_CPE_USE_CURL_IFNAME] = { .name = "use_curl_ifname", .type = UCI_TYPE_STRING }
|
||||||
};
|
};
|
||||||
|
|
||||||
struct uci_option *cpe_tb[__MAX_NUM_UCI_CPE_ATTRS];
|
struct uci_option *cpe_tb[__MAX_NUM_UCI_CPE_ATTRS];
|
||||||
|
|
@ -373,15 +377,23 @@ static void config_get_cpe_elements(struct uci_section *s)
|
||||||
cwmp_main->conf.fw_upgrade_keep_settings = cpe_tb[UCI_CPE_KEEP_SETTINGS] ? str_to_bool(get_value_from_uci_option(cpe_tb[UCI_CPE_KEEP_SETTINGS])) : true;
|
cwmp_main->conf.fw_upgrade_keep_settings = cpe_tb[UCI_CPE_KEEP_SETTINGS] ? str_to_bool(get_value_from_uci_option(cpe_tb[UCI_CPE_KEEP_SETTINGS])) : true;
|
||||||
CWMP_LOG(DEBUG, "CWMP CONFIG - cpe keep settings enable: %d", cwmp_main->conf.fw_upgrade_keep_settings);
|
CWMP_LOG(DEBUG, "CWMP CONFIG - cpe keep settings enable: %d", cwmp_main->conf.fw_upgrade_keep_settings);
|
||||||
|
|
||||||
char *value = get_value_from_uci_option(cpe_tb[UCI_CPE_DEFAULT_WAN_IFACE]);
|
char *value = get_value_from_uci_option(cpe_tb[UCI_CPE_INTERFACE]);
|
||||||
|
if ((CWMP_STRLEN(cwmp_main->net.interface) == 0) && (CWMP_STRLEN(value) != 0)) {
|
||||||
|
snprintf(cwmp_main->net.interface, sizeof(cwmp_main->net.interface), "%s", value);
|
||||||
|
}
|
||||||
|
CWMP_LOG(DEBUG, "CWMP CONFIG - cpe INTERFACE resolved[%s], defined [%s]", cwmp_main->net.interface, value);
|
||||||
|
|
||||||
|
value = get_value_from_uci_option(cpe_tb[UCI_CPE_DEFAULT_WAN_IFACE]);
|
||||||
char *wan_intf = CWMP_STRLEN(value) ? value : "wan";
|
char *wan_intf = CWMP_STRLEN(value) ? value : "wan";
|
||||||
|
|
||||||
if (strcmp(cwmp_main->conf.default_wan_iface, wan_intf) != 0) {
|
if (strcmp(cwmp_main->conf.default_wan_iface, wan_intf) != 0) {
|
||||||
snprintf(cwmp_main->conf.default_wan_iface, sizeof(cwmp_main->conf.default_wan_iface), "%s", wan_intf);
|
snprintf(cwmp_main->conf.default_wan_iface, sizeof(cwmp_main->conf.default_wan_iface), "%s", wan_intf);
|
||||||
memset(cwmp_main->net.interface, 0, sizeof(cwmp_main->net.interface));
|
|
||||||
}
|
}
|
||||||
CWMP_LOG(DEBUG, "CWMP CONFIG - cpe default_wan_interface: %s", cwmp_main->conf.default_wan_iface);
|
CWMP_LOG(DEBUG, "CWMP CONFIG - cpe default_wan_interface: %s", cwmp_main->conf.default_wan_iface);
|
||||||
|
|
||||||
|
cwmp_main->net.use_curl_ifname = str_to_bool(get_value_from_uci_option(cpe_tb[UCI_CPE_USE_CURL_IFNAME]));
|
||||||
|
CWMP_LOG(DEBUG, "CWMP CONFIG - cpe use ifname in curl: %d", cwmp_main->net.use_curl_ifname);
|
||||||
|
|
||||||
cwmp_main->conf.clock_sync_timeout = DEFAULT_SYNC_TIMEOUT;
|
cwmp_main->conf.clock_sync_timeout = DEFAULT_SYNC_TIMEOUT;
|
||||||
char *sync_time = get_value_from_uci_option(cpe_tb[UCI_CPE_CLOCK_SYNC_TIMEOUT]);
|
char *sync_time = get_value_from_uci_option(cpe_tb[UCI_CPE_CLOCK_SYNC_TIMEOUT]);
|
||||||
if (CWMP_STRLEN(sync_time) != 0) {
|
if (CWMP_STRLEN(sync_time) != 0) {
|
||||||
|
|
|
||||||
19
src/upload.c
19
src/upload.c
|
|
@ -67,7 +67,7 @@ static int lookup_vlf_name(int instance, char **value)
|
||||||
/*
|
/*
|
||||||
* Upload file
|
* Upload file
|
||||||
*/
|
*/
|
||||||
static long upload_file(const char *file_path, const char *url, const char *username, const char *password)
|
static long upload_file(const char *file_path, const char *url, const char *username, const char *password, const char *interface)
|
||||||
{
|
{
|
||||||
long res_code = 0;
|
long res_code = 0;
|
||||||
CURL *curl;
|
CURL *curl;
|
||||||
|
|
@ -123,6 +123,10 @@ static long upload_file(const char *file_path, const char *url, const char *user
|
||||||
curl_easy_setopt(curl, CURLOPT_READDATA, fd_upload);
|
curl_easy_setopt(curl, CURLOPT_READDATA, fd_upload);
|
||||||
curl_easy_setopt(curl, CURLOPT_INFILESIZE_LARGE, (curl_off_t)file_info.st_size);
|
curl_easy_setopt(curl, CURLOPT_INFILESIZE_LARGE, (curl_off_t)file_info.st_size);
|
||||||
|
|
||||||
|
// Use l3 interface name
|
||||||
|
if (CWMP_STRLEN(interface))
|
||||||
|
curl_easy_setopt(curl, CURLOPT_INTERFACE, interface);
|
||||||
|
|
||||||
res = curl_easy_perform(curl);
|
res = curl_easy_perform(curl);
|
||||||
if (res != CURLE_OK) {
|
if (res != CURLE_OK) {
|
||||||
CWMP_LOG(ERROR, "## curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
|
CWMP_LOG(ERROR, "## curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
|
||||||
|
|
@ -153,10 +157,10 @@ char *upload_file_task_function(char *task)
|
||||||
blob_buf_free(&bbuf);
|
blob_buf_free(&bbuf);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
const struct blobmsg_policy p[5] = { { "task", BLOBMSG_TYPE_STRING }, { "file_path", BLOBMSG_TYPE_STRING }, { "url", BLOBMSG_TYPE_STRING }, { "username", BLOBMSG_TYPE_STRING }, { "password", BLOBMSG_TYPE_STRING } };
|
const struct blobmsg_policy p[6] = { { "task", BLOBMSG_TYPE_STRING }, { "file_path", BLOBMSG_TYPE_STRING }, { "url", BLOBMSG_TYPE_STRING }, { "username", BLOBMSG_TYPE_STRING }, { "password", BLOBMSG_TYPE_STRING }, {"interface", BLOBMSG_TYPE_STRING}};
|
||||||
|
|
||||||
struct blob_attr *tb[5] = { NULL, NULL, NULL, NULL, NULL};
|
struct blob_attr *tb[6] = { NULL, NULL, NULL, NULL, NULL};
|
||||||
blobmsg_parse(p, 5, tb, blobmsg_data(bbuf.head), blobmsg_len(bbuf.head));
|
blobmsg_parse(p, 6, tb, blobmsg_data(bbuf.head), blobmsg_len(bbuf.head));
|
||||||
char *task_name = blobmsg_get_string(tb[0]);
|
char *task_name = blobmsg_get_string(tb[0]);
|
||||||
if (CWMP_STRCMP(task_name, "upload") != 0)
|
if (CWMP_STRCMP(task_name, "upload") != 0)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
@ -164,8 +168,9 @@ char *upload_file_task_function(char *task)
|
||||||
char *url = blobmsg_get_string(tb[2]);
|
char *url = blobmsg_get_string(tb[2]);
|
||||||
char *username = blobmsg_get_string(tb[3]);
|
char *username = blobmsg_get_string(tb[3]);
|
||||||
char *password = blobmsg_get_string(tb[4]);
|
char *password = blobmsg_get_string(tb[4]);
|
||||||
|
char *interface = blobmsg_get_string(tb[5]);
|
||||||
|
|
||||||
long http_code = upload_file(file_path, url, username, password);
|
long http_code = upload_file(file_path, url, username, password, interface);
|
||||||
char *http_ret = (char *)malloc(16 * sizeof(char));
|
char *http_ret = (char *)malloc(16 * sizeof(char));
|
||||||
if (http_ret == NULL)
|
if (http_ret == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
@ -191,6 +196,10 @@ int upload_file_in_subprocess(const char *file_path, const char *url, const char
|
||||||
blobmsg_add_string(&bbuf, "url", url);
|
blobmsg_add_string(&bbuf, "url", url);
|
||||||
blobmsg_add_string(&bbuf, "username", username);
|
blobmsg_add_string(&bbuf, "username", username);
|
||||||
blobmsg_add_string(&bbuf, "password", password);
|
blobmsg_add_string(&bbuf, "password", password);
|
||||||
|
|
||||||
|
if (cwmp_main->net.use_curl_ifname && CWMP_STRLEN(cwmp_main->net.interface))
|
||||||
|
blobmsg_add_string(&bbuf, "interface", cwmp_main->net.interface);
|
||||||
|
|
||||||
char *upload_task = blobmsg_format_json(bbuf.head, true);
|
char *upload_task = blobmsg_format_json(bbuf.head, true);
|
||||||
blob_buf_free(&bbuf);
|
blob_buf_free(&bbuf);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -46,6 +46,12 @@ static void free_download(struct download *p)
|
||||||
icwmp_free(p);
|
icwmp_free(p);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int download_unit_test_init(void **state)
|
||||||
|
{
|
||||||
|
cwmp_main = (struct cwmp*)calloc(1, sizeof(struct cwmp));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int download_unit_tests_clean(void **state)
|
static int download_unit_tests_clean(void **state)
|
||||||
{
|
{
|
||||||
icwmp_cleanmem();
|
icwmp_cleanmem();
|
||||||
|
|
@ -53,6 +59,7 @@ static int download_unit_tests_clean(void **state)
|
||||||
free_transfer_complete(transfer_complete_test);
|
free_transfer_complete(transfer_complete_test);
|
||||||
remove(ICWMP_DOWNLOAD_FILE);
|
remove(ICWMP_DOWNLOAD_FILE);
|
||||||
remove(FIRMWARE_UPGRADE_IMAGE);
|
remove(FIRMWARE_UPGRADE_IMAGE);
|
||||||
|
FREE(cwmp_main);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -62,7 +69,7 @@ static void cwmp_download_file_unit_test(void **state)
|
||||||
/*
|
/*
|
||||||
* Valid URL
|
* Valid URL
|
||||||
*/
|
*/
|
||||||
int http_code = download_file(ICWMP_DOWNLOAD_FILE, "http://127.0.0.1/firmware_v1.0.bin", NULL, NULL);
|
int http_code = download_file(ICWMP_DOWNLOAD_FILE, "http://127.0.0.1/firmware_v1.0.bin", NULL, NULL, NULL);
|
||||||
assert_int_equal(http_code, 200);
|
assert_int_equal(http_code, 200);
|
||||||
assert_int_equal(access( ICWMP_DOWNLOAD_FILE, F_OK ), 0);
|
assert_int_equal(access( ICWMP_DOWNLOAD_FILE, F_OK ), 0);
|
||||||
remove(ICWMP_DOWNLOAD_FILE);
|
remove(ICWMP_DOWNLOAD_FILE);
|
||||||
|
|
@ -70,7 +77,7 @@ static void cwmp_download_file_unit_test(void **state)
|
||||||
/*
|
/*
|
||||||
* Not Valid URL
|
* Not Valid URL
|
||||||
*/
|
*/
|
||||||
http_code = download_file(ICWMP_DOWNLOAD_FILE, "http://127.0.0.1/firmware.bin", NULL, NULL);
|
http_code = download_file(ICWMP_DOWNLOAD_FILE, "http://127.0.0.1/firmware.bin", NULL, NULL, NULL);
|
||||||
assert_int_equal(http_code, 404);
|
assert_int_equal(http_code, 404);
|
||||||
assert_int_equal(access( ICWMP_DOWNLOAD_FILE, F_OK ), 0);
|
assert_int_equal(access( ICWMP_DOWNLOAD_FILE, F_OK ), 0);
|
||||||
remove(ICWMP_DOWNLOAD_FILE);
|
remove(ICWMP_DOWNLOAD_FILE);
|
||||||
|
|
@ -188,5 +195,5 @@ int icwmp_download_unit_test(void)
|
||||||
cmocka_unit_test(cwmp_launch_download_unit_test)
|
cmocka_unit_test(cwmp_launch_download_unit_test)
|
||||||
};
|
};
|
||||||
|
|
||||||
return cmocka_run_group_tests(tests, NULL, download_unit_tests_clean);
|
return cmocka_run_group_tests(tests, download_unit_test_init, download_unit_tests_clean);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue