[#2567] Fix iax conference call transfer

This commit is contained in:
Alexandre Savard
2009-12-10 12:12:56 -05:00
parent 14edff0e1c
commit ce33196ace

View File

@ -697,12 +697,31 @@ ManagerImpl::transferCall (const CallID& call_id, const std::string& to)
CallID current_call_id = getCurrentCallId();
/* Direct IP to IP call */
if (participToConference (call_id)) {
_debug("Particip to a conference\n");
Conference *conf = getConferenceFromCallID (call_id);
if (conf != NULL) {
// remove this participant
removeParticipant (call_id);
processRemainingParticipant (current_call_id, conf);
}
} else {
_debug("Do not Particip to a conference\n");
// we are not participating to a conference, current call switched to ""
if (!isConference (current_call_id))
switchCall ("");
}
/* Direct IP to IP call */
if (getConfigFromCall (call_id) == Call::IPtoIP) {
returnValue = SIPVoIPLink::instance (AccountNULL)-> transfer (call_id, to);
}
/* Classic call, attached to an account */
else {
accountid = getAccountFromCall (call_id);
@ -719,22 +738,6 @@ ManagerImpl::transferCall (const CallID& call_id, const std::string& to)
removeWaitingCall (call_id);
if (participToConference (call_id)) {
Conference *conf = getConferenceFromCallID (call_id);
if (conf != NULL) {
// remove this participant
removeParticipant (call_id);
processRemainingParticipant (current_call_id, conf);
}
} else {
// we are not participating to a conference, current call switched to ""
if (!isConference (current_call_id))
switchCall ("");
}
if (_dbus) _dbus->getCallManager()->callStateChanged (call_id, "HUNGUP");
return returnValue;
@ -1009,12 +1012,15 @@ ManagerImpl::participToConference (const CallID& call_id)
accountId = getAccountFromCall (call_id);
call = getAccountLink (accountId)->getCall (call_id);
if (call == NULL)
if (call == NULL) {
return false;
}
if (call->getConfId() == "") {
return false;
} else {
return true;
}
}