examples/ftpd: Add support for choosing address family

choose the network protocol (ipv4 or ipv6) to bind network in setting ftpd

Signed-off-by: wangchen <wangchen41@xiaomi.com>
This commit is contained in:
wangchen 2023-03-23 10:14:26 +08:00 committed by Petro Karashchenko
parent 75ddde9c56
commit 93105568c0

View File

@ -154,6 +154,15 @@ static void ftpd_accounts(FTPD_SESSION handle)
}
}
static void hint(void)
{
fprintf(stderr,
"Usage: ftpd [-46] \n\
\t-4 Use IPv4\n\
\t-6 Use IPv6\n\
");
}
/****************************************************************************
* Name: ftpd_daemon
****************************************************************************/
@ -161,28 +170,51 @@ static void ftpd_accounts(FTPD_SESSION handle)
int ftpd_daemon(int s_argc, char **s_argv)
{
FTPD_SESSION handle;
int ret;
int ret = EXIT_FAILURE;
int option;
int family = AF_UNSPEC;
/* The FTPD daemon has been started */
g_ftpdglob.running = true;
printf("FTP daemon [%d] started\n", g_ftpdglob.pid);
while ((option = getopt(s_argc, &s_argv[1], "46")) != ERROR)
{
switch (option)
{
case '4':
family = AF_INET;
break;
case '6':
family = AF_INET6;
break;
default:
break;
}
}
if (family == AF_UNSPEC)
{
hint();
goto out;
}
if ((optind + 1) < s_argc)
{
fprintf(stderr, "%s: Too many arguments\n", s_argv[1]);
hint();
goto out;
}
/* Open FTPD */
#if ADDR_FAMILY == AF_INET6
handle = ftpd_open(CONFIG_EXAMPLES_FTPD_PORT, AF_INET6);
#else
handle = ftpd_open(CONFIG_EXAMPLES_FTPD_PORT, AF_INET);
#endif
handle = ftpd_open(CONFIG_EXAMPLES_FTPD_PORT, family);
if (!handle)
{
printf("FTP daemon [%d] failed to open FTPD\n", g_ftpdglob.pid);
g_ftpdglob.running = false;
g_ftpdglob.stop = false;
g_ftpdglob.pid = -1;
return EXIT_FAILURE;
goto out;
}
/* Configure accounts */
@ -213,12 +245,15 @@ int ftpd_daemon(int s_argc, char **s_argv)
/* Close the FTPD server and exit. */
printf("FTP daemon [%d] stopping\n", g_ftpdglob.pid);
ftpd_close(handle);
ret = EXIT_SUCCESS;
out:
g_ftpdglob.running = false;
g_ftpdglob.stop = false;
g_ftpdglob.pid = -1;
ftpd_close(handle);
return EXIT_SUCCESS;
return ret;
}
/****************************************************************************
@ -261,7 +296,7 @@ int main(int argc, FAR char *argv[])
printf("Starting the FTP daemon\n");
g_ftpdglob.pid = task_create("FTP daemon", CONFIG_EXAMPLES_FTPD_PRIO,
CONFIG_EXAMPLES_FTPD_STACKSIZE,
ftpd_daemon, NULL);
ftpd_daemon, argv);
if (g_ftpdglob.pid < 0)
{
printf("Failed to start the FTP daemon: %d\n", errno);