Fixed 4720a499 (TP returns 303 currently, not 404) => handle 303 well(?); pushed some code around
This commit is contained in:
@@ -340,7 +340,7 @@ bool init_qr(void)
|
|||||||
free(zip_buf);
|
free(zip_buf);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
else if (R_DESCRIPTION(res) == RD_CANCEL_REQUESTED)
|
else if (R_DESCRIPTION(res) == RD_NO_DATA || R_DESCRIPTION(res) == RD_CANCEL_REQUESTED)
|
||||||
{
|
{
|
||||||
free(filename);
|
free(filename);
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -250,7 +250,7 @@ static void load_remote_list(Entry_List_s * list, json_int_t page, EntryMode mod
|
|||||||
json_decref(root);
|
json_decref(root);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
throw_error("Couldn't download ThemePlaza data.\nMake sure WiFi is on.", ERROR_LEVEL_WARNING);
|
throw_error("Couldn't download Theme Plaza data.\nMake sure WiFi is on.", ERROR_LEVEL_WARNING);
|
||||||
|
|
||||||
free(page_json);
|
free(page_json);
|
||||||
}
|
}
|
||||||
@@ -757,10 +757,11 @@ typedef struct header
|
|||||||
typedef enum ParseResult
|
typedef enum ParseResult
|
||||||
{
|
{
|
||||||
SUCCESS, // 200/203 (203 indicates a successful request with a transformation applied by a proxy)
|
SUCCESS, // 200/203 (203 indicates a successful request with a transformation applied by a proxy)
|
||||||
REDIRECT, // 301/302/303/307/308
|
REDIRECT, // 301/302/307/308
|
||||||
HTTPC_ERROR,
|
HTTPC_ERROR,
|
||||||
ABORTED,
|
ABORTED,
|
||||||
SERVER_IS_MISBEHAVING,
|
SERVER_IS_MISBEHAVING,
|
||||||
|
SEE_OTHER = 303, // Theme Plaza returns these
|
||||||
HTTP_UNAUTHORIZED = 401,
|
HTTP_UNAUTHORIZED = 401,
|
||||||
HTTP_FORBIDDEN = 403,
|
HTTP_FORBIDDEN = 403,
|
||||||
HTTP_NOT_FOUND = 404,
|
HTTP_NOT_FOUND = 404,
|
||||||
@@ -965,6 +966,24 @@ redirect: // goto here if we need to redirect
|
|||||||
if(R_FAILED(ret))
|
if(R_FAILED(ret))
|
||||||
return ret;
|
return ret;
|
||||||
return MAKERESULT(RL_SUCCESS, RS_CANCELED, RM_APPLICATION, RD_CANCEL_REQUESTED);
|
return MAKERESULT(RL_SUCCESS, RS_CANCELED, RM_APPLICATION, RD_CANCEL_REQUESTED);
|
||||||
|
case HTTPC_ERROR:
|
||||||
|
DEBUG("httpc error %lx\n", _header.result_code);
|
||||||
|
snprintf(err_buf, ERROR_BUFFER_SIZE, "Error in HTTPC sysmodule - 0x%08lx.\nIf you are seeing this, please contact an\nAnemone developer on the Theme Plaza Discord.", _header.result_code);
|
||||||
|
throw_error(err_buf, ERROR_LEVEL_ERROR);
|
||||||
|
quit = true;
|
||||||
|
httpcCloseContext(&context);
|
||||||
|
return _header.result_code;
|
||||||
|
case SEE_OTHER:
|
||||||
|
if (strstr(url, THEMEPLAZA_BASE_URL))
|
||||||
|
{
|
||||||
|
snprintf(err_buf, ERROR_BUFFER_SIZE, "HTTP 303 See Other (Theme Plaza)\nHas this theme been approved?");
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
snprintf(err_buf, ERROR_BUFFER_SIZE, "HTTP 303 See Other\nDownload the resource directly\nor contact the site administrator.");
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
case REDIRECT:
|
case REDIRECT:
|
||||||
httpcGetResponseHeader(&context, "Location", redirect_url, 0x824);
|
httpcGetResponseHeader(&context, "Location", redirect_url, 0x824);
|
||||||
httpcCloseContext(&context);
|
httpcCloseContext(&context);
|
||||||
@@ -982,21 +1001,10 @@ redirect: // goto here if we need to redirect
|
|||||||
}
|
}
|
||||||
DEBUG("HTTP Redirect: %s %s\n", new_url, *redirect_url == '/' ? "relative" : "absolute");
|
DEBUG("HTTP Redirect: %s %s\n", new_url, *redirect_url == '/' ? "relative" : "absolute");
|
||||||
goto redirect;
|
goto redirect;
|
||||||
case HTTP_UNACCEPTABLE:
|
|
||||||
DEBUG("HTTP 406 Unacceptable; Accept: %s\n", acceptable_mime_types);
|
|
||||||
snprintf(err_buf, ERROR_BUFFER_SIZE, ZIP_NOT_AVAILABLE);
|
|
||||||
goto error;
|
|
||||||
case SERVER_IS_MISBEHAVING:
|
case SERVER_IS_MISBEHAVING:
|
||||||
DEBUG("Server is misbehaving (provided resource with incorrect MIME)\n");
|
DEBUG("Server is misbehaving (provided resource with incorrect MIME)\n");
|
||||||
snprintf(err_buf, ERROR_BUFFER_SIZE, ZIP_NOT_AVAILABLE);
|
snprintf(err_buf, ERROR_BUFFER_SIZE, ZIP_NOT_AVAILABLE);
|
||||||
goto error;
|
goto error;
|
||||||
case HTTPC_ERROR:
|
|
||||||
DEBUG("httpc error %lx\n", _header.result_code);
|
|
||||||
snprintf(err_buf, ERROR_BUFFER_SIZE, "Error in HTTPC sysmodule - 0x%lx.\nIf you are seeing this, please contact an\nAnemone developer on the ThemePlaza Discord.", _header.result_code);
|
|
||||||
throw_error(err_buf, ERROR_LEVEL_ERROR);
|
|
||||||
quit = true;
|
|
||||||
httpcCloseContext(&context);
|
|
||||||
return _header.result_code;
|
|
||||||
case HTTP_NOT_FOUND:
|
case HTTP_NOT_FOUND:
|
||||||
case HTTP_GONE: ;
|
case HTTP_GONE: ;
|
||||||
const char * http_error = parse == HTTP_NOT_FOUND ? "404 Not Found" : "410 Gone";
|
const char * http_error = parse == HTTP_NOT_FOUND ? "404 Not Found" : "410 Gone";
|
||||||
@@ -1006,6 +1014,10 @@ redirect: // goto here if we need to redirect
|
|||||||
else
|
else
|
||||||
snprintf(err_buf, ERROR_BUFFER_SIZE, "HTTP %s\nCheck that the URL is correct.", http_error);
|
snprintf(err_buf, ERROR_BUFFER_SIZE, "HTTP %s\nCheck that the URL is correct.", http_error);
|
||||||
goto error;
|
goto error;
|
||||||
|
case HTTP_UNACCEPTABLE:
|
||||||
|
DEBUG("HTTP 406 Unacceptable; Accept: %s\n", acceptable_mime_types);
|
||||||
|
snprintf(err_buf, ERROR_BUFFER_SIZE, ZIP_NOT_AVAILABLE);
|
||||||
|
goto error;
|
||||||
case HTTP_UNAUTHORIZED:
|
case HTTP_UNAUTHORIZED:
|
||||||
case HTTP_FORBIDDEN:
|
case HTTP_FORBIDDEN:
|
||||||
case HTTP_PROXY_UNAUTHORIZED:
|
case HTTP_PROXY_UNAUTHORIZED:
|
||||||
@@ -1057,7 +1069,9 @@ redirect: // goto here if we need to redirect
|
|||||||
goto no_error;
|
goto no_error;
|
||||||
error:
|
error:
|
||||||
throw_error(err_buf, ERROR_LEVEL_WARNING);
|
throw_error(err_buf, ERROR_LEVEL_WARNING);
|
||||||
return httpcCloseContext(&context);
|
Result res = httpcCloseContext(&context);
|
||||||
|
if (R_FAILED(res)) return res;
|
||||||
|
return MAKERESULT(RL_TEMPORARY, RS_CANCELED, RM_APPLICATION, RD_NO_DATA);
|
||||||
no_error:;
|
no_error:;
|
||||||
u32 chunk_size;
|
u32 chunk_size;
|
||||||
if (_header.file_size)
|
if (_header.file_size)
|
||||||
@@ -1118,4 +1132,4 @@ no_error:;
|
|||||||
DEBUG("size: %lu\n", *size);
|
DEBUG("size: %lu\n", *size);
|
||||||
if (filename) { DEBUG("filename: %s\n", *filename); }
|
if (filename) { DEBUG("filename: %s\n", *filename); }
|
||||||
return MAKERESULT(RL_SUCCESS, RS_SUCCESS, RM_APPLICATION, RD_SUCCESS);
|
return MAKERESULT(RL_SUCCESS, RS_SUCCESS, RM_APPLICATION, RD_SUCCESS);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user