From: hyc Date: Tue, 29 Jun 2010 01:31:17 +0000 (+0000) Subject: Fix tcUrl generation, free it on close if needed X-Git-Tag: v2.4~43 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=55d4a10abc477494a0e9abc3c321ddad96b352a2;p=rtmpdump Fix tcUrl generation, free it on close if needed git-svn-id: svn://svn.mplayerhq.hu/rtmpdump/trunk@521 400ebc74-4327-4243-bc38-086b20814532 --- diff --git a/librtmp/rtmp.c b/librtmp/rtmp.c index c41accc..29da093 100644 --- a/librtmp/rtmp.c +++ b/librtmp/rtmp.c @@ -654,12 +654,13 @@ int RTMP_SetupURL(RTMP *r, char *url) { AVal opt, arg; char *p1, *p2, *ptr = strchr(url, ' '); - int ret; + int ret, len; unsigned int port = 0; if (ptr) *ptr = '\0'; + len = strlen(url); ret = RTMP_ParseURL(url, &r->Link.protocol, &r->Link.hostname, &port, &r->Link.playpath0, &r->Link.app); if (!ret) @@ -714,10 +715,28 @@ int RTMP_SetupURL(RTMP *r, char *url) if (!r->Link.tcUrl.av_len) { r->Link.tcUrl.av_val = url; - if (r->Link.app.av_len) - r->Link.tcUrl.av_len = r->Link.app.av_len + (r->Link.app.av_val - url); - else + if (r->Link.app.av_len) { + if (r->Link.app.av_val < url + len) + { + /* if app is part of original url, just use it */ + r->Link.tcUrl.av_len = r->Link.app.av_len + (r->Link.app.av_val - url); + } + else + { + len = r->Link.hostname.av_len + r->Link.app.av_len + + sizeof("rtmpte://65535/"); + r->Link.tcUrl.av_val = malloc(len); + r->Link.tcUrl.av_len = snprintf(r->Link.tcUrl.av_val, len, + "%s://%.*s:%d/%.*s", + RTMPProtocolStringsLower[r->Link.protocol], + r->Link.hostname.av_len, r->Link.hostname.av_val, + r->Link.port, + r->Link.app.av_len, r->Link.app.av_val); + r->Link.lFlags |= RTMP_LF_FTCU; + } + } else { r->Link.tcUrl.av_len = strlen(url); + } } #ifdef CRYPTO @@ -3428,6 +3447,13 @@ RTMP_Close(RTMP *r) free(r->Link.playpath0.av_val); r->Link.playpath0.av_val = NULL; + if (r->Link.lFlags & RTMP_LF_FTCU) + { + free(r->Link.tcUrl.av_val); + r->Link.tcUrl.av_val = NULL; + r->Link.lFlags ^= RTMP_LF_FTCU; + } + #ifdef CRYPTO if (r->Link.dh) { diff --git a/librtmp/rtmp.h b/librtmp/rtmp.h index 12fc4e7..f1da6a5 100644 --- a/librtmp/rtmp.h +++ b/librtmp/rtmp.h @@ -147,6 +147,7 @@ extern "C" #define RTMP_LF_SWFV 0x0004 /* do SWF verification */ #define RTMP_LF_PLST 0x0008 /* send playlist before play */ #define RTMP_LF_BUFX 0x0010 /* toggle stream on BufferEmpty msg */ +#define RTMP_LF_FTCU 0x0020 /* free tcUrl on close */ int lFlags; int swfAge;