]> sjero.net Git - linphone/blob - java/common/org/linphone/core/LinphoneCall.java
4d8e23d80cca0ff8c53abf666f1e7949ac03c7bb
[linphone] / java / common / org / linphone / core / LinphoneCall.java
1 /*
2 LinphoneCall.java
3 Copyright (C) 2010  Belledonne Communications, Grenoble, France
4
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.
9
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.
14
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.
18 */
19 package org.linphone.core;
20
21 import java.util.Vector;
22
23 /**
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)}
25  * 
26  */
27
28 public interface LinphoneCall {
29         /**
30          * Linphone call states
31          *
32          */
33         static class State {
34                 
35                 static private Vector values = new Vector();
36                 private final int mValue;
37                 public final int value() {return mValue;}
38                 
39                 private final String mStringValue;
40                 /**
41                  * Idle
42                  */
43                 public final static State Idle = new State(0,"Idle");
44                 /**
45                  * Incoming call received.
46                  */
47                 public final static State IncomingReceived = new State(1,"IncomingReceived");
48                 /**
49                  * Outgoing call initialiazed.
50                  */
51                 public final static State OutgoingInit = new State(2,"OutgoingInit");
52                 /**
53                  * Outgoing call in progress. 
54                  */
55                 public final static State OutgoingProgress = new State(3,"OutgoingProgress");
56                 /**
57                  * Outgoing call ringing.
58                  */
59                 public final static State OutgoingRinging = new State(4,"OutgoingRinging");
60                 /**
61                  * Outgoing call early media
62                  */
63                 public final static State OutgoingEarlyMedia = new State(5,"OutgoingEarlyMedia");
64                 /**
65                  * Connected
66                  */
67                 public final static State Connected = new State(6,"Connected");
68                 /**
69                  * Streams running
70                  */
71                 public final static State StreamsRunning = new State(7,"StreamsRunning");
72                 /**
73                  * Pausing
74                  */
75                 public final static State Pausing = new State(8,"Pausing");
76                 /**
77                  * Paused
78                  */
79                 public final static State Paused = new State(9,"Paused");
80                 /**
81                  * Resuming
82                  */
83                 public final static State Resuming = new State(10,"Resuming");
84                 /**
85                  * Refered
86                  */
87                 public final static State Refered = new State(11,"Refered");
88                 /**
89                  * Error
90                  */
91                 public final static State Error = new State(12,"Error");
92                 /**
93                  * Call end
94                  */
95                 public final static State CallEnd = new State(13,"CallEnd");
96                 
97                 /**
98                  * Paused by remote
99                  */
100                 public final static State PausedByRemote = new State(14,"PausedByRemote");
101                 
102                 /**
103                  * The call's parameters are updated, used for example when video is asked by remote
104                  */
105                 public static final State CallUpdatedByRemote = new State(15, "CallUpdatedByRemote");
106
107                 /**
108                  * We are proposing early media to an incoming call
109                  */
110                 public static final State CallIncomingEarlyMedia = new State(16,"CallIncomingEarlyMedia");
111
112                 /**
113                  * The remote accepted the call update initiated by us
114                  */
115                 public static final State CallUpdated = new State(17, "CallUpdated");
116                 
117                 /**
118                  * The call object is now released.
119                  */
120                 public static final State CallReleased = new State(18,"CallReleased");
121
122                 
123                 private State(int value,String stringValue) {
124                         mValue = value;
125                         values.addElement(this);
126                         mStringValue=stringValue;
127                 }
128                 
129                 public static State fromInt(int value) {
130
131                         for (int i=0; i<values.size();i++) {
132                                 State state = (State) values.elementAt(i);
133                                 if (state.mValue == value) return state;
134                         }
135                         throw new RuntimeException("state not found ["+value+"]");
136                 }
137                 public String toString() {
138                         return mStringValue;
139                 }
140         }
141         
142         /**
143          * Retrieves the call's current state.
144         **/
145         State getState();
146         
147         /**
148          * Returns the remote address associated to this call
149          *
150         **/
151         LinphoneAddress  getRemoteAddress();
152         /**
153          * get direction of the call (incoming or outgoing).
154          * @return CallDirection 
155          */
156         CallDirection getDirection();
157         /**
158          * get the call log associated to this call.
159          * @Return LinphoneCallLog
160         **/
161         LinphoneCallLog getCallLog();
162         
163         LinphoneCallParams getRemoteParams();
164
165         LinphoneCallParams getCurrentParamsCopy();
166         
167         void enableCamera(boolean enabled);
168         boolean cameraEnabled();
169         
170         /**
171          * Enables or disable echo cancellation.
172          * @param enable
173          */
174         void enableEchoCancellation(boolean enable);
175         /**
176          * get EC status 
177          * @return true if echo cancellation is enabled.
178          */
179         boolean isEchoCancellationEnabled();
180         /**
181          * Enables or disable echo limiter cancellation.
182          * @param enable
183          */
184         void enableEchoLimiter(boolean enable);
185         /**
186          * get EL status 
187          * @return true if echo limiter is enabled.
188          */
189         boolean isEchoLimiterEnabled();
190         /**
191          * Returns the object associated to a call this one is replacing.
192          * Call replacement can occur during transfer scenarios.
193          */
194         LinphoneCall getReplacedCall();
195
196         /**
197          * @return call duration computed from media start
198          */
199         int getDuration();
200         /**
201          * Obtain real-time quality rating of the call
202          *
203          * Based on local RTP statistics and RTCP feedback, a quality rating is computed and updated
204          * during all the duration of the call. This function returns its value at the time of the function call.
205          * It is expected that the rating is updated at least every 5 seconds or so.
206          * The rating is a floating point number comprised between 0 and 5.
207          *
208          * 4-5 = good quality <br>
209          * 3-4 = average quality <br>
210          * 2-3 = poor quality <br>
211          * 1-2 = very poor quality <br>
212          * 0-1 = can't be worse, mostly unusable <br>
213          *
214          * @returns The function returns -1 if no quality measurement is available, for example if no 
215          * active audio stream exist. Otherwise it returns the quality rating.
216          */
217         float getCurrentQuality();
218         /**
219          * Returns call quality averaged over all the duration of the call.
220          *
221          * See getCurrentQuality() for more details about quality measurement.
222          */
223         float getAverageQuality();
224         
225         /**
226          * Used by ZRTP encryption mechanism.
227          * @return SAS associated to the main stream [voice]
228          */
229         String getAuthenticationToken();
230
231         /**
232          * Used by ZRTP encryption mechanism.
233          * SAS can be verified manually by the user or automatically using a previously shared secret.
234          * @return true if the main stream [voice ]SAS was verified.
235          */
236         boolean isAuthenticationTokenVerified();
237
238         /**
239          * Used by ZRTP encryption mechanism.
240          * @param verified true when displayed SAS is correct
241          */
242         void setAuthenticationTokenVerified(boolean verified);
243
244         boolean isInConference();
245         
246         float getPlayVolume();
247 }