mirror of
https://git.sr.ht/~thestr4ng3r/chiaki
synced 2025-08-20 05:23:12 -07:00
Fix Version Retry
This commit is contained in:
parent
8904c86a6d
commit
767e545f38
2 changed files with 20 additions and 12 deletions
|
@ -50,7 +50,8 @@ typedef enum
|
||||||
CHIAKI_ERR_INVALID_RESPONSE,
|
CHIAKI_ERR_INVALID_RESPONSE,
|
||||||
CHIAKI_ERR_INVALID_MAC,
|
CHIAKI_ERR_INVALID_MAC,
|
||||||
CHIAKI_ERR_UNINITIALIZED,
|
CHIAKI_ERR_UNINITIALIZED,
|
||||||
CHIAKI_ERR_FEC_FAILED
|
CHIAKI_ERR_FEC_FAILED,
|
||||||
|
CHIAKI_ERR_VERSION_MISMATCH
|
||||||
} ChiakiErrorCode;
|
} ChiakiErrorCode;
|
||||||
|
|
||||||
CHIAKI_EXPORT const char *chiaki_error_string(ChiakiErrorCode code);
|
CHIAKI_EXPORT const char *chiaki_error_string(ChiakiErrorCode code);
|
||||||
|
|
|
@ -349,7 +349,6 @@ static bool session_check_state_pred_pin(void *user)
|
||||||
static void *session_thread_func(void *arg)
|
static void *session_thread_func(void *arg)
|
||||||
{
|
{
|
||||||
ChiakiSession *session = arg;
|
ChiakiSession *session = arg;
|
||||||
bool success;
|
|
||||||
|
|
||||||
chiaki_mutex_lock(&session->state_mutex);
|
chiaki_mutex_lock(&session->state_mutex);
|
||||||
|
|
||||||
|
@ -369,24 +368,27 @@ static void *session_thread_func(void *arg)
|
||||||
CHIAKI_LOGI(session->log, "Starting session request for %s", session->connect_info.ps5 ? "PS5" : "PS4");
|
CHIAKI_LOGI(session->log, "Starting session request for %s", session->connect_info.ps5 ? "PS5" : "PS4");
|
||||||
|
|
||||||
ChiakiTarget server_target = CHIAKI_TARGET_PS4_UNKNOWN;
|
ChiakiTarget server_target = CHIAKI_TARGET_PS4_UNKNOWN;
|
||||||
success = session_thread_request_session(session, &server_target) == CHIAKI_ERR_SUCCESS;
|
ChiakiErrorCode err = session_thread_request_session(session, &server_target);
|
||||||
// TODO: Check Network error return
|
|
||||||
|
|
||||||
if(!success && chiaki_target_is_unknown(server_target))
|
if(err == CHIAKI_ERR_VERSION_MISMATCH && !chiaki_target_is_unknown(server_target))
|
||||||
{
|
{
|
||||||
CHIAKI_LOGI(session->log, "Attempting to re-request session with Server's RP-Version");
|
CHIAKI_LOGI(session->log, "Attempting to re-request session with Server's RP-Version");
|
||||||
session->target = server_target;
|
session->target = server_target;
|
||||||
success = session_thread_request_session(session, &server_target) == CHIAKI_ERR_SUCCESS;
|
err = session_thread_request_session(session, &server_target);
|
||||||
}
|
}
|
||||||
|
else if(err != CHIAKI_ERR_SUCCESS)
|
||||||
|
QUIT(quit);
|
||||||
|
|
||||||
if(!success && chiaki_target_is_unknown(server_target))
|
if(err == CHIAKI_ERR_VERSION_MISMATCH && !chiaki_target_is_unknown(server_target))
|
||||||
{
|
{
|
||||||
CHIAKI_LOGI(session->log, "Attempting to re-request session even harder with Server's RP-Version!!!");
|
CHIAKI_LOGI(session->log, "Attempting to re-request session even harder with Server's RP-Version!!!");
|
||||||
session->target = server_target;
|
session->target = server_target;
|
||||||
success = session_thread_request_session(session, NULL) == CHIAKI_ERR_SUCCESS;
|
err = session_thread_request_session(session, NULL);
|
||||||
}
|
}
|
||||||
|
else if(err != CHIAKI_ERR_SUCCESS)
|
||||||
|
QUIT(quit);
|
||||||
|
|
||||||
if(!success)
|
if(err != CHIAKI_ERR_SUCCESS)
|
||||||
QUIT(quit);
|
QUIT(quit);
|
||||||
|
|
||||||
CHIAKI_LOGI(session->log, "Session request successful");
|
CHIAKI_LOGI(session->log, "Session request successful");
|
||||||
|
@ -398,7 +400,7 @@ static void *session_thread_func(void *arg)
|
||||||
|
|
||||||
CHIAKI_LOGI(session->log, "Starting ctrl");
|
CHIAKI_LOGI(session->log, "Starting ctrl");
|
||||||
|
|
||||||
ChiakiErrorCode err = chiaki_ctrl_start(&session->ctrl);
|
err = chiaki_ctrl_start(&session->ctrl);
|
||||||
if(err != CHIAKI_ERR_SUCCESS)
|
if(err != CHIAKI_ERR_SUCCESS)
|
||||||
QUIT(quit);
|
QUIT(quit);
|
||||||
|
|
||||||
|
@ -760,6 +762,7 @@ static ChiakiErrorCode session_thread_request_session(ChiakiSession *session, Ch
|
||||||
SessionResponse response;
|
SessionResponse response;
|
||||||
parse_session_response(&response, &http_response);
|
parse_session_response(&response, &http_response);
|
||||||
|
|
||||||
|
ChiakiErrorCode r = CHIAKI_ERR_UNKNOWN;
|
||||||
if(response.success)
|
if(response.success)
|
||||||
{
|
{
|
||||||
size_t nonce_len = CHIAKI_RPCRYPT_KEY_SIZE;
|
size_t nonce_len = CHIAKI_RPCRYPT_KEY_SIZE;
|
||||||
|
@ -770,6 +773,8 @@ static ChiakiErrorCode session_thread_request_session(ChiakiSession *session, Ch
|
||||||
response.success = false;
|
response.success = false;
|
||||||
session->quit_reason = CHIAKI_QUIT_REASON_SESSION_REQUEST_UNKNOWN;
|
session->quit_reason = CHIAKI_QUIT_REASON_SESSION_REQUEST_UNKNOWN;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
r = CHIAKI_ERR_SUCCESS;
|
||||||
}
|
}
|
||||||
else if((response.error_code == CHIAKI_RP_APPLICATION_REASON_RP_VERSION
|
else if((response.error_code == CHIAKI_RP_APPLICATION_REASON_RP_VERSION
|
||||||
|| response.error_code == CHIAKI_RP_APPLICATION_REASON_UNKNOWN)
|
|| response.error_code == CHIAKI_RP_APPLICATION_REASON_UNKNOWN)
|
||||||
|
@ -778,7 +783,7 @@ static ChiakiErrorCode session_thread_request_session(ChiakiSession *session, Ch
|
||||||
CHIAKI_LOGI(session->log, "Reported RP-Version mismatch. ours = %s, server = %s",
|
CHIAKI_LOGI(session->log, "Reported RP-Version mismatch. ours = %s, server = %s",
|
||||||
rp_version_str ? rp_version_str : "", response.rp_version);
|
rp_version_str ? rp_version_str : "", response.rp_version);
|
||||||
*target_out = chiaki_rp_version_parse(response.rp_version, session->connect_info.ps5);
|
*target_out = chiaki_rp_version_parse(response.rp_version, session->connect_info.ps5);
|
||||||
if(*target_out != CHIAKI_TARGET_PS4_UNKNOWN)
|
if(!chiaki_target_is_unknown(*target_out))
|
||||||
CHIAKI_LOGI(session->log, "Detected Server RP-Version %s", chiaki_rp_version_string(*target_out));
|
CHIAKI_LOGI(session->log, "Detected Server RP-Version %s", chiaki_rp_version_string(*target_out));
|
||||||
else if(!strcmp(response.rp_version, "5.0"))
|
else if(!strcmp(response.rp_version, "5.0"))
|
||||||
{
|
{
|
||||||
|
@ -790,6 +795,7 @@ static ChiakiErrorCode session_thread_request_session(ChiakiSession *session, Ch
|
||||||
CHIAKI_LOGE(session->log, "Server RP-Version is unknown");
|
CHIAKI_LOGE(session->log, "Server RP-Version is unknown");
|
||||||
session->quit_reason = CHIAKI_QUIT_REASON_SESSION_REQUEST_RP_VERSION_MISMATCH;
|
session->quit_reason = CHIAKI_QUIT_REASON_SESSION_REQUEST_RP_VERSION_MISMATCH;
|
||||||
}
|
}
|
||||||
|
r = CHIAKI_ERR_VERSION_MISMATCH;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -804,6 +810,7 @@ static ChiakiErrorCode session_thread_request_session(ChiakiSession *session, Ch
|
||||||
break;
|
break;
|
||||||
case CHIAKI_RP_APPLICATION_REASON_RP_VERSION:
|
case CHIAKI_RP_APPLICATION_REASON_RP_VERSION:
|
||||||
session->quit_reason = CHIAKI_QUIT_REASON_SESSION_REQUEST_RP_VERSION_MISMATCH;
|
session->quit_reason = CHIAKI_QUIT_REASON_SESSION_REQUEST_RP_VERSION_MISMATCH;
|
||||||
|
r = CHIAKI_ERR_VERSION_MISMATCH;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
session->quit_reason = CHIAKI_QUIT_REASON_SESSION_REQUEST_UNKNOWN;
|
session->quit_reason = CHIAKI_QUIT_REASON_SESSION_REQUEST_UNKNOWN;
|
||||||
|
@ -813,7 +820,7 @@ static ChiakiErrorCode session_thread_request_session(ChiakiSession *session, Ch
|
||||||
|
|
||||||
chiaki_http_response_fini(&http_response);
|
chiaki_http_response_fini(&http_response);
|
||||||
CHIAKI_SOCKET_CLOSE(session_sock);
|
CHIAKI_SOCKET_CLOSE(session_sock);
|
||||||
return response.success ? CHIAKI_ERR_SUCCESS : CHIAKI_ERR_UNKNOWN;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
CHIAKI_EXPORT ChiakiErrorCode chiaki_session_goto_bed(ChiakiSession *session)
|
CHIAKI_EXPORT ChiakiErrorCode chiaki_session_goto_bed(ChiakiSession *session)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue