Разбор текстового файла без сохранения (tftp)

Мне нужно проанализировать поток текстового файла после загрузки и без сохранения текстового файла на жесткий диск или SDCard по протоколу tftp. У меня есть данные в полезной нагрузке. Пожалуйста помоги.

struct pbuf {

struct pbuf *next;
void *payload;
u16_t tot_len;
u16_t len;
u8_t  type;
u8_t flags;
u16_t ref;

};

Следующий код назначает код операции и имя файла. Но как получить содержимое файла?

/* Extract the opcode from a TFTP message in a buffer */
tftp_opcode tftp_decode_op(char *buf)
{
return (tftp_opcode)(buf[1]);
}

void tftp_extract_filename(char *fname, char *buf)
{
strcpy(fname, buf + 2);
}

0

Решение

В протоколе TFTP вы сначала получаете пакет запроса записи (код операции WRQ), а затем данные в отдельных пакетах данных (код операции DATA). Вам нужно будет что-то делать при получении пакета данных, чтобы обработать содержимое файла.
Я бы порекомендовал немного почитать протокол TFTP, если вы этого еще не сделали. Обзор на http://en.wikipedia.org/wiki/Trivial_File_Transfer_Protocol#Protocol_walkthrough и спецификация (которая очень читабельна) находится в http://tools.ietf.org/html/rfc1350 .

2

Другие решения

Если ваш текстовый файл не больше, чем несколько КБ, то почему бы вам не использовать статический буфер для хранения его содержимого. В протоколе TFTP вы должны знать, в какой точке (с точки зрения источника) указывается полученный пакет. Таким образом, вы получаете буфер пакета и размер пакет. Так что просто скопируйте полученный буфер пакета в вышеупомянутый статический буфер и увеличьте выход статического буфера и т. д. Итак, наконец вы получите весь текстовый файл в статическом буфере.

0

По вопросам рекламы [email protected]