реклама на сайте
подробности

 
 
> LwIP 1.3.2 HTTP
k000858
сообщение Apr 2 2013, 14:44
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 319
Регистрация: 31-01-12
Пользователь №: 69 978



имеется web сервер на lwip, страничка с методом POST, библиотека contrib httpserver_raw

С некоторых браузиров (например Safari) запрос запрос приходит в 2х пакетах (2 сегмента) и так уж получается, что сами параметры оказываются именно во втором пакете, который LwIP почему то напрочь игнорит.
в библиотеке есть дифайн LWIP_HTTPD_SUPPORT_REQUESTLIST, как я понимаю именно он включает поддержку HTTP запроса частями, к сожалению, его включение ничего не даёт. кто работал с библиотекой, подскажите как отпарсить параметры с помощью этой библы + если запрос в 2х частях
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
scifi
сообщение Apr 2 2013, 15:15
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Можно перейти на lwip-1.4.x, там HTTP сервер существенно доработан.
Go to the top of the page
 
+Quote Post
k000858
сообщение Apr 2 2013, 15:30
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 319
Регистрация: 31-01-12
Пользователь №: 69 978



Цитата(scifi @ Apr 2 2013, 19:15) *
Можно перейти на lwip-1.4.x, там HTTP сервер существенно доработан.

боюсь, мне пока переход не осилить. проект на stm32f407

Цитата(kan35 @ Apr 2 2013, 19:19) *
lwIP не имеет HTTP ни сервера ни клиента в своем составе, проблема в библиотеке которая поверх работает.

к lwip идет набор библиотек contrib http://download.savannah.gnu.org/releases/lwip/drivers/ из которой и была взята библиотека HTTP сервера

Сообщение отредактировал k000858 - Apr 2 2013, 15:31
Go to the top of the page
 
+Quote Post
scifi
сообщение Apr 2 2013, 17:40
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(k000858 @ Apr 2 2013, 19:30) *
боюсь, мне пока переход не осилить. проект на stm32f407

Ну тогда можно попытаться сделать так, чтобы запрос приходил в 1 сегменте, изменяя настройки lwip.
Go to the top of the page
 
+Quote Post
k000858
сообщение Apr 2 2013, 17:46
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 319
Регистрация: 31-01-12
Пользователь №: 69 978



Цитата(scifi @ Apr 2 2013, 21:40) *
Ну тогда можно попытаться сделать так, чтобы запрос приходил в 1 сегменте, изменяя настройки lwip.

сейчас такие настройки. запрос почему то разделился на два сегмента в 536 и 116 байт
пробовал PBUF_POOL_BUFSIZE делать 1024, результата не принесло
CODE
/* ---------- Memory options ---------- */
/* MEM_ALIGNMENT: should be set to the alignment of the CPU for which
lwIP is compiled. 4 byte alignment -> define MEM_ALIGNMENT to 4, 2
byte alignment -> define MEM_ALIGNMENT to 2. */
#define MEM_ALIGNMENT 4

/* MEM_SIZE: the size of the heap memory. If the application will send
a lot of data that needs to be copied, this should be set high. */
#define MEM_SIZE (10*1024)

/* MEMP_NUM_PBUF: the number of memp struct pbufs. If the application
sends a lot of data out of ROM (or other static memory), this
should be set high. */
#define MEMP_NUM_PBUF 10
/* MEMP_NUM_UDP_PCB: the number of UDP protocol control blocks. One
per active UDP "connection". */
#define MEMP_NUM_UDP_PCB 6
/* MEMP_NUM_TCP_PCB: the number of simulatenously active TCP
connections. */
#define MEMP_NUM_TCP_PCB 10
/* MEMP_NUM_TCP_PCB_LISTEN: the number of listening TCP
connections. */
#define MEMP_NUM_TCP_PCB_LISTEN 6
/* MEMP_NUM_TCP_SEG: the number of simultaneously queued TCP
segments. */
#define MEMP_NUM_TCP_SEG 12
/* MEMP_NUM_SYS_TIMEOUT: the number of simulateously active
timeouts. */
#define MEMP_NUM_SYS_TIMEOUT 3


/* ---------- Pbuf options ---------- */
/* PBUF_POOL_SIZE: the number of buffers in the pbuf pool. */
#define PBUF_POOL_SIZE 12

/* PBUF_POOL_BUFSIZE: the size of each pbuf in the pbuf pool. */
#define PBUF_POOL_BUFSIZE 512


/* ---------- TCP options ---------- */
#define LWIP_TCP 1
#define TCP_TTL 255

/* Controls if TCP should queue segments that arrive out of
order. Define to 0 if your device is low on memory. */
#define TCP_QUEUE_OOSEQ 0

/* TCP Maximum segment size. */
#define TCP_MSS (1500 - 40) /* TCP_MSS = (Ethernet MTU - IP header size - TCP header size) */

/* TCP sender buffer space (bytes). */
#define TCP_SND_BUF (4*TCP_MSS)

/* TCP_SND_QUEUELEN: TCP sender buffer space (pbufs). This must be at least
as much as (2 * TCP_SND_BUF/TCP_MSS) for things to work. */

#define TCP_SND_QUEUELEN (2* TCP_SND_BUF/TCP_MSS)

/* TCP receive window. */
#define TCP_WND (2*TCP_MSS)


Сообщение отредактировал IgorKossak - Apr 3 2013, 07:40
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!!!
Go to the top of the page
 
+Quote Post
Gunner
сообщение Apr 3 2013, 13:34
Сообщение #6


Частый гость
**

Группа: Участник
Сообщений: 99
Регистрация: 23-06-04
Из: Kiev
Пользователь №: 146



QUOTE (k000858 @ Apr 2 2013, 21:46) *
сейчас такие настройки. запрос почему то разделился на два сегмента в 536 и 116 байт
пробовал PBUF_POOL_BUFSIZE делать 1024, результата не принесло

Если увеличение PBUF_POOL_BUFSIZE не помогло, то, видимо, разделение действительно происходит при отправке. По-хорошему, надо научить HTTP-сервер обрабатывать данные, приходящие даже побайтно. Но, как вариант, для отправки можно использовать не POST, а GET-запрос, тогда параметры (если их немного) будут в первом сегменте.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 8th August 2025 - 22:04
Рейтинг@Mail.ru


Страница сгенерированна за 0.01423 секунд с 7
ELECTRONIX ©2004-2016