mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-01-13 21:28:01 +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);
|
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 */
|
#endif /* AVFORMAT_INTERNAL_H */
|
||||||
|
@ -277,3 +277,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;
|
||||||
|
}
|
||||||
|
@ -244,4 +244,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)
|
||||||
{
|
{
|
||||||
|
@ -3407,57 +3407,3 @@ const struct AVCodecTag *avformat_get_riff_audio_tags(void)
|
|||||||
{
|
{
|
||||||
return ff_codec_wav_tags;
|
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