diff --git a/src/chat/cpim/message/cpim-message.cpp b/src/chat/cpim/message/cpim-message.cpp index b1a993559..84753f4ef 100644 --- a/src/chat/cpim/message/cpim-message.cpp +++ b/src/chat/cpim/message/cpim-message.cpp @@ -38,7 +38,7 @@ class Cpim::MessagePrivate : public ObjectPrivate { public: typedef list > PrivHeaderList; - shared_ptr cpimHeaders = make_shared(); + shared_ptr cpimHeaders = make_shared(); // TODO: Remove this useless variable shared_ptr messageHeaders = make_shared(); shared_ptr contentHeaders = make_shared(); string content; @@ -148,10 +148,11 @@ string Cpim::Message::asString () const { L_D(); string output; + // TODO: Remove cpimHeaders for (const auto &cpimHeader : *d->cpimHeaders) output += cpimHeader->asString(); - output += "\r\n"; + // TODO Remove cpimHeaders if (d->messageHeaders->size() > 0) { for (const auto &messageHeader : *d->messageHeaders) diff --git a/src/chat/cpim/message/cpim-message.h b/src/chat/cpim/message/cpim-message.h index 53e33e45e..c7778c929 100644 --- a/src/chat/cpim/message/cpim-message.h +++ b/src/chat/cpim/message/cpim-message.h @@ -36,9 +36,11 @@ namespace Cpim { typedef std::shared_ptr > > HeaderList; + // TODO: Remove these useless methods HeaderList getCpimHeaders () const; bool addCpimHeader (const Header &cpimHeader); void removeCpimHeader (const Header &cpimHeader); + // TODO: Remove these useless methods HeaderList getMessageHeaders () const; bool addMessageHeader (const Header &messageHeader); @@ -51,7 +53,7 @@ namespace Cpim { std::string getContent () const; bool setContent (const std::string &content); - bool isValid () const; + bool isValid () const; // TODO: Remove this useless method std::string asString () const; diff --git a/src/chat/cpim/parser/cpim-parser.cpp b/src/chat/cpim/parser/cpim-parser.cpp index 7acdac5bd..d3beb28d2 100644 --- a/src/chat/cpim/parser/cpim-parser.cpp +++ b/src/chat/cpim/parser/cpim-parser.cpp @@ -171,37 +171,47 @@ namespace Cpim { // Warning: Call this function one time! shared_ptr createMessage () const { size_t size = mHeaders->size(); - if (size < 2 || size > 3) { + if (size < 2 || size > 3) { // TODO: Check that size is == 2 lWarning() << "Bad headers lists size."; return nullptr; } const shared_ptr message = make_shared(); - const shared_ptr cpimHeaders = mHeaders->front(); - if (find_if(cpimHeaders->cbegin(), cpimHeaders->cend(), - [](const shared_ptr &headerNode) { - return Utils::iequals(headerNode->getName(), "content-type") && (ContentType(headerNode->getValue()) == ContentType::Cpim); - }) == cpimHeaders->cend()) { - lWarning() << "No MIME `Content-Type` found!"; - return nullptr; - } - - // Add MIME headers. - for (const auto &headerNode : *cpimHeaders) { - const shared_ptr header = headerNode->createHeader(); - if (!header || !message->addCpimHeader(*header)) + // TODO: To remove + if (size == 3) { + const shared_ptr cpimHeaders = mHeaders->front(); + if (find_if(cpimHeaders->cbegin(), cpimHeaders->cend(), + [](const shared_ptr &headerNode) { + return Utils::iequals(headerNode->getName(), "content-type") && (ContentType(headerNode->getValue()) == ContentType::Cpim); + }) == cpimHeaders->cend()) { + lWarning() << "No MIME `Content-Type` found!"; return nullptr; - } + } - // Add message headers. - if (mHeaders->size() > 2) { + // Add MIME headers. + for (const auto &headerNode : *cpimHeaders) { + const shared_ptr header = headerNode->createHeader(); + if (!header || !message->addCpimHeader(*header)) + return nullptr; + } + + // Add message headers. for (const auto &headerNode : **(++mHeaders->cbegin())) { const shared_ptr header = headerNode->createHeader(); if (!header || !message->addMessageHeader(*header)) return nullptr; } } + // TODO: To remove + else { + // Add message headers. + for (const auto &headerNode : *mHeaders->front()) { + const shared_ptr header = headerNode->createHeader(); + if (!header || !message->addMessageHeader(*header)) + return nullptr; + } + } // Add content headers. for (const auto &headerNode : *mHeaders->back()) { diff --git a/src/chat/modifier/cpim-chat-message-modifier.cpp b/src/chat/modifier/cpim-chat-message-modifier.cpp index ebb07e9a0..8958c0f82 100644 --- a/src/chat/modifier/cpim-chat-message-modifier.cpp +++ b/src/chat/modifier/cpim-chat-message-modifier.cpp @@ -34,10 +34,13 @@ LINPHONE_BEGIN_NAMESPACE ChatMessageModifier::Result CpimChatMessageModifier::encode (const shared_ptr &message, int &errorCode) { Cpim::Message cpimMessage; + + // TODO: Remove this buggy Content-Type header Cpim::GenericHeader cpimContentTypeHeader; cpimContentTypeHeader.setName("Content-Type"); cpimContentTypeHeader.setValue(ContentType::Cpim.asString()); cpimMessage.addCpimHeader(cpimContentTypeHeader); + // TODO: Remove this buggy Content-Type header Cpim::FromHeader cpimFromHeader; cpimFromHeader.setValue(cpimAddressAsString(message->getFromAddress())); @@ -71,11 +74,13 @@ ChatMessageModifier::Result CpimChatMessageModifier::encode (const shared_ptrgetBodyAsString(); cpimMessage.setContent(contentBody); + // TODO: Remove this check because of buggy Content-Type header if (!cpimMessage.isValid()) { lError() << "[CPIM] Message is invalid: " << contentBody; errorCode = 500; return ChatMessageModifier::Result::Error; } + // TODO: Remove this check because of buggy Content-Type header Content newContent; newContent.setContentType(ContentType::Cpim); @@ -99,7 +104,7 @@ ChatMessageModifier::Result CpimChatMessageModifier::decode (const shared_ptrgetBodyAsString(); const shared_ptr cpimMessage = Cpim::Message::createFromString(contentBody); - if (!cpimMessage || !cpimMessage->isValid()) { + if (!cpimMessage) { lError() << "[CPIM] Message is invalid: " << contentBody; errorCode = 500; return ChatMessageModifier::Result::Error;