[Live-devel] RTSPClient / handleResponseBytes: Handling abnormal GET_PARAMETER response
Hyung Jin Jung
realbright at lgcns.com
Tue Nov 1 01:59:24 PDT 2016
Some CCTV decribe additional information in the response of GET_PARAMETER. Such like,
"
RTSP/1.0 200 OK
CSeq: 7
Content-Length: 0
Content-Type: text/parameters
Session: 109532068
framerate: 25
"
In this case,
We couldn't handle body (framerate: 25) because content length is zero.
Furthermore, unhandled body stored as extra data in response buffer.
And it causes connection loss.
Below patch works for me But I want to confirm it.
diff -ur ori/liveMedia/RTSPClient.cpp live/liveMedia/RTSPClient.cpp
--- ori/liveMedia/RTSPClient.cpp 2016-10-29 15:28:35.000000000 +0900
+++ live/liveMedia/RTSPClient.cpp 2016-11-01 17:49:04.095745523 +0900
@@ -1763,6 +1763,11 @@
unsigned bodyOffset = nextLineStart == NULL ? fResponseBytesAlreadySeen : nextLineStart - headerDataCopy;
bodyStart = &fResponseBuffer[bodyOffset];
numBodyBytes = fResponseBytesAlreadySeen - bodyOffset;
+ /* Handle abnormal response: body exist but content-length is zero */
+ if (!contentLength && strlen(bodyStart)) {
+ contentLength = numBodyBytes;
+ }
+
if (contentLength > numBodyBytes) {
// We need to read more data. First, make sure we have enough space for it:
unsigned numExtraBytesNeeded = contentLength - numBodyBytes;
More information about the live-devel
mailing list