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