multi-stream: report an incoming call with a media list

Currently, an incoming call is always assumed to have either audio
and video media or only audio media.
This assumption was removed and the incoming call are reported with
the list of included media with some of their attributes as found in
the call invite (SDP). This will allow to process calls with an
arbitrary number of media.
It will also allow to add new media to a call by requesting a media
change using a SIP re-invite (with new SDP). For instance, add video
to an audio-only call. The peer will receive the new offer and may
choose to accept or not the new media.
Not all media change requests require validation from the user/client.
Meaning that for instance, if a new SDP (media change request) is
received to notify that the peer muted it's audio, the media change
request can be processed without requiring validation from the
user/client.

Gitlab: #445

Change-Id: Ibc2b2501a3ec7e2c22f4e9d47cec3eda3dd43fef
This commit is contained in:
Mohamed Chibani
2021-03-31 17:23:08 -04:00
committed by Adrien Béraud
parent 77bac126e7
commit bac6a6e981
34 changed files with 2217 additions and 494 deletions

View File

@ -35,6 +35,10 @@ public:
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 incomingCallWithMedia(const std::string& account_id, const std::string& call_id, const std::string& from,
const std::vector<std::map<std::string, std::string>>& mediaList){}
virtual void mediaChangeRequested(const std::string& account_id, const std::string& call_id,
const std::vector<std::map<std::string, std::string>>& mediaList){}
virtual void recordPlaybackFilepath(const std::string& id, const std::string& filename){}
virtual void conferenceCreated(const std::string& conf_id){}
virtual void conferenceChanged(const std::string& conf_id, const std::string& state){}
@ -126,6 +130,10 @@ public:
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 incomingCallWithMedia(const std::string& account_id, const std::string& call_id, const std::string& from,
const std::vector<std::map<std::string, std::string>>& mediaList){}
virtual void mediaChangeRequested(const std::string& account_id, const std::string& call_id,
const std::vector<std::map<std::string, std::string>>& mediaList){}
virtual void recordPlaybackFilepath(const std::string& id, const std::string& filename){}
virtual void conferenceCreated(const std::string& conf_id){}
virtual void conferenceChanged(const std::string& conf_id, const std::string& state){}

View File

@ -123,6 +123,8 @@ void init(const SWIGV8_VALUE& funcMap){
exportable_callback<CallSignal::StateChange>(bind(&callStateChanged, _1, _2, _3)),
exportable_callback<CallSignal::IncomingMessage>(bind(&incomingMessage, _1, _2, _3)),
exportable_callback<CallSignal::IncomingCall>(bind(&incomingCall, _1, _2, _3)),
exportable_callback<CallSignal::IncomingCallWithMedia>(bind(&incomingCallWithMedia, _1, _2, _3, _4)),
exportable_callback<CallSignal::MediaChangeRequested>(bind(&mediaChangeRequested, _1, _2, _3)
};
const std::map<std::string, SharedCallback> configEvHandlers = {