data);
    
    /**
     *
     * @param transfer the transfer object returned by an earlier call to begin
     * @throws TransferException
     */
    void prepare(Transfer transfer) throws TransferException;
    
    /**
     * @param transfer the transfer object returned by an earlier call to begin
     * @throws TransferException 
     */
    void commit(Transfer transfer) throws TransferException;
    
    /**
     * Abort the transfer
     * @param transfer the transfer object returned by an earlier call to begin 
     * @throws TransferException 
     */
    void abort(Transfer transfer) throws TransferException;
    
    /**
     * Get the status of an in process transfer
     */
    TransferProgress getStatus(Transfer transfer) throws TransferException;
    
    /**
     * Get the destination side transfer report from the destination and write it to the specified output stream.
     * 
     * The result stream will be closed.
     * @param transfer the transfer object returned by an earlier call to begin 
     * @param results - where to write the contents of the transfer report. 
     */
    void getTransferReport(Transfer transfer, OutputStream results);
    
}