Цитата(Сергей Борщ @ Jun 29 2007, 12:54)

Можно кратенький ликбез для чайников - почему? Мне предстоит в ближайшее время организовать что-то фтп-подобное в своем устройстве (стек на базе визнета). Пока собираю всю пробегающую мимо информацию.
Да не пугайте вы человека... В создании FTP сервера даже с нуля нет ничего "божественного"...
И наличие BSD сокетов или еще чего-то подобного вообще не обязательно, хотя, конечно удобнее...
Для начала создайте в UIP слушающий порт (для командного порта 21) типа так:
uip_listen(HTONS(21));
принятые пакеты выводите в отладку, там только ASCII команды. По формату постепенно добавляйте функциональности...
Конечно, необходимо наличие хоть какой файловой системы для пересылки файлов..
Вот мой минимально необходимый набор команд, которые мне были необходимы для реализации:
команда, число аргументов, уровень доступа, функция обработки
static const CMDINFO cmdtable[] =
{
{ "user", 1, 0, ftp_cmd_user },
{ "pass", 1, 1, ftp_cmd_pass },
{ "syst", 0, 2, ftp_cmd_notimp },
{ "abor", 0, 1, ftp_cmd_abor },
{ "quit", 0, 0, ftp_cmd_quit },
{ "pwd" , 0, 2, ftp_cmd_pwd },
{ "cwd" , 1, 2, ftp_cmd_cwd },
{ "type", 1, 2, ftp_cmd_type },
{ "port", 1, 2, ftp_cmd_port },
{ "pasv", 0, 2, ftp_cmd_pasv },
{ "rest", 1, 2, ftp_cmd_rest },
{ "list", 0, 2, ftp_cmd_list },
{ "dele", 1, 2, ftp_cmd_dele },
{ "mkd" , 1, 2, ftp_cmd_mkd },
{ "rmd" , 1, 2, ftp_cmd_rmd },
{ "retr", 1, 2, ftp_cmd_retr },
{ "stor", 1, 2, ftp_cmd_stor },
{ "appe", 1, 2, ftp_cmd_appe },
{ "size", 1, 2, ftp_cmd_size },
{ "mdtm", 1, 2, ftp_cmd_notimp },
{ "opts", 0, 2, ftp_cmd_notimp },
{ "site", 0, 2, ftp_cmd_notimp },
{ "help", 0, 0, ftp_cmd_help },
{ "" , 0, 0, NULL }
};
При передаче файлов по командам retr и stor необходимо открывать еще и дата порт 20, причем в зависимости от режима pasv или port, или клиент коннектится к серверу или сервер конекктится к клиенту для передачи собственно самих данных...
Если нужна только передача файлов от устройства, то dele, mkd, stor, appe не нужны...
Дерзайте...