'Send a POP3 command to which a multi-line response is expected.
Block all further commands from being sent until the entire response is
received.  Transition the state to LONG_INITIAL.
@type cmd: L{bytes}
@param cmd: A POP3 command.
@type args: L{bytes}
@param args: The command arguments.
@type consumer: callable that takes L{object}
@param consumer: A consumer function which should be used to put
the values derived by a transform function from each line of the
multi-line response into a list.
@type xform: L{None} or callable that takes
L{bytes} and returns L{object}
@param xform: A transform function which should be used to transform
each line of the multi-line response into usable values for use by
a consumer function.  If L{None}, each line of the multi-line
response should be sent directly to the consumer function.
@rtype: L{Deferred <defer.Deferred>} which successfully fires with
callable that takes L{object} and fails with L{ServerErrorResponse}
@return: A deferred which fires when the entire response is received.
On an OK response, it returns the consumer function.  On an ERR
response, it issues a server error response failure with the
response from the server minus the status indicator and the
consumer function.'

def sendLong(self, cmd, args, consumer, xform):

    d = self._blocked(self.sendLong, cmd, args, consumer, xform)
    if (d is not None):
        return d
    if args:
        self.sendLine(((cmd + '    ') + args))
    else:
        self.sendLine(cmd)
    self.state = 'LONG_INITIAL'
    self._xform = xform
    self._consumer = consumer
    self._waiting = defer.Deferred()
    return self._waiting
