]> sjero.net Git - linphone/blob - java/common/org/linphone/core/LinphoneCall.java
Implement some conference functions.
[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                  * Paussing
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                 public static State fromInt(int value) {
129
130                         for (int i=0; i<values.size();i++) {
131                                 State state = (State) values.elementAt(i);
132                                 if (state.mValue == value) return state;
133                         }
134                         throw new RuntimeException("state not found ["+value+"]");
135                 }
136                 public String toString() {
137                         return mStringValue;
138                 }
139         }
140         
141         /**
142          * Retrieves the call's current state.
143         **/
144         State getState();
145         
146         /**
147          * Returns the remote address associated to this call
148          *
149         **/
150         LinphoneAddress  getRemoteAddress();
151         /**
152          * get direction of the call (incoming or outgoing).
153          * @return CallDirection 
154          */
155         CallDirection getDirection();
156         /**
157          * get the call log associated to this call.
158          * @Return LinphoneCallLog
159         **/
160         LinphoneCallLog getCallLog();
161
162         LinphoneCallParams getCurrentParamsCopy();
163         
164         void enableCamera(boolean enabled);
165         /**
166          * Enables or disable echo cancellation.
167          * @param enable
168          */
169         void enableEchoCancellation(boolean enable);
170         /**
171          * get EC status 
172          * @return true if echo cancellation is enabled.
173          */
174         boolean isEchoCancellationEnabled();
175         /**
176          * Enables or disable echo limiter cancellation.
177          * @param enable
178          */
179         void enableEchoLimiter(boolean enable);
180         /**
181          * get EL status 
182          * @return true if echo limiter is enabled.
183          */
184         boolean isEchoLimiterEnabled();
185         /**
186          * Returns the object associated to a call this one is replacing.
187          * Call replacement can occur during transfer scenarios.
188          */
189         LinphoneCall getReplacedCall();
190
191         /**
192          * @return call duration computed from media start
193          */
194         int getDuration();
195         /**
196          * Obtain real-time quality rating of the call
197          *
198          * Based on local RTP statistics and RTCP feedback, a quality rating is computed and updated
199          * during all the duration of the call. This function returns its value at the time of the function call.
200          * It is expected that the rating is updated at least every 5 seconds or so.
201          * The rating is a floating point number comprised between 0 and 5.
202          *
203          * 4-5 = good quality <br>
204          * 3-4 = average quality <br>
205          * 2-3 = poor quality <br>
206          * 1-2 = very poor quality <br>
207          * 0-1 = can't be worse, mostly unusable <br>
208          *
209          * @returns The function returns -1 if no quality measurement is available, for example if no 
210          * active audio stream exist. Otherwise it returns the quality rating.
211          */
212         float getCurrentQuality();
213         /**
214          * Returns call quality averaged over all the duration of the call.
215          *
216          * See getCurrentQuality() for more details about quality measurement.
217          */
218         float getAverageQuality();
219         
220         
221         String getAuthenticationToken();
222         boolean isAuthenticationTokenVerified();
223         boolean areStreamsEncrypted();
224         boolean isInConference();
225 }