Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

socket_mode Connection: Add support for IPv6 #1036

Merged
merged 3 commits into from Jun 15, 2021
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
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