diff --git a/menu/cbs/menu_cbs_ok.c b/menu/cbs/menu_cbs_ok.c index 24ba225ce9..25012f2514 100644 --- a/menu/cbs/menu_cbs_ok.c +++ b/menu/cbs/menu_cbs_ok.c @@ -3207,11 +3207,22 @@ static int action_ok_netplay_connect_room(const char *path, command_event(CMD_EVENT_NETPLAY_DEINIT, NULL); netplay_driver_ctl(RARCH_NETPLAY_CTL_ENABLE_CLIENT, NULL); - snprintf(tmp_hostname, - sizeof(tmp_hostname), - "%s:%d", - netplay_room_list[idx - 2].address, - netplay_room_list[idx - 2].port); + if (netplay_room_list[idx - 2].host_method == NETPLAY_HOST_METHOD_MITM) + { + snprintf(tmp_hostname, + sizeof(tmp_hostname), + "%s:%d", + netplay_room_list[idx - 2].mitm_address, + netplay_room_list[idx - 2].mitm_port); + } + else + { + snprintf(tmp_hostname, + sizeof(tmp_hostname), + "%s:%d", + netplay_room_list[idx - 2].address, + netplay_room_list[idx - 2].port); + } RARCH_LOG("Connecting to: %s with game: %s/%08x\n", tmp_hostname, diff --git a/network/netplay/netplay_discovery.h b/network/netplay/netplay_discovery.h index bc177b01a7..dee1fafcac 100644 --- a/network/netplay/netplay_discovery.h +++ b/network/netplay/netplay_discovery.h @@ -48,18 +48,29 @@ struct netplay_host_list size_t size; }; +enum netplay_host_method +{ + NETPLAY_HOST_METHOD_UNKNOWN = 0, + NETPLAY_HOST_METHOD_MANUAL, + NETPLAY_HOST_METHOD_UPNP, + NETPLAY_HOST_METHOD_MITM +}; + /* data is ordered like this on the server, I left it in this ordered for reference */ struct netplay_room { char nickname [PATH_MAX_LENGTH]; char address [PATH_MAX_LENGTH]; + char mitm_address[PATH_MAX_LENGTH]; int port; + int mitm_port; char corename [PATH_MAX_LENGTH]; char coreversion [PATH_MAX_LENGTH]; char gamename [PATH_MAX_LENGTH]; int gamecrc; int timestamp; + int host_method; bool has_password; bool has_spectate_password; bool fixed; diff --git a/network/netplay/netplay_room_parse.c b/network/netplay/netplay_room_parse.c index bf722e9d92..ae3cada567 100644 --- a/network/netplay/netplay_room_parse.c +++ b/network/netplay/netplay_room_parse.c @@ -228,6 +228,12 @@ static JSON_Parser_HandlerResult JSON_CALL ObjectMemberHandler(JSON_Parser parse pCtx->cur_member = &rooms->cur->has_spectate_password; else if (string_is_equal(pValue, "fixed")) pCtx->cur_member = &rooms->cur->fixed; + else if (string_is_equal(pValue, "mitm_ip")) + pCtx->cur_member = &rooms->cur->mitm_address; + else if (string_is_equal(pValue, "mitm_port")) + pCtx->cur_member = &rooms->cur->mitm_port; + else if (string_is_equal(pValue, "host_method")) + pCtx->cur_member = &rooms->cur->host_method; else { /* unknown field, ignore it */