blob: 911968cdff97c91e00edf498f023b3b09d246a19 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
using System.IO;
namespace Apache.Qpid.Proton.Client
{
/// <summary>
/// A specialized streaming message type used to operate on a streamed message which
/// allows message data to be written in one or more transfer frames to the remote
/// allowing for very large message transmission with limited memory overhead.
/// </summary>
public interface IStreamSenderMessage : IAdvancedMessage<Stream>
{
/// <summary>
/// Returns the stream tracker that is associated with this outgoing stream message.
/// </summary>
IStreamTracker Tracker { get; }
/// <summary>
/// Returns the stream sender instance that owns this outgoing stream message.
/// </summary>
IStreamSender Sender { get; }
/// <summary>
/// Marks the currently streaming message as being complete. Marking a message as
/// complete finalizes the streaming send operation and causes a final transfer
/// frame to be sent to the remote indicating that the ongoing streaming delivery
/// is done and no more message data will arrive.
/// </summary>
/// <returns>This outgoing stream message instance</returns>
IStreamSenderMessage Complete();
/// <summary>
/// Returns if the outgoing stream message has been completed.
/// </summary>
bool Completed { get; }
/// <summary>
/// Marks the currently streaming message as being aborted. Once aborted no further
/// writes regardless of whether any writes have yet been performed or not.
/// </summary>
/// <returns>This outgoing stream message instance</returns>
IStreamSenderMessage Abort();
/// <summary>
/// Returns if the outgoing stream message has been aborted.
/// </summary>
bool Aborted { get; }
/// <summary>
/// Creates an write only stream instance configured with the given options which
/// will write the bytes as the payload of one or more AMQP data sections based on
/// the provided configuration..
/// </summary>
/// <param name="options">options to apply to the created stream</param>
/// <returns>A write only stream instance used to write the message body</returns>
Stream GetBodyStream(OutputStreamOptions options = null);
/// <summary>
///
/// </summary>
/// <returns></returns>
Stream RawOutputStream();
}
}