static void netplay_announce(void) { char buf [2048]; char url [2048] = "http://newlobby.libretro.com/add/"; char *username = NULL; char *corename = NULL; char *gamename = NULL; char *coreversion = NULL; char *frontend_ident = NULL; settings_t *settings = config_get_ptr(); rarch_system_info_t *system = runloop_get_system_info(); uint32_t content_crc = content_get_crc(); char frontend_architecture[PATH_MAX_LENGTH]; netplay_get_architecture(frontend_architecture, sizeof(frontend_architecture)); net_http_urlencode_full(&username, settings->paths.username); net_http_urlencode_full(&corename, system->info.library_name); net_http_urlencode_full(&gamename, !string_is_empty(path_basename(path_get(RARCH_PATH_BASENAME))) ? path_basename(path_get(RARCH_PATH_BASENAME)) : "N/A"); net_http_urlencode_full(&coreversion, system->info.library_version); net_http_urlencode_full(&frontend_ident, frontend_architecture); buf[0] = '\0'; snprintf(buf, sizeof(buf), "username=%s&core_name=%s&core_version=%s&" "game_name=%s&game_crc=%08X&port=%d&mitm_server=%s" "&has_password=%d&has_spectate_password=%d&force_mitm=%d&retroarch_version=%s&frontend=%s", username, corename, coreversion, gamename, content_crc, settings->uints.netplay_port, settings->arrays.netplay_mitm_server, *settings->paths.netplay_password ? 1 : 0, *settings->paths.netplay_spectate_password ? 1 : 0, settings->bools.netplay_use_mitm_server, PACKAGE_VERSION, frontend_architecture); #if 0 RARCH_LOG("[netplay] announcement URL: %s\n", buf); #endif task_push_http_post_transfer(url, buf, true, NULL, netplay_announce_cb, NULL); if (username) free(username); if (corename) free(corename); if (gamename) free(gamename); if (coreversion) free(coreversion); if (frontend_ident) free(frontend_ident); }
void cb_net_generic(retro_task_t *task, void *task_data, void *user_data, const char *err) { #ifdef HAVE_NETWORKING bool refresh = false; http_transfer_data_t *data = (http_transfer_data_t*)task_data; file_transfer_t *state = (file_transfer_t*)user_data; menu_handle_t *menu = NULL; if (!menu_driver_ctl(RARCH_MENU_CTL_DRIVER_DATA_GET, &menu)) goto finish; if (menu->core_buf) free(menu->core_buf); menu->core_buf = NULL; menu->core_len = 0; if (!data || err) goto finish; menu->core_buf = (char*)malloc((data->len+1) * sizeof(char)); if (!menu->core_buf) goto finish; if (!string_is_empty(data->data)) memcpy(menu->core_buf, data->data, data->len * sizeof(char)); menu->core_buf[data->len] = '\0'; menu->core_len = data->len; finish: refresh = true; menu_entries_ctl(MENU_ENTRIES_CTL_UNSET_REFRESH, &refresh); if (data) { if (data->data) free(data->data); free(data); } 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_encoded = (char*)malloc(PATH_MAX_LENGTH * sizeof(char)); file_transfer_t *transf = NULL; parent_dir[0] = '\0'; parent_dir_encoded[0] = '\0'; fill_pathname_parent_dir(parent_dir, state->path, PATH_MAX_LENGTH * sizeof(char)); strlcat(parent_dir, file_path_str(FILE_PATH_INDEX_DIRS_URL), PATH_MAX_LENGTH * sizeof(char)); transf = (file_transfer_t*)malloc(sizeof(*transf)); transf->enum_idx = MSG_UNKNOWN; strlcpy(transf->path, parent_dir, sizeof(transf->path)); net_http_urlencode_full(parent_dir_encoded, parent_dir, PATH_MAX_LENGTH * sizeof(char)); task_push_http_transfer(parent_dir_encoded, true, "index_dirs", cb_net_generic_subdir, transf); free(parent_dir); free(parent_dir_encoded); } if (state) free(state); #endif }