Edit

kc3-lang/kc3/test/tls/tls.kc3

Branch :

  • test/tls/tls.kc3
  • require Buf
    require Socket
    require Socket.Buf
    require Thread
    require TLS
    require TLS.Client
    require TLS.Server
    (r = fork()) ; void
    if (r < 0) do
      exit(1)
    end
    if r == 0 do
      TLS.init()
      server_config = TLS.Config.new()
      TLS.Config.set_cert_file(server_config, "/etc/ssl/fullchain.pem")
      TLS.Config.set_key_file(server_config, "/etc/ssl/private/privkey.pem")
      server_ctx = TLS.server()
      TLS.configure(server_ctx, server_config)
      server_socket = Socket.listen(hostname(), "57000")
      puts("server: listening on egress 57000")
      server_client_tls = TLS.Server.accept(server_socket, server_ctx)
      line = Buf.read_line(server_client_tls.socket_buf.buf_rw.r)
      puts("server: #{line}")
      Buf.write_str(server_client_tls.socket_buf.buf_rw.w, "Hello from server !\n")
      TLS.Server.close(server_client_tls)
      Socket.close(server_socket)
      TLS.Config.free(server_config)
      TLS.free(server_ctx)
      puts("server: OK")
      exit_subprocess(0)
    else
      sleep(1)
      TLS.init()
      client_config = TLS.Config.new()
      TLS.Config.set_ca_file(client_config, TLS.ca_cert_path())
      client_ctx = TLS.client()
      TLS.configure(client_ctx, client_config)
      client_tls = TLS.Client.connect(client_ctx, hostname(),
        "57000")
      puts("client: connected to egress 57000")
      Buf.write_str(client_tls.socket_buf.buf_rw.w, "Hello from client !\n")
      line = Buf.read_line(client_tls.socket_buf.buf_rw.r)
      TLS.Client.close(client_tls)
      TLS.Config.free(client_config)
      TLS.free(client_ctx)
      sleep(1)
      puts("client: #{line}")
      puts("client: OK")
    end
    0