2014-12-03 9 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 

를 (! 두 개의 공백 태그, 포럼 형식을 진행) 브라우저는 & 와이어 샤크는 태그로 확장 될 때 체크섬 오류를보고 출력을 수신하는 데 실패 1, 3, 5, 7 등 문자. 브라우저에서 출력이 &이됩니다. Wireshark는 태그가 2, 4, 6, 8 등 문자로 확장되면 OK를보고합니다.

태그 앞에서 공백을 제거하면 상황이 비현실적입니다. 또한 태그가 129 자 (용의자 122)보다 크면 출력은 항상 ok입니다 (아직 오류가 표시되지 않음).

SSI 출력이 129 바이트 이상이면 길이 122 (헤더 및 태그), 122 (SSI의 초기 부분) 및 7 (SSI의 나머지 부분)으로 http_write() 함수가 호출됩니다. 122의 두 번째 tcp_write()가 체크섬 문제를 해결하는 것으로 보입니다. (세그먼트로 SSI 출력을 분할하는 것은 이상한 일입니다. 최대 122 개의 청크 전송은 태그까지 리소스 파일의 크기에 따라 결정된 것 같습니다.)

UART printf() 및 Wireshark를 사용하여 SSI 출력을 검사했으며 모두 정확하다고 나타났습니다. 출력에 손상이 없습니다. http_write() 길이는 출력과 동일합니다.

필자는 자신을 의심하기 시작한 시점에서 tcp_write()까지 추적했습니다. 틀림없이 tcp_write()를 깨뜨릴 수 없습니까? 누구나 임베디드 타겟 또는 실제로 tcp_write()에서 LWIP SSI를 사용 했습니까?

답변

0

댓글 달기/제거 : #define LWIP_CHECKSUM_ON_COPY 이 해결되는 것 같습니다.