r521 - in trunk/librtmp: rtmp.c rtmp.h
Author: hyc Date: Tue Jun 29 03:31:17 2010 New Revision: 521 Log: Fix tcUrl generation, free it on close if needed Modified: trunk/librtmp/rtmp.c trunk/librtmp/rtmp.h Modified: trunk/librtmp/rtmp.c ============================================================================== --- trunk/librtmp/rtmp.c Tue Jun 29 03:09:21 2010 (r520) +++ trunk/librtmp/rtmp.c Tue Jun 29 03:31:17 2010 (r521) @@ -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) { Modified: trunk/librtmp/rtmp.h ============================================================================== --- trunk/librtmp/rtmp.h Tue Jun 29 03:09:21 2010 (r520) +++ trunk/librtmp/rtmp.h Tue Jun 29 03:31:17 2010 (r521) @@ -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;
participants (1)
-
hyc