projects
/
youtube-dl
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
8959018
)
[utils] Improve remote address skipping and add support for python 2.6 (closes #17362)
author
Sergey M․
<dstftw@gmail.com>
Tue, 28 Aug 2018 18:17:21 +0000
(
01:17
+0700)
committer
Sergey M․
<dstftw@gmail.com>
Tue, 28 Aug 2018 18:18:03 +0000
(
01:18
+0700)
youtube_dl/utils.py
patch
|
blob
|
history
diff --git
a/youtube_dl/utils.py
b/youtube_dl/utils.py
index 2be8c95cd4acc8698bed3aada9aef97e3152e34b..bcfb72d436d5d102797fcb109d5c1f7573cc543c 100644
(file)
--- a/
youtube_dl/utils.py
+++ b/
youtube_dl/utils.py
@@
-49,7
+49,6
@@
from .compat import (
compat_os_name,
compat_parse_qs,
compat_shlex_quote,
compat_os_name,
compat_parse_qs,
compat_shlex_quote,
- compat_socket_create_connection,
compat_str,
compat_struct_pack,
compat_struct_unpack,
compat_str,
compat_struct_pack,
compat_struct_unpack,
@@
-884,7
+883,6
@@
def _create_http_connection(ydl_handler, http_class, is_https, *args, **kwargs):
source_address = ydl_handler._params.get('source_address')
if source_address is not None:
source_address = ydl_handler._params.get('source_address')
if source_address is not None:
- filter_for = socket.AF_INET if '.' in source_address else socket.AF_INET6
# This is to workaround _create_connection() from socket where it will try all
# address data from getaddrinfo() including IPv6. This filters the result from
# getaddrinfo() based on the source_address value.
# This is to workaround _create_connection() from socket where it will try all
# address data from getaddrinfo() including IPv6. This filters the result from
# getaddrinfo() based on the source_address value.
@@
-894,7
+892,13
@@
def _create_http_connection(ydl_handler, http_class, is_https, *args, **kwargs):
host, port = address
err = None
addrs = socket.getaddrinfo(host, port, 0, socket.SOCK_STREAM)
host, port = address
err = None
addrs = socket.getaddrinfo(host, port, 0, socket.SOCK_STREAM)
- ip_addrs = [addr for addr in addrs if addr[0] == filter_for]
+ af = socket.AF_INET if '.' in source_address[0] else socket.AF_INET6
+ ip_addrs = [addr for addr in addrs if addr[0] == af]
+ if addrs and not ip_addrs:
+ ip_version = 'v4' if af == socket.AF_INET else 'v6'
+ raise socket.error(
+ "No remote IP%s addresses available for connect, can't use '%s' as source address"
+ % (ip_version, source_address[0]))
for res in ip_addrs:
af, socktype, proto, canonname, sa = res
sock = None
for res in ip_addrs:
af, socktype, proto, canonname, sa = res
sock = None
@@
-913,15
+917,15
@@
def _create_http_connection(ydl_handler, http_class, is_https, *args, **kwargs):
if err is not None:
raise err
else:
if err is not None:
raise err
else:
- raise socket.error('
Unknown error occurred
')
- hc._create_connection = _create_connection
-
+ raise socket.error('
getaddrinfo returns an empty list
')
+ if hasattr(hc, '_create_connection'):
+ hc._create_connection = _create_connection
sa = (source_address, 0)
if hasattr(hc, 'source_address'): # Python 2.7+
hc.source_address = sa
else: # Python 2.6
def _hc_connect(self, *args, **kwargs):
sa = (source_address, 0)
if hasattr(hc, 'source_address'): # Python 2.7+
hc.source_address = sa
else: # Python 2.6
def _hc_connect(self, *args, **kwargs):
- sock =
compat_socket
_create_connection(
+ sock = _create_connection(
(self.host, self.port), self.timeout, sa)
if is_https:
self.sock = ssl.wrap_socket(
(self.host, self.port), self.timeout, sa)
if is_https:
self.sock = ssl.wrap_socket(