From dfde23f205de533e1147e3a958b1b6ee64dff64d Mon Sep 17 00:00:00 2001 From: Ghislain MARY Date: Fri, 20 Apr 2018 17:43:20 +0200 Subject: [PATCH] Handle IMDN negative-delivery. --- src/chat/chat-message/chat-message.cpp | 8 ++++++-- src/chat/modifier/cpim-chat-message-modifier.cpp | 5 +++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/chat/chat-message/chat-message.cpp b/src/chat/chat-message/chat-message.cpp index cb76692e6..9d6ec11a2 100644 --- a/src/chat/chat-message/chat-message.cpp +++ b/src/chat/chat-message/chat-message.cpp @@ -548,7 +548,9 @@ LinphoneReason ChatMessagePrivate::receive () { /* Unable to decrypt message */ chatRoom->getPrivate()->notifyUndecryptableChatMessageReceived(q->getSharedFromThis()); reason = linphone_error_code_to_reason(errorCode); - q->sendDeliveryNotification(reason); + if (getNegativeDeliveryNotificationRequired()) { + q->sendDeliveryNotification(reason); + } return reason; } else if (result == ChatMessageModifier::Result::Suspended) { currentRecvStep |= ChatMessagePrivate::Step::Encryption; @@ -632,7 +634,9 @@ LinphoneReason ChatMessagePrivate::receive () { if (errorCode > 0) { reason = linphone_error_code_to_reason(errorCode); - q->sendDeliveryNotification(reason); + if (getNegativeDeliveryNotificationRequired()) { + q->sendDeliveryNotification(reason); + } return reason; } diff --git a/src/chat/modifier/cpim-chat-message-modifier.cpp b/src/chat/modifier/cpim-chat-message-modifier.cpp index 5f2865ee9..9c7d48f6b 100644 --- a/src/chat/modifier/cpim-chat-message-modifier.cpp +++ b/src/chat/modifier/cpim-chat-message-modifier.cpp @@ -46,6 +46,7 @@ ChatMessageModifier::Result CpimChatMessageModifier::encode (const shared_ptrgetPrivate()->getPositiveDeliveryNotificationRequired() + || message->getPrivate()->getNegativeDeliveryNotificationRequired() || message->getPrivate()->getDisplayNotificationRequired() ) { const string imdnNamespace = "imdn"; @@ -66,6 +67,8 @@ ChatMessageModifier::Result CpimChatMessageModifier::encode (const shared_ptr dispositionNotificationValues; if (message->getPrivate()->getPositiveDeliveryNotificationRequired()) dispositionNotificationValues.emplace_back("positive-delivery"); + if (message->getPrivate()->getNegativeDeliveryNotificationRequired()) + dispositionNotificationValues.emplace_back("negative-delivery"); if (message->getPrivate()->getDisplayNotificationRequired()) dispositionNotificationValues.emplace_back("display"); dispositionNotificationHeader.setValue(Utils::join(dispositionNotificationValues, ", ")); @@ -184,6 +187,8 @@ ChatMessageModifier::Result CpimChatMessageModifier::decode (const shared_ptrgetPrivate()->setPositiveDeliveryNotificationRequired(true); + else if (value == "negative-delivery") + message->getPrivate()->setNegativeDeliveryNotificationRequired(true); else if (value == "display") message->getPrivate()->setDisplayNotificationRequired(true); }