]> sjero.net Git - linphone/blob - java/impl/org/linphone/core/LinphoneCoreImpl.java
Added audio and video port API to JNI
[linphone] / java / impl / org / linphone / core / LinphoneCoreImpl.java
1 /*
2 LinphoneCoreImpl.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.io.File;
22 import java.io.IOException;
23
24
25 class LinphoneCoreImpl implements LinphoneCore {
26
27         private final  LinphoneCoreListener mListener; //to make sure to keep a reference on this object
28         private long nativePtr = 0;
29         private native long newLinphoneCore(LinphoneCoreListener listener,String userConfig,String factoryConfig,Object  userdata);
30         private native void iterate(long nativePtr);
31         private native long getDefaultProxyConfig(long nativePtr);
32
33         private native void setDefaultProxyConfig(long nativePtr,long proxyCfgNativePtr);
34         private native int addProxyConfig(LinphoneProxyConfig jprtoxyCfg,long nativePtr,long proxyCfgNativePtr);
35         private native void clearAuthInfos(long nativePtr);
36         
37         private native void clearProxyConfigs(long nativePtr);
38         private native void addAuthInfo(long nativePtr,long authInfoNativePtr);
39         private native Object invite(long nativePtr,String uri);
40         private native void terminateCall(long nativePtr, long call);
41         private native long getRemoteAddress(long nativePtr);
42         private native boolean  isInCall(long nativePtr);
43         private native boolean isInComingInvitePending(long nativePtr);
44         private native void acceptCall(long nativePtr, long call);
45         private native long getCallLog(long nativePtr,int position);
46         private native int getNumberOfCallLogs(long nativePtr);
47         private native void delete(long nativePtr);
48         private native void setNetworkStateReachable(long nativePtr,boolean isReachable);
49         private native boolean isNetworkStateReachable(long nativePtr);
50         private native void setPlaybackGain(long nativeptr, float gain);
51         private native float getPlaybackGain(long nativeptr);
52         private native void muteMic(long nativePtr,boolean isMuted);
53         private native long interpretUrl(long nativePtr,String destination);
54         private native Object inviteAddress(long nativePtr,long to);
55         private native Object inviteAddressWithParams(long nativePtrLc,long to, long nativePtrParam);
56         private native void sendDtmf(long nativePtr,char dtmf);
57         private native void clearCallLogs(long nativePtr);
58         private native boolean isMicMuted(long nativePtr);
59         private native long findPayloadType(long nativePtr, String mime, int clockRate, int channels);
60         private native int enablePayloadType(long nativePtr, long payloadType,  boolean enable);
61         private native void enableEchoCancellation(long nativePtr,boolean enable);
62         private native boolean isEchoCancellationEnabled(long nativePtr);
63         private native Object getCurrentCall(long nativePtr) ;
64         private native void playDtmf(long nativePtr,char dtmf,int duration);
65         private native void stopDtmf(long nativePtr);
66         private native void setVideoWindowId(long nativePtr, Object wid);
67         private native void setPreviewWindowId(long nativePtr, Object wid);
68         private native void setDeviceRotation(long nativePtr, int rotation);
69         private native void addFriend(long nativePtr,long friend);
70         private native void setPresenceInfo(long nativePtr,int minute_away, String alternative_contact,int status);
71         private native long createChatRoom(long nativePtr,String to);
72         private native void enableVideo(long nativePtr,boolean vcap_enabled,boolean display_enabled);
73         private native boolean isVideoEnabled(long nativePtr);
74         private native void setFirewallPolicy(long nativePtr, int enum_value);
75         private native int getFirewallPolicy(long nativePtr);
76         private native void setStunServer(long nativePtr, String stun_server);
77         private native String getStunServer(long nativePtr);
78         private native long createDefaultCallParams(long nativePtr);
79         private native int updateCall(long ptrLc, long ptrCall, long ptrParams);
80         private native void setUploadBandwidth(long nativePtr, int bw);
81         private native void setDownloadBandwidth(long nativePtr, int bw);
82         private native void setPreferredVideoSize(long nativePtr, int width, int heigth);
83         private native int[] getPreferredVideoSize(long nativePtr);
84         private native void setRing(long nativePtr, String path);
85         private native String getRing(long nativePtr);
86         private native void setRootCA(long nativePtr, String path);
87         private native long[] listVideoPayloadTypes(long nativePtr);
88         private native long[] getProxyConfigList(long nativePtr);
89         private native long[] listAudioPayloadTypes(long nativePtr);
90         private native void enableKeepAlive(long nativePtr,boolean enable);
91         private native boolean isKeepAliveEnabled(long nativePtr);
92         private native int startEchoCalibration(long nativePtr,Object data);
93         private native int getSignalingTransportPort(long nativePtr, int code);
94         private native void setSignalingTransportPorts(long nativePtr, int udp, int tcp, int tls);
95         private native void enableIpv6(long nativePtr,boolean enable);
96         private native int pauseCall(long nativePtr, long callPtr);
97         private native int pauseAllCalls(long nativePtr);
98         private native int resumeCall(long nativePtr, long callPtr);
99         private native void setUploadPtime(long nativePtr, int ptime);
100         private native void setDownloadPtime(long nativePtr, int ptime);
101         private native void setZrtpSecretsCache(long nativePtr, String file);
102         private native void enableEchoLimiter(long nativePtr2, boolean val);
103         private native int setVideoDevice(long nativePtr2, int id);
104         private native int getVideoDevice(long nativePtr2);
105         private native int getMediaEncryption(long nativePtr);
106         private native void setMediaEncryption(long nativePtr, int menc);
107         private native boolean isMediaEncryptionMandatory(long nativePtr);
108         private native void setMediaEncryptionMandatory(long nativePtr, boolean yesno);
109         private native void removeCallLog(long nativePtr, long callLogPtr);
110         private native int getMissedCallsCount(long nativePtr);
111         private native void resetMissedCallsCount(long nativePtr);
112         private native String getVersion(long nativePtr);
113         private native void setAudioPort(long nativePtr, int port);
114         private native void setVideoPort(long nativePtr, int port);
115         private native void setAudioPortRange(long nativePtr, int minPort, int maxPort);
116         private native void setVideoPortRange(long nativePtr, int minPort, int maxPort);
117         
118         LinphoneCoreImpl(LinphoneCoreListener listener, File userConfig,File factoryConfig,Object  userdata) throws IOException {
119                 mListener=listener;
120                 nativePtr = newLinphoneCore(listener,userConfig.getCanonicalPath(),factoryConfig.getCanonicalPath(),userdata);
121         }
122         LinphoneCoreImpl(LinphoneCoreListener listener) throws IOException {
123                 mListener=listener;
124                 nativePtr = newLinphoneCore(listener,null,null,null);
125         }
126         
127         protected void finalize() throws Throwable {
128                 
129         }
130         
131         public synchronized void addAuthInfo(LinphoneAuthInfo info) {
132                 isValid();
133                 addAuthInfo(nativePtr,((LinphoneAuthInfoImpl)info).nativePtr);
134         }
135
136
137
138         public synchronized LinphoneProxyConfig getDefaultProxyConfig() {
139                 isValid();
140                 long lNativePtr = getDefaultProxyConfig(nativePtr);
141                 if (lNativePtr!=0) {
142                         return new LinphoneProxyConfigImpl(lNativePtr); 
143                 } else {
144                         return null;
145                 }
146         }
147
148         public synchronized LinphoneCall invite(String uri) {
149                 isValid();
150                 return (LinphoneCall)invite(nativePtr,uri);
151         }
152
153         public synchronized void iterate() {
154                 isValid();
155                 iterate(nativePtr);
156         }
157
158         public synchronized void setDefaultProxyConfig(LinphoneProxyConfig proxyCfg) {
159                 isValid();
160                 setDefaultProxyConfig(nativePtr,((LinphoneProxyConfigImpl)proxyCfg).nativePtr);
161         }
162         public synchronized void addProxyConfig(LinphoneProxyConfig proxyCfg) throws LinphoneCoreException{
163                 isValid();
164                 if (addProxyConfig(proxyCfg,nativePtr,((LinphoneProxyConfigImpl)proxyCfg).nativePtr) !=0) {
165                         throw new LinphoneCoreException("bad proxy config");
166                 }
167         }
168         public synchronized void clearAuthInfos() {
169                 isValid();
170                 clearAuthInfos(nativePtr);
171                 
172         }
173         public synchronized void clearProxyConfigs() {
174                 isValid();
175                 clearProxyConfigs(nativePtr);
176         }
177         public synchronized void terminateCall(LinphoneCall aCall) {
178                 isValid();
179                 if (aCall!=null)terminateCall(nativePtr,((LinphoneCallImpl)aCall).nativePtr);
180         }
181         public synchronized LinphoneAddress getRemoteAddress() {
182                 isValid();
183                 long ptr = getRemoteAddress(nativePtr);
184                 if (ptr==0) {
185                         return null;
186                 } else {
187                         return new LinphoneAddressImpl(ptr);
188                 }
189         }
190         public synchronized  boolean isIncall() {
191                 isValid();
192                 return isInCall(nativePtr);
193         }
194         public synchronized boolean isInComingInvitePending() {
195                 isValid();
196                 return isInComingInvitePending(nativePtr);
197         }
198         public synchronized void acceptCall(LinphoneCall aCall) {
199                 isValid();
200                 acceptCall(nativePtr,((LinphoneCallImpl)aCall).nativePtr);
201                 
202         }
203         public synchronized LinphoneCallLog[] getCallLogs() {
204                 isValid();
205                 LinphoneCallLog[] logs = new LinphoneCallLog[getNumberOfCallLogs(nativePtr)]; 
206                 for (int i=0;i < getNumberOfCallLogs(nativePtr);i++) {
207                         logs[i] = new LinphoneCallLogImpl(getCallLog(nativePtr, i));
208                 }
209                 return logs;
210         }
211         public synchronized void destroy() {
212                 isValid();
213                 delete(nativePtr);
214                 nativePtr = 0;
215         }
216         
217         private void isValid() {
218                 if (nativePtr == 0) {
219                         throw new RuntimeException("object already destroyed");
220                 }
221         }
222         public synchronized void setNetworkReachable(boolean isReachable) {
223                 setNetworkStateReachable(nativePtr,isReachable);
224         }
225         public synchronized void setPlaybackGain(float gain) {
226                 setPlaybackGain(nativePtr,gain);
227                 
228         }
229         public synchronized float getPlaybackGain() {
230                 return getPlaybackGain(nativePtr);
231         }
232         public synchronized void muteMic(boolean isMuted) {
233                 muteMic(nativePtr,isMuted);
234         }
235         public synchronized LinphoneAddress interpretUrl(String destination) throws LinphoneCoreException {
236                 long lAddress = interpretUrl(nativePtr,destination);
237                 if (lAddress != 0) {
238                         return new LinphoneAddressImpl(lAddress,true);
239                 } else {
240                         throw new LinphoneCoreException("Cannot interpret ["+destination+"]");
241                 }
242         }
243         public synchronized LinphoneCall invite(LinphoneAddress to) throws LinphoneCoreException { 
244                 LinphoneCall call = (LinphoneCall)inviteAddress(nativePtr,((LinphoneAddressImpl)to).nativePtr);
245                 if (call!=null) {
246                         return call;
247                 } else {
248                         throw new LinphoneCoreException("Unable to invite address " + to.asString());
249                 }
250         }
251
252         public synchronized void sendDtmf(char number) {
253                 sendDtmf(nativePtr,number);
254         }
255         public synchronized void clearCallLogs() {
256                 clearCallLogs(nativePtr);
257         }
258         public synchronized boolean isMicMuted() {
259                 return isMicMuted(nativePtr);
260         }
261         public synchronized PayloadType findPayloadType(String mime, int clockRate, int channels) {
262                 isValid();
263                 long playLoadType = findPayloadType(nativePtr, mime, clockRate, channels);
264                 if (playLoadType == 0) {
265                         return null;
266                 } else {
267                         return new PayloadTypeImpl(playLoadType);
268                 }
269         }
270         public synchronized void enablePayloadType(PayloadType pt, boolean enable)
271                         throws LinphoneCoreException {
272                 isValid();
273                 if (enablePayloadType(nativePtr,((PayloadTypeImpl)pt).nativePtr,enable) != 0) {
274                         throw new LinphoneCoreException("cannot enable payload type ["+pt+"]");
275                 }
276                 
277         }
278         public synchronized void enableEchoCancellation(boolean enable) {
279                 isValid();
280                 enableEchoCancellation(nativePtr, enable);
281         }
282         public synchronized boolean isEchoCancellationEnabled() {
283                 isValid();
284                 return isEchoCancellationEnabled(nativePtr);
285                 
286         }
287
288         public synchronized LinphoneCall getCurrentCall() {
289                 isValid();
290                 return (LinphoneCall)getCurrentCall(nativePtr);
291         }
292         
293         public int getPlayLevel() {
294                 // TODO Auto-generated method stub
295                 return 0;
296         }
297         public void setPlayLevel(int level) {
298                 // TODO Auto-generated method stub
299                 
300         }
301         public void enableSpeaker(boolean value) {
302                 // TODO Auto-generated method stub
303                 
304         }
305         public boolean isSpeakerEnabled() {
306                 // TODO Auto-generated method stub
307                 return false;
308         }
309         public synchronized void playDtmf(char number, int duration) {
310                 playDtmf(nativePtr,number, duration);
311                 
312         }
313         public synchronized void stopDtmf() {
314                 stopDtmf(nativePtr);
315         }
316         
317         public synchronized void addFriend(LinphoneFriend lf) throws LinphoneCoreException {
318                 addFriend(nativePtr,((LinphoneFriendImpl)lf).nativePtr);
319                 
320         }
321         public synchronized void setPresenceInfo(int minute_away, String alternative_contact,
322                         OnlineStatus status) {
323                 setPresenceInfo(nativePtr,minute_away,alternative_contact,status.mValue);
324                 
325         }
326         public synchronized LinphoneChatRoom createChatRoom(String to) {
327                 return new LinphoneChatRoomImpl(createChatRoom(nativePtr,to));
328         }
329         public synchronized void setPreviewWindow(Object w) {
330                 setPreviewWindowId(nativePtr,w);
331         }
332         public synchronized void setVideoWindow(Object w) {
333                 setVideoWindowId(nativePtr, w);
334         }
335         public synchronized void setDeviceRotation(int rotation) {
336                 setDeviceRotation(nativePtr, rotation);
337         }
338         
339         public synchronized void enableVideo(boolean vcap_enabled, boolean display_enabled) {
340                 enableVideo(nativePtr,vcap_enabled, display_enabled);
341         }
342         public synchronized boolean isVideoEnabled() {
343                 return isVideoEnabled(nativePtr);
344         }
345         public synchronized FirewallPolicy getFirewallPolicy() {
346                 return FirewallPolicy.fromInt(getFirewallPolicy(nativePtr));
347         }
348         public synchronized String getStunServer() {
349                 return getStunServer(nativePtr);
350         }
351         public synchronized void setFirewallPolicy(FirewallPolicy pol) {
352                 setFirewallPolicy(nativePtr,pol.value());
353         }
354         public synchronized void setStunServer(String stunServer) {
355                 setStunServer(nativePtr,stunServer);
356         }
357         
358         public synchronized LinphoneCallParams createDefaultCallParameters() {
359                 return new LinphoneCallParamsImpl(createDefaultCallParams(nativePtr));
360         }
361         
362         public synchronized LinphoneCall inviteAddressWithParams(LinphoneAddress to, LinphoneCallParams params) throws LinphoneCoreException {
363                 long ptrDestination = ((LinphoneAddressImpl)to).nativePtr;
364                 long ptrParams =((LinphoneCallParamsImpl)params).nativePtr;
365                 
366                 LinphoneCall call = (LinphoneCall)inviteAddressWithParams(nativePtr, ptrDestination, ptrParams);
367                 if (call!=null) {
368                         return call;
369                 } else {
370                         throw new LinphoneCoreException("Unable to invite with params " + to.asString());
371                 }
372         }
373
374         public synchronized int updateCall(LinphoneCall call, LinphoneCallParams params) {
375                 long ptrCall = ((LinphoneCallImpl) call).nativePtr;
376                 long ptrParams = params!=null ? ((LinphoneCallParamsImpl)params).nativePtr : 0;
377
378                 return updateCall(nativePtr, ptrCall, ptrParams);
379         }
380         public synchronized void setUploadBandwidth(int bw) {
381                 setUploadBandwidth(nativePtr, bw);
382         }
383
384         public synchronized void setDownloadBandwidth(int bw) {
385                 setDownloadBandwidth(nativePtr, bw);
386         }
387
388         public synchronized void setPreferredVideoSize(VideoSize vSize) {
389                 setPreferredVideoSize(nativePtr, vSize.width, vSize.height);
390         }
391
392         public synchronized VideoSize getPreferredVideoSize() {
393                 int[] nativeSize = getPreferredVideoSize(nativePtr);
394
395                 VideoSize vSize = new VideoSize();
396                 vSize.width = nativeSize[0];
397                 vSize.height = nativeSize[1];
398                 return vSize;
399         }
400         public synchronized void setRing(String path) {
401                 setRing(nativePtr, path);
402         }
403         public synchronized String getRing() {
404                 return getRing(nativePtr);
405         }
406         
407         public synchronized void setRootCA(String path) {
408                 setRootCA(nativePtr, path);
409         }
410         
411         public synchronized LinphoneProxyConfig[] getProxyConfigList() {
412                 long[] typesPtr = getProxyConfigList(nativePtr);
413                 if (typesPtr == null) return null;
414                 
415                 LinphoneProxyConfig[] proxies = new LinphoneProxyConfig[typesPtr.length];
416
417                 for (int i=0; i < proxies.length; i++) {
418                         proxies[i] = new LinphoneProxyConfigImpl(typesPtr[i]);
419                 }
420
421                 return proxies;
422         }
423         
424         public synchronized PayloadType[] getVideoCodecs() {
425                 long[] typesPtr = listVideoPayloadTypes(nativePtr);
426                 if (typesPtr == null) return null;
427                 
428                 PayloadType[] codecs = new PayloadType[typesPtr.length];
429
430                 for (int i=0; i < codecs.length; i++) {
431                         codecs[i] = new PayloadTypeImpl(typesPtr[i]);
432                 }
433
434                 return codecs;
435         }
436         public synchronized PayloadType[] getAudioCodecs() {
437                 long[] typesPtr = listAudioPayloadTypes(nativePtr);
438                 if (typesPtr == null) return null;
439                 
440                 PayloadType[] codecs = new PayloadType[typesPtr.length];
441
442                 for (int i=0; i < codecs.length; i++) {
443                         codecs[i] = new PayloadTypeImpl(typesPtr[i]);
444                 }
445
446                 return codecs;
447         }
448         public synchronized boolean isNetworkReachable() {
449                 return isNetworkStateReachable(nativePtr);
450         }
451         
452         public synchronized void enableKeepAlive(boolean enable) {
453                 enableKeepAlive(nativePtr,enable);
454                 
455         }
456         public synchronized boolean isKeepAliveEnabled() {
457                 return isKeepAliveEnabled(nativePtr);
458         }
459         public synchronized void startEchoCalibration(Object data) throws LinphoneCoreException {
460                 startEchoCalibration(nativePtr, data);
461         }
462         
463         public synchronized Transports getSignalingTransportPorts() {
464                 Transports transports = new Transports();
465                 transports.udp = getSignalingTransportPort(nativePtr, 0);
466                 transports.tcp = getSignalingTransportPort(nativePtr, 1);
467                 transports.tls = getSignalingTransportPort(nativePtr, 3);
468                 // See C struct LCSipTransports in linphonecore.h
469                 // Code is the index in the structure
470                 return transports;
471         }
472         public synchronized void setSignalingTransportPorts(Transports transports) {
473                 setSignalingTransportPorts(nativePtr, transports.udp, transports.tcp, transports.tls);
474         }
475
476         public synchronized void enableIpv6(boolean enable) {
477                 enableIpv6(nativePtr,enable);
478         }
479         public synchronized void adjustSoftwareVolume(int i) {
480                 //deprecated, does the same as setPlaybackGain().
481         }
482
483         public synchronized boolean pauseCall(LinphoneCall call) {
484                 return 0 == pauseCall(nativePtr, ((LinphoneCallImpl) call).nativePtr);
485         }
486         public synchronized boolean resumeCall(LinphoneCall call) {
487                 return 0 == resumeCall(nativePtr, ((LinphoneCallImpl) call).nativePtr);
488         }
489         public synchronized boolean pauseAllCalls() {
490                 return 0 == pauseAllCalls(nativePtr);
491         }
492         public synchronized void setDownloadPtime(int ptime) {
493                 setDownloadPtime(nativePtr,ptime);
494                 
495         }
496         public synchronized void setUploadPtime(int ptime) {
497                 setUploadPtime(nativePtr,ptime);
498         }
499
500         public synchronized void setZrtpSecretsCache(String file) {
501                 setZrtpSecretsCache(nativePtr,file);
502         }
503         public synchronized void enableEchoLimiter(boolean val) {
504                 enableEchoLimiter(nativePtr,val);
505         }
506         public void setVideoDevice(int id) {
507                 Log.i("Setting camera id :", id);
508                 if (setVideoDevice(nativePtr, id) != 0) {
509                         Log.e("Failed to set video device to id:", id);
510                 }
511         }
512         public int getVideoDevice() {
513                 return getVideoDevice(nativePtr);
514         }
515
516
517         private native void leaveConference(long nativePtr);    
518         public synchronized void leaveConference() {
519                 leaveConference(nativePtr);
520         }
521
522         private native boolean enterConference(long nativePtr); 
523         public synchronized boolean enterConference() {
524                 return enterConference(nativePtr);
525         }
526
527         private native boolean isInConference(long nativePtr);
528         public synchronized boolean isInConference() {
529                 return isInConference(nativePtr);
530         }
531
532         private native void terminateConference(long nativePtr);
533         public synchronized void terminateConference() {
534                 terminateConference(nativePtr);
535         }
536         private native int getConferenceSize(long nativePtr);
537         public synchronized int getConferenceSize() {
538                 return getConferenceSize(nativePtr);
539         }
540         private native int getCallsNb(long nativePtr);
541         public synchronized int getCallsNb() {
542                 return getCallsNb(nativePtr);
543         }
544         private native void terminateAllCalls(long nativePtr);
545         public synchronized void terminateAllCalls() {
546                 terminateAllCalls(nativePtr);
547         }
548         private native Object getCall(long nativePtr, int position);
549         public synchronized LinphoneCall[] getCalls() {
550                 int size = getCallsNb(nativePtr);
551                 LinphoneCall[] calls = new LinphoneCall[size];
552                 for (int i=0; i < size; i++) {
553                         calls[i]=((LinphoneCall)getCall(nativePtr, i));
554                 }
555                 return calls;
556         }
557         private native void addAllToConference(long nativePtr);
558         public synchronized void addAllToConference() {
559                 addAllToConference(nativePtr);
560                 
561         }
562         private native void addToConference(long nativePtr, long nativePtrLcall);
563         public synchronized void addToConference(LinphoneCall call) {
564                 addToConference(nativePtr, getCallPtr(call));
565                 
566         }
567         private native void removeFromConference(long nativePtr, long nativeCallPtr);
568         public synchronized void removeFromConference(LinphoneCall call) {
569                 removeFromConference(nativePtr,getCallPtr(call));
570         }
571
572         private long getCallPtr(LinphoneCall call) {
573                 return ((LinphoneCallImpl)call).nativePtr;
574         }
575         
576         private long getCallParamsPtr(LinphoneCallParams callParams) {
577                 return ((LinphoneCallParamsImpl)callParams).nativePtr;
578         }
579
580         private native int transferCall(long nativePtr, long callPtr, String referTo);
581         public synchronized void transferCall(LinphoneCall call, String referTo) {
582                 transferCall(nativePtr, getCallPtr(call), referTo);
583         }
584
585         private native int transferCallToAnother(long nativePtr, long callPtr, long destPtr);
586         public synchronized void transferCallToAnother(LinphoneCall call, LinphoneCall dest) {
587                 transferCallToAnother(nativePtr, getCallPtr(call), getCallPtr(dest));
588         }
589
590         private native Object findCallFromUri(long nativePtr, String uri);
591         @Override
592         public synchronized LinphoneCall findCallFromUri(String uri) {
593                 return (LinphoneCall) findCallFromUri(nativePtr, uri);
594         }
595
596         public synchronized MediaEncryption getMediaEncryption() {
597                 return MediaEncryption.fromInt(getMediaEncryption(nativePtr));
598         }
599         public synchronized boolean isMediaEncryptionMandatory() {
600                 return isMediaEncryptionMandatory(nativePtr);
601         }
602         public synchronized void setMediaEncryption(MediaEncryption menc) {
603                 setMediaEncryption(nativePtr, menc.mValue);     
604         }
605         public synchronized void setMediaEncryptionMandatory(boolean yesno) {
606                 setMediaEncryptionMandatory(nativePtr, yesno);
607         }
608
609         private native int getMaxCalls(long nativePtr);
610         public synchronized int getMaxCalls() {
611                 return getMaxCalls(nativePtr);
612         }
613         @Override
614         public boolean isMyself(String uri) {
615                 LinphoneProxyConfig lpc = getDefaultProxyConfig();
616                 if (lpc == null) return false;
617                 return uri.equals(lpc.getIdentity());
618         }
619
620         private native boolean soundResourcesLocked(long nativePtr);
621         public synchronized boolean soundResourcesLocked() {
622                 return soundResourcesLocked(nativePtr);
623         }
624
625         private native void setMaxCalls(long nativePtr, int max);
626         @Override
627         public synchronized void setMaxCalls(int max) {
628                 setMaxCalls(nativePtr, max);
629         }
630         private native boolean isEchoLimiterEnabled(long nativePtr);
631         @Override
632         public synchronized boolean isEchoLimiterEnabled() {
633                 return isEchoLimiterEnabled(nativePtr);
634         }
635         private native boolean mediaEncryptionSupported(long nativePtr, int menc);
636         @Override
637         public synchronized boolean mediaEncryptionSupported(MediaEncryption menc) {
638                 return mediaEncryptionSupported(nativePtr,menc.mValue);
639         }
640
641         private native void setPlayFile(long nativePtr, String path);
642
643         @Override
644         public synchronized void setPlayFile(String path) {
645                 setPlayFile(nativePtr, path);
646         }
647
648
649         private native void tunnelAddServerAndMirror(long nativePtr, String host, int port, int mirror, int ms);
650         @Override
651         public synchronized void tunnelAddServerAndMirror(String host, int port, int mirror, int ms) {
652                 tunnelAddServerAndMirror(nativePtr, host, port, mirror, ms);
653         }
654
655         private native void tunnelAutoDetect(long nativePtr);
656         @Override
657         public synchronized void tunnelAutoDetect() {
658                 tunnelAutoDetect(nativePtr);
659         }
660
661         private native void tunnelCleanServers(long nativePtr);
662         @Override
663         public synchronized void tunnelCleanServers() {
664                 tunnelCleanServers(nativePtr);
665         }
666
667         private native void tunnelEnable(long nativePtr, boolean enable);
668         @Override
669         public synchronized void tunnelEnable(boolean enable) {
670                 tunnelEnable(nativePtr, enable);
671         }
672
673         @Override
674         public native boolean isTunnelAvailable();
675         
676         private native void acceptCallWithParams(long nativePtr, long aCall,
677                         long params);
678         @Override
679         public synchronized void acceptCallWithParams(LinphoneCall aCall,
680                         LinphoneCallParams params) throws LinphoneCoreException {
681                 acceptCallWithParams(nativePtr, getCallPtr(aCall), getCallParamsPtr(params));
682         }
683         
684         private native void acceptCallUpdate(long nativePtr, long aCall, long params);
685         @Override
686         public synchronized void acceptCallUpdate(LinphoneCall aCall, LinphoneCallParams params)
687                         throws LinphoneCoreException {
688                 acceptCallUpdate(nativePtr, getCallPtr(aCall), getCallParamsPtr(params));               
689         }
690         
691         private native void deferCallUpdate(long nativePtr, long aCall);
692         @Override
693         public synchronized void deferCallUpdate(LinphoneCall aCall)
694                         throws LinphoneCoreException {
695                 deferCallUpdate(nativePtr, getCallPtr(aCall));
696         }
697         
698         private native void setVideoPolicy(long nativePtr, boolean autoInitiate, boolean autoAccept);
699         public synchronized void setVideoPolicy(boolean autoInitiate, boolean autoAccept) {
700                 setVideoPolicy(nativePtr, autoInitiate, autoAccept);
701         }
702         private native void setUserAgent(long nativePtr, String name, String version);
703         @Override
704         public void setUserAgent(String name, String version) {
705                 setUserAgent(nativePtr,name,version);
706         }
707
708         private native void setCpuCountNative(int count);
709         public void setCpuCount(int count)
710         {
711                 setCpuCountNative(count);
712         }
713         
714         public int getMissedCallsCount() {
715                 return getMissedCallsCount(nativePtr);
716         }
717         
718         public void removeCallLog(LinphoneCallLog log) {
719                 removeCallLog(nativePtr, ((LinphoneCallLogImpl) log).getNativePtr());
720         }
721
722         public void resetMissedCallsCount() {
723                 resetMissedCallsCount(nativePtr);
724         }
725         
726         private native void tunnelSetHttpProxy(long nativePtr, String proxy_host, int port,
727                         String username, String password);
728         @Override
729         public void tunnelSetHttpProxy(String proxy_host, int port,
730                         String username, String password) {
731                 tunnelSetHttpProxy(nativePtr, proxy_host, port, username, password);
732         }
733         
734         private native void refreshRegisters(long nativePtr);
735         public void refreshRegisters() {
736                 refreshRegisters(nativePtr);
737         }
738         
739         @Override
740         public String getVersion() {
741                 return getVersion(nativePtr);
742         }
743         
744         @Override
745         public PayloadType findPayloadType(String mime, int clockRate) {
746                 return null;
747         }
748         
749         private native void removeFriend(long ptr, long lf);
750         @Override
751         public void removeFriend(LinphoneFriend lf) {
752                 removeFriend(nativePtr, lf.getNativePtr());
753         }
754         
755         private native long getFriendByAddress(long ptr, String sipUri);
756         @Override
757         public LinphoneFriend findFriendByAddress(String sipUri) {
758                 long ptr = getFriendByAddress(nativePtr, sipUri);
759                 if (ptr == 0) {
760                         return null;
761                 }
762                 return new LinphoneFriendImpl(ptr);
763         }
764         
765         public void setAudioPort(int port) {
766                 setAudioPort(nativePtr, port);
767         }
768         
769         public void setVideoPort(int port) {
770                 setVideoPort(nativePtr, port);
771         }
772         
773         public void setAudioPortRange(int minPort, int maxPort) {
774                 setAudioPortRange(nativePtr, minPort, maxPort);
775         }
776         
777         public void setVideoPortRange(int minPort, int maxPort) {
778                 setVideoPortRange(nativePtr, minPort, maxPort);
779         }
780 }