# File lib/aws/sqs/queue.rb, line 523
      def batch_send *messages

        entries = messages.flatten

        unless entries.first.is_a?(Hash)
          options = entries.last.is_a?(Hash) ? entries.pop : {}
          entries = entries.collect{|msg| { :message_body => msg } }
          if delay = options[:delay_seconds]
            entries.each {|entry| entry[:delay_seconds] = delay }
          end
        end

        entries.each_with_index {|entry,n| entry[:id] = n.to_s }

        client_opts = {}
        client_opts[:queue_url] = url
        client_opts[:entries] = entries

        response = client.send_message_batch(client_opts)
        
        failed = batch_failures(entries, response, true)

        checksum_failed = verify_send_message_batch_checksum entries, response
        
        sent = response[:successful].collect do |sent|
          msg = SentMessage.new
          msg.message_id = sent[:message_id]
          msg.md5 = sent[:md5_of_message_body]
          msg
        end

        if !failed.empty? && !checksum_failed.empty?
          send_error = Errors::BatchSendError.new(sent, failed)
          checksum_error = Errors::ChecksumError.new(checksum_failed)
          raise Errors::BatchSendMultiError.new send_error, checksum_error
        elsif !failed.empty?
          raise Errors::BatchSendError.new(sent, failed) unless failed.empty?
        elsif !checksum_failed.empty?
          raise Errors::ChecksumError.new(checksum_failed)
        end

        sent

      end