async def get_passive_connection(self, conn_type="<STR_LIT:I>",<EOL>commands=("<STR_LIT>", "<STR_LIT>")):
functions = {<EOL>"<STR_LIT>": self._do_epsv,<EOL>"<STR_LIT>": self._do_pasv,<EOL>}<EOL>if not commands:<EOL><INDENT>raise ValueError("<STR_LIT>")<EOL><DEDENT>await self.command("<STR_LIT>" + conn_type, "<STR_LIT>")<EOL>for i, name in enumerate(commands, start=<NUM_LIT:1>):<EOL><INDENT>name = name.lower()<EOL>if name not in functions:<EOL><INDENT>raise ValueError(f"<STR_LIT>")<EOL><DEDENT>try:<EOL><INDENT>ip, port = await functions[name]()<EOL>break<EOL><DEDENT>except errors.StatusCodeError as e:<EOL><INDENT>is_last = i == len(commands)<EOL>if is_last or not e.received_codes[-<NUM_LIT:1>].matches("<STR_LIT>"):<EOL><INDENT>raise<EOL><DEDENT><DEDENT><DEDENT>if ip in ("<STR_LIT>", None):<EOL><INDENT>ip = self.server_host<EOL><DEDENT>reader, writer = await open_connection(<EOL>ip,<EOL>port,<EOL>self.create_connection,<EOL>self.ssl,<EOL>)<EOL>return reader, writer<EOL>
:py:func:`asyncio.coroutine`

Getting pair of reader, writer for passive connection with server.

:param conn_type: connection type ("I", "A", "E", "L")
:type conn_type: :py:class:`str`

:param commands: sequence of commands to try to initiate passive
    server creation. First success wins. Default is EPSV, then PASV.
:type commands: :py:class:`list`

:rtype: (:py:class:`asyncio.StreamReader`,
    :py:class:`asyncio.StreamWriter`)