mirror of
https://github.com/wiiu-env/ftpiiu_plugin.git
synced 2024-12-23 11:21:49 +01:00
Report UTF8 support to clients
This commit is contained in:
parent
092142dffd
commit
13e9c38512
25
src/ftp.c
25
src/ftp.c
@ -112,7 +112,11 @@ static int32_t write_reply(client_t *client, uint16_t code, char *msg) {
|
|||||||
char *msgbuf = (char *) malloc(msglen + 1);
|
char *msgbuf = (char *) malloc(msglen + 1);
|
||||||
if (msgbuf == NULL)
|
if (msgbuf == NULL)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
if (code == 211) {
|
||||||
|
sprintf(msgbuf, "%u-%s\r\n", code, msg);
|
||||||
|
} else {
|
||||||
sprintf(msgbuf, "%u %s\r\n", code, msg);
|
sprintf(msgbuf, "%u %s\r\n", code, msg);
|
||||||
|
}
|
||||||
console_printf("Wrote reply: %s", msgbuf);
|
console_printf("Wrote reply: %s", msgbuf);
|
||||||
int32_t ret = send_exact(client->socket, msgbuf, msglen);
|
int32_t ret = send_exact(client->socket, msgbuf, msglen);
|
||||||
free(msgbuf);
|
free(msgbuf);
|
||||||
@ -223,6 +227,18 @@ static int32_t ftp_MODE(client_t *client, char *rest) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int32_t ftp_FEAT(client_t *client, char *rest) {
|
||||||
|
return write_reply(client, 211, "Features:\n UTF8\n211 End");
|
||||||
|
}
|
||||||
|
|
||||||
|
static int32_t ftp_OPTS(client_t *client, char *rest) {
|
||||||
|
if (!strcasecmp("UTF8 ON", rest)) {
|
||||||
|
return write_reply(client, 200, "OK");
|
||||||
|
} else {
|
||||||
|
return write_reply(client, 502, "Command not implemented.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static int32_t ftp_PWD(client_t *client, char *rest UNUSED) {
|
static int32_t ftp_PWD(client_t *client, char *rest UNUSED) {
|
||||||
char msg[MAXPATHLEN + 24];
|
char msg[MAXPATHLEN + 24];
|
||||||
// TODO: escape double-quotes
|
// TODO: escape double-quotes
|
||||||
@ -681,21 +697,22 @@ static int32_t ftp_UNKNOWN(client_t *client, char *rest UNUSED) {
|
|||||||
return write_reply(client, 502, "Command not implemented.");
|
return write_reply(client, 502, "Command not implemented.");
|
||||||
}
|
}
|
||||||
|
|
||||||
static const char *unauthenticated_commands[] = {"USER", "PASS", "QUIT", "REIN", "NOOP", NULL};
|
static const char *unauthenticated_commands[] = {"USER", "PASS", "QUIT", "REIN", "FEAT", "OPTS", "NOOP", NULL};
|
||||||
static const ftp_command_handler unauthenticated_handlers[] = {ftp_USER, ftp_PASS, ftp_QUIT, ftp_REIN, ftp_NOOP, ftp_NEEDAUTH};
|
static const ftp_command_handler unauthenticated_handlers[] = {ftp_USER, ftp_PASS, ftp_QUIT, ftp_REIN, ftp_FEAT, ftp_OPTS, ftp_NOOP, ftp_NEEDAUTH};
|
||||||
|
|
||||||
static const char *authenticated_commands[] = {
|
static const char *authenticated_commands[] = {
|
||||||
"USER", "PASS", "LIST", "PWD", "CWD", "CDUP",
|
"USER", "PASS", "LIST", "PWD", "CWD", "CDUP",
|
||||||
"SIZE", "PASV", "PORT", "TYPE", "SYST", "MODE",
|
"SIZE", "PASV", "PORT", "TYPE", "SYST", "MODE",
|
||||||
"RETR", "STOR", "APPE", "REST", "DELE", "MKD",
|
"RETR", "STOR", "APPE", "REST", "DELE", "MKD",
|
||||||
"RMD", "RNFR", "RNTO", "NLST", "QUIT", "REIN",
|
"RMD", "RNFR", "RNTO", "NLST", "QUIT", "REIN",
|
||||||
"SITE", "NOOP", "ALLO", NULL};
|
"SITE", "FEAT", "OPTS", "NOOP", "ALLO", NULL};
|
||||||
static const ftp_command_handler authenticated_handlers[] = {
|
static const ftp_command_handler authenticated_handlers[] = {
|
||||||
ftp_USER, ftp_PASS, ftp_LIST, ftp_PWD, ftp_CWD, ftp_CDUP,
|
ftp_USER, ftp_PASS, ftp_LIST, ftp_PWD, ftp_CWD, ftp_CDUP,
|
||||||
ftp_SIZE, ftp_PASV, ftp_PORT, ftp_TYPE, ftp_SYST, ftp_MODE,
|
ftp_SIZE, ftp_PASV, ftp_PORT, ftp_TYPE, ftp_SYST, ftp_MODE,
|
||||||
ftp_RETR, ftp_STOR, ftp_APPE, ftp_REST, ftp_DELE, ftp_MKD,
|
ftp_RETR, ftp_STOR, ftp_APPE, ftp_REST, ftp_DELE, ftp_MKD,
|
||||||
ftp_DELE, ftp_RNFR, ftp_RNTO, ftp_NLST, ftp_QUIT, ftp_REIN,
|
ftp_DELE, ftp_RNFR, ftp_RNTO, ftp_NLST, ftp_QUIT, ftp_REIN,
|
||||||
ftp_SITE, ftp_NOOP, ftp_SUPERFLUOUS, ftp_UNKNOWN};
|
ftp_SITE, ftp_FEAT, ftp_OPTS, ftp_NOOP, ftp_SUPERFLUOUS,
|
||||||
|
ftp_UNKNOWN};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
returns negative to signal an error that requires closing the connection
|
returns negative to signal an error that requires closing the connection
|
||||||
|
Loading…
Reference in New Issue
Block a user