From 1e68396f3db1006119bd504f6711c48e750bd62f Mon Sep 17 00:00:00 2001 From: longbai Date: Fri, 1 Apr 2016 11:56:16 +0800 Subject: [PATCH 1/2] add domain host --- parseurl.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/parseurl.c b/parseurl.c index 788dba3..f313a68 100644 --- a/parseurl.c +++ b/parseurl.c @@ -130,6 +130,30 @@ int PILI_RTMP_ParseURL(const char *url, int *protocol, AVal *host, unsigned int } p = slash+1; + /** parse domain + * rtmp://host:[port]/app/...?domain=a.com + * use domain to replace host + */ + + if (ques) { + char* domain = strstr(ques, "domain="); + if (domain) { + domain += 7; //skip "domain=" + char* end = strchr(domain, '&'); + int host_len = 0; + if (end) { + host_len = end - domain; + }else { + host_len = strlen(domain); + } + if(host_len < 256) { + host->av_val = domain; + host->av_len = host_len; + RTMP_Log(RTMP_LOGDEBUG, "Parsed host and domain : %.*s", host_len, host->av_val); + } + } + } + { /* parse application * From 86efdbd69cde4c2f4e9a2cdca78ade6bffc517ab Mon Sep 17 00:00:00 2001 From: longbai Date: Thu, 7 Apr 2016 15:57:11 +0800 Subject: [PATCH 2/2] add domain support --- parseurl.c | 15 ++++++++++----- rtmp.c | 38 ++++++++++++++++++++++---------------- rtmp.h | 4 ++++ 3 files changed, 36 insertions(+), 21 deletions(-) diff --git a/parseurl.c b/parseurl.c index f313a68..435e8c6 100644 --- a/parseurl.c +++ b/parseurl.c @@ -30,8 +30,8 @@ #include "rtmp_sys.h" #include "log.h" -int PILI_RTMP_ParseURL(const char *url, int *protocol, AVal *host, unsigned int *port, - AVal *playpath, AVal *app) +int PILI_RTMP_ParseURL2(const char *url, int *protocol, AVal *host, unsigned int *port, + AVal *playpath, AVal *app, AVal *domainName) { char *p, *end, *col, *ques, *slash; @@ -135,7 +135,7 @@ int PILI_RTMP_ParseURL(const char *url, int *protocol, AVal *host, unsigned int * use domain to replace host */ - if (ques) { + if (domainName != NULL && ques != NULL) { char* domain = strstr(ques, "domain="); if (domain) { domain += 7; //skip "domain=" @@ -147,8 +147,8 @@ int PILI_RTMP_ParseURL(const char *url, int *protocol, AVal *host, unsigned int host_len = strlen(domain); } if(host_len < 256) { - host->av_val = domain; - host->av_len = host_len; + domainName->av_val = domain; + domainName->av_len = host_len; RTMP_Log(RTMP_LOGDEBUG, "Parsed host and domain : %.*s", host_len, host->av_val); } } @@ -307,3 +307,8 @@ void PILI_RTMP_ParsePlaypath(AVal *in, AVal *out) { out->av_val = streamname; out->av_len = destptr - streamname; } + +int PILI_RTMP_ParseURL(const char *url, int *protocol, AVal *host, + unsigned int *port, AVal *playpath, AVal *app){ + return PILI_RTMP_ParseURL2(url, protocol, host, port, playpath, app, NULL); +} diff --git a/rtmp.c b/rtmp.c index 04ddc9a..336931e 100644 --- a/rtmp.c +++ b/rtmp.c @@ -686,8 +686,8 @@ int PILI_RTMP_SetupURL(PILI_RTMP *r, const char *url, RTMPError *error) *ptr = '\0'; len = (int)strlen(url); - ret = PILI_RTMP_ParseURL(url, &r->Link.protocol, &r->Link.hostname, - &port, &r->Link.playpath0, &r->Link.app); + ret = PILI_RTMP_ParseURL2(url, &r->Link.protocol, &r->Link.hostname, + &port, &r->Link.playpath0, &r->Link.app, &r->Link.domain); if (!ret) return ret; r->Link.port = port; @@ -742,29 +742,35 @@ int PILI_RTMP_SetupURL(PILI_RTMP *r, const char *url, RTMPError *error) r->Link.tcUrl.av_val = url; if (r->Link.app.av_len) { - if (r->Link.app.av_val < url + len) + AVal* domain = &r->Link.domain; + if (domain->av_len == 0 && 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", - PILI_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; - } + if (domain->av_len == 0) { + domain = &r->Link.hostname; + } + if (r->Link.port = 0) { + r->Link.port = 1935; + } + len = domain->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", + PILI_RTMPProtocolStringsLower[r->Link.protocol], + domain->av_len, domain->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); - } + r->Link.tcUrl.av_len = strlen(url); + } } #ifdef CRYPTO diff --git a/rtmp.h b/rtmp.h index 7082de8..891fee2 100644 --- a/rtmp.h +++ b/rtmp.h @@ -127,6 +127,7 @@ extern "C" typedef struct PILI_RTMP_LNK { AVal hostname; + AVal domain; AVal sockshost; AVal playpath0; /* parsed from URL */ @@ -278,6 +279,9 @@ extern "C" int PILI_RTMP_ParseURL(const char *url, int *protocol, AVal *host, unsigned int *port, AVal *playpath, AVal *app); + + int PILI_RTMP_ParseURL2(const char *url, int *protocol, AVal *host, + unsigned int *port, AVal *playpath, AVal *app, AVal *domain); void PILI_RTMP_ParsePlaypath(AVal *in, AVal *out); void PILI_RTMP_SetBufferMS(PILI_RTMP *r, int size);