uIP 1.0
|
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 /** @} */