code: def starttls(self, ssl_context, post_handshake_callback=None):
          
          self._require_connection()
          if not self.can_starttls():
              raise RuntimeError("starttls not available on transport")
  
          yield from self._transport.starttls(ssl_context,
                                              post_handshake_callback)
          self._reset_state()
docs: Start TLS on the transport and wait for it to complete.
  
          The `ssl_context` and `post_handshake_callback` arguments are forwarded
          to the transports
          :meth:`aioopenssl.STARTTLSTransport.starttls` coroutine method.
  
          If the transport does not support starttls, :class:`RuntimeError` is
          raised; support for starttls can be discovered by querying
          :meth:`can_starttls`.
  
          After :meth:`starttls` returns, you must call :meth:`reset`. Any other
          method may fail in interesting ways as the internal state is discarded
          when starttls succeeds, for security reasons. :meth:`reset` re-creates
          the internal structures.