1 #define ENABLE_CHAT
2 
3 %module(directors="1") mega
4 %{
5 #define ENABLE_CHAT
6 #include "megaapi.h"
7 
8 #if defined(__ANDROID__)
9 #include <ares.h>
10 #endif
11 
12 #ifdef ENABLE_WEBRTC
13 #include "webrtc/modules/utility/include/jvm_android.h"
14 #include "webrtc/rtc_base/logging.h"
15 #include "webrtc/rtc_base/ssl_adapter.h"
16 #include "webrtc/sdk/android/native_api/base/init.h"
17 #include "webrtc/sdk/android/src/jni/class_reference_holder.h"
18 #include "webrtc/sdk/android/src/jni/jni_generator_helper.h"
19 #include "webrtc/sdk/android/src/jni/jni_helpers.h"
20 #include "webrtc/sdk/android/native_api/jni/class_loader.h"
21 #include "modules/utility/include/jvm_android.h"
22 #include <jni.h>
23 
24 #endif
25 
26 #ifdef SWIGJAVA
27 JavaVM *MEGAjvm = NULL;
28 jstring strEncodeUTF8 = NULL;
29 jclass clsString = NULL;
30 jmethodID ctorString = NULL;
31 jmethodID getBytes = NULL;
32 jclass applicationClass = NULL;
33 jmethodID startVideoCaptureMID = NULL;
34 jmethodID stopVideoCaptureMID = NULL;
35 jmethodID deviceListMID = NULL;
36 jobject surfaceTextureHelper = NULL;
37 
JNI_OnLoad(JavaVM * jvm,void * reserved)38 extern "C" jint JNIEXPORT JNICALL JNI_OnLoad(JavaVM *jvm, void *reserved)
39 {
40     MEGAjvm = jvm;
41     JNIEnv* jenv = NULL;
42     jvm->GetEnv((void**)&jenv, JNI_VERSION_1_6);
43 
44     jclass clsStringLocal = jenv->FindClass("java/lang/String");
45     clsString = (jclass)jenv->NewGlobalRef(clsStringLocal);
46     jenv->DeleteLocalRef(clsStringLocal);
47     ctorString = jenv->GetMethodID(clsString, "<init>", "([BLjava/lang/String;)V");
48     getBytes = jenv->GetMethodID(clsString, "getBytes", "(Ljava/lang/String;)[B");
49     jstring strEncodeUTF8Local = jenv->NewStringUTF("UTF-8");
50     strEncodeUTF8 = (jstring)jenv->NewGlobalRef(strEncodeUTF8Local);
51     jenv->DeleteLocalRef(strEncodeUTF8Local);
52 
53 #ifdef ENABLE_WEBRTC
54     // Initialize WebRTC
55     webrtc::JVM::Initialize(jvm);
56     webrtc::InitAndroid(MEGAjvm);
57     rtc::InitializeSSL();
58 
59     jenv->ExceptionClear();
60     jclass appGlobalsClass = jenv->FindClass("android/app/AppGlobals");
61     if (appGlobalsClass)
62     {
63         jmethodID getInitialApplicationMID = jenv->GetStaticMethodID(appGlobalsClass, "getInitialApplication", "()Landroid/app/Application;");
64         jenv->DeleteLocalRef(appGlobalsClass);
65     }
66     else
67     {
68         jenv->ExceptionClear();
69     }
70 
71     jclass videoCaptureUtilsClass = jenv->FindClass("mega/privacy/android/app/utils/VideoCaptureUtils");
72     if (videoCaptureUtilsClass)
73     {
74         applicationClass = (jclass)jenv->NewGlobalRef(videoCaptureUtilsClass);
75         jenv->DeleteLocalRef(videoCaptureUtilsClass);
76 
77         deviceListMID = jenv->GetStaticMethodID(applicationClass, "deviceList", "()[Ljava/lang/String;");
78         if (!deviceListMID)
79         {
80             jenv->ExceptionClear();
81         }
82 
83         jclass surfaceTextureHelperClass = jenv->FindClass("org/webrtc/SurfaceTextureHelper");
84         if (surfaceTextureHelperClass)
85         {
86             jmethodID createSurfaceMID = jenv->GetStaticMethodID(surfaceTextureHelperClass, "create", "(Ljava/lang/String;Lorg/webrtc/EglBase$Context;)Lorg/webrtc/SurfaceTextureHelper;");
87             if (createSurfaceMID)
88             {
89                 jstring threadStr = (jstring) jenv->NewStringUTF("VideoCapturerThread");
90                 jobject surface = jenv->CallStaticObjectMethod(surfaceTextureHelperClass, createSurfaceMID, threadStr, NULL);
91                 if (surface)
92                 {
93                     surfaceTextureHelper = jenv->NewGlobalRef(surface);
94                     jenv->DeleteLocalRef(surface);
95                 }
96                 jenv->DeleteLocalRef(threadStr);
97             }
98             else
99             {
100                 jenv->ExceptionClear();
101             }
102             jenv->DeleteLocalRef(surfaceTextureHelperClass);
103         }
104         else
105         {
106             jenv->ExceptionClear();
107         }
108     }
109     else
110     {
111         jenv->ExceptionClear();
112     }
113 #endif
114 
115 #if defined(__ANDROID__) && ARES_VERSION >= 0x010F00
116     ares_library_init_jvm(jvm);
117 #endif
118 
119     return JNI_VERSION_1_6;
120 }
121 #endif
122 %}
123 
124 #ifdef SWIGJAVA
125 
126 //Automatic load of the native library
127 %pragma(java) jniclasscode=%{
128   static {
129         try {
130             System.loadLibrary("mega");
catch(UnsatisfiedLinkError e1)131         } catch (UnsatisfiedLinkError e1) {
132             try {
133                 System.load(System.getProperty("user.dir") + "/libmega.so");
134             } catch (UnsatisfiedLinkError e2) {
135                 try {
136                     System.load(System.getProperty("user.dir") + "/libs/libmegajava.so");
137                 } catch (UnsatisfiedLinkError e3) {
138                     try {
139                         System.load(System.getProperty("user.dir") + "/libs/mega.dll");
140                     } catch (UnsatisfiedLinkError e4) {
141                         try {
142                             System.load(System.getProperty("user.dir") + "/libmega.dylib");
143                         } catch (UnsatisfiedLinkError e5) {
144                             try {
145                                 System.load(System.getProperty("user.dir") + "/libs/libmegajava.dylib");
146                             } catch (UnsatisfiedLinkError e6) {
147                                 System.err.println("Native code library failed to load. \n" + e1 + "\n" + e2 + "\n" + e3 + "\n" + e4 + "\n" + e5 + "\n" + e6);
148                                 System.exit(1);
149                             }
150                         }
151                     }
152                 }
153             }
154         }
155     }
156 %}
157 
158 //Use compilation-time constants in Java
159 %javaconst(1);
160 
161 //Reduce the visibility of internal classes
162 %typemap(javaclassmodifiers) mega::MegaApi "class";
163 %typemap(javaclassmodifiers) mega::MegaListener "class";
164 %typemap(javaclassmodifiers) mega::MegaRequestListener "class";
165 %typemap(javaclassmodifiers) mega::MegaTransferListener "class";
166 %typemap(javaclassmodifiers) mega::MegaGlobalListener "class";
167 %typemap(javaclassmodifiers) mega::MegaTreeProcessor "class";
168 %typemap(javaclassmodifiers) mega::MegaLogger "class";
169 %typemap(javaclassmodifiers) mega::NodeList "class";
170 %typemap(javaclassmodifiers) mega::TransferList "class";
171 %typemap(javaclassmodifiers) mega::ShareList "class";
172 %typemap(javaclassmodifiers) mega::UserList "class";
173 %typemap(javaclassmodifiers) mega::UserAlertList "class";
174 
175 %typemap(out) char*
176 %{
177     if ($1)
178     {
179         int len = strlen($1);
180         jbyteArray $1_array = jenv->NewByteArray(len);
181         jenv->SetByteArrayRegion($1_array, 0, len, (const jbyte*)$1);
182         $result = (jstring) jenv->NewObject(clsString, ctorString, $1_array, strEncodeUTF8);
183         jenv->DeleteLocalRef($1_array);
184     }
185 %}
186 
187 %typemap(in) char*
188 %{
189     jbyteArray $1_array;
190     $1 = 0;
191     if ($input)
192     {
193         $1_array = (jbyteArray) jenv->CallObjectMethod($input, getBytes, strEncodeUTF8);
194         jsize $1_size = jenv->GetArrayLength($1_array);
195         $1 = new char[$1_size + 1];
196         if ($1_size)
197         {
198             jenv->GetByteArrayRegion($1_array, 0, $1_size, (jbyte*)$1);
199         }
200         $1[$1_size] = '\0';
201     }
202 %}
203 
204 %typemap(freearg) char*
205 %{
206     if ($1)
207     {
208         delete [] $1;
209         jenv->DeleteLocalRef($1_array);
210     }
211 %}
212 
213 %typemap(directorin,descriptor="Ljava/lang/String;") char *
214 %{
215     $input = 0;
216     if ($1)
217     {
218         int len = strlen($1);
219         jbyteArray $1_array = jenv->NewByteArray(len);
220         jenv->SetByteArrayRegion($1_array, 0, len, (const jbyte*)$1);
221         $input = (jstring) jenv->NewObject(clsString, ctorString, $1_array, strEncodeUTF8);
222         jenv->DeleteLocalRef($1_array);
223     }
224     Swig::LocalRefGuard $1_refguard(jenv, $input);
225 %}
226 
227 
228 //Make the "delete" method protected
229 %typemap(javadestruct, methodname="delete", methodmodifiers="protected synchronized") SWIGTYPE
230 {
231     if (swigCPtr != 0) {
232       if (swigCMemOwn) {
233         swigCMemOwn = false;
234         $jnicall;
235       }
236       swigCPtr = 0;
237     }
238 }
239 
240 %javamethodmodifiers copy ""
241 
242 #endif
243 
244 //Generate inheritable wrappers for listener objects
245 %feature("director") mega::MegaRequestListener;
246 %feature("director") mega::MegaTransferListener;
247 %feature("director") mega::MegaLogger;
248 
249 
250 #ifdef SWIGJAVA
251 #if SWIG_VERSION < 0x030000
252 %typemap(directorargout) (const char *time, int loglevel, const char *source, const char *message)
253 %{
254 	jenv->DeleteLocalRef(jtime);
255 	jenv->DeleteLocalRef(jsource);
256 	jenv->DeleteLocalRef(jmessage);
257 %}
258 #endif
259 
260 %apply (char *STRING, size_t LENGTH) {(char *buffer, size_t size)};
261 
262 #if SWIG_VERSION < 0x030012
263 %typemap(directorargout) (char *buffer, size_t size)
264 %{
265     jenv->DeleteLocalRef($input);
266 %}
267 #else
268 %typemap(directorargout) (char *buffer, size_t size)
269 %{
270    // not copying the buffer back to improve performance
271 %}
272 #endif
273 
274 #endif
275 
276 %feature("director") mega::MegaGlobalListener;
277 %feature("director") mega::MegaListener;
278 %feature("director") mega::MegaTreeProcessor;
279 %feature("director") mega::MegaGfxProcessor;
280 
281 
282 #ifdef SWIGJAVA
283 
284 #if SWIG_VERSION < 0x030000
285 %typemap(directorargout) (const char* path)
286 %{
287 	jenv->DeleteLocalRef(jpath);
288 %}
289 #endif
290 
291 %apply (char *STRING, size_t LENGTH) {(char *bitmapData, size_t size)};
292 %typemap(directorin, descriptor="[B") (char *bitmapData, size_t size)
293 %{
294 	jbyteArray jb = (jenv)->NewByteArray($2);
295 	$input = jb;
296 %}
297 %typemap(directorargout) (char *bitmapData, size_t size)
298 %{
299 	jenv->GetByteArrayRegion($input, 0, $2, (jbyte *)$1);
300 	jenv->DeleteLocalRef($input);
301 %}
302 #endif
303 
304 #ifdef SWIGPHP
305 
306 #ifndef SWIGPHP7
307 //Disable the management of director parameters
308 //to workaround several SWIG bugs
309 %typemap(directorin) SWIGTYPE* %{ %}
310 %typemap(directorout) SWIGTYPE* %{ %}
311 #endif
312 
313 //Rename overloaded functions
314 %rename (getInSharesAll, fullname=1) mega::MegaApi::getInShares();
315 %rename (getOutSharesAll, fullname=1) mega::MegaApi::getOutShares();
316 %rename (getTransfersAll, fullname=1) mega::MegaApi::getTransfers();
317 %rename (getRootNodeOf, fullname=1) mega::MegaApi::getRootNode(MegaNode*);
318 %rename (searchAll, fullname=1) mega::MegaApi::search(const char*);
319 %rename (getNodeByFingerprintInFolder, fullname=1) mega::MegaApi::getNodeByFingerprint(const char*, MegaNode*);
320 %rename (getFingerprintByInputStream, fullname=1) mega::MegaApi::getFingerprint(MegaInputStream*, int64_t);
321 %rename (pauseTransfersByDirection, fullname=1) mega::MegaApi::pauseTransfers(bool, int, MegaRequestListener*);
322 %rename (exportNodeWithTime, fullname=1) mega::MegaApi::exportNode(MegaNode*, int64_t, MegaRequestListener*);
323 %rename (getMyAvatar, fullname=1) mega::MegaApi::getUserAvatar(const char*, MegaRequestListener*);
324 %rename (getMyAvatar, fullname=1) mega::MegaApi::getUserAvatar(const char*);
325 %rename (copyNodeWithName, fullname=1) mega::MegaApi::copyNode(MegaNode*, MegaNode*, const char*, MegaRequestListener*);
326 
327 %rename ("$ignore", fullname=1) mega::MegaApi::startUpload(const char*, MegaNode*, int64_t, MegaTransferListener*);
328 %rename ("$ignore", fullname=1) mega::MegaApi::startUpload(const char*, MegaNode*, int64_t);
329 %rename ("$ignore", fullname=1) mega::MegaApi::startUpload(const char*, MegaNode*, const char*, MegaTransferListener*);
330 %rename ("$ignore", fullname=1) mega::MegaApi::startUpload(const char*, MegaNode*, const char*);
331 %rename ("$ignore", fullname=1) mega::MegaApi::startUpload(const char*, MegaNode*, const char*, int64_t, MegaTransferListener*);
332 %rename ("$ignore", fullname=1) mega::MegaApi::startUpload(const char*, MegaNode*, const char*, int64_t);
333 %rename ("$ignore", fullname=1) mega::MegaApi::startUpload(const char*, MegaNode*, int64_t, bool, MegaTransferListener*);
334 %rename ("$ignore", fullname=1) mega::MegaApi::startUpload(const char*, MegaNode*, int64_t, bool);
335 %rename ("$ignore", fullname=1) mega::MegaApi::createAccount(const char*, const char*, const char*, MegaRequestListener*);
336 %rename ("$ignore", fullname=1) mega::MegaApi::createAccount(const char*, const char*, const char*);
337 
338 #endif
339 
340 %ignore mega::MegaApi::MEGA_DEBRIS_FOLDER;
341 %ignore mega::MegaNode::getNodeKey;
342 %ignore mega::MegaNode::getAttrString;
343 %ignore mega::MegaNode::getPrivateAuth;
344 %ignore mega::MegaNode::getPublicAuth;
345 %ignore mega::MegaApi::createForeignFileNode;
346 %ignore mega::MegaApi::createForeignFolderNode;
347 %ignore mega::MegaListener::onSyncStateChanged;
348 %ignore mega::MegaListener::onSyncFileStateChanged;
349 %ignore mega::MegaTransfer::getListener;
350 %ignore mega::MegaRequest::getListener;
351 %ignore mega::MegaHashSignature;
352 %ignore mega::SynchronousRequestListener;
353 %ignore mega::SynchronousTransferListener;
354 
355 %newobject mega::MegaError::copy;
356 %newobject mega::MegaRequest::copy;
357 %newobject mega::MegaTransfer::copy;
358 %newobject mega::MegaTransferList::copy;
359 %newobject mega::MegaNode::copy;
360 %newobject mega::MegaNodeList::copy;
361 %newobject mega::MegaChildrenList::copy;
362 %newobject mega::MegaShare::copy;
363 %newobject mega::MegaShareList::copy;
364 %newobject mega::MegaUser::copy;
365 %newobject mega::MegaUserList::copy;
366 %newobject mega::MegaContactRequest::copy;
367 %newobject mega::MegaContactRequestList::copy;
368 %newobject mega::MegaStringList::copy;
369 %newobject mega::MegaAchievementsDetails::copy;
370 %newobject mega::MegaTimeZoneDetails::copy;
371 %newobject mega::MegaUserAlert::copy;
372 %newobject mega::MegaUserAlertList::copy;
373 %newobject mega::MegaAchievementsDetails::getAwardEmails;
374 %newobject mega::MegaRequest::getPublicMegaNode;
375 %newobject mega::MegaTransfer::getPublicMegaNode;
376 %newobject mega::MegaNode::getBase64Handle;
377 %newobject mega::MegaNode::getFileAttrString;
378 %newobject mega::MegaApi::getBase64PwKey;
379 %newobject mega::MegaApi::getStringHash;
380 %newobject mega::MegaApi::handleToBase64;
381 %newobject mega::MegaApi::userHandleToBase64;
382 %newobject mega::MegaApi::dumpSession;
383 %newobject mega::MegaApi::dumpXMPPSession;
384 %newobject mega::MegaApi::getMyEmail;
385 %newobject mega::MegaApi::getMyUserHandle;
386 %newobject mega::MegaApi::getMyUser;
387 %newobject mega::MegaApi::getMyXMPPJid;
388 %newobject mega::MegaApi::getMyFingerprint;
389 %newobject mega::MegaApi::exportMasterKey;
390 %newobject mega::MegaApi::getTransfers;
391 %newobject mega::MegaApi::getTransferByTag;
392 %newobject mega::MegaApi::getChildTransfers;
393 %newobject mega::MegaApi::getChildren;
394 %newobject mega::MegaApi::getChildNode;
395 %newobject mega::MegaApi::getParentNode;
396 %newobject mega::MegaApi::getNodePath;
397 %newobject mega::MegaApi::getNodeByPath;
398 %newobject mega::MegaApi::getNodeByHandle;
399 %newobject mega::MegaApi::getContactRequestByHandle;
400 %newobject mega::MegaApi::getContacts;
401 %newobject mega::MegaApi::getContact;
402 %newobject mega::MegaApi::getUserAlerts;
403 %newobject mega::MegaApi::getInShares;
404 %newobject mega::MegaApi::getInSharesList;
405 %newobject mega::MegaApi::getOutShares;
406 %newobject mega::MegaApi::getPendingOutShares;
407 %newobject mega::MegaApi::getPublicLinks;
408 %newobject mega::MegaApi::getIncomingContactRequests;
409 %newobject mega::MegaApi::getOutgoingContactRequests;
410 %newobject mega::MegaApi::getFingerprint;
411 %newobject mega::MegaApi::getNodeByFingerprint;
412 %newobject mega::MegaApi::getNodesByFingerprint;
413 %newobject mega::MegaApi::getExportableNodeByFingerprint;
414 %newobject mega::MegaApi::getCRC;
415 %newobject mega::MegaApi::getNodeByCRC;
416 %newobject mega::MegaApi::getRootNode;
417 %newobject mega::MegaApi::getInboxNode;
418 %newobject mega::MegaApi::getRubbishNode;
419 %newobject mega::MegaApi::escapeFsIncompatible;
420 %newobject mega::MegaApi::unescapeFsIncompatible;
421 %newobject mega::MegaApi::base64ToBase32;
422 %newobject mega::MegaApi::base32ToBase64;
423 %newobject mega::MegaApi::search;
424 %newobject mega::MegaApi::getCRCFromFingerprint;
425 %newobject mega::MegaApi::getSessionTransferURL;
426 %newobject mega::MegaApi::getAccountAuth;
427 %newobject mega::MegaApi::authorizeNode;
428 
429 %newobject mega::MegaRequest::getMegaTimeZoneDetails;
430 %newobject mega::MegaRequest::getMegaAccountDetails;
431 %newobject mega::MegaRequest::getPricing;
432 %newobject mega::MegaRequest::getMegaAchievementsDetails;
433 %newobject mega::MegaAccountDetails::getSubscriptionMethod;
434 %newobject mega::MegaAccountDetails::getSubscriptionCycle;
435 
436 %newobject mega::MegaApi::getMimeType;
437 
438 typedef long long time_t;
439 typedef long long uint64_t;
440 typedef long long int64_t;
441 
442 %include "megaapi.h"
443