Skip to content

Commit d7c767b

Browse files
fix: flexistats: Ignore IMDNs
(and other non-urgent priority messages) (cherry picked from commit 60eb98e)
1 parent 19a7dd6 commit d7c767b

File tree

7 files changed

+22
-8
lines changed

7 files changed

+22
-8
lines changed

src/eventlogs/writers/flexi-stats-event-log-writer.cc

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
#include "flexiapi/schemas/call/terminated.hh"
2121
#include "flexiapi/schemas/message/message.hh"
2222
#include "flexisip/logmanager.hh"
23+
#include "flexisip/sofia-wrapper/msg-sip.hh"
2324
#include "fork-context/fork-status.hh"
2425
#include "fork-context/message-kind.hh"
2526
#include "utils/string-utils.hh"
@@ -91,6 +92,7 @@ void FlexiStatsEventLogWriter::write(const CallEndedEventLog& call) {
9192

9293
void FlexiStatsEventLogWriter::write(const MessageSentEventLog& msg) {
9394
const auto& kind = msg.getMessageKind();
95+
if (kind.getPriority() == sofiasip::MsgSipPriority::NonUrgent) return; // Ignore IMDNs
9496
if (kind.getKind() != MessageKind::Kind::Message) return;
9597

9698
flexiapi::ToParam recipients{};
@@ -116,7 +118,7 @@ void FlexiStatsEventLogWriter::write(const MessageSentEventLog& msg) {
116118

117119
void FlexiStatsEventLogWriter::write(const MessageResponseFromRecipientEventLog& msg) {
118120
const auto& kind = msg.getMessageKind();
119-
if (kind.getKind() == MessageKind::Kind::IMDN) return;
121+
if (kind.getPriority() == sofiasip::MsgSipPriority::NonUrgent) return; // Ignore IMDNs
120122
if (kind.getCardinality() == MessageKind::Cardinality::ToConferenceServer) {
121123
// Group chat message. We want the delivery statuses of the participant devices,
122124
// not that of the conference server itself

src/fork-context/fork-message-context.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ ForkMessageContext::ForkMessageContext(const std::shared_ptr<ModuleRouter>& rout
105105
router->mStats.mCountMessageForks,
106106
msgPriority,
107107
isRestored),
108-
mKind(*event->getMsgSip()->getSip()) {
108+
mKind(*event->getMsgSip()->getSip(), msgPriority) {
109109
LOGD("New ForkMessageContext %p", this);
110110
if (!isRestored) {
111111
// Start the acceptance timer immediately.

src/fork-context/message-kind.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@ using namespace std::string_view_literals;
1111

1212
namespace flexisip {
1313

14-
MessageKind::MessageKind(const ::sip_t& event) : mKind(Kind::Message), mCardinality(Cardinality::Direct) {
14+
MessageKind::MessageKind(const ::sip_t& event, sofiasip::MsgSipPriority priority)
15+
: mKind(Kind::Message), mCardinality(Cardinality::Direct), mPriority(priority) {
1516
if (event.sip_request->rq_method == sip_method_refer) mKind = Kind::Refer;
16-
else if (event.sip_content_type->c_type == "message/imdn+xml"sv) mKind = Kind::IMDN;
1717

1818
constexpr auto tryExtractConferenceIdFrom = [](const auto& recipient) {
1919
return StringUtils::removePrefix(recipient.a_url->url_user, conference::CHATROOM_PREFIX);

src/fork-context/message-kind.hh

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,14 @@
1010

1111
#include "sofia-sip/sip.h"
1212

13+
#include "flexisip/sofia-wrapper/msg-sip.hh"
14+
1315
namespace flexisip {
1416

1517
class MessageKind {
1618
public:
1719
enum class Kind : std::uint8_t {
1820
Refer,
19-
IMDN,
2021
Message,
2122
};
2223

@@ -27,21 +28,25 @@ public:
2728
FromConferenceServer,
2829
};
2930

30-
MessageKind(const ::sip_t&);
31+
MessageKind(const ::sip_t&, sofiasip::MsgSipPriority);
3132

3233
Kind getKind() const {
3334
return mKind;
3435
}
3536
Cardinality getCardinality() const {
3637
return mCardinality;
3738
}
39+
sofiasip::MsgSipPriority getPriority() const {
40+
return mPriority;
41+
}
3842
const std::optional<std::string_view>& getConferenceId() const {
3943
return mConferenceId;
4044
}
4145

4246
private:
4347
Kind mKind;
4448
Cardinality mCardinality;
49+
sofiasip::MsgSipPriority mPriority;
4550
std::optional<std::string_view> mConferenceId;
4651
};
4752

tester/tests/eventlogs/writers/flexi-stats-event-log-writer-tester.cc

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -169,11 +169,13 @@ void messageSentAndReceived() {
169169
BC_HARD_ASSERT_TRUE(port > -1);
170170
agent->setEventLogWriter(std::make_unique<FlexiStatsEventLogWriter>(*agent->getRoot(), "localhost", to_string(port),
171171
"/api/stats/", "aRandomApiToken"));
172-
const auto builder = proxy->clientBuilder();
172+
auto builder = proxy->clientBuilder();
173173
const string expectedFrom = "[email protected]";
174174
const string expectedTo = "[email protected]";
175175
const auto tony = builder.build(expectedFrom);
176-
const auto mike = builder.build(expectedTo);
176+
// Send IMDNs as CPIM so as to camouflage the content type.
177+
// The stats writer will have to rely on the priority to determine whether to log the message or not
178+
const auto mike = builder.setCpimInBasicChatroom(OnOff::On).build(expectedTo);
177179
const auto directChat = tony.chatroomBuilder().build({mike.getMe()});
178180
const auto& forkMessageContextsStats =
179181
dynamic_cast<ModuleRouter&>(*agent->findModule("Router")).mStats.mCountMessageForks;

tester/utils/client-builder.cc

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,10 @@ ClientBuilder& ClientBuilder::setIce(OnOff value) {
161161
mIce = value;
162162
return *this;
163163
}
164+
ClientBuilder& ClientBuilder::setCpimInBasicChatroom(OnOff value) {
165+
mAccountParams->enableCpimInBasicChatRoom(bool(value));
166+
return *this;
167+
}
164168

165169
ClientBuilder& ClientBuilder::setCustomContact(const std::string& contact) {
166170
mAccountParams->setCustomContact(mFactory->createAddress(contact));

tester/utils/client-builder.hh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ public:
4545
ClientBuilder& setVideoReceive(OnOff);
4646
ClientBuilder& setRtcpSend(OnOff);
4747
ClientBuilder& setIce(OnOff);
48+
ClientBuilder& setCpimInBasicChatroom(OnOff);
4849
ClientBuilder& setConferenceFactoryUri(const std::string&);
4950
ClientBuilder& setCustomContact(const std::string& contact);
5051
ClientBuilder& setPushParams(const pushnotification::RFC8599PushParams& params);

0 commit comments

Comments
 (0)