Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
jami-daemon
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Iterations
Wiki
Requirements
Code
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Locked files
Deploy
Releases
Model registry
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
Repository analytics
Issue analytics
Insights
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
GitLab community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
savoirfairelinux
jami-daemon
Commits
145abed9
Commit
145abed9
authored
15 years ago
by
Alexandre Savard
Browse files
Options
Downloads
Patches
Plain Diff
[#2006] Refactor conference's participant list
parent
c6753ae3
Branches
Branches containing commit
Tags
Tags containing commit
No related merge requests found
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
sflphone-common/src/conference.cpp
+2
-9
2 additions, 9 deletions
sflphone-common/src/conference.cpp
sflphone-common/src/conference.h
+2
-0
2 additions, 0 deletions
sflphone-common/src/conference.h
sflphone-common/src/managerimpl.cpp
+100
-72
100 additions, 72 deletions
sflphone-common/src/managerimpl.cpp
with
104 additions
and
81 deletions
sflphone-common/src/conference.cpp
+
2
−
9
View file @
145abed9
...
...
@@ -122,14 +122,7 @@ std::string Conference::getStateStr()
}
CallID
Conference
::
get
Last
Participant
()
ParticipantSet
Conference
::
getParticipant
List
()
{
CallID
call_id
=
""
;
ParticipantSet
::
iterator
iter
=
_participants
.
begin
();
if
(
iter
!=
_participants
.
end
())
{
call_id
=
*
iter
;
return
call_id
;
}
return
_participants
;
}
This diff is collapsed.
Click to expand it.
sflphone-common/src/conference.h
+
2
−
0
View file @
145abed9
...
...
@@ -58,6 +58,8 @@ class Conference{
CallID
getLastParticipant
();
ParticipantSet
getParticipantList
();
private
:
/** Unique ID of the conference */
...
...
This diff is collapsed.
Click to expand it.
sflphone-common/src/managerimpl.cpp
+
100
−
72
View file @
145abed9
...
...
@@ -432,6 +432,7 @@ ManagerImpl::hangupCall (const CallID& id)
if
(
participToConference
(
id
))
{
_debug
(
"??????????????????? STILL PARTICIP TO A CONFERENCE ?????????????????
\n
"
);
removeParticipant
(
id
);
}
...
...
@@ -447,26 +448,22 @@ ManagerImpl::hangupConference (const ConfID& id)
Conference
*
conf
;
ConferenceMap
::
iterator
iter_conf
=
_conferencemap
.
find
(
id
);
ConferenceCallMap
tempmap
=
_conferencecall
;
AccountID
currentAccountId
;
Call
*
call
=
NULL
;
//
Call* call = NULL;
if
(
iter_conf
!=
_conferencemap
.
end
())
{
conf
=
iter_conf
->
second
;
ConferenceCallMap
::
iterator
iter_participant
=
tempmap
.
begin
();
ParticipantSet
participants
=
conf
->
getParticipantList
();
ParticipantSet
::
iterator
iter_participant
=
participants
.
begin
();
while
(
iter_participant
!=
tempmap
.
end
())
while
(
iter_participant
!=
participants
.
end
())
{
_debug
(
"ManagerImpl::hangupConference participant %s
\n
"
,
iter_participant
->
first
.
c_str
());
currentAccountId
=
getAccountFromCall
(
iter_participant
->
first
);
call
=
getAccountLink
(
currentAccountId
)
->
getCall
(
iter_participant
->
first
);
_debug
(
"ManagerImpl::hangupConference participant %s
\n
"
,
(
*
iter_participant
).
c_str
());
if
(
call
->
getConfId
()
==
id
)
hangupCall
(
iter_participant
->
first
);
hangupCall
(
*
iter_participant
);
iter_participant
++
;
...
...
@@ -623,9 +620,15 @@ ManagerImpl::offHoldCall (const CallID& id)
}
if
(
participToConference
(
id
)
)
{
ConferenceCallMap
::
iterator
iter
=
_conferencecall
.
find
(
id
);
if
(
iter
!=
_conferencecall
.
end
())
switchCall
(
iter
->
second
->
getConfID
());
AccountID
currentAccountId
;
Call
*
call
=
NULL
;
currentAccountId
=
getAccountFromCall
(
id
);
call
=
getAccountLink
(
currentAccountId
)
->
getCall
(
id
);
switchCall
(
call
->
getConfId
());
}
// else the
...
...
@@ -738,8 +741,8 @@ ManagerImpl::createConference(const CallID& id1, const CallID& id2)
Conference
*
conf
=
new
Conference
(
default_conf
);
_conferencecall
.
insert
(
pair
<
CallID
,
Conference
*>
(
id1
,
conf
));
_conferencecall
.
insert
(
pair
<
CallID
,
Conference
*>
(
id2
,
conf
));
//
_conferencecall.insert(pair<CallID, Conference*>(id1, conf));
//
_conferencecall.insert(pair<CallID, Conference*>(id2, conf));
_conferencemap
.
insert
(
pair
<
CallID
,
Conference
*>
(
default_conf
,
conf
));
conf
->
add
(
id1
);
...
...
@@ -760,7 +763,7 @@ ManagerImpl::removeConference(const ConfID& conference_id)
Conference
*
conf
;
conf
=
NULL
;
_debug
(
"ManagerImpl:: _conferencemap.size: %i
\n
"
,
_conferencemap
.
size
());
_debug
(
"ManagerImpl::
removeConference
_conferencemap.size: %i
\n
"
,
_conferencemap
.
size
());
ConferenceMap
::
iterator
iter
=
_conferencemap
.
find
(
conference_id
);
if
(
iter
!=
_conferencemap
.
end
())
{
...
...
@@ -771,19 +774,25 @@ ManagerImpl::removeConference(const ConfID& conference_id)
if
(
conf
==
NULL
)
return
;
ConferenceCallMap
temp_map
=
_conferencecall
;
// broadcast a signal over dbus
_debug
(
"ManagerImpl::removeConference broadcast call removed on dbus: %s
\n
"
,
conference_id
.
c_str
());
_dbus
->
getCallManager
()
->
conferenceRemoved
(
conference_id
);
/*
ParticipantSet participants = conf->getParticipantList();
_debug("ManagerImpl::removeConference _conferencecall.size: %i\n", _conferencecall.size());
ConferenceCallMap::iterator iter_p = participants.begin();
while (iter_p != participants.end()) {
_debug
(
"ManagerImpl:: _conferencecall.size: %i
\n
"
,
_conferencecall
.
size
());
ConferenceCallMap
::
iterator
iter_p
=
temp_map
.
begin
();
while
(
iter_p
!=
temp_map
.
end
())
{
if
(
iter_p
->
second
==
conf
)
{
_debug
(
"ManagerImpl:: remove particiant (%s) from conference %s
\n
"
,
iter_p
->
first
.
c_str
(),
conference_id
.
c_str
());
_conferencecall.erase(iter_p->first);
}
iter_p++;
}
*/
...
...
@@ -794,8 +803,8 @@ ManagerImpl::removeConference(const ConfID& conference_id)
_debug
(
"ManagerImpl:: error cannot remove conference id: %s
\n
"
,
conference_id
.
c_str
());
// broadcast a signal over dbus
_debug
(
"ManagerImpl:: broadcast call removed on dbus: %s
\n
"
,
conference_id
.
c_str
());
_dbus
->
getCallManager
()
->
conferenceRemoved
(
conference_id
);
//
_debug("ManagerImpl:: broadcast call removed on dbus: %s\n", conference_id.c_str());
//
_dbus->getCallManager()->conferenceRemoved(conference_id);
}
...
...
@@ -815,19 +824,19 @@ ManagerImpl::holdConference(const CallID& id)
{
conf
=
iter_conf
->
second
;
ConferenceCallMap
::
iterator
iter_participant
=
_conferencecall
.
begin
();
//
ConferenceCallMap::iterator iter_participant = _conferencecall.begin();
while
(
iter_participant
!=
_conferencecall
.
end
())
{
_debug
(
"ManagerImpl::holdConference participant %s
\n
"
,
iter_participant
->
first
.
c_str
());
currentAccountId
=
getAccountFromCall
(
iter_participant
->
first
);
call
=
getAccountLink
(
currentAccountId
)
->
getCall
(
iter_participant
->
first
);
ParticipantSet
participants
=
conf
->
getParticipantList
();
ParticipantSet
::
iterator
iter_participant
=
participants
.
begin
();
if
(
call
->
getConfId
()
==
id
)
while
(
iter_participant
!=
participants
.
end
()
)
{
switchCall
(
iter_participant
->
first
);
onHoldCall
(
iter_participant
->
first
);
}
_debug
(
"ManagerImpl::holdConference participant %s
\n
"
,
(
*
iter_participant
).
c_str
());
currentAccountId
=
getAccountFromCall
(
*
iter_participant
);
call
=
getAccountLink
(
currentAccountId
)
->
getCall
(
*
iter_participant
);
switchCall
(
*
iter_participant
);
onHoldCall
(
*
iter_participant
);
iter_participant
++
;
...
...
@@ -856,16 +865,16 @@ ManagerImpl::unHoldConference(const CallID& id)
{
conf
=
iter_conf
->
second
;
ConferenceCallMap
::
iterator
iter_participant
=
_conferencecall
.
begin
();
ParticipantSet
participants
=
conf
->
getParticipantList
();
ParticipantSet
::
iterator
iter_participant
=
participants
.
begin
();
while
(
iter_participant
!=
_conferencecall
.
end
())
while
(
iter_participant
!=
participants
.
end
())
{
_debug
(
"ManagerImpl::unholdConference participant %s
\n
"
,
iter_participant
->
first
.
c_str
());
currentAccountId
=
getAccountFromCall
(
iter_participant
->
first
);
call
=
getAccountLink
(
currentAccountId
)
->
getCall
(
iter_participant
->
first
);
_debug
(
"ManagerImpl::unholdConference participant %s
\n
"
,
(
*
iter_participant
)
.
c_str
());
currentAccountId
=
getAccountFromCall
(
*
iter_participant
);
call
=
getAccountLink
(
currentAccountId
)
->
getCall
(
*
iter_participant
);
if
(
call
->
getConfId
()
==
id
)
offHoldCall
(
iter_participant
->
first
);
offHoldCall
(
*
iter_participant
);
iter_participant
++
;
...
...
@@ -890,13 +899,20 @@ ManagerImpl::isConference(const CallID& id)
bool
ManagerImpl
::
participToConference
(
const
CallID
&
call_id
)
{
ConferenceCallMap
::
iterator
iter
=
_conferencecall
.
find
(
call_id
);
_debug
(
"ManagerImpl::participToConference
\n
"
);
if
(
iter
==
_conferencecall
.
end
())
{
return
false
;
AccountID
accountId
;
Call
*
call
=
NULL
;
accountId
=
getAccountFromCall
(
call_id
);
call
=
getAccountLink
(
accountId
)
->
getCall
(
call_id
);
if
(
call
->
getConfId
()
==
""
)
{
return
true
;
}
else
{
return
tru
e
;
return
fals
e
;
}
}
...
...
@@ -920,7 +936,7 @@ ManagerImpl::addParticipant(const CallID& call_id, const CallID& conference_id)
conf
->
add
(
call_id
);
_conferencecall
.
insert
(
pair
<
CallID
,
Conference
*>
(
call_id
,
conf
));
//
_conferencecall.insert(pair<CallID, Conference*>(call_id, conf));
iter_details
=
call_details
.
find
(
"CALL_STATE"
);
...
...
@@ -929,6 +945,7 @@ ManagerImpl::addParticipant(const CallID& call_id, const CallID& conference_id)
if
(
iter_details
->
second
==
"HOLD"
)
{
_debug
(
" OFFHOLD %s
\n
"
,
call_id
.
c_str
());
switchCall
(
""
);
// offHoldCall create a new rtp session which use addStream to bind participant
offHoldCall
(
call_id
);
...
...
@@ -936,7 +953,7 @@ ManagerImpl::addParticipant(const CallID& call_id, const CallID& conference_id)
else
if
(
iter_details
->
second
==
"INCOMING"
)
{
_debug
(
" ANSWER %s
\n
"
,
call_id
.
c_str
());
switchCall
(
""
);
// answerCall create a new rtp session which use addStream to bind participant
answerCall
(
call_id
);
}
...
...
@@ -962,17 +979,16 @@ ManagerImpl::addParticipant(const CallID& call_id, const CallID& conference_id)
if
(
previous_call_id
==
call_id
)
{
_debug
(
"**************************** BIND US TO CONFERENCE *******************
\n
"
);
_debug
(
"previous_call_id %s
\n
"
,
previous_call_id
.
c_str
());
_debug
(
"call_id %s
\n
"
,
call_id
.
c_str
());
// bind main participant to conference after adding new participant
_audiodriver
->
getMainBuffer
()
->
unBindAll
(
default_id
);
// to avoid puting onhold the added call
switchCall
(
""
);
addMainParticipant
(
conference_id
);
}
switchCall
(
conference_id
);
...
...
@@ -1000,12 +1016,13 @@ ManagerImpl::addMainParticipant(const CallID& conference_id)
// conf->bindParticipant(default_id);
// so we must do it manually
ConferenceCallMap
::
iterator
iter_participant
=
_conferencecall
.
begin
();
while
(
iter_participant
!=
_conferencecall
.
end
())
ParticipantSet
participants
=
conf
->
getParticipantList
();
ParticipantSet
::
iterator
iter_participant
=
participants
.
begin
();
while
(
iter_participant
!=
participants
.
end
())
{
_debug
(
"Quecequispasse
\n
"
);
if
(
iter_participant
->
second
==
conf
)
_audiodriver
->
getMainBuffer
()
->
bindCallID
(
iter_participant
->
first
,
default_id
);
_audiodriver
->
getMainBuffer
()
->
bindCallID
(
*
iter_participant
,
default_id
);
iter_participant
++
;
}
...
...
@@ -1035,7 +1052,7 @@ ManagerImpl::joinParticipant(const CallID& call_id1, const CallID& call_id2)
_debug
(
"ManagerImpl::joinParticipant create a conference
\n
"
);
Conference
*
conf
=
createConference
(
call_id1
,
call_id2
);
switchCall
(
""
);
iter_details
=
call1_details
.
find
(
"CALL_STATE"
);
_debug
(
" call %s state: %s
\n
"
,
call_id1
.
c_str
(),
iter_details
->
second
.
c_str
());
...
...
@@ -1056,6 +1073,8 @@ ManagerImpl::joinParticipant(const CallID& call_id1, const CallID& call_id2)
conf
->
bindParticipant
(
call_id1
);
}
switchCall
(
""
);
iter_details
=
call2_details
.
find
(
"CALL_STATE"
);
_debug
(
" call %s state: %s
\n
"
,
call_id2
.
c_str
(),
iter_details
->
second
.
c_str
());
if
(
iter_details
->
second
==
"HOLD"
)
...
...
@@ -1151,7 +1170,9 @@ ManagerImpl::removeParticipant(const CallID& call_id)
ConferenceMap
conf_map
=
_conferencemap
;
ConferenceMap
::
iterator
iter
=
conf_map
.
find
(
default_conf
);
if
(
iter
==
_conferencemap
.
end
())
{
if
(
iter
==
conf_map
.
end
())
{
_debug
(
"ManagerImpl::removeParticipant no conference created, cannot remove participant
\n
"
);
}
else
{
...
...
@@ -1161,7 +1182,11 @@ ManagerImpl::removeParticipant(const CallID& call_id)
_debug
(
"ManagerImpl::removeParticipant %s
\n
"
,
call_id
.
c_str
());
conf
->
remove
(
call_id
);
/*
_debug("************************** _conferencecall size: %i **************************\n", _conferencecall.size());
_conferencecall.erase(iter->first);
_debug("************************** _conferencecall size: %i **************************\n", _conferencecall.size());
*/
if
(
conf
->
getNbParticipants
()
>
1
)
{
...
...
@@ -1169,12 +1194,15 @@ ManagerImpl::removeParticipant(const CallID& call_id)
}
else
if
(
conf
->
getNbParticipants
()
==
1
)
{
CallID
last_participant
=
conf
->
getLastParticipant
();
ParticipantSet
participants
=
conf
->
getParticipantList
();
ParticipantSet
::
iterator
iter_participant
=
participants
.
begin
();
_debug
(
"ManagerImpl::removeParticipant only one participant remaining %s
\n
"
,
last
_participant
.
c_str
());
_debug
(
"ManagerImpl::removeParticipant only one participant remaining %s
\n
"
,
(
*
iter
_participant
)
.
c_str
());
removeConference
(
default_conf
);
CallID
last_participant
=
*
iter_participant
;
switchCall
(
last_participant
);
}
else
...
...
@@ -3822,16 +3850,16 @@ ManagerImpl::getParticipantList (const std::string& confID)
if
(
iter_conf
!=
_conferencemap
.
end
())
conf
=
iter_conf
->
second
;
ConferenceCallMap
::
iterator
iter_call
=
_conferencecall
.
begin
();
Conference
*
temp
;
while
(
iter_call
!
=
_
conf
erencecall
.
end
())
{
temp
=
iter_call
->
second
;
if
(
conf
!=
NULL
)
{
ParticipantSet
participants
=
conf
->
getParticipantList
();
ParticipantSet
::
iterator
iter_participant
=
participants
.
begin
();
while
(
iter_participant
!=
participants
.
end
())
{
if
(
conf
==
temp
)
v
.
push_back
(
iter_call
->
first
);
v
.
push_back
(
*
iter_participant
);
iter_call
++
;
iter_participant
++
;
}
}
return
v
;
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment