sip: modify voicemail notification signal

Change-Id: Ifad1bcc6c6747a448ff3e3d54e8cbfb87dab5be3
This commit is contained in:
Ming Rui Zhang
2019-10-01 14:01:32 -04:00
committed by Adrien Béraud
parent bbbed20f1f
commit 210b7481a0
10 changed files with 36 additions and 28 deletions

View File

@ -718,9 +718,19 @@
The account ID.
</tp:docstring>
</arg>
<arg type="i" name="count">
<arg type="i" name="newCount">
<tp:docstring>
The number of waiting messages.
The number of new messages.
</tp:docstring>
</arg>
<arg type="i" name="oldCount">
<tp:docstring>
The number of old messages.
</tp:docstring>
</arg>
<arg type="i" name="urgentCount">
<tp:docstring>
The number of urgent messages.
</tp:docstring>
</arg>
</signal>

View File

@ -143,7 +143,7 @@ DBusClient::initLibrary(int flags)
exportable_callback<CallSignal::TransferFailed>(bind(&DBusCallManager::transferFailed, callM)),
exportable_callback<CallSignal::TransferSucceeded>(bind(&DBusCallManager::transferSucceeded, callM)),
exportable_callback<CallSignal::RecordPlaybackStopped>(bind(&DBusCallManager::recordPlaybackStopped, callM, _1)),
exportable_callback<CallSignal::VoiceMailNotify>(bind(&DBusCallManager::voiceMailNotify, callM, _1, _2)),
exportable_callback<CallSignal::VoiceMailNotify>(bind(&DBusCallManager::voiceMailNotify, callM, _1, _2, _3, _4)),
exportable_callback<CallSignal::IncomingMessage>(bind(&DBusCallManager::incomingMessage, callM, _1, _2, _3)),
exportable_callback<CallSignal::IncomingCall>(bind(&DBusCallManager::incomingCall, callM, _1, _2, _3)),
exportable_callback<CallSignal::RecordPlaybackFilepath>(bind(&DBusCallManager::recordPlaybackFilepath, callM, _1, _2)),

View File

@ -32,7 +32,7 @@ public:
virtual void transferFailed(void){}
virtual void transferSucceeded(void){}
virtual void recordPlaybackStopped(const std::string& path){}
virtual void voiceMailNotify(const std::string& call_id, int nd_msg){}
virtual void voiceMailNotify(const std::string& accountId, int newCount, int oldCount, int urgentCount){}
virtual void incomingMessage(const std::string& id, const std::string& from, const std::map<std::string, std::string>& messages){}
virtual void incomingCall(const std::string& account_id, const std::string& call_id, const std::string& from){}
virtual void recordPlaybackFilepath(const std::string& id, const std::string& filename){}
@ -118,7 +118,7 @@ public:
virtual void transferFailed(void){}
virtual void transferSucceeded(void){}
virtual void recordPlaybackStopped(const std::string& path){}
virtual void voiceMailNotify(const std::string& call_id, int nd_msg){}
virtual void voiceMailNotify(const std::string& accountId, int newCount, int oldCount, int urgentCount){}
virtual void incomingMessage(const std::string& id, const std::string& from, const std::map<std::string, std::string>& messages){}
virtual void incomingCall(const std::string& account_id, const std::string& call_id, const std::string& from){}
virtual void recordPlaybackFilepath(const std::string& id, const std::string& filename){}

View File

@ -227,7 +227,7 @@ void init(ConfigurationCallback* confM, Callback* callM, PresenceCallback* presM
exportable_callback<CallSignal::TransferFailed>(bind(&Callback::transferFailed, callM)),
exportable_callback<CallSignal::TransferSucceeded>(bind(&Callback::transferSucceeded, callM)),
exportable_callback<CallSignal::RecordPlaybackStopped>(bind(&Callback::recordPlaybackStopped, callM, _1)),
exportable_callback<CallSignal::VoiceMailNotify>(bind(&Callback::voiceMailNotify, callM, _1, _2)),
exportable_callback<CallSignal::VoiceMailNotify>(bind(&Callback::voiceMailNotify, callM, _1, _2, _3, _4)),
exportable_callback<CallSignal::IncomingMessage>(bind(&Callback::incomingMessage, callM, _1, _2, _3)),
exportable_callback<CallSignal::IncomingCall>(bind(&Callback::incomingCall, callM, _1, _2, _3)),
exportable_callback<CallSignal::RecordPlaybackFilepath>(bind(&Callback::recordPlaybackFilepath, callM, _1, _2)),

View File

@ -32,7 +32,7 @@ public:
virtual void transferFailed(void){}
virtual void transferSucceeded(void){}
virtual void recordPlaybackStopped(const std::string& path){}
virtual void voiceMailNotify(const std::string& call_id, int nd_msg){}
virtual void voiceMailNotify(const std::string& accountId, int newCount, int oldCount, int urgentCount){}
virtual void incomingMessage(const std::string& id, const std::string& from, const std::map<std::string, std::string>& messages){}
virtual void incomingCall(const std::string& account_id, const std::string& call_id, const std::string& from){}
virtual void recordPlaybackFilepath(const std::string& id, const std::string& filename){}
@ -118,7 +118,7 @@ public:
virtual void transferFailed(void){}
virtual void transferSucceeded(void){}
virtual void recordPlaybackStopped(const std::string& path){}
virtual void voiceMailNotify(const std::string& call_id, int nd_msg){}
virtual void voiceMailNotify(const std::string& accountId, int newCount, int oldCount, int urgentCount){}
virtual void incomingMessage(const std::string& id, const std::string& from, const std::map<std::string, std::string>& messages){}
virtual void incomingCall(const std::string& account_id, const std::string& call_id, const std::string& from){}
virtual void recordPlaybackFilepath(const std::string& id, const std::string& filename){}

View File

@ -134,6 +134,7 @@ void init(const v8::Handle<v8::Value> &funcMap){
const std::map<std::string, SharedCallback> callEvHandlers = {
exportable_callback<CallSignal::StateChange>(bind(&callStateChanged, _1, _2, _3)),
exportable_callback<CallSignal::IncomingMessage>(bind(&incomingMessage, _1, _2, _3)),
exportable_callback<CallSignal::VoiceMailNotify>(bind(&voiceMailNotify, _1, _2, _3, _4)),
exportable_callback<CallSignal::IncomingCall>(bind(&incomingCall, _1, _2, _3)),
exportable_callback<CallSignal::NewCallCreated>(bind(&newCallCreated, _1, _2, _3))
};

View File

@ -123,7 +123,7 @@ struct DRING_PUBLIC CallSignal {
};
struct DRING_PUBLIC VoiceMailNotify {
constexpr static const char* name = "VoiceMailNotify";
using cb_type = void(const std::string&, int32_t);
using cb_type = void(const std::string&, int32_t, int32_t, int32_t);
};
struct DRING_PUBLIC IncomingMessage {
constexpr static const char* name = "IncomingMessage";

View File

@ -2115,14 +2115,6 @@ Manager::callFailure(Call& call)
removeAudio(call);
}
//THREAD=VoIP
void
Manager::startVoiceMessageNotification(const std::string& accountId,
int nb_msg)
{
emitSignal<DRing::CallSignal::VoiceMailNotify>(accountId, nb_msg);
}
/**
* Multi Thread
*/

View File

@ -375,13 +375,6 @@ class Manager {
const std::map<std::string, std::string>& messages,
const std::string& from, bool isMixed);
/**
* Notify the client he has voice mails
* @param accountId The account identifier
* @param nb_msg The number of messages
*/
void startVoiceMessageNotification(const std::string& accountId, int nb_msg);
/**
* ConfigurationManager - Send registration request
* @param accountId The account to register/unregister

View File

@ -223,11 +223,23 @@ transaction_request_cb(pjsip_rx_data *rdata)
if (request.find("NOTIFY") != std::string::npos) {
if (body and body->data) {
int voicemail = 0;
int ret = sscanf((const char*) body->data, "Voice-Message: %d/", &voicemail);
int newCount { 0 };
int oldCount { 0 };
int urgentCount { 0 };
if (ret == 1 and voicemail != 0)
Manager::instance().startVoiceMessageNotification(account_id, voicemail);
std::string sp = std::string(static_cast<char*>(body->data));
auto pos = sp.find("Voice-Message: ");
sp = sp.substr(pos);
int ret = sscanf(sp.c_str() , "Voice-Message: %d/%d (%d/",
&newCount,
&oldCount,
&urgentCount);
// According to rfc3842
// urgent messages are optional
if (ret >= 2)
emitSignal<DRing::CallSignal::VoiceMailNotify>(account_id, newCount, oldCount, urgentCount);
}
} else if (request.find("MESSAGE") != std::string::npos) {
// Reply 200 immediately (RFC 3428, ch. 7)