remove task_push_http_transfer_raw, encode before sending data to the task
This commit is contained in:
parent
9721c7c4be
commit
c52fdc469f
|
@ -1906,7 +1906,7 @@ static void cheevos_unlocked(void *task_data, void *user_data,
|
||||||
RARCH_ERR("[CHEEVOS]: error awarding achievement %u, retrying...\n", cheevo->id);
|
RARCH_ERR("[CHEEVOS]: error awarding achievement %u, retrying...\n", cheevo->id);
|
||||||
|
|
||||||
cheevos_make_unlock_url(cheevo, url, sizeof(url));
|
cheevos_make_unlock_url(cheevo, url, sizeof(url));
|
||||||
task_push_http_transfer_raw(url, true, NULL, cheevos_unlocked, cheevo);
|
task_push_http_transfer(url, true, NULL, cheevos_unlocked, cheevo);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1961,7 +1961,7 @@ static void cheevos_test_cheevo_set(const cheevoset_t *set)
|
||||||
runloop_msg_queue_push(cheevo->description, 0, 3 * 60, false);
|
runloop_msg_queue_push(cheevo->description, 0, 3 * 60, false);
|
||||||
|
|
||||||
cheevos_make_unlock_url(cheevo, url, sizeof(url));
|
cheevos_make_unlock_url(cheevo, url, sizeof(url));
|
||||||
task_push_http_transfer_raw(url, true, NULL,
|
task_push_http_transfer(url, true, NULL,
|
||||||
cheevos_unlocked, cheevo);
|
cheevos_unlocked, cheevo);
|
||||||
|
|
||||||
if(settings->bools.cheevos_auto_screenshot)
|
if(settings->bools.cheevos_auto_screenshot)
|
||||||
|
@ -2176,7 +2176,7 @@ static void cheevos_test_leaderboards(void)
|
||||||
char formatted_value[16];
|
char formatted_value[16];
|
||||||
|
|
||||||
cheevos_make_lboard_url(lboard, url, sizeof(url));
|
cheevos_make_lboard_url(lboard, url, sizeof(url));
|
||||||
task_push_http_transfer_raw(url, true, NULL,
|
task_push_http_transfer(url, true, NULL,
|
||||||
cheevos_lboard_submit, lboard);
|
cheevos_lboard_submit, lboard);
|
||||||
RARCH_LOG("[CHEEVOS]: submit lboard %s\n", lboard->title);
|
RARCH_LOG("[CHEEVOS]: submit lboard %s\n", lboard->title);
|
||||||
|
|
||||||
|
|
|
@ -2089,6 +2089,8 @@ MSG_HASH(MSG_DISK_EJECTED,
|
||||||
"Ejected")
|
"Ejected")
|
||||||
MSG_HASH(MSG_DOWNLOADING,
|
MSG_HASH(MSG_DOWNLOADING,
|
||||||
"Downloading")
|
"Downloading")
|
||||||
|
MSG_HASH(MSG_INDEX_FILE,
|
||||||
|
"Index File")
|
||||||
MSG_HASH(MSG_DOWNLOAD_FAILED,
|
MSG_HASH(MSG_DOWNLOAD_FAILED,
|
||||||
"Download failed")
|
"Download failed")
|
||||||
MSG_HASH(MSG_ERROR,
|
MSG_HASH(MSG_ERROR,
|
||||||
|
|
|
@ -68,7 +68,11 @@ uint8_t* net_http_data(struct http_t *state, size_t* len, bool accept_error);
|
||||||
/* Cleans up all memory. */
|
/* Cleans up all memory. */
|
||||||
void net_http_delete(struct http_t *state);
|
void net_http_delete(struct http_t *state);
|
||||||
|
|
||||||
void net_http_urlencode_full(char **dest, const char *source);
|
/* URL Encode a string */
|
||||||
|
void net_http_urlencode(char **dest, const char *source);
|
||||||
|
|
||||||
|
/* Re-encode a full URL */
|
||||||
|
void net_http_urlencode_full(char *dest, const char *source, size_t size);
|
||||||
|
|
||||||
RETRO_END_DECLS
|
RETRO_END_DECLS
|
||||||
|
|
||||||
|
|
|
@ -33,6 +33,7 @@
|
||||||
#include <compat/strl.h>
|
#include <compat/strl.h>
|
||||||
#include <string/stdstring.h>
|
#include <string/stdstring.h>
|
||||||
#include <retro_common_api.h>
|
#include <retro_common_api.h>
|
||||||
|
#include <retro_miscellaneous.h>
|
||||||
|
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
|
@ -101,8 +102,9 @@ void urlencode_lut_init()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* caller is responsible for deleting the destination buffer */
|
/* URL Encode a string
|
||||||
void net_http_urlencode_full(char **dest, const char *source)
|
caller is responsible for deleting the destination buffer */
|
||||||
|
void net_http_urlencode(char **dest, const char *source)
|
||||||
{
|
{
|
||||||
char *enc = NULL;
|
char *enc = NULL;
|
||||||
/* Assume every character will be encoded, so we need 3 times the space. */
|
/* Assume every character will be encoded, so we need 3 times the space. */
|
||||||
|
@ -129,6 +131,34 @@ void net_http_urlencode_full(char **dest, const char *source)
|
||||||
(*dest)[len - 1] = '\0';
|
(*dest)[len - 1] = '\0';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Re-encode a full URL */
|
||||||
|
void net_http_urlencode_full(char *dest, const char *source, size_t size)
|
||||||
|
{
|
||||||
|
char *tmp;
|
||||||
|
char url_domain[PATH_MAX_LENGTH];
|
||||||
|
char url_path[PATH_MAX_LENGTH];
|
||||||
|
char url_encoded[PATH_MAX_LENGTH];
|
||||||
|
|
||||||
|
int count = 0;
|
||||||
|
strlcpy (url_path, source, sizeof(url_path));
|
||||||
|
tmp = url_path;
|
||||||
|
|
||||||
|
while (count < 3 && tmp[0] != '\0')
|
||||||
|
{
|
||||||
|
tmp = strchr(tmp, '/');
|
||||||
|
count ++;
|
||||||
|
tmp++;
|
||||||
|
}
|
||||||
|
|
||||||
|
strlcpy(url_domain, source, tmp - url_path);
|
||||||
|
strlcpy(url_path, tmp, sizeof(url_path));
|
||||||
|
|
||||||
|
tmp = NULL;
|
||||||
|
net_http_urlencode(&tmp, url_path);
|
||||||
|
snprintf(dest, size, "%s/%s", url_domain, tmp);
|
||||||
|
free (tmp);
|
||||||
|
}
|
||||||
|
|
||||||
static int net_http_new_socket(struct http_connection_t *conn)
|
static int net_http_new_socket(struct http_connection_t *conn)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
|
|
@ -51,6 +51,8 @@
|
||||||
#include "../../lakka.h"
|
#include "../../lakka.h"
|
||||||
#include "../../wifi/wifi_driver.h"
|
#include "../../wifi/wifi_driver.h"
|
||||||
|
|
||||||
|
#include <net/net_http.h>
|
||||||
|
|
||||||
#ifdef HAVE_NETWORKING
|
#ifdef HAVE_NETWORKING
|
||||||
#include "../../network/netplay/netplay.h"
|
#include "../../network/netplay/netplay.h"
|
||||||
#include "../../network/netplay/netplay_discovery.h"
|
#include "../../network/netplay/netplay_discovery.h"
|
||||||
|
@ -2370,7 +2372,7 @@ static int generic_action_ok_network(const char *path,
|
||||||
char url_path[PATH_MAX_LENGTH];
|
char url_path[PATH_MAX_LENGTH];
|
||||||
settings_t *settings = config_get_ptr();
|
settings_t *settings = config_get_ptr();
|
||||||
unsigned type_id2 = 0;
|
unsigned type_id2 = 0;
|
||||||
menu_file_transfer_t *transf = NULL;
|
file_transfer_t *transf = NULL;
|
||||||
const char *url_label = NULL;
|
const char *url_label = NULL;
|
||||||
retro_task_callback_t callback = NULL;
|
retro_task_callback_t callback = NULL;
|
||||||
bool refresh = true;
|
bool refresh = true;
|
||||||
|
@ -2442,7 +2444,7 @@ static int generic_action_ok_network(const char *path,
|
||||||
|
|
||||||
generic_action_ok_command(CMD_EVENT_NETWORK_INIT);
|
generic_action_ok_command(CMD_EVENT_NETWORK_INIT);
|
||||||
|
|
||||||
transf = (menu_file_transfer_t*)calloc(1, sizeof(*transf));
|
transf = (file_transfer_t*)calloc(1, sizeof(*transf));
|
||||||
strlcpy(transf->path, url_path, sizeof(transf->path));
|
strlcpy(transf->path, url_path, sizeof(transf->path));
|
||||||
|
|
||||||
task_push_http_transfer(url_path, suppress_msg, url_label, callback, transf);
|
task_push_http_transfer(url_path, suppress_msg, url_label, callback, transf);
|
||||||
|
@ -2466,7 +2468,7 @@ default_action_ok_list(action_ok_lakka_list, MENU_ENUM_LABEL_CB_LAKKA_LIST)
|
||||||
static void cb_generic_dir_download(void *task_data,
|
static void cb_generic_dir_download(void *task_data,
|
||||||
void *user_data, const char *err)
|
void *user_data, const char *err)
|
||||||
{
|
{
|
||||||
menu_file_transfer_t *transf = (menu_file_transfer_t*)user_data;
|
file_transfer_t *transf = (file_transfer_t*)user_data;
|
||||||
|
|
||||||
if (transf)
|
if (transf)
|
||||||
{
|
{
|
||||||
|
@ -2477,7 +2479,7 @@ static void cb_generic_dir_download(void *task_data,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* expects http_transfer_t*, menu_file_transfer_t* */
|
/* expects http_transfer_t*, file_transfer_t* */
|
||||||
static void cb_generic_download(void *task_data,
|
static void cb_generic_download(void *task_data,
|
||||||
void *user_data, const char *err)
|
void *user_data, const char *err)
|
||||||
{
|
{
|
||||||
|
@ -2486,7 +2488,7 @@ static void cb_generic_download(void *task_data,
|
||||||
bool extract = true;
|
bool extract = true;
|
||||||
#endif
|
#endif
|
||||||
const char *dir_path = NULL;
|
const char *dir_path = NULL;
|
||||||
menu_file_transfer_t *transf = (menu_file_transfer_t*)user_data;
|
file_transfer_t *transf = (file_transfer_t*)user_data;
|
||||||
settings_t *settings = config_get_ptr();
|
settings_t *settings = config_get_ptr();
|
||||||
http_transfer_data_t *data = (http_transfer_data_t*)task_data;
|
http_transfer_data_t *data = (http_transfer_data_t*)task_data;
|
||||||
|
|
||||||
|
@ -2651,13 +2653,14 @@ static int action_ok_download_generic(const char *path,
|
||||||
{
|
{
|
||||||
#ifdef HAVE_NETWORKING
|
#ifdef HAVE_NETWORKING
|
||||||
char s[PATH_MAX_LENGTH];
|
char s[PATH_MAX_LENGTH];
|
||||||
|
char s2[PATH_MAX_LENGTH];
|
||||||
char s3[PATH_MAX_LENGTH];
|
char s3[PATH_MAX_LENGTH];
|
||||||
menu_file_transfer_t *transf = NULL;
|
file_transfer_t *transf = NULL;
|
||||||
settings_t *settings = config_get_ptr();
|
settings_t *settings = config_get_ptr();
|
||||||
bool suppress_msg = false;
|
bool suppress_msg = false;
|
||||||
retro_task_callback_t cb = cb_generic_download;
|
retro_task_callback_t cb = cb_generic_download;
|
||||||
|
|
||||||
s[0] = s3[0] = '\0';
|
s[0] = s2[0] = s3[0] = '\0';
|
||||||
|
|
||||||
fill_pathname_join(s,
|
fill_pathname_join(s,
|
||||||
settings->paths.network_buildbot_assets_url,
|
settings->paths.network_buildbot_assets_url,
|
||||||
|
@ -2721,12 +2724,14 @@ static int action_ok_download_generic(const char *path,
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
fill_pathname_join(s3, s, path, sizeof(s3));
|
fill_pathname_join(s2, s, path, sizeof(s2));
|
||||||
|
|
||||||
transf = (menu_file_transfer_t*)calloc(1, sizeof(*transf));
|
transf = (file_transfer_t*)calloc(1, sizeof(*transf));
|
||||||
transf->enum_idx = enum_idx;
|
transf->enum_idx = enum_idx;
|
||||||
strlcpy(transf->path, path, sizeof(transf->path));
|
strlcpy(transf->path, path, sizeof(transf->path));
|
||||||
|
|
||||||
|
net_http_urlencode_full(s3, s2, sizeof(s));
|
||||||
|
|
||||||
task_push_http_transfer(s3, suppress_msg, msg_hash_to_str(enum_idx), cb, transf);
|
task_push_http_transfer(s3, suppress_msg, msg_hash_to_str(enum_idx), cb, transf);
|
||||||
#endif
|
#endif
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -127,12 +127,6 @@ enum
|
||||||
ACTION_OK_DL_CONTENT_SETTINGS
|
ACTION_OK_DL_CONTENT_SETTINGS
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
enum msg_hash_enums enum_idx;
|
|
||||||
char path[PATH_MAX_LENGTH];
|
|
||||||
} menu_file_transfer_t;
|
|
||||||
|
|
||||||
/* FIXME - Externs, refactor */
|
/* FIXME - Externs, refactor */
|
||||||
extern size_t hack_shader_pass;
|
extern size_t hack_shader_pass;
|
||||||
extern unsigned rpl_entry_selection_ptr;
|
extern unsigned rpl_entry_selection_ptr;
|
||||||
|
|
|
@ -186,7 +186,7 @@ void cb_net_generic_subdir(void *task_data, void *user_data, const char *err)
|
||||||
#ifdef HAVE_NETWORKING
|
#ifdef HAVE_NETWORKING
|
||||||
char subdir_path[PATH_MAX_LENGTH];
|
char subdir_path[PATH_MAX_LENGTH];
|
||||||
http_transfer_data_t *data = (http_transfer_data_t*)task_data;
|
http_transfer_data_t *data = (http_transfer_data_t*)task_data;
|
||||||
menu_file_transfer_t *state = (menu_file_transfer_t*)user_data;
|
file_transfer_t *state = (file_transfer_t*)user_data;
|
||||||
|
|
||||||
subdir_path[0] = '\0';
|
subdir_path[0] = '\0';
|
||||||
|
|
||||||
|
@ -228,7 +228,7 @@ void cb_net_generic(void *task_data, void *user_data, const char *err)
|
||||||
#ifdef HAVE_NETWORKING
|
#ifdef HAVE_NETWORKING
|
||||||
bool refresh = false;
|
bool refresh = false;
|
||||||
http_transfer_data_t *data = (http_transfer_data_t*)task_data;
|
http_transfer_data_t *data = (http_transfer_data_t*)task_data;
|
||||||
menu_file_transfer_t *state = (menu_file_transfer_t*)user_data;
|
file_transfer_t *state = (file_transfer_t*)user_data;
|
||||||
|
|
||||||
if (core_buf)
|
if (core_buf)
|
||||||
free(core_buf);
|
free(core_buf);
|
||||||
|
@ -263,7 +263,7 @@ finish:
|
||||||
if (!err && !strstr(state->path, file_path_str(FILE_PATH_INDEX_DIRS_URL)))
|
if (!err && !strstr(state->path, file_path_str(FILE_PATH_INDEX_DIRS_URL)))
|
||||||
{
|
{
|
||||||
char *parent_dir = (char*)malloc(PATH_MAX_LENGTH * sizeof(char));
|
char *parent_dir = (char*)malloc(PATH_MAX_LENGTH * sizeof(char));
|
||||||
menu_file_transfer_t *transf = NULL;
|
file_transfer_t *transf = NULL;
|
||||||
|
|
||||||
parent_dir[0] = '\0';
|
parent_dir[0] = '\0';
|
||||||
|
|
||||||
|
@ -273,7 +273,7 @@ finish:
|
||||||
file_path_str(FILE_PATH_INDEX_DIRS_URL),
|
file_path_str(FILE_PATH_INDEX_DIRS_URL),
|
||||||
PATH_MAX_LENGTH * sizeof(char));
|
PATH_MAX_LENGTH * sizeof(char));
|
||||||
|
|
||||||
transf = (menu_file_transfer_t*)malloc(sizeof(*transf));
|
transf = (file_transfer_t*)malloc(sizeof(*transf));
|
||||||
|
|
||||||
transf->enum_idx = MSG_UNKNOWN;
|
transf->enum_idx = MSG_UNKNOWN;
|
||||||
strlcpy(transf->path, parent_dir, sizeof(transf->path));
|
strlcpy(transf->path, parent_dir, sizeof(transf->path));
|
||||||
|
|
|
@ -399,6 +399,7 @@ enum msg_hash_enums
|
||||||
MSG_REMOVED_DISK_FROM_TRAY,
|
MSG_REMOVED_DISK_FROM_TRAY,
|
||||||
MSG_FAILED_TO_REMOVE_DISK_FROM_TRAY,
|
MSG_FAILED_TO_REMOVE_DISK_FROM_TRAY,
|
||||||
MSG_GOT_INVALID_DISK_INDEX,
|
MSG_GOT_INVALID_DISK_INDEX,
|
||||||
|
MSG_INDEX_FILE,
|
||||||
MSG_DOWNLOADING,
|
MSG_DOWNLOADING,
|
||||||
MSG_EXTRACTING,
|
MSG_EXTRACTING,
|
||||||
MSG_EXTRACTING_FILE,
|
MSG_EXTRACTING_FILE,
|
||||||
|
|
|
@ -767,13 +767,13 @@ static void netplay_announce(void)
|
||||||
|
|
||||||
netplay_get_architecture(frontend_architecture, sizeof(frontend_architecture));
|
netplay_get_architecture(frontend_architecture, sizeof(frontend_architecture));
|
||||||
|
|
||||||
net_http_urlencode_full(&username, settings->paths.username);
|
net_http_urlencode(&username, settings->paths.username);
|
||||||
net_http_urlencode_full(&corename, system->info.library_name);
|
net_http_urlencode(&corename, system->info.library_name);
|
||||||
net_http_urlencode_full(&gamename,
|
net_http_urlencode(&gamename,
|
||||||
!string_is_empty(path_basename(path_get(RARCH_PATH_BASENAME))) ?
|
!string_is_empty(path_basename(path_get(RARCH_PATH_BASENAME))) ?
|
||||||
path_basename(path_get(RARCH_PATH_BASENAME)) : "N/A");
|
path_basename(path_get(RARCH_PATH_BASENAME)) : "N/A");
|
||||||
net_http_urlencode_full(&coreversion, system->info.library_version);
|
net_http_urlencode(&coreversion, system->info.library_version);
|
||||||
net_http_urlencode_full(&frontend_ident, frontend_architecture);
|
net_http_urlencode(&frontend_ident, frontend_architecture);
|
||||||
|
|
||||||
buf[0] = '\0';
|
buf[0] = '\0';
|
||||||
|
|
||||||
|
|
|
@ -249,6 +249,7 @@ static void* task_push_http_transfer_generic(
|
||||||
{
|
{
|
||||||
task_finder_data_t find_data;
|
task_finder_data_t find_data;
|
||||||
char tmp[255];
|
char tmp[255];
|
||||||
|
char* s = NULL;
|
||||||
retro_task_t *t = NULL;
|
retro_task_t *t = NULL;
|
||||||
http_handle_t *http = NULL;
|
http_handle_t *http = NULL;
|
||||||
|
|
||||||
|
@ -297,8 +298,16 @@ static void* task_push_http_transfer_generic(
|
||||||
t->user_data = user_data;
|
t->user_data = user_data;
|
||||||
t->progress = -1;
|
t->progress = -1;
|
||||||
|
|
||||||
|
s= ((file_transfer_t*)user_data)->path;
|
||||||
|
|
||||||
|
if (strstr(s, ".index"))
|
||||||
|
{
|
||||||
|
snprintf(tmp, sizeof(tmp), "%s %s",
|
||||||
|
msg_hash_to_str(MSG_DOWNLOADING), msg_hash_to_str(MSG_INDEX_FILE));
|
||||||
|
}
|
||||||
|
else
|
||||||
snprintf(tmp, sizeof(tmp), "%s '%s'",
|
snprintf(tmp, sizeof(tmp), "%s '%s'",
|
||||||
msg_hash_to_str(MSG_DOWNLOADING), path_basename(url));
|
msg_hash_to_str(MSG_DOWNLOADING), path_basename(s));
|
||||||
|
|
||||||
t->title = strdup(tmp);
|
t->title = strdup(tmp);
|
||||||
|
|
||||||
|
@ -320,40 +329,6 @@ void* task_push_http_transfer(const char *url, bool mute,
|
||||||
retro_task_callback_t cb, void *user_data)
|
retro_task_callback_t cb, void *user_data)
|
||||||
{
|
{
|
||||||
struct http_connection_t *conn;
|
struct http_connection_t *conn;
|
||||||
char *tmp;
|
|
||||||
char url_domain[PATH_MAX_LENGTH];
|
|
||||||
char url_path[PATH_MAX_LENGTH];
|
|
||||||
char url_encoded[PATH_MAX_LENGTH];
|
|
||||||
|
|
||||||
int count = 0;
|
|
||||||
strlcpy (url_path, url, sizeof(url_path));
|
|
||||||
tmp = url_path;
|
|
||||||
|
|
||||||
while (count < 3 && tmp[0] != '\0')
|
|
||||||
{
|
|
||||||
tmp = strchr(tmp, '/');
|
|
||||||
count ++;
|
|
||||||
tmp++;
|
|
||||||
}
|
|
||||||
|
|
||||||
strlcpy(url_domain, url, tmp - url_path);
|
|
||||||
strlcpy(url_path, tmp, sizeof(url_path));
|
|
||||||
|
|
||||||
tmp = NULL;
|
|
||||||
net_http_urlencode_full (&tmp, url_path);
|
|
||||||
snprintf(url_encoded, sizeof(url_encoded), "%s/%s", url_domain, tmp);
|
|
||||||
|
|
||||||
conn = net_http_connection_new(url_encoded, "GET", NULL);
|
|
||||||
|
|
||||||
free (tmp);
|
|
||||||
return task_push_http_transfer_generic(conn, url, mute, type, cb, user_data);
|
|
||||||
}
|
|
||||||
|
|
||||||
void* task_push_http_transfer_raw(const char *url, bool mute,
|
|
||||||
const char *type,
|
|
||||||
retro_task_callback_t cb, void *user_data)
|
|
||||||
{
|
|
||||||
struct http_connection_t *conn;
|
|
||||||
|
|
||||||
conn = net_http_connection_new(url, "GET", NULL);
|
conn = net_http_connection_new(url, "GET", NULL);
|
||||||
|
|
||||||
|
|
|
@ -92,6 +92,12 @@ typedef struct nbio_handle
|
||||||
transfer_cb_t cb;
|
transfer_cb_t cb;
|
||||||
} nbio_handle_t;
|
} nbio_handle_t;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
enum msg_hash_enums enum_idx;
|
||||||
|
char path[PATH_MAX_LENGTH];
|
||||||
|
} file_transfer_t;
|
||||||
|
|
||||||
#ifdef HAVE_NETWORKING
|
#ifdef HAVE_NETWORKING
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
|
@ -102,9 +108,6 @@ typedef struct
|
||||||
void *task_push_http_transfer(const char *url, bool mute, const char *type,
|
void *task_push_http_transfer(const char *url, bool mute, const char *type,
|
||||||
retro_task_callback_t cb, void *userdata);
|
retro_task_callback_t cb, void *userdata);
|
||||||
|
|
||||||
void *task_push_http_transfer_raw(const char *url, bool mute, const char *type,
|
|
||||||
retro_task_callback_t cb, void *userdata);
|
|
||||||
|
|
||||||
void *task_push_http_post_transfer(const char *url, const char *post_data, bool mute, const char *type,
|
void *task_push_http_post_transfer(const char *url, const char *post_data, bool mute, const char *type,
|
||||||
retro_task_callback_t cb, void *userdata);
|
retro_task_callback_t cb, void *userdata);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue