]> sjero.net Git - linphone/blob - java/common/org/linphone/core/LinphoneCall.java
test if sample rate is supported by android sound card, remove areStreamsEncrypted...
[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                 @SuppressWarnings("unchecked")
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                 @SuppressWarnings("unchecked")
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 getCurrentParamsCopy();
164         
165         void enableCamera(boolean enabled);
166         boolean cameraEnabled();
167         
168         /**
169          * Enables or disable echo cancellation.
170          * @param enable
171          */
172         void enableEchoCancellation(boolean enable);
173         /**
174          * get EC status 
175          * @return true if echo cancellation is enabled.
176          */
177         boolean isEchoCancellationEnabled();
178         /**
179          * Enables or disable echo limiter cancellation.
180          * @param enable
181          */
182         void enableEchoLimiter(boolean enable);
183         /**
184          * get EL status 
185          * @return true if echo limiter is enabled.
186          */
187         boolean isEchoLimiterEnabled();
188         /**
189          * Returns the object associated to a call this one is replacing.
190          * Call replacement can occur during transfer scenarios.
191          */
192         LinphoneCall getReplacedCall();
193
194         /**
195          * @return call duration computed from media start
196          */
197         int getDuration();
198         /**
199          * Obtain real-time quality rating of the call
200          *
201          * Based on local RTP statistics and RTCP feedback, a quality rating is computed and updated
202          * during all the duration of the call. This function returns its value at the time of the function call.
203          * It is expected that the rating is updated at least every 5 seconds or so.
204          * The rating is a floating point number comprised between 0 and 5.
205          *
206          * 4-5 = good quality <br>
207          * 3-4 = average quality <br>
208          * 2-3 = poor quality <br>
209          * 1-2 = very poor quality <br>
210          * 0-1 = can't be worse, mostly unusable <br>
211          *
212          * @returns The function returns -1 if no quality measurement is available, for example if no 
213          * active audio stream exist. Otherwise it returns the quality rating.
214          */
215         float getCurrentQuality();
216         /**
217          * Returns call quality averaged over all the duration of the call.
218          *
219          * See getCurrentQuality() for more details about quality measurement.
220          */
221         float getAverageQuality();
222         
223         
224         String getAuthenticationToken();
225         boolean isAuthenticationTokenVerified();
226         boolean isInConference();
227 }