Add Message-ID header in CPIM messages.

This commit is contained in:
Ghislain MARY 2017-11-28 11:12:06 +01:00
parent 94a51d3ec1
commit ef7ae680ff
6 changed files with 21 additions and 1 deletions

View file

@ -554,7 +554,8 @@ void ChatMessagePrivate::send () {
}
}
q->setImdnMessageId(op->get_call_id()); /* must be known at that time */
if (q->getImdnMessageId().empty())
q->setImdnMessageId(op->get_call_id()); /* must be known at that time */
//store(); // Store will be done right below in the setState(InProgress)

View file

@ -49,6 +49,7 @@ MAKE_CORE_HEADER_IMPL(From);
MAKE_CORE_HEADER_IMPL(To);
MAKE_CORE_HEADER_IMPL(Cc);
MAKE_CORE_HEADER_IMPL(DateTime);
MAKE_CORE_HEADER_IMPL(MessageId);
MAKE_CORE_HEADER_IMPL(Ns);
MAKE_CORE_HEADER_IMPL(Require);

View file

@ -72,6 +72,7 @@ namespace Cpim {
MAKE_CORE_HEADER(To, "To");
MAKE_CORE_HEADER(Cc, "cc");
MAKE_CORE_HEADER(DateTime, "DateTime");
MAKE_CORE_HEADER(MessageId, "Message-ID");
MAKE_CORE_HEADER(Ns, "NS");
MAKE_CORE_HEADER(Require, "Require");

View file

@ -53,6 +53,8 @@ To-header-value = [ Formal-name ] "<" URI ">"
DateTime-header = %d68.97.116.101.84.105.109.101 ": " DateTime-header-value
DateTime-header-value = date-time
Message-ID-header = %d77.101.115.115.97.103.101.45.73.68 ": " Token
cc-header = %d99.99 ": " cc-header-value
cc-header-value = [ Formal-name ] "<" URI ">"

View file

@ -130,6 +130,7 @@ namespace Cpim {
{ "To", &HeaderNode::createCoreHeader<ToHeader> },
{ "cc", &HeaderNode::createCoreHeader<CcHeader> },
{ "DateTime", &HeaderNode::createCoreHeader<DateTimeHeader> },
{ "Message-ID", &HeaderNode::createCoreHeader<MessageIdHeader> },
{ "Subject", &HeaderNode::createCoreHeader<SubjectHeader> },
{ "NS", &HeaderNode::createCoreHeader<NsHeader> },
{ "Require", &HeaderNode::createCoreHeader<RequireHeader> }
@ -394,6 +395,12 @@ bool Cpim::Parser::coreHeaderIsValid<Cpim::DateTimeHeader>(const string &headerV
return true;
}
template<>
bool Cpim::Parser::coreHeaderIsValid<Cpim::MessageIdHeader>(const string &headerValue) const {
L_D();
return LinphonePrivate::coreHeaderIsValid(d->grammar, "Message-ID", headerValue);
}
template<>
bool Cpim::Parser::coreHeaderIsValid<Cpim::SubjectHeader>(const string &headerValue) const {
L_D();

View file

@ -45,6 +45,12 @@ ChatMessageModifier::Result CpimChatMessageModifier::encode (const shared_ptr<Ch
Cpim::ToHeader cpimToHeader;
cpimToHeader.setValue(cpimAddressAsString(message->getToAddress()));
cpimMessage.addMessageHeader(cpimToHeader);
char token[13];
belle_sip_random_token(token, sizeof(token));
Cpim::MessageIdHeader cpimMessageIdHeader;
cpimMessageIdHeader.setValue(token);
cpimMessage.addMessageHeader(cpimMessageIdHeader);
message->setImdnMessageId(token);
const Content *content;
if (!message->getInternalContent().isEmpty()) {
@ -127,6 +133,8 @@ ChatMessageModifier::Result CpimChatMessageModifier::decode (const shared_ptr<Ch
cpimFromAddress = Address(header->getValue());
else if (header->getName() == "To")
cpimToAddress = Address(header->getValue());
else if (header->getName() == "Message-Id")
message->setImdnMessageId(header->getValue());
}
}