iosuhax read file command draft
This commit is contained in:
parent
f1120cef21
commit
669d0f9c2f
@ -116,12 +116,13 @@ int Menu_Main(void) {
|
|||||||
char ipAddressMessageBuffer[64];
|
char ipAddressMessageBuffer[64];
|
||||||
InitSocketFunctionPointers();
|
InitSocketFunctionPointers();
|
||||||
__os_snprintf(ipAddressMessageBuffer, 64, "Your Wii U's IP address: %i.%i.%i.%i",
|
__os_snprintf(ipAddressMessageBuffer, 64, "Your Wii U's IP address: %i.%i.%i.%i",
|
||||||
(hostIpAddress >> 24) & 0xFF, (hostIpAddress >> 16) & 0xFF, (hostIpAddress >> 8) & 0xFF, hostIpAddress & 0xFF);
|
(hostIpAddress >> 24) & 0xFF, (hostIpAddress >> 16) & 0xFF, (hostIpAddress >> 8) & 0xFF,
|
||||||
|
hostIpAddress & 0xFF);
|
||||||
|
|
||||||
PRINT_TEXT2(14, 1, "-- TCP Gecko Installer --")
|
PRINT_TEXT2(14, 1, "-- TCP Gecko Installer --")
|
||||||
PRINT_TEXT2(7, 2, ipAddressMessageBuffer)
|
PRINT_TEXT2(7, 2, ipAddressMessageBuffer)
|
||||||
PRINT_TEXT2(0, 5, "Press A to install TCPGecko...")
|
PRINT_TEXT2(0, 5, "Press A to install TCP Gecko...")
|
||||||
PRINT_TEXT2(0, 6, "Press X to install TCPGecko with CosmoCortney's codehandler...")
|
PRINT_TEXT2(0, 6, "Press X to install TCP Gecko with CosmoCortney's codehandler...")
|
||||||
PRINT_TEXT2(0, 17, "Press Home to exit...")
|
PRINT_TEXT2(0, 17, "Press Home to exit...")
|
||||||
|
|
||||||
OSScreenFlipBuffersEx(0);
|
OSScreenFlipBuffersEx(0);
|
||||||
|
@ -12,9 +12,9 @@
|
|||||||
#include "dynamic_libs/gx2_functions.h"
|
#include "dynamic_libs/gx2_functions.h"
|
||||||
#include "kernel/syscalls.h"
|
#include "kernel/syscalls.h"
|
||||||
#include "dynamic_libs/fs_functions.h"
|
#include "dynamic_libs/fs_functions.h"
|
||||||
#include "common/fs_defs.h"
|
|
||||||
#include "system/exception_handler.h"
|
#include "system/exception_handler.h"
|
||||||
#include "utils/logger.h"
|
#include "utils/logger.h"
|
||||||
|
#include "system/memory.h"
|
||||||
|
|
||||||
void *client;
|
void *client;
|
||||||
void *commandBlock;
|
void *commandBlock;
|
||||||
@ -60,6 +60,7 @@ struct pygecko_bss_t {
|
|||||||
#define COMMAND_SERVER_VERSION 0x99
|
#define COMMAND_SERVER_VERSION 0x99
|
||||||
#define COMMAND_OS_VERSION 0x9A
|
#define COMMAND_OS_VERSION 0x9A
|
||||||
#define COMMAND_RUN_KERNEL_COPY_SERVICE 0xCD
|
#define COMMAND_RUN_KERNEL_COPY_SERVICE 0xCD
|
||||||
|
#define COMMAND_IOSUHAX_READ_FILE 0xD0
|
||||||
|
|
||||||
#define CHECK_ERROR(cond) if (cond) { bss->line = __LINE__; goto error; }
|
#define CHECK_ERROR(cond) if (cond) { bss->line = __LINE__; goto error; }
|
||||||
#define errno (*__gh_errno_ptr())
|
#define errno (*__gh_errno_ptr())
|
||||||
@ -416,7 +417,8 @@ int roundUpToAligned(int number) {
|
|||||||
|
|
||||||
void reportIllegalCommandByte(int commandByte) {
|
void reportIllegalCommandByte(int commandByte) {
|
||||||
char errorBuffer[ERROR_BUFFER_SIZE];
|
char errorBuffer[ERROR_BUFFER_SIZE];
|
||||||
__os_snprintf(errorBuffer, ERROR_BUFFER_SIZE, "Illegal command byte received: 0x%02x\nServer Version: %s",
|
__os_snprintf(errorBuffer, ERROR_BUFFER_SIZE,
|
||||||
|
"Illegal command byte received: 0x%02x\nServer Version: %s\nIf you see this, you most likely have to update your TCP Gecko Installer.",
|
||||||
commandByte, SERVER_VERSION);
|
commandByte, SERVER_VERSION);
|
||||||
OSFatal(errorBuffer);
|
OSFatal(errorBuffer);
|
||||||
}
|
}
|
||||||
@ -961,8 +963,6 @@ static int listenForCommands(struct pygecko_bss_t *bss, int clientfd) {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case COMMAND_REPLACE_FILE: {
|
case COMMAND_REPLACE_FILE: {
|
||||||
// int res = IOSUHAX_Open(NULL);
|
|
||||||
|
|
||||||
// TODO FSOpenFile ACCESS_ERROR
|
// TODO FSOpenFile ACCESS_ERROR
|
||||||
|
|
||||||
// Receive the file path
|
// Receive the file path
|
||||||
@ -1016,9 +1016,9 @@ static int listenForCommands(struct pygecko_bss_t *bss, int clientfd) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*// Flush the file back
|
// Flush the file back
|
||||||
ret = FSFlushFile(client, commandBlock, handle, FS_RET_ALL_ERROR);
|
// ret = FSFlushFile(client, commandBlock, handle, FS_RET_ALL_ERROR);
|
||||||
CHECK_FUNCTION_FAILED(ret, "FSFlushFile")*/
|
// CHECK_FUNCTION_FAILED(ret, "FSFlushFile")
|
||||||
|
|
||||||
// Close the file
|
// Close the file
|
||||||
ret = FSCloseFile(client, commandBlock, handle, FS_RET_ALL_ERROR);
|
ret = FSCloseFile(client, commandBlock, handle, FS_RET_ALL_ERROR);
|
||||||
@ -1035,6 +1035,84 @@ static int listenForCommands(struct pygecko_bss_t *bss, int clientfd) {
|
|||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case COMMAND_IOSUHAX_READ_FILE: {
|
||||||
|
int returnValue = IOSUHAX_Open(NULL);
|
||||||
|
log_printf("IOSUHAX_Open: %i", returnValue);
|
||||||
|
|
||||||
|
if (returnValue < 0) {
|
||||||
|
goto IOSUHAX_OPEN_FAILED;
|
||||||
|
}
|
||||||
|
|
||||||
|
int fileSystemFileDescriptor = IOSUHAX_FSA_Open();
|
||||||
|
log_printf("IOSUHAX_FSA_Open: %i", fileSystemFileDescriptor);
|
||||||
|
|
||||||
|
if (fileSystemFileDescriptor < 0) {
|
||||||
|
goto IOSUHAX_FSA_OPEN_FAILED;
|
||||||
|
}
|
||||||
|
|
||||||
|
int fileDescriptor;
|
||||||
|
const char *filePath = "/vol/storage_usb/usr/title/0005000e/1010ed00/content/audio/stream/pBGM_GBA_CHEESELAND_F.bfstm";
|
||||||
|
returnValue = IOSUHAX_FSA_OpenFile(fileSystemFileDescriptor, filePath, "rb", &fileDescriptor);
|
||||||
|
log_printf("IOSUHAX_FSA_OpenFile: %i", returnValue);
|
||||||
|
|
||||||
|
if (returnValue < 0) {
|
||||||
|
goto IOSUHAX_OPEN_FILE_FAILED;
|
||||||
|
}
|
||||||
|
|
||||||
|
fileStat_s stats;
|
||||||
|
returnValue = IOSUHAX_FSA_StatFile(fileSystemFileDescriptor, fileDescriptor, &stats);
|
||||||
|
log_printf("IOSUHAX_FSA_StatFile: %i", returnValue);
|
||||||
|
|
||||||
|
if (returnValue < 0) {
|
||||||
|
goto IOSUHAX_READ_FILE_FAILED_CLOSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
void *fileBuffer = MEMBucket_alloc(stats.size, 4);
|
||||||
|
log_printf("File Buffer: %p", fileBuffer);
|
||||||
|
|
||||||
|
if (!fileBuffer) {
|
||||||
|
goto IOSUHAX_READ_FILE_FAILED_CLOSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t totalBytesRead = 0;
|
||||||
|
while (totalBytesRead < stats.size) {
|
||||||
|
size_t remainingBytes = stats.size - totalBytesRead;
|
||||||
|
int bytesRead = IOSUHAX_FSA_ReadFile(fileSystemFileDescriptor,
|
||||||
|
fileBuffer + totalBytesRead,
|
||||||
|
0x01,
|
||||||
|
remainingBytes,
|
||||||
|
fileDescriptor,
|
||||||
|
0);
|
||||||
|
log_printf("IOSUHAX_FSA_ReadFile: %i", bytesRead);
|
||||||
|
|
||||||
|
if (bytesRead <= 0) {
|
||||||
|
goto IOSUHAX_READ_FILE_FAILED_CLOSE;
|
||||||
|
} else {
|
||||||
|
totalBytesRead += bytesRead;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
log_printf("Bytes read: %i", totalBytesRead);
|
||||||
|
|
||||||
|
IOSUHAX_READ_FILE_FAILED_CLOSE:
|
||||||
|
|
||||||
|
returnValue = IOSUHAX_FSA_CloseFile(fileSystemFileDescriptor, fileDescriptor);
|
||||||
|
log_printf("IOSUHAX_FSA_CloseFile: %i", returnValue);
|
||||||
|
|
||||||
|
IOSUHAX_OPEN_FILE_FAILED:
|
||||||
|
|
||||||
|
returnValue = IOSUHAX_FSA_Close(fileSystemFileDescriptor);
|
||||||
|
log_printf("IOSUHAX_FSA_Close: %i", returnValue);
|
||||||
|
|
||||||
|
IOSUHAX_FSA_OPEN_FAILED:
|
||||||
|
|
||||||
|
returnValue = IOSUHAX_Close();
|
||||||
|
log_printf("IOSUHAX_Close: %i", returnValue);
|
||||||
|
|
||||||
|
IOSUHAX_OPEN_FAILED:
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
case COMMAND_GET_CODE_HANDLER_ADDRESS: {
|
case COMMAND_GET_CODE_HANDLER_ADDRESS: {
|
||||||
((int *) buffer)[0] = CODE_HANDLER_INSTALL_ADDRESS;
|
((int *) buffer)[0] = CODE_HANDLER_INSTALL_ADDRESS;
|
||||||
ret = sendwait(bss, clientfd, buffer, 4);
|
ret = sendwait(bss, clientfd, buffer, 4);
|
||||||
|
BIN
tcpgecko.elf
BIN
tcpgecko.elf
Binary file not shown.
Loading…
Reference in New Issue
Block a user