3
* Ekiga -- A VoIP and Video-Conferencing application
4
* Copyright (C) 2000-2009 Damien Sandras <dsandras@seconix.com>
6
* This program is free software; you can redistribute it and/or modify
7
* it under the terms of the GNU General Public License as published by
8
* the Free Software Foundation; either version 2 of the License, or (at
9
* your option) any later version. This program is distributed in the hope
10
* that it will be useful, but WITHOUT ANY WARRANTY; without even the
11
* implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12
* See the GNU General Public License for more details.
14
* You should have received a copy of the GNU General Public License along
15
* with this program; if not, write to the Free Software Foundation, Inc.,
16
* 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
18
* Ekiga is licensed under the GPL license and as a special exception, you
19
* have permission to link or otherwise combine this program with the
20
* programs OPAL, OpenH323 and PWLIB, and distribute the combination, without
21
* applying the requirements of the GNU GPL to the OPAL, OpenH323 and PWLIB
22
* programs, as long as you do follow the requirements of the GNU GPL for all
23
* the rest of the software thus combined.
28
* call-core.cpp - description
29
* ------------------------------------------
30
* begin : written in 2007 by Damien Sandras
31
* copyright : (c) 2007 by Damien Sandras
32
* description : declaration of the interface of a call core.
33
* A call core manages CallManagers.
42
#include "call-core.h"
43
#include "call-manager.h"
46
using namespace Ekiga;
49
CallCore::~CallCore ()
51
manager_connections.clear ();
55
void CallCore::add_manager (boost::shared_ptr<CallManager> manager)
57
managers.insert (manager);
58
manager_added (manager);
60
manager_connections.push_back (manager->ready.connect (boost::bind (&CallCore::on_manager_ready, this, manager)));
64
CallCore::iterator CallCore::begin ()
66
return managers.begin ();
70
CallCore::const_iterator CallCore::begin () const
72
return managers.begin ();
76
CallCore::iterator CallCore::end ()
78
return managers.end ();
82
CallCore::const_iterator CallCore::end () const
84
return managers.end ();
88
bool CallCore::dial (const std::string uri)
90
for (std::set<boost::shared_ptr<CallManager> >::iterator iter = managers.begin ();
91
iter != managers.end ();
93
if ((*iter)->dial (uri))
101
void CallCore::add_call (boost::shared_ptr<Call> call, boost::shared_ptr<CallManager> manager)
103
std::list<boost::signals::connection> conns;
105
conns.push_back (call->ringing.connect (boost::bind (&CallCore::on_ringing_call, this, call, manager)));
106
conns.push_back (call->setup.connect (boost::bind (&CallCore::on_setup_call, this, call, manager)));
107
conns.push_back (call->missed.connect (boost::bind (&CallCore::on_missed_call, this, call, manager)));
108
conns.push_back (call->cleared.connect (boost::bind (&CallCore::on_cleared_call, this, _1, call, manager)));
109
conns.push_back (call->established.connect (boost::bind (&CallCore::on_established_call, this, call, manager)));
110
conns.push_back (call->held.connect (boost::bind (&CallCore::on_held_call, this, call, manager)));
111
conns.push_back (call->retrieved.connect (boost::bind (&CallCore::on_retrieved_call, this, call, manager)));
112
conns.push_back (call->stream_opened.connect (boost::bind (&CallCore::on_stream_opened, this, _1, _2, _3, call, manager)));
113
conns.push_back (call->stream_closed.connect (boost::bind (&CallCore::on_stream_closed, this, _1, _2, _3, call, manager)));
114
conns.push_back (call->stream_paused.connect (boost::bind (&CallCore::on_stream_paused, this, _1, _2, call, manager)));
115
conns.push_back (call->stream_resumed.connect (boost::bind (&CallCore::on_stream_resumed, this, _1, _2, call, manager)));
116
conns.push_back (call->removed.connect (boost::bind (&CallCore::on_call_removed, this, call)));
118
call_connections [call->get_id ()] = conns;
122
void CallCore::remove_call (boost::shared_ptr<Call> call)
124
for (std::list<boost::signals::connection>::iterator iter2 = call_connections [call->get_id ()].begin ();
125
iter2 != call_connections [call->get_id ()].end ();
127
iter2->disconnect ();
129
call_connections.erase (call->get_id ());
133
void CallCore::on_ringing_call (boost::shared_ptr<Call> call, boost::shared_ptr<CallManager> manager)
135
ringing_call (manager, call);
139
void CallCore::on_setup_call (boost::shared_ptr<Call> call, boost::shared_ptr<CallManager> manager)
141
setup_call (manager, call);
145
void CallCore::on_missed_call (boost::shared_ptr<Call> call, boost::shared_ptr<CallManager> manager)
147
missed_call (manager, call);
151
void CallCore::on_cleared_call (std::string reason, boost::shared_ptr<Call> call, boost::shared_ptr<CallManager> manager)
153
cleared_call (manager, call, reason);
157
void CallCore::on_established_call (boost::shared_ptr<Call> call, boost::shared_ptr<CallManager> manager)
159
established_call (manager, call);
163
void CallCore::on_held_call (boost::shared_ptr<Call> call, boost::shared_ptr<CallManager> manager)
165
held_call (manager, call);
169
void CallCore::on_retrieved_call (boost::shared_ptr<Call> call, boost::shared_ptr<CallManager> manager)
171
retrieved_call (manager, call);
175
void CallCore::on_stream_opened (std::string name, Call::StreamType type, bool is_transmitting, boost::shared_ptr<Call> call, boost::shared_ptr<CallManager> manager)
177
stream_opened (manager, call, name, type, is_transmitting);
181
void CallCore::on_stream_closed (std::string name, Call::StreamType type, bool is_transmitting, boost::shared_ptr<Call> call, boost::shared_ptr<CallManager> manager)
183
stream_closed (manager, call, name, type, is_transmitting);
187
void CallCore::on_stream_paused (std::string name, Call::StreamType type, boost::shared_ptr<Call> call, boost::shared_ptr<CallManager> manager)
189
stream_paused (manager, call, name, type);
193
void CallCore::on_stream_resumed (std::string name, Call::StreamType type, boost::shared_ptr<Call> call, boost::shared_ptr<CallManager> manager)
195
stream_resumed (manager, call, name, type);
199
void CallCore::on_manager_ready (boost::shared_ptr<CallManager> manager)
201
manager_ready (manager);
204
if (nr_ready >= managers.size ())
209
void CallCore::on_call_removed (boost::shared_ptr<Call> call)