Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
liblinphone
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
10
Issues
10
List
Board
Labels
Milestones
Merge Requests
22
Merge Requests
22
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
External Wiki
External Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
BC
public
liblinphone
Commits
fefbec92
Commit
fefbec92
authored
Oct 05, 2017
by
Sylvain Berfini
🎩
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Added enum as returned value by ChatMessageModifiers + error code as return parameter
parent
25371cbf
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
65 additions
and
50 deletions
+65
-50
chat-message.cpp
src/chat/chat-message.cpp
+20
-20
chat-message-modifier.h
src/chat/modifier/chat-message-modifier.h
+9
-9
cpim-chat-message-modifier.cpp
src/chat/modifier/cpim-chat-message-modifier.cpp
+9
-7
cpim-chat-message-modifier.h
src/chat/modifier/cpim-chat-message-modifier.h
+2
-2
encryption-chat-message-modifier.cpp
src/chat/modifier/encryption-chat-message-modifier.cpp
+15
-4
encryption-chat-message-modifier.h
src/chat/modifier/encryption-chat-message-modifier.h
+2
-2
multipart-chat-message-modifier.cpp
src/chat/modifier/multipart-chat-message-modifier.cpp
+6
-4
multipart-chat-message-modifier.h
src/chat/modifier/multipart-chat-message-modifier.h
+2
-2
No files found.
src/chat/chat-message.cpp
View file @
fefbec92
...
...
@@ -969,7 +969,7 @@ void ChatMessagePrivate::createFileTransferInformationsFromVndGsmaRcsFtHttpXml()
LinphoneReason
ChatMessagePrivate
::
receive
()
{
L_Q
();
int
errorCode
=
0
;
LinphoneReason
reason
=
LinphoneReasonNone
;
bool
store
=
false
;
...
...
@@ -979,34 +979,33 @@ LinphoneReason ChatMessagePrivate::receive() {
if
(
getContentType
()
==
ContentType
::
Cpim
)
{
CpimChatMessageModifier
ccmm
;
ccmm
.
decode
(
this
);
ccmm
.
decode
(
this
,
&
errorCode
);
}
EncryptionChatMessageModifier
ecmm
;
int
retval
=
0
;
retval
=
ecmm
.
decode
(
this
);
if
(
retval
>
0
)
{
ChatMessageModifier
::
Result
result
=
ecmm
.
decode
(
this
,
&
errorCode
);
if
(
result
==
ChatMessageModifier
::
Result
::
Error
)
{
/* Unable to decrypt message */
chatRoom
->
getPrivate
()
->
notifyUndecryptableMessageReceived
(
q
->
getSharedFromThis
());
reason
=
linphone_error_code_to_reason
(
retval
);
reason
=
linphone_error_code_to_reason
(
errorCode
);
q
->
sendDeliveryNotification
(
reason
);
return
reason
;
}
MultipartChatMessageModifier
mcmm
;
mcmm
.
decode
(
this
);
mcmm
.
decode
(
this
,
&
errorCode
);
// ---------------------------------------
// End of message modification
// ---------------------------------------
if
((
retval
<=
0
)
&&
(
linphone_core_is_content_type_supported
(
chatRoom
->
getCore
(),
getContentType
().
asString
().
c_str
())
==
FALSE
))
{
retval
=
415
;
if
((
errorCode
<=
0
)
&&
(
linphone_core_is_content_type_supported
(
chatRoom
->
getCore
(),
getContentType
().
asString
().
c_str
())
==
FALSE
))
{
errorCode
=
415
;
lError
()
<<
"Unsupported MESSAGE (content-type "
<<
getContentType
().
asString
()
<<
" not recognized)"
;
}
if
(
retval
>
0
)
{
reason
=
linphone_error_code_to_reason
(
retval
);
if
(
errorCode
>
0
)
{
reason
=
linphone_error_code_to_reason
(
errorCode
);
q
->
sendDeliveryNotification
(
reason
);
return
reason
;
}
...
...
@@ -1029,6 +1028,7 @@ void ChatMessagePrivate::send() {
L_Q
();
SalOp
*
op
=
salOp
;
LinphoneCall
*
call
=
NULL
;
int
errorCode
=
0
;
if
((
currentSendStep
&
ChatMessagePrivate
::
Step
::
FileUpload
)
==
ChatMessagePrivate
::
Step
::
FileUpload
)
{
lInfo
()
<<
"File upload step already done, skipping"
;
...
...
@@ -1100,7 +1100,7 @@ void ChatMessagePrivate::send() {
}
else
{
if
(
contents
.
size
()
>
1
)
{
MultipartChatMessageModifier
mcmm
;
mcmm
.
encode
(
this
);
mcmm
.
encode
(
this
,
&
errorCode
);
}
currentSendStep
|=
ChatMessagePrivate
::
Step
::
Multipart
;
}
...
...
@@ -1109,13 +1109,13 @@ void ChatMessagePrivate::send() {
lInfo
()
<<
"Encryption step already done, skipping"
;
}
else
{
EncryptionChatMessageModifier
ecmm
;
int
retval
=
ecmm
.
encode
(
this
);
if
(
re
tval
>
0
)
{
if
(
retval
>
1
)
{
sal_error_info_set
((
SalErrorInfo
*
)
op
->
get_error_info
(),
SalReasonNotAcceptable
,
"SIP"
,
retval
,
"Unable to encrypt IM"
,
nullptr
);
q
->
updateState
(
ChatMessage
::
State
::
NotDelivered
);
q
->
store
()
;
}
ChatMessageModifier
::
Result
result
=
ecmm
.
encode
(
this
,
&
errorCode
);
if
(
re
sult
==
ChatMessageModifier
::
Result
::
Error
)
{
sal_error_info_set
((
SalErrorInfo
*
)
op
->
get_error_info
(),
SalReasonNotAcceptable
,
"SIP"
,
errorCode
,
"Unable to encrypt IM"
,
nullptr
);
q
->
updateState
(
ChatMessage
::
State
::
NotDelivered
);
q
->
store
(
);
return
;
}
else
if
(
result
==
ChatMessageModifier
::
Result
::
Suspended
)
{
return
;
}
currentSendStep
|=
ChatMessagePrivate
::
Step
::
Encryption
;
...
...
@@ -1126,7 +1126,7 @@ void ChatMessagePrivate::send() {
}
else
{
if
(
lp_config_get_int
(
chatRoom
->
getCore
()
->
config
,
"sip"
,
"use_cpim"
,
0
)
==
1
)
{
CpimChatMessageModifier
ccmm
;
ccmm
.
encode
(
this
);
ccmm
.
encode
(
this
,
&
errorCode
);
}
currentSendStep
|=
ChatMessagePrivate
::
Step
::
Cpim
;
}
...
...
src/chat/modifier/chat-message-modifier.h
View file @
fefbec92
...
...
@@ -30,27 +30,27 @@ class ChatMessagePrivate;
class
ChatMessageModifier
{
public
:
enum
Result
{
Skipped
=
-
1
,
Done
=
0
,
Suspended
=
1
,
Error
=
2
};
virtual
~
ChatMessageModifier
()
=
default
;
/**
* This method will be called when the message is about to be sent.
* It should check first if the internalContent is filled.
* If so, it should apply it's changes to it, otherwise it should use the contentsList.
* If it returns 0, it means everything went well.
* If it returns -1, it means it didn't change anything.
* If it returns 1, it means to abort the sending process and it will be resumed later.
* If it returns any other value > 1, it's an error code.
*/
virtual
int
encode
(
ChatMessagePrivate
*
messagePrivat
e
)
=
0
;
virtual
Result
encode
(
ChatMessagePrivate
*
messagePrivate
,
int
*
errorCod
e
)
=
0
;
/**
* This method will be called when the message is about to be received.
* It should apply it's changes to the internal content, the last modifier will take care of filling the contentsList.
* If it returns 0, it means everything went well.
* If it returns -1, it means it didn't change anything.
* If it returns any other value > 0, it's an error code.
*/
virtual
int
decode
(
ChatMessagePrivate
*
messagePrivat
e
)
=
0
;
virtual
Result
decode
(
ChatMessagePrivate
*
messagePrivate
,
int
*
errorCod
e
)
=
0
;
};
LINPHONE_END_NAMESPACE
...
...
src/chat/modifier/cpim-chat-message-modifier.cpp
View file @
fefbec92
...
...
@@ -31,7 +31,7 @@ using namespace std;
LINPHONE_BEGIN_NAMESPACE
int
CpimChatMessageModifier
::
encode
(
ChatMessagePrivate
*
messagePrivat
e
)
{
ChatMessageModifier
::
Result
CpimChatMessageModifier
::
encode
(
ChatMessagePrivate
*
messagePrivate
,
int
*
errorCod
e
)
{
Cpim
::
Message
message
;
Cpim
::
GenericHeader
cpimContentTypeHeader
;
cpimContentTypeHeader
.
setName
(
"Content-Type"
);
...
...
@@ -62,7 +62,8 @@ int CpimChatMessageModifier::encode (ChatMessagePrivate *messagePrivate) {
if
(
!
message
.
isValid
())
{
lError
()
<<
"[CPIM] Message is invalid: "
<<
contentBody
;
return
500
;
*
errorCode
=
500
;
return
ChatMessageModifier
::
Result
::
Error
;
}
else
{
Content
newContent
;
ContentType
newContentType
(
"Message/CPIM"
);
...
...
@@ -70,10 +71,10 @@ int CpimChatMessageModifier::encode (ChatMessagePrivate *messagePrivate) {
newContent
.
setBody
(
message
.
asString
());
messagePrivate
->
internalContent
=
newContent
;
}
return
0
;
return
ChatMessageModifier
::
Result
::
Done
;
}
int
CpimChatMessageModifier
::
decode
(
ChatMessagePrivate
*
messagePrivat
e
)
{
ChatMessageModifier
::
Result
CpimChatMessageModifier
::
decode
(
ChatMessagePrivate
*
messagePrivate
,
int
*
errorCod
e
)
{
Content
content
;
if
(
!
messagePrivate
->
internalContent
.
isEmpty
())
{
content
=
messagePrivate
->
internalContent
;
...
...
@@ -93,13 +94,14 @@ int CpimChatMessageModifier::decode (ChatMessagePrivate *messagePrivate) {
messagePrivate
->
internalContent
=
newContent
;
}
else
{
lError
()
<<
"[CPIM] Message is invalid: "
<<
contentBody
;
return
500
;
*
errorCode
=
500
;
return
ChatMessageModifier
::
Result
::
Error
;
}
}
else
{
lError
()
<<
"[CPIM] Message is not CPIM but "
<<
content
.
getContentType
().
asString
();
return
-
1
;
return
ChatMessageModifier
::
Result
::
Skipped
;
}
return
0
;
return
ChatMessageModifier
::
Result
::
Done
;
}
LINPHONE_END_NAMESPACE
src/chat/modifier/cpim-chat-message-modifier.h
View file @
fefbec92
...
...
@@ -29,8 +29,8 @@ class CpimChatMessageModifier : public ChatMessageModifier {
public
:
CpimChatMessageModifier
()
=
default
;
int
encode
(
ChatMessagePrivate
*
messagePrivat
e
)
override
;
int
decode
(
ChatMessagePrivate
*
messagePrivat
e
)
override
;
Result
encode
(
ChatMessagePrivate
*
messagePrivate
,
int
*
errorCod
e
)
override
;
Result
decode
(
ChatMessagePrivate
*
messagePrivate
,
int
*
errorCod
e
)
override
;
};
LINPHONE_END_NAMESPACE
...
...
src/chat/modifier/encryption-chat-message-modifier.cpp
View file @
fefbec92
...
...
@@ -33,7 +33,7 @@ using namespace std;
LINPHONE_BEGIN_NAMESPACE
int
EncryptionChatMessageModifier
::
encode
(
ChatMessagePrivate
*
messagePrivat
e
)
{
ChatMessageModifier
::
Result
EncryptionChatMessageModifier
::
encode
(
ChatMessagePrivate
*
messagePrivate
,
int
*
errorCod
e
)
{
int
retval
=
-
1
;
LinphoneImEncryptionEngine
*
imee
=
messagePrivate
->
chatRoom
->
getCore
()
->
im_encryption_engine
;
if
(
imee
)
{
...
...
@@ -43,13 +43,19 @@ int EncryptionChatMessageModifier::encode (ChatMessagePrivate *messagePrivate) {
retval
=
cbProcessOutgoingMessage
(
imee
,
L_GET_C_BACK_PTR
(
messagePrivate
->
chatRoom
),
L_GET_C_BACK_PTR
(
messagePrivate
->
getPublic
()
->
getSharedFromThis
()));
if
(
retval
==
0
||
retval
==
1
)
{
messagePrivate
->
isSecured
=
true
;
if
(
retval
==
1
)
{
return
ChatMessageModifier
::
Result
::
Suspended
;
}
return
ChatMessageModifier
::
Result
::
Done
;
}
*
errorCode
=
retval
;
return
ChatMessageModifier
::
Result
::
Error
;
}
}
return
retval
;
return
ChatMessageModifier
::
Result
::
Skipped
;
}
int
EncryptionChatMessageModifier
::
decode
(
ChatMessagePrivate
*
messagePrivat
e
)
{
ChatMessageModifier
::
Result
EncryptionChatMessageModifier
::
decode
(
ChatMessagePrivate
*
messagePrivate
,
int
*
errorCod
e
)
{
int
retval
=
-
1
;
LinphoneImEncryptionEngine
*
imee
=
messagePrivate
->
chatRoom
->
getCore
()
->
im_encryption_engine
;
if
(
imee
)
{
...
...
@@ -59,10 +65,15 @@ int EncryptionChatMessageModifier::decode (ChatMessagePrivate *messagePrivate) {
retval
=
cbProcessIncomingMessage
(
imee
,
L_GET_C_BACK_PTR
(
messagePrivate
->
chatRoom
),
L_GET_C_BACK_PTR
(
messagePrivate
->
getPublic
()
->
getSharedFromThis
()));
if
(
retval
==
0
)
{
messagePrivate
->
isSecured
=
true
;
return
ChatMessageModifier
::
Result
::
Done
;
}
else
if
(
retval
==
-
1
)
{
return
ChatMessageModifier
::
Result
::
Skipped
;
}
*
errorCode
=
retval
;
return
ChatMessageModifier
::
Result
::
Error
;
}
}
return
retval
;
return
ChatMessageModifier
::
Result
::
Skipped
;
}
LINPHONE_END_NAMESPACE
src/chat/modifier/encryption-chat-message-modifier.h
View file @
fefbec92
...
...
@@ -29,8 +29,8 @@ class EncryptionChatMessageModifier : public ChatMessageModifier {
public
:
EncryptionChatMessageModifier
()
=
default
;
int
encode
(
ChatMessagePrivate
*
messagePrivat
e
)
override
;
int
decode
(
ChatMessagePrivate
*
messagePrivat
e
)
override
;
Result
encode
(
ChatMessagePrivate
*
messagePrivate
,
int
*
errorCod
e
)
override
;
Result
decode
(
ChatMessagePrivate
*
messagePrivate
,
int
*
errorCod
e
)
override
;
};
LINPHONE_END_NAMESPACE
...
...
src/chat/modifier/multipart-chat-message-modifier.cpp
View file @
fefbec92
...
...
@@ -26,22 +26,24 @@ using namespace std;
LINPHONE_BEGIN_NAMESPACE
int
MultipartChatMessageModifier
::
encode
(
ChatMessagePrivate
*
messagePrivat
e
)
{
ChatMessageModifier
::
Result
MultipartChatMessageModifier
::
encode
(
ChatMessagePrivate
*
messagePrivate
,
int
*
errorCod
e
)
{
if
(
messagePrivate
->
contents
.
size
()
>
1
)
{
//TODO
return
ChatMessageModifier
::
Result
::
Done
;
}
return
0
;
return
ChatMessageModifier
::
Result
::
Skipped
;
}
int
MultipartChatMessageModifier
::
decode
(
ChatMessagePrivate
*
messagePrivat
e
)
{
ChatMessageModifier
::
Result
MultipartChatMessageModifier
::
decode
(
ChatMessagePrivate
*
messagePrivate
,
int
*
errorCod
e
)
{
//TODO
if
(
false
)
{
// Multipart required
return
ChatMessageModifier
::
Result
::
Done
;
}
else
if
(
messagePrivate
->
contents
.
size
()
==
0
)
{
// All previous modifiers only altered the internal content, let's fill the content list because we're the last modifier to be called
messagePrivate
->
contents
.
push_back
(
messagePrivate
->
internalContent
);
}
return
0
;
return
ChatMessageModifier
::
Result
::
Skipped
;
}
LINPHONE_END_NAMESPACE
src/chat/modifier/multipart-chat-message-modifier.h
View file @
fefbec92
...
...
@@ -29,8 +29,8 @@ class MultipartChatMessageModifier : public ChatMessageModifier {
public
:
MultipartChatMessageModifier
()
=
default
;
int
encode
(
ChatMessagePrivate
*
messag
e
)
override
;
int
decode
(
ChatMessagePrivate
*
messag
e
)
override
;
Result
encode
(
ChatMessagePrivate
*
message
,
int
*
errorCod
e
)
override
;
Result
decode
(
ChatMessagePrivate
*
message
,
int
*
errorCod
e
)
override
;
};
LINPHONE_END_NAMESPACE
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment