uIP 1.0
|
/** * \addtogroup webclient * @{ */ /** * \file * Header file for the HTTP client. * \author Adam Dunkels <adam@dunkels.com> */ /* * Copyright (c) 2002, Adam Dunkels. * Все права зарезервированы. * * Повторное распространение, использование в исходном и двоичном виде, * с модификацией или без - разрешается, если выполняются следующие * условия: * 1. Распространение исходного кода должно сохранить вышеуказанную пометку * копирайта, этот список условий и следующую правовую оговорку. * 2. Распространение исходного кода должно сохранить вышеуказанную пометку * копирайта, этот список условий и следующую правовую оговорку в * документации и/или других материалах, которые будут предоставлены * вместе с распространяемыми материалами. * 3. Имя автора не может использоваться, чтобы подтвердить или продвинуть * продукты, написанные с использованием этого программного обеспечения * без специального на то разрешения. * * ЭТО ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ АВТОРОМ ``КАК ЕСТЬ'', БЕЗ * КАКОЙ-ЛИБО ЛЮБОЙ РАСШИРЕННОЙ ИЛИ ПОДРАЗУМЕВАЕМОЙ ГАРАНТИИ, ВКЛЮЧАЯ, * НО НЕ ОГРАНИЧИВАЯСЬ ЭТИМ, ГАРАНТИИ ВЫСОКОГО СПРОСА И ПРИГОДНОСТИ * ДЛЯ КОНКРЕТНОЙ ЦЕЛИ. АВТОР НИ ПРИ КАКИХ УСЛОВИЯХ НЕ ОТВЕТСТВЕНЕН * ЗА ЛЮБЫЕ УБЫТКИ - ПРЯМЫЕ, КОСВЕННЫЕ, СЛУЧАЙНЫЕ, СПЕЦИАЛЬНЫЕ, ОБРАЗЦОВЫЕ * ИЛИ ПОСЛЕДОВАТЕЛЬНЫЕ (ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ ЭТИМ, ТРЕБОВАНИЯ * ЗАМЕНЫ ТОВАРА ИЛИ СЕРВИСА; ПОТЕРИ ИСПОЛЬЗОВАНИЯ, ДАННЫХ ИЛИ ВЫГОДЫ; * ИЛИ ПРЕКРАЩЕНИЕ БИЗНЕСА), ОДНАКО ВЫЗВАННЫЕ ПО ЛЮБОЙ ТЕОРИИ ОТВЕТСТВЕННОСТИ, * ЛИБО В КОНТРАКТЕ, ПРЯМОЙ ОТВЕТСТВЕННОСТИ, ЛИБО В НАРУШЕНИИ ЗАКОННЫХ ПРАВ * (ВКЛЮЧАЯ ТАК ИЛИ ИНАЧЕ НЕБРЕЖНОСТЬ), ВОЗНИКАЮЩИЕ ВСЕГДА ИЗ ИСПОЛЬЗОВАНИЯ * ЭТОГО ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ, ДАЖЕ ЕСЛИ БЫЛО ПРЕДУПРЕЖДЕНИЕ О ВОЗМОЖНОСТИ * ТАКОГО ПОВРЕЖДЕНИЯ. * * Этот файл является частью стека uIP TCP/IP.. * * $Id: webclient.h,v 1.2 2006/06/11 21:46:37 adam Exp $ * */ #ifndef __WEBCLIENT_H__ #define __WEBCLIENT_H__ #include "webclient-strings.h" #include "uipopt.h" #define WEBCLIENT_CONF_MAX_URLLEN 100 struct webclient_state { u8_t timer; u8_t state; u8_t httpflag; u16_t port; char host[40]; char file[WEBCLIENT_CONF_MAX_URLLEN]; u16_t getrequestptr; u16_t getrequestleft; char httpheaderline[200]; u16_t httpheaderlineptr; char mimetype[32]; }; typedef struct webclient_state uip_tcp_appstate_t; #define UIP_APPCALL webclient_appcall /** * Функция обратного вызова (callback), которая будет вызвана * из кода web-клиента, когда приняты данные HTTP. * * Эта функция должна быть реализована в модуле, который использует * код web-клиента. Функция вызывается из модуля web-клиента, когда * приняты данные HTTP. Функция не вызывается, когда приняты * заголовки HTTP, её вызов делается только для актуальных данных. * * \note Эта функция будет вызвана много раз с повторениями, когда * приняты данные, и не один раз, когда были получены все данные. * * \param data Указатель на данные, которые были приняты. * \param len Длина принятых данных. */ void webclient_datahandler(char *data, u16_t len); /** * Функция обратного вызова (callback), которая вызывается из кода * web-клиента, когда с web-сервером установлено HTTP-соединение. * * Эта функция должна быть реализована в модуле, который использует * код web-клиента. */ void webclient_connected(void); /** * Функция обратного вызова (callback), которая вызывается из кода * web-клиента, если истек таймаут HTTP-соединения с web-сервером. * * Эта функция должна быть реализована в модуле, который использует * код web-клиента. */ void webclient_timedout(void); /** * Функция обратного вызова (callback), которая вызывается из кода * web-клиента, если HTTP-соединение с web-сервером было оборвано * (aborted) на стороне web-сервера. * * Эта функция должна быть реализована в модуле, который использует * код web-клиента. */ void webclient_aborted(void); /** * Функция обратного вызова (callback), которая вызывается из кода * web-клиента, если HTTP-соединение с web-сервером было закрыто. * * Эта функция должна быть реализована в модуле, который использует * код web-клиента. */ void webclient_closed(void); /** * Инициализирует модуль web-клиента. */ void webclient_init(void); /** * Открывает соединение HTTP с web-сервером и запрашивает файл с * использованием метода GET. * * Эта функция открывает соединение HTTP к указанному web-серверу * и запрашивает указанный файл с использованием метода GET. Когда * соединение HTTP установлено, будет вызвана функция обратного * вызова webclient_connected(), и когда данные поступят, будет * вызвана функция обратного вызова webclient_datahandler(). * * Функция обратного вызова webclient_timedout() будет вызвана, если * web-сервер не отвечает, и функция обратного вызова webclient_aborted(), * если соединение HTTP было оборвано (aborted) со стороны web-сервера. * * Когда запрос HTTP был завершен и соединение HTTP закрыто, будет * вызвана функция обратного вызова webclient_closed(). * * \note Если функции передано имя хоста, оно уже должно быть в кеше * резолвера имен для того, чтобы функция могла подключиться к * web-серверу. Поэтому на вызывающий модуль ложится ответственность * на реализацию вызовов резолвера и сигнального обработчика, используемого * для сообщения об ответе на запрос резолвера. * * \param host Указатель на строку, содержащую либо имя хоста, либо * цифровой адрес IP в форме строки с точками (напримера 192.168.23.1). * * \param port Номер порта, к которому будет произведено соединение, * с порядком следования байт хоста. * * \param file Указатель на имя файла, получаемого по протоколу HTTP. * * \retval 0 если имя хоста не было найдено в кэше, или если не может * быть установлено соединение TCP. * * \retval 1 если было инициировано соединение. */ unsigned char webclient_get(char *host, u16_t port, char *file); /** * Закрывает открытое в настоящий момент соединение HTTP. */ void webclient_close(void); void webclient_appcall(void); /** * Получает тип MIME текущего потока данных HTTP. * * \return Указатель на строку, содержащую тип MIME. Строка может * быть пустой, если web-сервером не было сообщено от типе MIME. */ char *webclient_mimetype(void); /** * Получает имя файла текущего потока данных HTTP. * * Имя файла запроса HTTP может быть изменено web-сервером, и таким * образом оно может быть не то же самое, что и имя, которое было * указано в оригинальном запросе GET при вызове webclient_get(). * Эта функция используется для получения текущего имени файла. * * \return Указатель на текущее имя файла. */ char *webclient_filename(void); /** * Получение имени хоста текущего потока данных HTTP. * * Имя хоста запроса HTTP может быть изменено web-сервером, и таким * образом оно может быть не то же самое, что и имя, которое было * указано в оригинальном запросе GET при вызове webclient_get(). * Эта функция используется для получения текущего имени хоста. * * \return Указатель на текущее имя хоста. */ char *webclient_hostname(void); /** * Получение номера порта текущего потока данных HTTP. * * Номер порта запроса HTTP может быть изменен web-сервером, и таким * образом он может быть не тот же самый, что и порт, который был * указан в оригинальном запросе GET при вызове webclient_get(). * Эта функция используется для получения текущего номера порта. * * \return Номер порта текущего потока данных HTTP, с порядком * следования байт хоста. */ unsigned short webclient_port(void); #endif /* __WEBCLIENT_H__ */ /** @} */