Networking rework (#240)
* Began refactoring http_get. Still a few cases to handle, but it works. * Introduced error enum; handle error 406; handle a misbehaving server; redirect_url leaked memory (L888) * Allowed calls to http_get to pass NULL as acceptable_mime_types * Removed status_code from header struct; eventually planning to move most of parse_header's logic back to http_get, so this makes sense * Moved some more logic back into http_get Note: currently behaves weirdly with some QR codes, including but probably not limited to ones pointing to TinyURL. * Handle redirects correctly; other rearrangements * Formatting * Handle HTTP 303 See Other correctly * Removed "Download failed" error in camera.c due to all related failures being handled in http_get * Fixed missing loading bar; started working on unchunked download * Added unchunked download * Reintroduced the download progress bar, rolled back to always doing chunked download * URL length caps at 2083 chars * Slightly more efficient * Correctly handle incorrect filesize header TODO: reorder clauses to remove the goto? * Fixed illegal characters, removed unnecessary logic (technically a regression, as we always have to realloc now) * Finally finished up status code handling. Fixed a memory leak when the server fails conneg.
This commit is contained in:
@@ -52,6 +52,6 @@
|
|||||||
#define CACHE_PATH_FORMAT "/3ds/" APP_TITLE "/cache/%" JSON_INTEGER_FORMAT
|
#define CACHE_PATH_FORMAT "/3ds/" APP_TITLE "/cache/%" JSON_INTEGER_FORMAT
|
||||||
|
|
||||||
bool themeplaza_browser(EntryMode mode);
|
bool themeplaza_browser(EntryMode mode);
|
||||||
u32 http_get(const char *url, char ** filename, char ** buf, InstallType install_type);
|
u32 http_get(const char *url, char ** filename, char ** buf, InstallType install_type, const char *mime_type);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -229,7 +229,7 @@ void update_qr(qr_data *data)
|
|||||||
draw_install(INSTALL_DOWNLOAD);
|
draw_install(INSTALL_DOWNLOAD);
|
||||||
char * zip_buf = NULL;
|
char * zip_buf = NULL;
|
||||||
char * filename = NULL;
|
char * filename = NULL;
|
||||||
u32 zip_size = http_get((char*)scan_data.payload, &filename, &zip_buf, INSTALL_DOWNLOAD);
|
u32 zip_size = http_get((char*)scan_data.payload, &filename, &zip_buf, INSTALL_DOWNLOAD, "application/zip");
|
||||||
|
|
||||||
if(zip_size != 0)
|
if(zip_size != 0)
|
||||||
{
|
{
|
||||||
@@ -288,19 +288,17 @@ void update_qr(qr_data *data)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
// TODO: handle more elegantly
|
||||||
throw_error("Zip downloaded is neither\na splash nor a theme.", ERROR_LEVEL_WARNING);
|
throw_error("Zip downloaded is neither\na splash nor a theme.", ERROR_LEVEL_WARNING);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
// TODO: marked for deletion
|
||||||
throw_error("File downloaded isn't a zip.", ERROR_LEVEL_WARNING);
|
throw_error("File downloaded isn't a zip.", ERROR_LEVEL_WARNING);
|
||||||
}
|
}
|
||||||
free(zip_buf);
|
free(zip_buf);
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
throw_error("Download failed.", ERROR_LEVEL_WARNING);
|
|
||||||
}
|
|
||||||
|
|
||||||
free(filename);
|
free(filename);
|
||||||
}
|
}
|
||||||
|
|||||||
646
source/remote.c
646
source/remote.c
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user