You've already forked FFmpeg
							
							
				mirror of
				https://github.com/FFmpeg/FFmpeg.git
				synced 2025-10-30 23:18:11 +02:00 
			
		
		
		
	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:
		| @@ -390,6 +390,4 @@ AVRational ff_choose_timebase(AVFormatContext *s, AVStream *st, int min_precissi | ||||
|  */ | ||||
| void ff_generate_avci_extradata(AVStream *st); | ||||
|  | ||||
| int ff_http_match_no_proxy(const char *no_proxy, const char *hostname); | ||||
|  | ||||
| #endif /* AVFORMAT_INTERNAL_H */ | ||||
|   | ||||
| @@ -304,3 +304,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; | ||||
| } | ||||
|   | ||||
| @@ -257,4 +257,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) | ||||
| { | ||||
|   | ||||
| @@ -4331,57 +4331,3 @@ void ff_generate_avci_extradata(AVStream *st) | ||||
|     memcpy(st->codec->extradata, data, 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; | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user