Skip to content

Commit

Permalink
socket_mode Connection: Add support for IPv6 (#1036)
Browse files Browse the repository at this point in the history
* socket_mode Connection: Add support for IPv6
* socket_mode Connection: get ssl context via `ssl.create_default_context()`
  • Loading branch information
KostyaEsmukov committed Jun 15, 2021
1 parent 6443d1b commit 3fcdbe1
Showing 1 changed file with 5 additions and 21 deletions.
26 changes: 5 additions & 21 deletions slack_sdk/socket_mode/builtin/internals.py
Expand Up @@ -51,20 +51,11 @@ def _establish_new_socket_connection(
if proxy is not None:
parsed_proxy = urlparse(proxy)
proxy_host, proxy_port = parsed_proxy.hostname, parsed_proxy.port or 80
proxy_addr = socket.getaddrinfo(
proxy_host,
proxy_port,
0,
socket.SOCK_STREAM,
socket.SOL_TCP,
)[0]
sock = socket.socket(proxy_addr[0], proxy_addr[1], proxy_addr[2])
sock = socket.create_connection((proxy_host, proxy_port), receive_timeout)
if hasattr(socket, "TCP_NODELAY"):
sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
if hasattr(socket, "SO_KEEPALIVE"):
sock.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)
sock.settimeout(receive_timeout)
sock.connect(proxy_addr[4]) # proxy address
message = [f"CONNECT {server_hostname}:{server_port} HTTP/1.0"]
if parsed_proxy.username is not None and parsed_proxy.password is not None:
# In the case where the proxy is "http://{username}:{password}@{hostname}:{port}"
Expand All @@ -90,7 +81,7 @@ def _establish_new_socket_connection(
f"Failed to connect to the proxy (proxy: {proxy}, connect status code: {status})"
)

sock = ssl.SSLContext(ssl.PROTOCOL_SSLv23).wrap_socket(
sock = ssl.create_default_context().wrap_socket(
sock,
do_handshake_on_connect=True,
suppress_ragged_eofs=True,
Expand All @@ -99,27 +90,20 @@ def _establish_new_socket_connection(
return sock

if server_port != 443:
addr = socket.getaddrinfo(
server_hostname, server_port, 0, socket.SOCK_STREAM, socket.SOL_TCP
)[0]
# only for library testing
logger.info(
f"Using non-ssl socket to connect ({server_hostname}:{server_port})"
)
sock = Socket(addr[0], addr[1], addr[2])
sock.settimeout(3)
sock.connect((server_hostname, server_port))
sock = socket.create_connection((server_hostname, server_port), timeout=3)
return sock

sock = Socket(type=ssl.SOCK_STREAM)
sock = ssl.SSLContext(ssl.PROTOCOL_SSLv23).wrap_socket(
sock = socket.create_connection((server_hostname, server_port), receive_timeout)
sock = ssl.create_default_context().wrap_socket(
sock,
do_handshake_on_connect=True,
suppress_ragged_eofs=True,
server_hostname=server_hostname,
)
sock.settimeout(receive_timeout)
sock.connect((server_hostname, server_port))
return sock


Expand Down

0 comments on commit 3fcdbe1

Please sign in to comment.