3 Copyright (C) 2010 Belledonne Communications, Grenoble, France
5 This program is free software; you can redistribute it and/or
6 modify it under the terms of the GNU General Public License
7 as published by the Free Software Foundation; either version 2
8 of the License, or (at your option) any later version.
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
19 package org.linphone.core;
21 import java.util.Vector;
24 * Object representing a Call. calls are created using {@link LinphoneCore#invite(LinphoneAddress)} or passed to the application by listener {@link LinphoneCoreListener#callState(LinphoneCore, LinphoneCall, State, String)}
28 public interface LinphoneCall {
30 * Linphone call states
34 @SuppressWarnings("unchecked")
35 static private Vector values = new Vector();
36 private final int mValue;
37 private final String mStringValue;
41 public final static State Idle = new State(0,"Idle");
43 * Incoming call received.
45 public final static State IncomingReceived = new State(1,"IncomingReceived");
47 * Outgoing call initialiazed.
49 public final static State OutgoingInit = new State(2,"OutgoingInit");
51 * Outgoing call in progress.
53 public final static State OutgoingProgress = new State(3,"OutgoingProgress");
55 * Outgoing call ringing.
57 public final static State OutgoingRinging = new State(4,"OutgoingRinging");
59 * Outgoing call early media
61 public final static State OutgoingEarlyMedia = new State(5,"OutgoingEarlyMedia");
65 public final static State Connected = new State(6,"Connected");
69 public final static State StreamsRunning = new State(7,"StreamsRunning");
73 public final static State Pausing = new State(8,"Pausing");
77 public final static State Paused = new State(9,"Paused");
81 public final static State Resuming = new State(10,"Resuming");
85 public final static State Refered = new State(11,"Refered");
89 public final static State Error = new State(12,"Error");
93 public final static State CallEnd = new State(13,"CallEnd");
98 public final static State PausedByRemote = new State(14,"PausedByRemote");
101 * The call's parameters are updated, used for example when video is asked by remote
103 public static final State CallUpdatedByRemote = new State(15, "CallUpdatedByRemote");
106 * We are proposing early media to an incoming call
108 public static final State CallIncomingEarlyMedia = new State(16,"CallIncomingEarlyMedia");
111 * The remote accepted the call update initiated by us
113 public static final State CallUpdated = new State(17, "CallUpdated");
116 * The call object is now released.
118 public static final State CallReleased = new State(18,"CallReleased");
120 @SuppressWarnings("unchecked")
121 private State(int value,String stringValue) {
123 values.addElement(this);
124 mStringValue=stringValue;
126 public static State fromInt(int value) {
128 for (int i=0; i<values.size();i++) {
129 State state = (State) values.elementAt(i);
130 if (state.mValue == value) return state;
132 throw new RuntimeException("state not found ["+value+"]");
134 public String toString() {
140 * Retrieves the call's current state.
145 * Returns the remote address associated to this call
148 LinphoneAddress getRemoteAddress();
150 * get direction of the call (incoming or outgoing).
151 * @return CallDirection
153 CallDirection getDirection();
155 * get the call log associated to this call.
156 * @Return LinphoneCallLog
158 LinphoneCallLog getCallLog();
160 LinphoneCallParams getCurrentParamsCopy();
162 void enableCamera(boolean enabled);
164 * Enables or disable echo cancellation.
167 void enableEchoCancellation(boolean enable);
170 * @return true if echo cancellation is enabled.
172 boolean isEchoCancellationEnabled();
174 * Enables or disable echo limiter cancellation.
177 void enableEchoLimiter(boolean enable);
180 * @return true if echo limiter is enabled.
182 boolean isEchoLimiterEnabled();
184 * Returns the object associated to a call this one is replacing.
185 * Call replacement can occur during transfer scenarios.
187 LinphoneCall getReplacedCall();
190 * @return call duration computed from media start
194 * Obtain real-time quality rating of the call
196 * Based on local RTP statistics and RTCP feedback, a quality rating is computed and updated
197 * during all the duration of the call. This function returns its value at the time of the function call.
198 * It is expected that the rating is updated at least every 5 seconds or so.
199 * The rating is a floating point number comprised between 0 and 5.
201 * 4-5 = good quality <br>
202 * 3-4 = average quality <br>
203 * 2-3 = poor quality <br>
204 * 1-2 = very poor quality <br>
205 * 0-1 = can't be worse, mostly unusable <br>
207 * @returns The function returns -1 if no quality measurement is available, for example if no
208 * active audio stream exist. Otherwise it returns the quality rating.
210 float getCurrentQuality();
212 * Returns call quality averaged over all the duration of the call.
214 * See getCurrentQuality() for more details about quality measurement.
216 float getAverageQuality();
219 String getAuthenticationToken();
220 boolean isAuthenticationTokenVerified();
221 boolean areStreamsEncrypted();