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;
22 import java.io.IOException;
23 import java.util.ArrayList;
24 import java.util.List;
25 import java.util.Vector;
28 class LinphoneCoreImpl implements LinphoneCore {
30 @SuppressWarnings("unused")
31 private final LinphoneCoreListener mListener; //to make sure to keep a reference on this object
32 private long nativePtr = 0;
33 private native long newLinphoneCore(LinphoneCoreListener listener,String userConfig,String factoryConfig,Object userdata);
34 private native void iterate(long nativePtr);
35 private native long getDefaultProxyConfig(long nativePtr);
37 private native void setDefaultProxyConfig(long nativePtr,long proxyCfgNativePtr);
38 private native int addProxyConfig(LinphoneProxyConfig jprtoxyCfg,long nativePtr,long proxyCfgNativePtr);
39 private native void clearAuthInfos(long nativePtr);
41 private native void clearProxyConfigs(long nativePtr);
42 private native void addAuthInfo(long nativePtr,long authInfoNativePtr);
43 private native Object invite(long nativePtr,String uri);
44 private native void terminateCall(long nativePtr, long call);
45 private native long getRemoteAddress(long nativePtr);
46 private native boolean isInCall(long nativePtr);
47 private native boolean isInComingInvitePending(long nativePtr);
48 private native void acceptCall(long nativePtr, long call);
49 private native long getCallLog(long nativePtr,int position);
50 private native int getNumberOfCallLogs(long nativePtr);
51 private native void delete(long nativePtr);
52 private native void setNetworkStateReachable(long nativePtr,boolean isReachable);
53 private native void setPlaybackGain(long nativeptr, float gain);
54 private native float getPlaybackGain(long nativeptr);
55 private native void muteMic(long nativePtr,boolean isMuted);
56 private native long interpretUrl(long nativePtr,String destination);
57 private native Object inviteAddress(long nativePtr,long to);
58 private native Object inviteAddressWithParams(long nativePtrLc,long to, long nativePtrParam);
59 private native void sendDtmf(long nativePtr,char dtmf);
60 private native void clearCallLogs(long nativePtr);
61 private native boolean isMicMuted(long nativePtr);
62 private native long findPayloadType(long nativePtr, String mime, int clockRate);
63 private native int enablePayloadType(long nativePtr, long payloadType, boolean enable);
64 private native void enableEchoCancellation(long nativePtr,boolean enable);
65 private native boolean isEchoCancellationEnabled(long nativePtr);
66 private native Object getCurrentCall(long nativePtr) ;
67 private native void playDtmf(long nativePtr,char dtmf,int duration);
68 private native void stopDtmf(long nativePtr);
69 private native void setVideoWindowId(long nativePtr, Object wid);
70 private native void setPreviewWindowId(long nativePtr, Object wid);
71 private native void setDeviceRotation(long nativePtr, int rotation);
72 private native void addFriend(long nativePtr,long friend);
73 private native void setPresenceInfo(long nativePtr,int minute_away, String alternative_contact,int status);
74 private native long createChatRoom(long nativePtr,String to);
75 private native void enableVideo(long nativePtr,boolean vcap_enabled,boolean display_enabled);
76 private native boolean isVideoEnabled(long nativePtr);
77 private native void setFirewallPolicy(long nativePtr, int enum_value);
78 private native int getFirewallPolicy(long nativePtr);
79 private native void setStunServer(long nativePtr, String stun_server);
80 private native String getStunServer(long nativePtr);
81 private native long createDefaultCallParams(long nativePtr);
82 private native int updateCall(long ptrLc, long ptrCall, long ptrParams);
83 private native void setUploadBandwidth(long nativePtr, int bw);
84 private native void setDownloadBandwidth(long nativePtr, int bw);
85 private native void setPreferredVideoSize(long nativePtr, int width, int heigth);
86 private native int[] getPreferredVideoSize(long nativePtr);
87 private native void setRing(long nativePtr, String path);
88 private native String getRing(long nativePtr);
89 private native void setRootCA(long nativePtr, String path);
90 private native long[] listVideoPayloadTypes(long nativePtr);
91 private native long[] listAudioPayloadTypes(long nativePtr);
92 private native void enableKeepAlive(long nativePtr,boolean enable);
93 private native boolean isKeepAliveEnabled(long nativePtr);
94 private native int startEchoCalibration(long nativePtr,Object data);
95 private native int getSignalingTransportPort(long nativePtr, int code);
96 private native void setSignalingTransportPorts(long nativePtr, int udp, int tcp, int tls);
97 private native void enableIpv6(long nativePtr,boolean enable);
98 private native void adjustSoftwareVolume(long nativePtr,int db);
99 private native int pauseCall(long nativePtr, long callPtr);
100 private native int pauseAllCalls(long nativePtr);
101 private native int resumeCall(long nativePtr, long callPtr);
102 private native void setUploadPtime(long nativePtr, int ptime);
103 private native void setDownloadPtime(long nativePtr, int ptime);
104 private native void setZrtpSecretsCache(long nativePtr, String file);
105 private native void enableEchoLimiter(long nativePtr2, boolean val);
106 private native int setVideoDevice(long nativePtr2, int id);
107 private native int getVideoDevice(long nativePtr2);
108 private native String getMediaEncryption(long nativePtr);
109 private native void setMediaEncryption(long nativePtr, String menc);
110 private native boolean isMediaEncryptionMandatory(long nativePtr);
111 private native void setMediaEncryptionMandatory(long nativePtr, boolean yesno);
114 LinphoneCoreImpl(LinphoneCoreListener listener, File userConfig,File factoryConfig,Object userdata) throws IOException {
116 nativePtr = newLinphoneCore(listener,userConfig.getCanonicalPath(),factoryConfig.getCanonicalPath(),userdata);
118 LinphoneCoreImpl(LinphoneCoreListener listener) throws IOException {
120 nativePtr = newLinphoneCore(listener,null,null,null);
123 protected void finalize() throws Throwable {
127 public synchronized void addAuthInfo(LinphoneAuthInfo info) {
129 addAuthInfo(nativePtr,((LinphoneAuthInfoImpl)info).nativePtr);
134 public synchronized LinphoneProxyConfig getDefaultProxyConfig() {
136 long lNativePtr = getDefaultProxyConfig(nativePtr);
138 return new LinphoneProxyConfigImpl(lNativePtr);
144 public synchronized LinphoneCall invite(String uri) {
146 return (LinphoneCall)invite(nativePtr,uri);
149 public synchronized void iterate() {
154 public synchronized void setDefaultProxyConfig(LinphoneProxyConfig proxyCfg) {
156 setDefaultProxyConfig(nativePtr,((LinphoneProxyConfigImpl)proxyCfg).nativePtr);
158 public synchronized void addProxyConfig(LinphoneProxyConfig proxyCfg) throws LinphoneCoreException{
160 if (addProxyConfig(proxyCfg,nativePtr,((LinphoneProxyConfigImpl)proxyCfg).nativePtr) !=0) {
161 throw new LinphoneCoreException("bad proxy config");
164 public synchronized void clearAuthInfos() {
166 clearAuthInfos(nativePtr);
169 public synchronized void clearProxyConfigs() {
171 clearProxyConfigs(nativePtr);
173 public synchronized void terminateCall(LinphoneCall aCall) {
175 if (aCall!=null)terminateCall(nativePtr,((LinphoneCallImpl)aCall).nativePtr);
177 public synchronized LinphoneAddress getRemoteAddress() {
179 long ptr = getRemoteAddress(nativePtr);
183 return new LinphoneAddressImpl(ptr);
186 public synchronized boolean isIncall() {
188 return isInCall(nativePtr);
190 public synchronized boolean isInComingInvitePending() {
192 return isInComingInvitePending(nativePtr);
194 public synchronized void acceptCall(LinphoneCall aCall) {
196 acceptCall(nativePtr,((LinphoneCallImpl)aCall).nativePtr);
199 public synchronized Vector<LinphoneCallLog> getCallLogs() {
201 Vector<LinphoneCallLog> logs = new Vector<LinphoneCallLog>();
202 for (int i=0;i < getNumberOfCallLogs(nativePtr);i++) {
203 logs.add(new LinphoneCallLogImpl(getCallLog(nativePtr, i)));
207 public synchronized void destroy() {
213 private void isValid() {
214 if (nativePtr == 0) {
215 throw new RuntimeException("object already destroyed");
218 public synchronized void setNetworkReachable(boolean isReachable) {
219 setNetworkStateReachable(nativePtr,isReachable);
221 public synchronized void setPlaybackGain(float gain) {
222 setPlaybackGain(nativePtr,gain);
225 public synchronized float getPlaybackGain() {
226 return getPlaybackGain(nativePtr);
228 public synchronized void muteMic(boolean isMuted) {
229 muteMic(nativePtr,isMuted);
231 public synchronized LinphoneAddress interpretUrl(String destination) throws LinphoneCoreException {
232 long lAddress = interpretUrl(nativePtr,destination);
234 return new LinphoneAddressImpl(lAddress,true);
236 throw new LinphoneCoreException("Cannot interpret ["+destination+"]");
239 public synchronized LinphoneCall invite(LinphoneAddress to) throws LinphoneCoreException {
240 LinphoneCall call = (LinphoneCall)inviteAddress(nativePtr,((LinphoneAddressImpl)to).nativePtr);
244 throw new LinphoneCoreException("Unable to invite address " + to.asString());
248 public synchronized void sendDtmf(char number) {
249 sendDtmf(nativePtr,number);
251 public synchronized void clearCallLogs() {
252 clearCallLogs(nativePtr);
254 public synchronized boolean isMicMuted() {
255 return isMicMuted(nativePtr);
257 public synchronized PayloadType findPayloadType(String mime, int clockRate) {
259 long playLoadType = findPayloadType(nativePtr, mime, clockRate);
260 if (playLoadType == 0) {
263 return new PayloadTypeImpl(playLoadType);
266 public synchronized void enablePayloadType(PayloadType pt, boolean enable)
267 throws LinphoneCoreException {
269 if (enablePayloadType(nativePtr,((PayloadTypeImpl)pt).nativePtr,enable) != 0) {
270 throw new LinphoneCoreException("cannot enable payload type ["+pt+"]");
274 public synchronized void enableEchoCancellation(boolean enable) {
276 enableEchoCancellation(nativePtr, enable);
278 public synchronized boolean isEchoCancellationEnabled() {
280 return isEchoCancellationEnabled(nativePtr);
284 public synchronized LinphoneCall getCurrentCall() {
286 return (LinphoneCall)getCurrentCall(nativePtr);
289 public int getPlayLevel() {
290 // TODO Auto-generated method stub
293 public void setPlayLevel(int level) {
294 // TODO Auto-generated method stub
297 public void enableSpeaker(boolean value) {
298 // TODO Auto-generated method stub
301 public boolean isSpeakerEnabled() {
302 // TODO Auto-generated method stub
305 public synchronized void playDtmf(char number, int duration) {
306 playDtmf(nativePtr,number, duration);
309 public synchronized void stopDtmf() {
313 public synchronized void addFriend(LinphoneFriend lf) throws LinphoneCoreException {
314 addFriend(nativePtr,((LinphoneFriendImpl)lf).nativePtr);
317 public synchronized void setPresenceInfo(int minute_away, String alternative_contact,
318 OnlineStatus status) {
319 setPresenceInfo(nativePtr,minute_away,alternative_contact,status.mValue);
322 public synchronized LinphoneChatRoom createChatRoom(String to) {
323 return new LinphoneChatRoomImpl(createChatRoom(nativePtr,to));
325 public synchronized void setPreviewWindow(Object w) {
326 setPreviewWindowId(nativePtr,w);
328 public synchronized void setVideoWindow(Object w) {
329 setVideoWindowId(nativePtr, w);
331 public synchronized void setDeviceRotation(int rotation) {
332 setDeviceRotation(nativePtr, rotation);
335 public synchronized void enableVideo(boolean vcap_enabled, boolean display_enabled) {
336 enableVideo(nativePtr,vcap_enabled, display_enabled);
338 public synchronized boolean isVideoEnabled() {
339 return isVideoEnabled(nativePtr);
341 public synchronized FirewallPolicy getFirewallPolicy() {
342 return FirewallPolicy.fromInt(getFirewallPolicy(nativePtr));
344 public synchronized String getStunServer() {
345 return getStunServer(nativePtr);
347 public synchronized void setFirewallPolicy(FirewallPolicy pol) {
348 setFirewallPolicy(nativePtr,pol.value());
350 public synchronized void setStunServer(String stunServer) {
351 setStunServer(nativePtr,stunServer);
354 public synchronized LinphoneCallParams createDefaultCallParameters() {
355 return new LinphoneCallParamsImpl(createDefaultCallParams(nativePtr));
358 public synchronized LinphoneCall inviteAddressWithParams(LinphoneAddress to, LinphoneCallParams params) throws LinphoneCoreException {
359 long ptrDestination = ((LinphoneAddressImpl)to).nativePtr;
360 long ptrParams =((LinphoneCallParamsImpl)params).nativePtr;
362 LinphoneCall call = (LinphoneCall)inviteAddressWithParams(nativePtr, ptrDestination, ptrParams);
366 throw new LinphoneCoreException("Unable to invite with params " + to.asString());
370 public synchronized int updateCall(LinphoneCall call, LinphoneCallParams params) {
371 long ptrCall = ((LinphoneCallImpl) call).nativePtr;
372 long ptrParams = params!=null ? ((LinphoneCallParamsImpl)params).nativePtr : 0;
374 return updateCall(nativePtr, ptrCall, ptrParams);
376 public synchronized void setUploadBandwidth(int bw) {
377 setUploadBandwidth(nativePtr, bw);
380 public synchronized void setDownloadBandwidth(int bw) {
381 setDownloadBandwidth(nativePtr, bw);
384 public synchronized void setPreferredVideoSize(VideoSize vSize) {
385 setPreferredVideoSize(nativePtr, vSize.width, vSize.height);
388 public synchronized VideoSize getPreferredVideoSize() {
389 int[] nativeSize = getPreferredVideoSize(nativePtr);
391 VideoSize vSize = new VideoSize();
392 vSize.width = nativeSize[0];
393 vSize.height = nativeSize[1];
396 public synchronized void setRing(String path) {
397 setRing(nativePtr, path);
399 public synchronized String getRing() {
400 return getRing(nativePtr);
403 public synchronized void setRootCA(String path) {
404 setRootCA(nativePtr, path);
407 public synchronized PayloadType[] getVideoCodecs() {
408 long[] typesPtr = listVideoPayloadTypes(nativePtr);
409 if (typesPtr == null) return null;
411 PayloadType[] codecs = new PayloadType[typesPtr.length];
413 for (int i=0; i < codecs.length; i++) {
414 codecs[i] = new PayloadTypeImpl(typesPtr[i]);
419 public synchronized PayloadType[] getAudioCodecs() {
420 long[] typesPtr = listAudioPayloadTypes(nativePtr);
421 if (typesPtr == null) return null;
423 PayloadType[] codecs = new PayloadType[typesPtr.length];
425 for (int i=0; i < codecs.length; i++) {
426 codecs[i] = new PayloadTypeImpl(typesPtr[i]);
431 public synchronized boolean isNetworkReachable() {
432 throw new RuntimeException("Not implemented");
434 public synchronized void enableKeepAlive(boolean enable) {
435 enableKeepAlive(nativePtr,enable);
438 public synchronized boolean isKeepAliveEnabled() {
439 return isKeepAliveEnabled(nativePtr);
441 public synchronized void startEchoCalibration(Object data) throws LinphoneCoreException {
442 startEchoCalibration(nativePtr, data);
445 public synchronized Transports getSignalingTransportPorts() {
446 Transports transports = new Transports();
447 transports.udp = getSignalingTransportPort(nativePtr, 0);
448 transports.tcp = getSignalingTransportPort(nativePtr, 1);
449 transports.tls = getSignalingTransportPort(nativePtr, 3);
450 // See C struct LCSipTransports in linphonecore.h
451 // Code is the index in the structure
454 public synchronized void setSignalingTransportPorts(Transports transports) {
455 setSignalingTransportPorts(nativePtr, transports.udp, transports.tcp, transports.tls);
458 public synchronized void enableIpv6(boolean enable) {
459 enableIpv6(nativePtr,enable);
461 public synchronized void adjustSoftwareVolume(int i) {
462 adjustSoftwareVolume(nativePtr, i);
465 public synchronized boolean pauseCall(LinphoneCall call) {
466 return 0 == pauseCall(nativePtr, ((LinphoneCallImpl) call).nativePtr);
468 public synchronized boolean resumeCall(LinphoneCall call) {
469 return 0 == resumeCall(nativePtr, ((LinphoneCallImpl) call).nativePtr);
471 public synchronized boolean pauseAllCalls() {
472 return 0 == pauseAllCalls(nativePtr);
474 public synchronized void setDownloadPtime(int ptime) {
475 setDownloadPtime(nativePtr,ptime);
478 public synchronized void setUploadPtime(int ptime) {
479 setUploadPtime(nativePtr,ptime);
482 public synchronized void setZrtpSecretsCache(String file) {
483 setZrtpSecretsCache(nativePtr,file);
485 public synchronized void enableEchoLimiter(boolean val) {
486 enableEchoLimiter(nativePtr,val);
488 public void setVideoDevice(int id) {
489 Log.i("Setting camera id :", id);
490 if (setVideoDevice(nativePtr, id) != 0) {
491 Log.e("Failed to set video device to id:", id);
494 public int getVideoDevice() {
495 return getVideoDevice(nativePtr);
499 private native void leaveConference(long nativePtr);
500 public synchronized void leaveConference() {
501 leaveConference(nativePtr);
504 private native void enterConference(long nativePtr);
505 public synchronized void enterConference() {
506 enterConference(nativePtr);
509 private native boolean isInConference(long nativePtr);
510 public synchronized boolean isInConference() {
511 return isInConference(nativePtr);
514 private native void terminateConference(long nativePtr);
515 public synchronized void terminateConference() {
516 terminateConference(nativePtr);
518 private native int getConferenceSize(long nativePtr);
519 public synchronized int getConferenceSize() {
520 return getConferenceSize(nativePtr);
522 private native int getCallsNb(long nativePtr);
523 public synchronized int getCallsNb() {
524 return getCallsNb(nativePtr);
526 private native void terminateAllCalls(long nativePtr);
527 public synchronized void terminateAllCalls() {
528 terminateAllCalls(nativePtr);
530 private native Object getCall(long nativePtr, int position);
531 @SuppressWarnings("unchecked") public synchronized List getCalls() {
532 int size = getCallsNb(nativePtr);
533 List<LinphoneCall> calls = new ArrayList<LinphoneCall>(size);
534 for (int i=0; i < size; i++) {
535 calls.add((LinphoneCall)getCall(nativePtr, i));
539 private native void addAllToConference(long nativePtr);
540 public synchronized void addAllToConference() {
541 addAllToConference(nativePtr);
544 private native void addToConference(long nativePtr, long nativePtrLcall);
545 public synchronized void addToConference(LinphoneCall call) {
546 addToConference(nativePtr, getCallPtr(call));
549 private native void removeFromConference(long nativePtr);
550 public synchronized void removeFromConference(LinphoneCall call) {
551 removeFromConference(getCallPtr(call));
554 private long getCallPtr(LinphoneCall call) {
555 return ((LinphoneCallImpl)call).nativePtr;
558 private native int transferCall(long nativePtr, long callPtr, String referTo);
559 public synchronized void transferCall(LinphoneCall call, String referTo) {
560 transferCall(nativePtr, getCallPtr(call), referTo);
563 private native int transferCallToAnother(long nativePtr, long callPtr, long destPtr);
564 public synchronized void transferCallToAnother(LinphoneCall call, LinphoneCall dest) {
565 transferCallToAnother(nativePtr, getCallPtr(call), getCallPtr(dest));
568 private native Object findCallFromUri(long nativePtr, String uri);
570 public synchronized LinphoneCall findCallFromUri(String uri) {
571 return (LinphoneCall) findCallFromUri(nativePtr, uri);
574 public String getMediaEncryption() {
575 return getMediaEncryption(nativePtr);
577 public boolean isMediaEncryptionMandatory() {
578 return isMediaEncryptionMandatory(nativePtr);
580 public void setMediaEncryption(String menc) {
581 setMediaEncryption(nativePtr, menc);
583 public void setMediaEncryptionMandatory(boolean yesno) {
584 setMediaEncryptionMandatory(nativePtr, yesno);
587 private native int getMaxCalls(long nativePtr);
588 public int getMaxCalls() {
589 return getMaxCalls(nativePtr);
592 public boolean isMyself(String uri) {
593 LinphoneProxyConfig lpc = getDefaultProxyConfig();
594 if (lpc == null) return false;
595 return uri.equals(lpc.getIdentity());
598 private native boolean soundResourcesLocked(long nativePtr);
599 public boolean soundResourcesLocked() {
600 return soundResourcesLocked(nativePtr);
603 private native void setMaxCalls(long nativePtr, int max);
605 public void setMaxCalls(int max) {
606 setMaxCalls(nativePtr, max);