Merge commit 'ec7c51c7868d3ccc66b5cc38bf126258b94f086c'
* commit 'ec7c51c7868d3ccc66b5cc38bf126258b94f086c': avf: move ff_http_match_no_proxy to network Conflicts: libavformat/internal.h libavformat/utils.c Merged-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
commit
84f77f8423
@ -390,6 +390,4 @@ AVRational ff_choose_timebase(AVFormatContext *s, AVStream *st, int min_precissi
|
|||||||
*/
|
*/
|
||||||
void ff_generate_avci_extradata(AVStream *st);
|
void ff_generate_avci_extradata(AVStream *st);
|
||||||
|
|
||||||
int ff_http_match_no_proxy(const char *no_proxy, const char *hostname);
|
|
||||||
|
|
||||||
#endif /* AVFORMAT_INTERNAL_H */
|
#endif /* AVFORMAT_INTERNAL_H */
|
||||||
|
@ -304,3 +304,57 @@ int ff_listen_connect(int fd, const struct sockaddr *addr,
|
|||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int match_host_pattern(const char *pattern, const char *hostname)
|
||||||
|
{
|
||||||
|
int len_p, len_h;
|
||||||
|
if (!strcmp(pattern, "*"))
|
||||||
|
return 1;
|
||||||
|
// Skip a possible *. at the start of the pattern
|
||||||
|
if (pattern[0] == '*')
|
||||||
|
pattern++;
|
||||||
|
if (pattern[0] == '.')
|
||||||
|
pattern++;
|
||||||
|
len_p = strlen(pattern);
|
||||||
|
len_h = strlen(hostname);
|
||||||
|
if (len_p > len_h)
|
||||||
|
return 0;
|
||||||
|
// Simply check if the end of hostname is equal to 'pattern'
|
||||||
|
if (!strcmp(pattern, &hostname[len_h - len_p])) {
|
||||||
|
if (len_h == len_p)
|
||||||
|
return 1; // Exact match
|
||||||
|
if (hostname[len_h - len_p - 1] == '.')
|
||||||
|
return 1; // The matched substring is a domain and not just a substring of a domain
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int ff_http_match_no_proxy(const char *no_proxy, const char *hostname)
|
||||||
|
{
|
||||||
|
char *buf, *start;
|
||||||
|
int ret = 0;
|
||||||
|
if (!no_proxy)
|
||||||
|
return 0;
|
||||||
|
if (!hostname)
|
||||||
|
return 0;
|
||||||
|
buf = av_strdup(no_proxy);
|
||||||
|
if (!buf)
|
||||||
|
return 0;
|
||||||
|
start = buf;
|
||||||
|
while (start) {
|
||||||
|
char *sep, *next = NULL;
|
||||||
|
start += strspn(start, " ,");
|
||||||
|
sep = start + strcspn(start, " ,");
|
||||||
|
if (*sep) {
|
||||||
|
next = sep + 1;
|
||||||
|
*sep = '\0';
|
||||||
|
}
|
||||||
|
if (match_host_pattern(start, hostname)) {
|
||||||
|
ret = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
start = next;
|
||||||
|
}
|
||||||
|
av_free(buf);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
@ -257,4 +257,6 @@ int ff_listen_connect(int fd, const struct sockaddr *addr,
|
|||||||
socklen_t addrlen, int timeout,
|
socklen_t addrlen, int timeout,
|
||||||
URLContext *h);
|
URLContext *h);
|
||||||
|
|
||||||
|
int ff_http_match_no_proxy(const char *no_proxy, const char *hostname);
|
||||||
|
|
||||||
#endif /* AVFORMAT_NETWORK_H */
|
#endif /* AVFORMAT_NETWORK_H */
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "internal.h"
|
#include "network.h"
|
||||||
|
|
||||||
static void test(const char *pattern, const char *host)
|
static void test(const char *pattern, const char *host)
|
||||||
{
|
{
|
||||||
|
@ -4331,57 +4331,3 @@ void ff_generate_avci_extradata(AVStream *st)
|
|||||||
memcpy(st->codec->extradata, data, size);
|
memcpy(st->codec->extradata, data, size);
|
||||||
st->codec->extradata_size = size;
|
st->codec->extradata_size = size;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int match_host_pattern(const char *pattern, const char *hostname)
|
|
||||||
{
|
|
||||||
int len_p, len_h;
|
|
||||||
if (!strcmp(pattern, "*"))
|
|
||||||
return 1;
|
|
||||||
// Skip a possible *. at the start of the pattern
|
|
||||||
if (pattern[0] == '*')
|
|
||||||
pattern++;
|
|
||||||
if (pattern[0] == '.')
|
|
||||||
pattern++;
|
|
||||||
len_p = strlen(pattern);
|
|
||||||
len_h = strlen(hostname);
|
|
||||||
if (len_p > len_h)
|
|
||||||
return 0;
|
|
||||||
// Simply check if the end of hostname is equal to 'pattern'
|
|
||||||
if (!strcmp(pattern, &hostname[len_h - len_p])) {
|
|
||||||
if (len_h == len_p)
|
|
||||||
return 1; // Exact match
|
|
||||||
if (hostname[len_h - len_p - 1] == '.')
|
|
||||||
return 1; // The matched substring is a domain and not just a substring of a domain
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int ff_http_match_no_proxy(const char *no_proxy, const char *hostname)
|
|
||||||
{
|
|
||||||
char *buf, *start;
|
|
||||||
int ret = 0;
|
|
||||||
if (!no_proxy)
|
|
||||||
return 0;
|
|
||||||
if (!hostname)
|
|
||||||
return 0;
|
|
||||||
buf = av_strdup(no_proxy);
|
|
||||||
if (!buf)
|
|
||||||
return 0;
|
|
||||||
start = buf;
|
|
||||||
while (start) {
|
|
||||||
char *sep, *next = NULL;
|
|
||||||
start += strspn(start, " ,");
|
|
||||||
sep = start + strcspn(start, " ,");
|
|
||||||
if (*sep) {
|
|
||||||
next = sep + 1;
|
|
||||||
*sep = '\0';
|
|
||||||
}
|
|
||||||
if (match_host_pattern(start, hostname)) {
|
|
||||||
ret = 1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
start = next;
|
|
||||||
}
|
|
||||||
av_free(buf);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user