2014-12-03 264 views
-1

LWIP:SSI输出长度可能导致TCP/IP校验和错误LWIP TCP/IP校验和错误

我使用在ARM LPC4357 LWIP 1.4.1运行(LPCOpen 2.1.12,日期2014年5月15日) 。 我正在使用httpserver_raw并添加了一些SSI处理程序。

我发现系统是一个包含标签和字节数的SSI处理程序输出线的两个大小很敏感。 标签包含在输出中。 当扩展标记:

\r\n 
spacespace<!--#s_add-->\r\n 

(!两个空格进行标记,论坛格式) 浏览器无法接收输出& Wireshark的报告校验和错误时,标签与扩大1,3,5, 7等字符。 浏览器接收时,标签与2,4,6,8个字符扩展输出& Wireshark的报告确定。

如果我从标签那么情况就reveresed之前删除的空间。 此外,如果标签大于129个字符(可疑122),则输出总是正常(尚未发现故障)。

当SSI输出大于等于129字节时,将调用长度为122(头和标签),122(SSI的初始部分)和7(SSI的剩余部分)的http_write()函数。 使用122的第二个tcp_write()似乎可以解决校验和问题。 (拆分SSI输出成段本身是一个古怪。在高达122似乎是由高达标签中的资源文件的大小来驱动块发送)。

我已检查了SSI使用UART输出的printf()的和在Wireshark的和所有似乎是正确的,也有在输出没有损坏。 http_write()长度与输出一样正确。

据我所追踪的tcp_write(),我开始怀疑自己在这一点;当然tcp_write()不能被破坏? 有没有人在嵌入式目标或tcp_write()上使用LWIP SSI?

回答

0

评论/删除: #define LWIP_CHECKSUM_ON_COPY 似乎可以解决。