From: Martin Storsjo Date: Mon, 21 May 2012 15:17:32 +0000 (+0300) Subject: Refill if HTTP_read indicated it needs more data X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=91921dda7002ea8ffed9dfb74ad2913dfdd0b1ed;p=rtmpdump Refill if HTTP_read indicated it needs more data HTTP_read wants to skip past the first payload byte, so it actually needs to have at least 144 + 1 bytes buffered. This also avoids relying on the magic 144 byte constant altogether, which could easily break if servers include less reply headers. --- diff --git a/librtmp/rtmp.c b/librtmp/rtmp.c index 21e2c18..6183d20 100644 --- a/librtmp/rtmp.c +++ b/librtmp/rtmp.c @@ -1403,9 +1403,11 @@ ReadN(RTMP *r, char *buffer, int n) int nBytes = 0, nRead; if (r->Link.protocol & RTMP_FEATURE_HTTP) { + int refill = 0; while (!r->m_resplen) { - if (r->m_sb.sb_size < 144) + int ret; + if (r->m_sb.sb_size < 13 || refill) { if (!r->m_unackd) HTTP_Post(r, RTMPT_IDLE, "", 1); @@ -1416,12 +1418,20 @@ ReadN(RTMP *r, char *buffer, int n) return 0; } } - if (HTTP_read(r, 0) == -1) + if ((ret = HTTP_read(r, 0)) == -1) { RTMP_Log(RTMP_LOGDEBUG, "%s, No valid HTTP response found", __FUNCTION__); RTMP_Close(r); return 0; } + else if (ret == -2) + { + refill = 1; + } + else + { + refill = 0; + } } if (r->m_resplen && !r->m_sb.sb_size) RTMPSockBuf_Fill(&r->m_sb);