mirror of
https://github.com/wiiu-env/ftpiiu_plugin.git
synced 2024-11-16 17:59:19 +01:00
Formatting and cleanup
This commit is contained in:
parent
8c9c2f3bb1
commit
5e6e8bdb53
@ -11,35 +11,34 @@ BackgroundThread::BackgroundThread() : BackgroundThreadWrapper(BackgroundThread:
|
|||||||
this->serverSocket = create_server(PORT);
|
this->serverSocket = create_server(PORT);
|
||||||
DCFlushRange(&(this->serverSocket), 4);
|
DCFlushRange(&(this->serverSocket), 4);
|
||||||
mutex.unlock();
|
mutex.unlock();
|
||||||
|
DEBUG_FUNCTION_LINE("Resume Thread");
|
||||||
CThread::resumeThread();
|
CThread::resumeThread();
|
||||||
}
|
}
|
||||||
|
|
||||||
BackgroundThread::~BackgroundThread() {
|
BackgroundThread::~BackgroundThread() {
|
||||||
DEBUG_FUNCTION_LINE("Shutting down FTP Server");
|
DEBUG_FUNCTION_LINE("Shutting down FTP Server");
|
||||||
if (this->serverSocket != -1) {
|
mutex.lock();
|
||||||
mutex.lock();
|
if (this->serverSocket >= 0) {
|
||||||
cleanup_ftp();
|
cleanup_ftp();
|
||||||
network_close(this->serverSocket);
|
network_close(this->serverSocket);
|
||||||
mutex.unlock();
|
|
||||||
this->serverSocket = -1;
|
this->serverSocket = -1;
|
||||||
}
|
}
|
||||||
|
mutex.unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOL BackgroundThread::whileLoop() {
|
BOOL BackgroundThread::whileLoop() {
|
||||||
if (this->serverSocket != -1) {
|
mutex.lock();
|
||||||
mutex.lock();
|
if (this->serverSocket >= 0) {
|
||||||
network_down = process_ftp_events(this->serverSocket);
|
network_down = process_ftp_events(this->serverSocket);
|
||||||
mutex.unlock();
|
|
||||||
if (network_down) {
|
if (network_down) {
|
||||||
DEBUG_FUNCTION_LINE("Network is down %d", this->serverSocket);
|
DEBUG_FUNCTION_LINE("Network is down %d", this->serverSocket);
|
||||||
mutex.lock();
|
|
||||||
cleanup_ftp();
|
cleanup_ftp();
|
||||||
network_close(this->serverSocket);
|
network_close(this->serverSocket);
|
||||||
this->serverSocket = -1;
|
this->serverSocket = -1;
|
||||||
DCFlushRange(&(this->serverSocket), 4);
|
DCFlushRange(&(this->serverSocket), 4);
|
||||||
mutex.unlock();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
mutex.unlock();
|
||||||
OSSleepTicks(OSMillisecondsToTicks(16));
|
OSSleepTicks(OSMillisecondsToTicks(16));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -9,25 +9,18 @@
|
|||||||
class BackgroundThread : BackgroundThreadWrapper {
|
class BackgroundThread : BackgroundThreadWrapper {
|
||||||
public:
|
public:
|
||||||
static BackgroundThread *getInstance() {
|
static BackgroundThread *getInstance() {
|
||||||
DCFlushRange(&instance, sizeof(BackgroundThread));
|
|
||||||
ICInvalidateRange(&instance, sizeof(BackgroundThread));
|
|
||||||
if (instance == nullptr) {
|
if (instance == nullptr) {
|
||||||
instance = new BackgroundThread();
|
instance = new BackgroundThread();
|
||||||
DCFlushRange(&instance, sizeof(BackgroundThread));
|
DCFlushRange(&instance, 4);
|
||||||
ICInvalidateRange(&instance, sizeof(BackgroundThread));
|
|
||||||
}
|
}
|
||||||
return instance;
|
return instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void destroyInstance() {
|
static void destroyInstance() {
|
||||||
DCFlushRange(&instance, sizeof(BackgroundThread));
|
|
||||||
ICInvalidateRange(&instance, sizeof(BackgroundThread));
|
|
||||||
OSSleepTicks(OSSecondsToTicks(1));
|
|
||||||
if (instance != nullptr) {
|
if (instance != nullptr) {
|
||||||
delete instance;
|
delete instance;
|
||||||
instance = nullptr;
|
instance = nullptr;
|
||||||
DCFlushRange(&instance, sizeof(BackgroundThread));
|
DCFlushRange(&instance, 4);
|
||||||
ICInvalidateRange(&instance, sizeof(BackgroundThread));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -56,8 +56,7 @@ static uint8_t num_clients = 0;
|
|||||||
static uint16_t passive_port = 1024;
|
static uint16_t passive_port = 1024;
|
||||||
static char *password = NULL;
|
static char *password = NULL;
|
||||||
|
|
||||||
void console_printf(const char *format, ...) {
|
#define console_printf(FMT, ARGS...) DEBUG_FUNCTION_LINE_WRITE(FMT, ## ARGS);
|
||||||
}
|
|
||||||
|
|
||||||
typedef int32_t (*data_connection_callback)(int32_t data_socket, void *arg);
|
typedef int32_t (*data_connection_callback)(int32_t data_socket, void *arg);
|
||||||
|
|
||||||
@ -330,7 +329,7 @@ static int32_t ftp_PASV(client_t *client, char *rest UNUSED) {
|
|||||||
char reply[49];
|
char reply[49];
|
||||||
uint16_t port = bindAddress.sin_port;
|
uint16_t port = bindAddress.sin_port;
|
||||||
uint32_t ip = network_gethostip();
|
uint32_t ip = network_gethostip();
|
||||||
struct in_addr addr;
|
struct in_addr addr = {};
|
||||||
addr.s_addr = ip;
|
addr.s_addr = ip;
|
||||||
console_printf("Listening for data connections at %s:%u...\n", inet_ntoa(addr), port);
|
console_printf("Listening for data connections at %s:%u...\n", inet_ntoa(addr), port);
|
||||||
sprintf(reply, "Entering Passive Mode (%u,%u,%u,%u,%u,%u).", (ip >> 24) & 0xff, (ip >> 16) & 0xff, (ip >> 8) & 0xff, ip & 0xff, (port >> 8) & 0xff, port & 0xff);
|
sprintf(reply, "Entering Passive Mode (%u,%u,%u,%u,%u,%u).", (ip >> 24) & 0xff, (ip >> 16) & 0xff, (ip >> 8) & 0xff, ip & 0xff, (port >> 8) & 0xff, port & 0xff);
|
||||||
@ -748,7 +747,7 @@ void cleanup_ftp() {
|
|||||||
static bool process_accept_events(int32_t server) {
|
static bool process_accept_events(int32_t server) {
|
||||||
int32_t peer;
|
int32_t peer;
|
||||||
struct sockaddr_in client_address;
|
struct sockaddr_in client_address;
|
||||||
int32_t addrlen = sizeof(client_address);
|
socklen_t addrlen = sizeof(client_address);
|
||||||
while ((peer = network_accept(server, (struct sockaddr *) &client_address, &addrlen)) != -EAGAIN) {
|
while ((peer = network_accept(server, (struct sockaddr *) &client_address, &addrlen)) != -EAGAIN) {
|
||||||
if (peer < 0) {
|
if (peer < 0) {
|
||||||
console_printf("Error accepting connection: [%i] %s\n", -peer, strerror(-peer));
|
console_printf("Error accepting connection: [%i] %s\n", -peer, strerror(-peer));
|
||||||
@ -807,7 +806,7 @@ static void process_data_events(client_t *client) {
|
|||||||
if (!client->data_connection_connected) {
|
if (!client->data_connection_connected) {
|
||||||
if (client->passive_socket >= 0) {
|
if (client->passive_socket >= 0) {
|
||||||
struct sockaddr_in data_peer_address;
|
struct sockaddr_in data_peer_address;
|
||||||
int32_t addrlen = sizeof(data_peer_address);
|
socklen_t addrlen = sizeof(data_peer_address);
|
||||||
result = network_accept(client->passive_socket, (struct sockaddr *) &data_peer_address, &addrlen);
|
result = network_accept(client->passive_socket, (struct sockaddr *) &data_peer_address, &addrlen);
|
||||||
if (result >= 0) {
|
if (result >= 0) {
|
||||||
client->data_socket = result;
|
client->data_socket = result;
|
||||||
|
18
src/main.cpp
18
src/main.cpp
@ -11,9 +11,6 @@
|
|||||||
#include "virtualpath.h"
|
#include "virtualpath.h"
|
||||||
#include "BackgroundThread.hpp"
|
#include "BackgroundThread.hpp"
|
||||||
|
|
||||||
#define MAX_CONSOLE_LINES_TV 27
|
|
||||||
#define MAX_CONSOLE_LINES_DRC 18
|
|
||||||
|
|
||||||
WUPS_PLUGIN_NAME("FTPiiU");
|
WUPS_PLUGIN_NAME("FTPiiU");
|
||||||
WUPS_PLUGIN_DESCRIPTION("FTP Server");
|
WUPS_PLUGIN_DESCRIPTION("FTP Server");
|
||||||
WUPS_PLUGIN_VERSION("0.1");
|
WUPS_PLUGIN_VERSION("0.1");
|
||||||
@ -39,11 +36,15 @@ ON_APPLICATION_START() {
|
|||||||
//! Initialize FS *
|
//! Initialize FS *
|
||||||
//!*******************************************************************
|
//!*******************************************************************
|
||||||
|
|
||||||
|
VirtualMountDevice("fs:/");
|
||||||
|
AddVirtualFSPath("vol", nullptr, nullptr);
|
||||||
|
AddVirtualFSVOLPath("external01", nullptr, nullptr);
|
||||||
|
AddVirtualFSVOLPath("content", nullptr, nullptr);
|
||||||
|
|
||||||
DEBUG_FUNCTION_LINE("IOSUHAX_Open");
|
DEBUG_FUNCTION_LINE("IOSUHAX_Open");
|
||||||
int res = IOSUHAX_Open(nullptr);
|
int res = IOSUHAX_Open(nullptr);
|
||||||
if (res < 0) {
|
if (res < 0) {
|
||||||
DEBUG_FUNCTION_LINE("IOSUHAX_open failed");
|
DEBUG_FUNCTION_LINE("IOSUHAX_open failed");
|
||||||
VirtualMountDevice("fs:/");
|
|
||||||
} else {
|
} else {
|
||||||
iosuhaxMount = 1;
|
iosuhaxMount = 1;
|
||||||
//fatInitDefault();
|
//fatInitDefault();
|
||||||
@ -65,7 +66,6 @@ ON_APPLICATION_START() {
|
|||||||
mount_fs("storage_mlc", fsaFd, nullptr, "/vol/storage_mlc01");
|
mount_fs("storage_mlc", fsaFd, nullptr, "/vol/storage_mlc01");
|
||||||
mount_fs("storage_usb", fsaFd, nullptr, "/vol/storage_usb01");
|
mount_fs("storage_usb", fsaFd, nullptr, "/vol/storage_usb01");
|
||||||
|
|
||||||
VirtualMountDevice("fs:/");
|
|
||||||
VirtualMountDevice("slccmpt01:/");
|
VirtualMountDevice("slccmpt01:/");
|
||||||
VirtualMountDevice("storage_odd_tickets:/");
|
VirtualMountDevice("storage_odd_tickets:/");
|
||||||
VirtualMountDevice("storage_odd_updates:/");
|
VirtualMountDevice("storage_odd_updates:/");
|
||||||
@ -75,10 +75,6 @@ ON_APPLICATION_START() {
|
|||||||
VirtualMountDevice("storage_mlc:/");
|
VirtualMountDevice("storage_mlc:/");
|
||||||
VirtualMountDevice("storage_usb:/");
|
VirtualMountDevice("storage_usb:/");
|
||||||
VirtualMountDevice("usb:/");
|
VirtualMountDevice("usb:/");
|
||||||
|
|
||||||
AddVirtualFSPath("vol", nullptr, nullptr);
|
|
||||||
AddVirtualFSVOLPath("external01", nullptr, nullptr);
|
|
||||||
AddVirtualFSVOLPath("content", nullptr, nullptr);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
thread = BackgroundThread::getInstance();
|
thread = BackgroundThread::getInstance();
|
||||||
@ -93,6 +89,8 @@ ON_APPLICATION_REQUESTS_EXIT() {
|
|||||||
DEBUG_FUNCTION_LINE("Ending ftp server");
|
DEBUG_FUNCTION_LINE("Ending ftp server");
|
||||||
stopThread();
|
stopThread();
|
||||||
|
|
||||||
|
DEBUG_FUNCTION_LINE("Ended ftp Server.");
|
||||||
|
|
||||||
if (iosuhaxMount) {
|
if (iosuhaxMount) {
|
||||||
IOSUHAX_sdio_disc_interface.shutdown();
|
IOSUHAX_sdio_disc_interface.shutdown();
|
||||||
IOSUHAX_usb_disc_interface.shutdown();
|
IOSUHAX_usb_disc_interface.shutdown();
|
||||||
@ -109,7 +107,9 @@ ON_APPLICATION_REQUESTS_EXIT() {
|
|||||||
IOSUHAX_Close();
|
IOSUHAX_Close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DEBUG_FUNCTION_LINE("Unmount virtual paths");
|
||||||
UnmountVirtualPaths();
|
UnmountVirtualPaths();
|
||||||
|
|
||||||
deinitLogging();
|
deinitLogging();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
19
src/net.c
19
src/net.c
@ -67,7 +67,7 @@ void initialise_network() {
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int32_t network_socket(uint32_t domain, uint32_t type, uint32_t protocol) {
|
int32_t network_socket(int32_t domain, int32_t type, int32_t protocol) {
|
||||||
int sock = socket(domain, type, protocol);
|
int sock = socket(domain, type, protocol);
|
||||||
if (sock < 0) {
|
if (sock < 0) {
|
||||||
int err = -wiiu_geterrno();
|
int err = -wiiu_geterrno();
|
||||||
@ -94,7 +94,7 @@ int32_t network_listen(int32_t s, uint32_t backlog) {
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t network_accept(int32_t s, struct sockaddr *addr, int32_t *addrlen) {
|
int32_t network_accept(int32_t s, struct sockaddr *addr, socklen_t *addrlen) {
|
||||||
int res = accept(s, addr, addrlen);
|
int res = accept(s, addr, addrlen);
|
||||||
if (res < 0) {
|
if (res < 0) {
|
||||||
int err = -wiiu_geterrno();
|
int err = -wiiu_geterrno();
|
||||||
@ -144,10 +144,17 @@ int32_t network_write(int32_t s, const void *mem, int32_t len) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int32_t network_close(int32_t s) {
|
int32_t network_close(int32_t s) {
|
||||||
if (s < 0)
|
if (s < 0) {
|
||||||
return -1;
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
return close(s);
|
int res = close(s);
|
||||||
|
|
||||||
|
if (res < 0) {
|
||||||
|
int err = -wiiu_geterrno();
|
||||||
|
return (err < 0) ? err : res;
|
||||||
|
}
|
||||||
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t set_blocking(int32_t s, bool blocking) {
|
int32_t set_blocking(int32_t s, bool blocking) {
|
||||||
@ -163,9 +170,9 @@ int32_t network_close_blocking(int32_t s) {
|
|||||||
|
|
||||||
int32_t create_server(uint16_t port) {
|
int32_t create_server(uint16_t port) {
|
||||||
int32_t server = network_socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
|
int32_t server = network_socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
|
||||||
if (server < 0)
|
if (server < 0) {
|
||||||
return -1;
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
set_blocking(server, false);
|
set_blocking(server, false);
|
||||||
uint32_t enable = 1;
|
uint32_t enable = 1;
|
||||||
|
@ -32,7 +32,6 @@ extern "C"{
|
|||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/socket.h>
|
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
#include <arpa/inet.h>
|
#include <arpa/inet.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
@ -43,13 +42,13 @@ extern "C"{
|
|||||||
void initialise_network();
|
void initialise_network();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int32_t network_socket(uint32_t domain, uint32_t type, uint32_t protocol);
|
int32_t network_socket(int32_t domain, int32_t type, int32_t protocol);
|
||||||
|
|
||||||
int32_t network_bind(int32_t s, struct sockaddr *name, int32_t namelen);
|
int32_t network_bind(int32_t s, struct sockaddr *name, int32_t namelen);
|
||||||
|
|
||||||
int32_t network_listen(int32_t s, uint32_t backlog);
|
int32_t network_listen(int32_t s, uint32_t backlog);
|
||||||
|
|
||||||
int32_t network_accept(int32_t s, struct sockaddr *addr, int32_t *addrlen);
|
int32_t network_accept(int32_t s, struct sockaddr *addr, socklen_t *addrlen);
|
||||||
|
|
||||||
int32_t network_connect(int32_t s, struct sockaddr *, int32_t);
|
int32_t network_connect(int32_t s, struct sockaddr *, int32_t);
|
||||||
|
|
||||||
|
@ -23,12 +23,7 @@ protected:
|
|||||||
private:
|
private:
|
||||||
void executeThread() override;
|
void executeThread() override;
|
||||||
|
|
||||||
/**
|
|
||||||
Called when a connection has be accepted.
|
|
||||||
**/
|
|
||||||
virtual BOOL whileLoop() = 0;
|
virtual BOOL whileLoop() = 0;
|
||||||
|
|
||||||
volatile int32_t exitThread = 0;
|
volatile int32_t exitThread = 0;
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user