docs: def upgrade_transport(
          self,
          context: ssl.SSLContext,
          server_hostname: str = None,
          waiter: Awaitable = None,
      ) -> SSLProtocol:
          """
          Upgrade our transport to TLS in place.
          """
          if self._over_ssl:
              raise RuntimeError("Already using TLS.")
  
          if self._stream_reader is None or self._stream_writer is None:
              raise SMTPServerDisconnected("Client not connected")
  
          transport = self._stream_reader._transport  # type: ignore
  
          tls_protocol = SSLProtocol(
              self._loop,
              self,
              context,
              waiter,
              server_side=False,
              server_hostname=server_hostname,
          )
  
          app_transport = tls_protocol._app_transport
          # Use set_protocol if we can
          if hasattr(transport, "set_protocol"):
              transport.set_protocol(tls_protocol)
          else:
              transport._protocol = tls_protocol
  
          self._stream_reader._transport = app_transport  # type: ignore
          self._stream_writer._transport = app_transport  # type: ignore
  
          tls_protocol.connection_made(transport)
          self._over_ssl = True  # type: bool
  
          return tls_protocol