meh / elixir-socket

Socket wrapping for Elixir.
688 stars 119 forks source link

Socket.SSL no longer work with recent Erlang #107

Open bortzmeyer opened 1 year ago

bortzmeyer commented 1 year ago
% elixir --version
Erlang/OTP 25 [erts-13.1.5] [source] [64-bit] [smp:12:12] [ds:12:12:10] [async-threads:1] [jit]

Elixir 1.14.3 (compiled with Erlang/OTP 25)

Trying to compile:

warning: :ssl.cipher_suites/0 is undefined or private, use cipher_suites/2,3 instead
  lib/socket/ssl.ex:55: Socket.SSL.ciphers/0

warning: :ssl.ssl_accept/2 is undefined or private, use ssl_handshake/1,2,3 instead
  lib/socket/ssl.ex:272: Socket.SSL.handshake/2

warning: :ssl.ssl_accept/3 is undefined or private, use ssl_handshake/1,2,3 instead
  lib/socket/ssl.ex:252: Socket.SSL.accept/2

When running:

** (UndefinedFunctionError) function :ssl.ssl_accept/2 is undefined or private, use ssl_handshake/1,2,3 instead
    (ssl 10.8.7) :ssl.ssl_accept({:sslsocket, {:gen_tcp, #Port<0.6>, :tls_connection, [option_tracker: #PID<0.354.0>, session_tickets_tracker: :disabled, session_id_tracker: #PID<0.355.0>]}, [#PID<0.358.0>, #PID<0.357.0>]}, :infinity)
    (socket 0.3.13) lib/socket/ssl.ex:239: Socket.SSL.accept/2
    echo-server.exs:19: Echo.loop_acceptor/1
daynyte commented 1 year ago

Untested:

--- a/lib/socket/ssl.ex
+++ b/lib/socket/ssl.ex
@@ -52,7 +52,7 @@ defmodule Socket.SSL do
   """
   @spec ciphers :: [:ssl.erl_cipher_suite]
   def ciphers do
-    :ssl.cipher_suites
+    :ssl.cipher_suites(:all, :"tlsv1.3")
   end

   @doc """
@@ -249,7 +249,7 @@ defmodule Socket.SSL do
     timeout = options[:timeout] || :infinity
     options = Keyword.delete(options, :timeout)

-    :ssl.ssl_accept(wrap, arguments(options), timeout)
+    :ssl.ssl_handshake(wrap, arguments(options), timeout)
   end

   @doc """
@@ -269,7 +269,7 @@ defmodule Socket.SSL do
   def handshake(socket, options \\ []) when socket |> Record.is_record(:sslsocket) do
     timeout = options[:timeout] || :infinity

-    :ssl.ssl_accept(socket, timeout)
+    :ssl.ssl_handshake(socket, timeout)
   end

   @doc """

See (UndefinedFunctionError) function :ssl.cipher_suites/1 is undefined or private