From: Matthew Garrett Date: Sun, 8 Jul 2012 20:26:14 +0000 (-0400) Subject: Fix socks support for SetupURL X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=1d07cfa60402ace8472f4661112595f1fe661913;p=rtmpdump Fix socks support for SetupURL SetupURL assigns sockshost but never parses the data. This patch factors the code out from SetupStream into a common function and adds it to SetupURL. --- diff --git a/librtmp/rtmp.c b/librtmp/rtmp.c index 76a6b4f..682e3b8 100644 --- a/librtmp/rtmp.c +++ b/librtmp/rtmp.c @@ -321,6 +321,31 @@ static const char DEFAULT_FLASH_VER[] = DEF_VERSTR; const AVal RTMP_DefaultFlashVer = { (char *)DEFAULT_FLASH_VER, sizeof(DEFAULT_FLASH_VER) - 1 }; +static void +SocksSetup(RTMP *r, AVal *sockshost) +{ + if (sockshost->av_len) + { + const char *socksport = strchr(sockshost->av_val, ':'); + char *hostname = strdup(sockshost->av_val); + + if (socksport) + hostname[socksport - sockshost->av_val] = '\0'; + r->Link.sockshost.av_val = hostname; + r->Link.sockshost.av_len = strlen(hostname); + + r->Link.socksport = socksport ? atoi(socksport + 1) : 1080; + RTMP_Log(RTMP_LOGDEBUG, "Connecting via SOCKS proxy: %s:%d", r->Link.sockshost.av_val, + r->Link.socksport); + } + else + { + r->Link.sockshost.av_val = NULL; + r->Link.sockshost.av_len = 0; + r->Link.socksport = 0; + } +} + void RTMP_SetupStream(RTMP *r, int protocol, @@ -385,26 +410,7 @@ RTMP_SetupStream(RTMP *r, } #endif - if (sockshost->av_len) - { - const char *socksport = strchr(sockshost->av_val, ':'); - char *hostname = strdup(sockshost->av_val); - - if (socksport) - hostname[socksport - sockshost->av_val] = '\0'; - r->Link.sockshost.av_val = hostname; - r->Link.sockshost.av_len = strlen(hostname); - - r->Link.socksport = socksport ? atoi(socksport + 1) : 1080; - RTMP_Log(RTMP_LOGDEBUG, "Connecting via SOCKS proxy: %s:%d", r->Link.sockshost.av_val, - r->Link.socksport); - } - else - { - r->Link.sockshost.av_val = NULL; - r->Link.sockshost.av_len = 0; - r->Link.socksport = 0; - } + SocksSetup(r, sockshost); if (tcUrl && tcUrl->av_len) r->Link.tcUrl = *tcUrl; @@ -757,6 +763,8 @@ int RTMP_SetupURL(RTMP *r, char *url) (unsigned char *)r->Link.SWFHash, r->Link.swfAge); #endif + SocksSetup(r, &r->Link.sockshost); + if (r->Link.port == 0) { if (r->Link.protocol & RTMP_FEATURE_SSL)