in src/message_sender.c [107:169]
static void on_delivery_settled(void* context, delivery_number delivery_no, LINK_DELIVERY_SETTLE_REASON reason, AMQP_VALUE delivery_state)
{
ASYNC_OPERATION_HANDLE pending_send = (ASYNC_OPERATION_HANDLE)context;
MESSAGE_WITH_CALLBACK* message_with_callback = GET_ASYNC_OPERATION_CONTEXT(MESSAGE_WITH_CALLBACK, pending_send);
(void)delivery_no;
if (message_with_callback != NULL &&
message_with_callback->on_message_send_complete != NULL)
{
MESSAGE_SENDER_INSTANCE *message_sender = (MESSAGE_SENDER_INSTANCE *)message_with_callback->message_sender;
switch (reason)
{
case LINK_DELIVERY_SETTLE_REASON_DISPOSITION_RECEIVED:
if (delivery_state == NULL)
{
LogError("delivery state not provided");
}
else
{
AMQP_VALUE descriptor = amqpvalue_get_inplace_descriptor(delivery_state);
AMQP_VALUE described = amqpvalue_get_inplace_described_value(delivery_state);
if (descriptor == NULL)
{
LogError("Error getting descriptor for delivery state");
message_with_callback->on_message_send_complete(message_with_callback->context, MESSAGE_SEND_ERROR, described);
}
else
{
if (is_accepted_type_by_descriptor(descriptor))
{
message_with_callback->on_message_send_complete(message_with_callback->context, MESSAGE_SEND_OK, described);
}
else
{
message_with_callback->on_message_send_complete(message_with_callback->context, MESSAGE_SEND_ERROR, described);
}
}
remove_pending_message(message_sender, pending_send);
}
break;
case LINK_DELIVERY_SETTLE_REASON_SETTLED:
message_with_callback->on_message_send_complete(message_with_callback->context, MESSAGE_SEND_OK, NULL);
remove_pending_message(message_sender, pending_send);
break;
case LINK_DELIVERY_SETTLE_REASON_TIMEOUT:
message_with_callback->on_message_send_complete(message_with_callback->context, MESSAGE_SEND_TIMEOUT, NULL);
remove_pending_message(message_sender, pending_send);
break;
case LINK_DELIVERY_SETTLE_REASON_CANCELLED:
message_with_callback->on_message_send_complete(message_with_callback->context, MESSAGE_SEND_CANCELLED, NULL);
remove_pending_message(message_sender, pending_send);
break;
case LINK_DELIVERY_SETTLE_REASON_NOT_DELIVERED:
default:
message_with_callback->on_message_send_complete(message_with_callback->context, MESSAGE_SEND_ERROR, NULL);
remove_pending_message(message_sender, pending_send);
break;
}
}
}