mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
avf: move ff_http_match_no_proxy to network
It is only used by network protocols.
This commit is contained in:
parent
afc8685395
commit
ec7c51c786
@ -375,6 +375,4 @@ enum AVCodecID ff_codec_get_id(const AVCodecTag *tags, unsigned int tag);
|
||||
*/
|
||||
enum AVCodecID ff_get_pcm_codec_id(int bps, int flt, int be, int sflags);
|
||||
|
||||
int ff_http_match_no_proxy(const char *no_proxy, const char *hostname);
|
||||
|
||||
#endif /* AVFORMAT_INTERNAL_H */
|
||||
|
@ -277,3 +277,57 @@ int ff_listen_connect(int fd, const struct sockaddr *addr,
|
||||
}
|
||||
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;
|
||||
}
|
||||
|
@ -244,4 +244,6 @@ int ff_listen_connect(int fd, const struct sockaddr *addr,
|
||||
socklen_t addrlen, int timeout,
|
||||
URLContext *h);
|
||||
|
||||
int ff_http_match_no_proxy(const char *no_proxy, const char *hostname);
|
||||
|
||||
#endif /* AVFORMAT_NETWORK_H */
|
||||
|
@ -18,7 +18,7 @@
|
||||
* 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)
|
||||
{
|
||||
|
@ -3407,57 +3407,3 @@ const struct AVCodecTag *avformat_get_riff_audio_tags(void)
|
||||
{
|
||||
return ff_codec_wav_tags;
|
||||
}
|
||||
|
||||
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…
Reference in New Issue
Block a user