blob: 9078fc223c5839601a462e8fb6878775ca219642 [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.
module Qpid::Proton
class Disposition
include Util::Deprecation
# @private
PROTON_METHOD_PREFIX = "pn_disposition"
# @private
extend Util::SWIGClassHelper
# States of a message transfer
module State
# Message was successfully processed by the receiver
ACCEPTED = Cproton::PN_ACCEPTED
# Message rejected as invalid and unprocessable by the receiver.
REJECTED = Cproton::PN_REJECTED
# Message was not (and will not be) processed by the receiver, but may be
# acceptable if re-delivered to another receiver
RELEASED = Cproton::PN_RELEASED
# Like {RELEASED}, but there are modifications (see {Tracker#modifications})
# that must be applied to the message by the {Sender} before re-delivering it.
MODIFIED = Cproton::PN_MODIFIED
# Partial message data received. Only used during link recovery.
RECEIVED = Cproton::PN_RECEIVED
module ClassMethods
def name_of(state) Cproton::pn_disposition_type_name(state); end
end
extend ClassMethods
def self.included(klass) klass.extend ClassMethods; end
end
include State
attr_reader :impl
# @private
def initialize(impl, local)
deprecated self.class, Delivery
@impl = impl
@local = local
@data = nil
@condition = nil
@annotations = nil
end
# @!attribute section_number
#
# @return [Integer] The section number of the disposition.
#
proton_set_get :section_number
# @!attribute section_offset
#
# @return [Integer] The section offset of the disposition.
#
proton_set_get :section_offset
# @!attribute failed?
#
# @return [Boolean] The failed flag.
#
proton_set_is :failed
# @!attribute undeliverable?
#
# @return [Boolean] The undeliverable flag.
#
proton_set_is :undeliverable
# Sets the data for the disposition.
#
# @param data [Codec::Data] The data.
#
# @raise [AttributeError] If the disposition is remote.
#
def data=(data)
raise AttributeError.new("data attribute is read-only") unless @local
@data = data
end
# Returns the data for the disposition.
#
# @return [Codec::Data] The data.
#
def data
if @local
@data
else
Codec::Data.to_object(Cproton.pn_disposition_data(@impl))
end
end
# Sets the annotations for the disposition.
#
# @param annotations [Codec::Data] The annotations.
#
# @raise [AttributeError] If the disposition is remote.
#
def annotations=(annotations)
raise AttributeError.new("annotations attribute is read-only") unless @local
@annotations = annotations
end
# Returns the annotations for the disposition.
#
# @return [Codec::Data] The annotations.
#
def annotations
if @local
@annotations
else
Codec::Data.to_object(Cproton.pn_disposition_annotations(@impl))
end
end
# Sets the condition for the disposition.
#
# @param condition [Codec::Data] The condition.
#
# @raise [AttributeError] If the disposition is remote.
#
def condition=(condition)
raise AttributeError.new("condition attribute is read-only") unless @local
@condition = condition
end
# Returns the condition of the disposition.
#
# @return [Codec::Data] The condition of the disposition.
#
def condition
if @local
@condition
else
Condition.convert(Cproton.pn_disposition_condition(@impl))
end
end
end
end