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;
};