uIP 1.0
C:/asm/STM32-ethernet/ENC28J60prj/uip-master/apps/webclient/webclient.h
См. документацию.
00001 /**
00002  * \addtogroup webclient
00003  * @{
00004  */
00005 
00006 /**
00007  * \file
00008  * Header file for the HTTP client.
00009  * \author Adam Dunkels <adam@dunkels.com>
00010  */
00011 
00012 /*
00013  * Copyright (c) 2002, Adam Dunkels.
00014  * Все права зарезервированы.
00015  *
00016  * Повторное распространение, использование в исходном и двоичном виде,
00017  * с модификацией или без - разрешается, если выполняются следующие
00018  * условия:
00019  * 1. Распространение исходного кода должно сохранить вышеуказанную пометку
00020  *    копирайта, этот список условий и следующую правовую оговорку.
00021  * 2. Распространение исходного кода должно сохранить вышеуказанную пометку
00022  *    копирайта, этот список условий и следующую правовую оговорку в
00023  *    документации и/или других материалах, которые будут предоставлены
00024  *    вместе с распространяемыми материалами.
00025  * 3. Имя автора не может использоваться, чтобы подтвердить или продвинуть
00026  *    продукты, написанные с использованием этого программного обеспечения
00027  *    без специального на то разрешения.
00028  *
00029  * ЭТО ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ АВТОРОМ ``КАК ЕСТЬ'', БЕЗ
00030  * КАКОЙ-ЛИБО ЛЮБОЙ РАСШИРЕННОЙ ИЛИ ПОДРАЗУМЕВАЕМОЙ ГАРАНТИИ, ВКЛЮЧАЯ,
00031  * НО НЕ ОГРАНИЧИВАЯСЬ ЭТИМ, ГАРАНТИИ ВЫСОКОГО СПРОСА И ПРИГОДНОСТИ
00032  * ДЛЯ КОНКРЕТНОЙ ЦЕЛИ. АВТОР НИ ПРИ КАКИХ УСЛОВИЯХ НЕ ОТВЕТСТВЕНЕН
00033  * ЗА ЛЮБЫЕ УБЫТКИ - ПРЯМЫЕ, КОСВЕННЫЕ, СЛУЧАЙНЫЕ, СПЕЦИАЛЬНЫЕ, ОБРАЗЦОВЫЕ
00034  * ИЛИ ПОСЛЕДОВАТЕЛЬНЫЕ (ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ ЭТИМ, ТРЕБОВАНИЯ
00035  * ЗАМЕНЫ ТОВАРА ИЛИ СЕРВИСА; ПОТЕРИ ИСПОЛЬЗОВАНИЯ, ДАННЫХ ИЛИ ВЫГОДЫ;
00036  * ИЛИ ПРЕКРАЩЕНИЕ БИЗНЕСА), ОДНАКО ВЫЗВАННЫЕ ПО ЛЮБОЙ ТЕОРИИ ОТВЕТСТВЕННОСТИ,
00037  * ЛИБО В КОНТРАКТЕ, ПРЯМОЙ ОТВЕТСТВЕННОСТИ, ЛИБО В НАРУШЕНИИ ЗАКОННЫХ ПРАВ
00038  * (ВКЛЮЧАЯ ТАК ИЛИ ИНАЧЕ НЕБРЕЖНОСТЬ), ВОЗНИКАЮЩИЕ ВСЕГДА ИЗ ИСПОЛЬЗОВАНИЯ
00039  * ЭТОГО ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ, ДАЖЕ ЕСЛИ БЫЛО ПРЕДУПРЕЖДЕНИЕ О ВОЗМОЖНОСТИ
00040  * ТАКОГО ПОВРЕЖДЕНИЯ.
00041  *
00042  * Этот файл является частью стека uIP TCP/IP..
00043  *
00044  * $Id: webclient.h,v 1.2 2006/06/11 21:46:37 adam Exp $
00045  *
00046  */
00047 #ifndef __WEBCLIENT_H__
00048 #define __WEBCLIENT_H__
00049 
00050 
00051 #include "webclient-strings.h"
00052 #include "uipopt.h"
00053 
00054 #define WEBCLIENT_CONF_MAX_URLLEN 100
00055 
00056 struct webclient_state {
00057   u8_t timer;
00058   u8_t state;
00059   u8_t httpflag;
00060 
00061   u16_t port;
00062   char host[40];
00063   char file[WEBCLIENT_CONF_MAX_URLLEN];
00064   u16_t getrequestptr;
00065   u16_t getrequestleft;
00066   
00067   char httpheaderline[200];
00068   u16_t httpheaderlineptr;
00069 
00070   char mimetype[32];
00071 };
00072 
00073 typedef struct webclient_state uip_tcp_appstate_t;
00074 #define UIP_APPCALL webclient_appcall
00075 
00076 /**
00077  * Функция обратного вызова (callback), которая будет вызвана
00078  * из кода web-клиента, когда приняты данные HTTP.
00079  *
00080  * Эта функция должна быть реализована в модуле, который использует
00081  * код web-клиента. Функция вызывается из модуля web-клиента, когда
00082  * приняты данные HTTP. Функция не вызывается, когда приняты
00083  * заголовки HTTP, её вызов делается только для актуальных данных.
00084  *
00085  * \note Эта функция будет вызвана много раз с повторениями, когда
00086  * приняты данные, и не один раз, когда были получены все данные.
00087  *
00088  * \param data Указатель на данные, которые были приняты.
00089  * \param len Длина принятых данных.
00090  */
00091 void webclient_datahandler(char *data, u16_t len);
00092 
00093 /**
00094  * Функция обратного вызова (callback), которая вызывается из кода
00095  * web-клиента, когда с web-сервером установлено HTTP-соединение.
00096  *
00097  * Эта функция должна быть реализована в модуле, который использует
00098  * код web-клиента.
00099  */
00100 void webclient_connected(void);
00101 
00102 /**
00103  * Функция обратного вызова (callback), которая вызывается из кода
00104  * web-клиента, если истек таймаут HTTP-соединения с web-сервером.
00105  *
00106  * Эта функция должна быть реализована в модуле, который использует
00107  * код web-клиента.
00108  */
00109 void webclient_timedout(void);
00110 
00111 /**
00112  * Функция обратного вызова (callback), которая вызывается из кода
00113  * web-клиента, если HTTP-соединение с web-сервером было оборвано
00114  * (aborted) на стороне web-сервера.
00115  *
00116  * Эта функция должна быть реализована в модуле, который использует
00117  * код web-клиента.
00118  */
00119 void webclient_aborted(void);
00120 
00121 /**
00122  * Функция обратного вызова (callback), которая вызывается из кода
00123  * web-клиента, если HTTP-соединение с web-сервером было закрыто.
00124  *
00125  * Эта функция должна быть реализована в модуле, который использует
00126  * код web-клиента.
00127  */
00128 void webclient_closed(void);
00129 
00130 
00131 
00132 /**
00133  * Инициализирует модуль web-клиента.
00134  */
00135 void webclient_init(void);
00136 
00137 /**
00138  * Открывает соединение HTTP с web-сервером и запрашивает файл с
00139  * использованием метода GET.
00140  *
00141  * Эта функция открывает соединение HTTP к указанному web-серверу
00142  * и запрашивает указанный файл с использованием метода GET. Когда
00143  * соединение HTTP установлено, будет вызвана функция обратного
00144  * вызова webclient_connected(), и когда данные поступят, будет
00145  * вызвана функция обратного вызова webclient_datahandler().
00146  *
00147  * Функция обратного вызова webclient_timedout() будет вызвана, если
00148  * web-сервер не отвечает, и функция обратного вызова webclient_aborted(),
00149  * если соединение HTTP было оборвано (aborted) со стороны web-сервера.
00150  *
00151  * Когда запрос HTTP был завершен и соединение HTTP закрыто, будет
00152  * вызвана функция обратного вызова webclient_closed().
00153  *
00154  * \note Если функции передано имя хоста, оно уже должно быть в кеше
00155  * резолвера имен для того, чтобы функция могла подключиться к
00156  * web-серверу. Поэтому на вызывающий модуль ложится ответственность
00157  * на реализацию вызовов резолвера и сигнального обработчика, используемого
00158  * для сообщения об ответе на запрос резолвера.
00159  *
00160  * \param host Указатель на строку, содержащую либо имя хоста, либо
00161  * цифровой адрес IP в форме строки с точками (напримера 192.168.23.1).
00162  *
00163  * \param port Номер порта, к которому будет произведено соединение,
00164  * с порядком следования байт хоста.
00165  *
00166  * \param file Указатель на имя файла, получаемого по протоколу HTTP.
00167  *
00168  * \retval 0 если имя хоста не было найдено в кэше, или если не может
00169  * быть установлено соединение TCP.
00170  *
00171  * \retval 1 если было инициировано соединение.
00172  */
00173 unsigned char webclient_get(char *host, u16_t port, char *file);
00174 
00175 /**
00176  * Закрывает открытое в настоящий момент соединение HTTP.
00177  */
00178 void webclient_close(void);
00179 void webclient_appcall(void);
00180 
00181 /**
00182  * Получает тип MIME текущего потока данных HTTP.
00183  *
00184  * \return Указатель на строку, содержащую тип MIME. Строка может
00185  * быть пустой, если web-сервером не было сообщено от типе MIME.
00186  */
00187 char *webclient_mimetype(void);
00188 
00189 /**
00190  * Получает имя файла текущего потока данных HTTP.
00191  *
00192  * Имя файла запроса HTTP может быть изменено web-сервером, и таким
00193  * образом оно может быть не то же самое, что и имя, которое было 
00194  * указано в оригинальном запросе GET при вызове webclient_get().
00195  * Эта функция используется для получения текущего имени файла.
00196  *
00197  * \return Указатель на текущее имя файла.
00198  */
00199 char *webclient_filename(void);
00200 
00201 /**
00202  * Получение имени хоста текущего потока данных HTTP.
00203  *
00204  * Имя хоста запроса HTTP может быть изменено web-сервером, и таким
00205  * образом оно может быть не то же самое, что и имя, которое было 
00206  * указано в оригинальном запросе GET при вызове webclient_get().
00207  * Эта функция используется для получения текущего имени хоста.
00208  *
00209  * \return Указатель на текущее имя хоста.
00210  */
00211 char *webclient_hostname(void);
00212 
00213 /**
00214  * Получение номера порта текущего потока данных HTTP.
00215  *
00216  * Номер порта запроса HTTP может быть изменен web-сервером, и таким
00217  * образом он может быть не тот же самый, что и порт, который был 
00218  * указан в оригинальном запросе GET при вызове webclient_get().
00219  * Эта функция используется для получения текущего номера порта.
00220  *
00221  * \return Номер порта текущего потока данных HTTP, с порядком
00222  * следования байт хоста.
00223  */
00224 unsigned short webclient_port(void);
00225 
00226 
00227 
00228 #endif /* __WEBCLIENT_H__ */
00229 
00230 /** @} */