diff --git a/src/chat/chat-message.cpp b/src/chat/chat-message.cpp index a5e816342..3adc8bea0 100644 --- a/src/chat/chat-message.cpp +++ b/src/chat/chat-message.cpp @@ -91,8 +91,8 @@ string ChatMessage::getContentType () const { return d->contentType; } -void ChatMessage::send () const { - L_D(const ChatMessage); +void ChatMessage::send () { + L_D(ChatMessage); if (d->contents.size() > 1) { MultipartChatMessageModifier mcmm; @@ -107,6 +107,8 @@ void ChatMessage::send () const { } // TODO. + + d->isReadOnly = true; } bool ChatMessage::containsReadableText () const { diff --git a/src/chat/chat-message.h b/src/chat/chat-message.h index 727a6fb93..9769c2ef7 100644 --- a/src/chat/chat-message.h +++ b/src/chat/chat-message.h @@ -69,7 +69,7 @@ public: std::string getContentType () const; - void send () const; + void send (); bool containsReadableText () const; diff --git a/src/chat/modifier/chat-message-modifier.h b/src/chat/modifier/chat-message-modifier.h index 64434abe5..97e8724f7 100644 --- a/src/chat/modifier/chat-message-modifier.h +++ b/src/chat/modifier/chat-message-modifier.h @@ -27,8 +27,8 @@ class ChatMessageModifier { public: - virtual void encode(const LinphonePrivate::ChatMessagePrivate* msg) = 0; - virtual void decode(const LinphonePrivate::ChatMessagePrivate* msg) = 0; + virtual void encode(LinphonePrivate::ChatMessagePrivate* msg) = 0; + virtual void decode(LinphonePrivate::ChatMessagePrivate* msg) = 0; virtual ~ChatMessageModifier () = default; }; diff --git a/src/chat/modifier/cpim-chat-message-modifier.cpp b/src/chat/modifier/cpim-chat-message-modifier.cpp index b29d4cd27..b2deb558b 100644 --- a/src/chat/modifier/cpim-chat-message-modifier.cpp +++ b/src/chat/modifier/cpim-chat-message-modifier.cpp @@ -16,23 +16,54 @@ * along with this program. If not, see . */ + #include + + #include "content/content-type.h" + #include "content/content.h" #include "chat/chat-message-p.h" + #include "chat/cpim/cpim.h" + #include "cpim-chat-message-modifier.h" LINPHONE_BEGIN_NAMESPACE using namespace std; - void CpimChatMessageModifier::encode(const LinphonePrivate::ChatMessagePrivate* msg) { - //TODO + void CpimChatMessageModifier::encode(LinphonePrivate::ChatMessagePrivate* msg) { + Cpim::Message message; + Cpim::GenericHeader contentTypeHeader; + contentTypeHeader.setName("Content-Type"); + contentTypeHeader.setValue("Message/CPIM"); + message.addCpimHeader(contentTypeHeader); + + shared_ptr content; if (msg->internalContent) { // Another ChatMessageModifier was called before this one, we apply our changes on the private content + content = msg->internalContent; } else { // We're the first ChatMessageModifier to be called, we'll create the private content from the public one + // We take the first one because if there is more of them, the multipart modifier should have been called first + // So we should not be in this block + content = msg->contents.front(); + } + + string contentType = content->getContentType().asString(); + const vector body = content->getBody(); + string contentBody(body.begin(), body.end()); + message.setContent("ContentType: " + contentType + "\r\n" + contentBody); + + if (!message.isValid()) { + //TODO + } else { + shared_ptr newContent = make_shared(); + ContentType newContentType("Message/CPIM"); + newContent->setContentType(newContentType); + newContent->setBody(message.asString()); + msg->internalContent = newContent; } } - void CpimChatMessageModifier::decode(const LinphonePrivate::ChatMessagePrivate* msg) { + void CpimChatMessageModifier::decode(LinphonePrivate::ChatMessagePrivate* msg) { //TODO } diff --git a/src/chat/modifier/cpim-chat-message-modifier.h b/src/chat/modifier/cpim-chat-message-modifier.h index d5ee530c6..f31f1cb12 100644 --- a/src/chat/modifier/cpim-chat-message-modifier.h +++ b/src/chat/modifier/cpim-chat-message-modifier.h @@ -28,8 +28,8 @@ class CpimChatMessageModifier : ChatMessageModifier { public: CpimChatMessageModifier() {}; - virtual void encode(const LinphonePrivate::ChatMessagePrivate* msg); - virtual void decode(const LinphonePrivate::ChatMessagePrivate* msg); + virtual void encode(LinphonePrivate::ChatMessagePrivate* msg); + virtual void decode(LinphonePrivate::ChatMessagePrivate* msg); virtual ~CpimChatMessageModifier () = default; }; diff --git a/src/chat/modifier/multipart-chat-message-modifier.cpp b/src/chat/modifier/multipart-chat-message-modifier.cpp index f980a9bfd..352de4e2a 100644 --- a/src/chat/modifier/multipart-chat-message-modifier.cpp +++ b/src/chat/modifier/multipart-chat-message-modifier.cpp @@ -23,13 +23,13 @@ using namespace std; - void MultipartChatMessageModifier::encode(const LinphonePrivate::ChatMessagePrivate* msg) { + void MultipartChatMessageModifier::encode(LinphonePrivate::ChatMessagePrivate* msg) { if (msg->contents.size() > 1) { //TODO } } - void MultipartChatMessageModifier::decode(const LinphonePrivate::ChatMessagePrivate* msg) { + void MultipartChatMessageModifier::decode(LinphonePrivate::ChatMessagePrivate* msg) { //TODO } diff --git a/src/chat/modifier/multipart-chat-message-modifier.h b/src/chat/modifier/multipart-chat-message-modifier.h index 9f9b23069..b66f618f0 100644 --- a/src/chat/modifier/multipart-chat-message-modifier.h +++ b/src/chat/modifier/multipart-chat-message-modifier.h @@ -28,8 +28,8 @@ class MultipartChatMessageModifier : ChatMessageModifier { public: MultipartChatMessageModifier() {}; - virtual void encode(const LinphonePrivate::ChatMessagePrivate* msg); - virtual void decode(const LinphonePrivate::ChatMessagePrivate* msg); + virtual void encode(LinphonePrivate::ChatMessagePrivate* msg); + virtual void decode(LinphonePrivate::ChatMessagePrivate* msg); virtual ~MultipartChatMessageModifier () = default; };