deltachat/patches/0004-update-jni-makefile-and-bindings.patch
2018-08-16 15:35:16 +02:00

2411 lines
81 KiB
Diff

From 5a0e6e5eadd8fdcf9ac75f3d2f25b44a650b7fcc Mon Sep 17 00:00:00 2001
Message-Id: <5a0e6e5eadd8fdcf9ac75f3d2f25b44a650b7fcc.1534410135.git.daniel.boehrs@open-xchange.com>
In-Reply-To: <371694c11a8b1192ef5230b98af3a5719add98ef.1534410134.git.daniel.boehrs@open-xchange.com>
References: <371694c11a8b1192ef5230b98af3a5719add98ef.1534410134.git.daniel.boehrs@open-xchange.com>
From: "B. Petersen" <r10s@b44t.com>
Date: Fri, 27 Jul 2018 15:02:53 +0200
Subject: [PATCH 4/6] update jni makefile and bindings
---
jni/Android.mk | 932 ++++++++++++++++++++++++++++++++++++++-
jni/mrjnimain.c | 77 ++++
jni/mrjnimain.h | 54 +++
jni/mrwrapper.c | 1299 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
4 files changed, 2358 insertions(+), 4 deletions(-)
diff --git a/jni/Android.mk b/jni/Android.mk
index cac4c9c..d085d06 100644
--- a/jni/Android.mk
+++ b/jni/Android.mk
@@ -1,11 +1,935 @@
JNI_DIR := $(call my-dir)
+LOCAL_PATH := $(call my-dir)
+
+################################################################################
+# openssl - libcrypto
+################################################################################
+
+include $(CLEAR_VARS)
+
+
+CRYPTO_PATH:= ./openssl/crypto
+
+arm_cflags := -DOPENSSL_BN_ASM_MONT -DAES_ASM -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM
+
+local_src_files := \
+ ./openssl/crypto/cryptlib.c \
+ ./openssl/crypto/mem.c \
+ ./openssl/crypto/mem_clr.c \
+ ./openssl/crypto/mem_dbg.c \
+ ./openssl/crypto/cversion.c \
+ ./openssl/crypto/ex_data.c \
+ ./openssl/crypto/cpt_err.c \
+ ./openssl/crypto/ebcdic.c \
+ ./openssl/crypto/uid.c \
+ ./openssl/crypto/o_time.c \
+ ./openssl/crypto/o_str.c \
+ ./openssl/crypto/o_dir.c \
+ ./openssl/crypto/o_init.c \
+ ./openssl/crypto/aes/aes_cbc.c \
+ ./openssl/crypto/aes/aes_core.c \
+ ./openssl/crypto/aes/aes_cfb.c \
+ ./openssl/crypto/aes/aes_ctr.c \
+ ./openssl/crypto/aes/aes_ecb.c \
+ ./openssl/crypto/aes/aes_ige.c \
+ ./openssl/crypto/aes/aes_misc.c \
+ ./openssl/crypto/aes/aes_ofb.c \
+ ./openssl/crypto/aes/aes_wrap.c \
+ ./openssl/crypto/asn1/a_bitstr.c \
+ ./openssl/crypto/asn1/a_bool.c \
+ ./openssl/crypto/asn1/a_bytes.c \
+ ./openssl/crypto/asn1/a_d2i_fp.c \
+ ./openssl/crypto/asn1/a_digest.c \
+ ./openssl/crypto/asn1/a_dup.c \
+ ./openssl/crypto/asn1/a_enum.c \
+ ./openssl/crypto/asn1/a_gentm.c \
+ ./openssl/crypto/asn1/a_i2d_fp.c \
+ ./openssl/crypto/asn1/a_int.c \
+ ./openssl/crypto/asn1/a_mbstr.c \
+ ./openssl/crypto/asn1/a_object.c \
+ ./openssl/crypto/asn1/a_octet.c \
+ ./openssl/crypto/asn1/a_print.c \
+ ./openssl/crypto/asn1/a_set.c \
+ ./openssl/crypto/asn1/a_sign.c \
+ ./openssl/crypto/asn1/a_strex.c \
+ ./openssl/crypto/asn1/a_strnid.c \
+ ./openssl/crypto/asn1/a_time.c \
+ ./openssl/crypto/asn1/a_type.c \
+ ./openssl/crypto/asn1/a_utctm.c \
+ ./openssl/crypto/asn1/a_utf8.c \
+ ./openssl/crypto/asn1/a_verify.c \
+ ./openssl/crypto/asn1/ameth_lib.c \
+ ./openssl/crypto/asn1/asn1_err.c \
+ ./openssl/crypto/asn1/asn1_gen.c \
+ ./openssl/crypto/asn1/asn1_lib.c \
+ ./openssl/crypto/asn1/asn1_par.c \
+ ./openssl/crypto/asn1/asn_mime.c \
+ ./openssl/crypto/asn1/asn_moid.c \
+ ./openssl/crypto/asn1/asn_pack.c \
+ ./openssl/crypto/asn1/bio_asn1.c \
+ ./openssl/crypto/asn1/bio_ndef.c \
+ ./openssl/crypto/asn1/d2i_pr.c \
+ ./openssl/crypto/asn1/d2i_pu.c \
+ ./openssl/crypto/asn1/evp_asn1.c \
+ ./openssl/crypto/asn1/f_enum.c \
+ ./openssl/crypto/asn1/f_int.c \
+ ./openssl/crypto/asn1/f_string.c \
+ ./openssl/crypto/asn1/i2d_pr.c \
+ ./openssl/crypto/asn1/i2d_pu.c \
+ ./openssl/crypto/asn1/n_pkey.c \
+ ./openssl/crypto/asn1/nsseq.c \
+ ./openssl/crypto/asn1/p5_pbe.c \
+ ./openssl/crypto/asn1/p5_pbev2.c \
+ ./openssl/crypto/asn1/p8_pkey.c \
+ ./openssl/crypto/asn1/t_bitst.c \
+ ./openssl/crypto/asn1/t_crl.c \
+ ./openssl/crypto/asn1/t_pkey.c \
+ ./openssl/crypto/asn1/t_req.c \
+ ./openssl/crypto/asn1/t_spki.c \
+ ./openssl/crypto/asn1/t_x509.c \
+ ./openssl/crypto/asn1/t_x509a.c \
+ ./openssl/crypto/asn1/tasn_dec.c \
+ ./openssl/crypto/asn1/tasn_enc.c \
+ ./openssl/crypto/asn1/tasn_fre.c \
+ ./openssl/crypto/asn1/tasn_new.c \
+ ./openssl/crypto/asn1/tasn_prn.c \
+ ./openssl/crypto/asn1/tasn_typ.c \
+ ./openssl/crypto/asn1/tasn_utl.c \
+ ./openssl/crypto/asn1/x_algor.c \
+ ./openssl/crypto/asn1/x_attrib.c \
+ ./openssl/crypto/asn1/x_bignum.c \
+ ./openssl/crypto/asn1/x_crl.c \
+ ./openssl/crypto/asn1/x_exten.c \
+ ./openssl/crypto/asn1/x_info.c \
+ ./openssl/crypto/asn1/x_long.c \
+ ./openssl/crypto/asn1/x_name.c \
+ ./openssl/crypto/asn1/x_nx509.c \
+ ./openssl/crypto/asn1/x_pkey.c \
+ ./openssl/crypto/asn1/x_pubkey.c \
+ ./openssl/crypto/asn1/x_req.c \
+ ./openssl/crypto/asn1/x_sig.c \
+ ./openssl/crypto/asn1/x_spki.c \
+ ./openssl/crypto/asn1/x_val.c \
+ ./openssl/crypto/asn1/x_x509.c \
+ ./openssl/crypto/asn1/x_x509a.c \
+ ./openssl/crypto/bf/bf_cfb64.c \
+ ./openssl/crypto/bf/bf_ecb.c \
+ ./openssl/crypto/bf/bf_enc.c \
+ ./openssl/crypto/bf/bf_ofb64.c \
+ ./openssl/crypto/bf/bf_skey.c \
+ ./openssl/crypto/bio/b_dump.c \
+ ./openssl/crypto/bio/b_print.c \
+ ./openssl/crypto/bio/b_sock.c \
+ ./openssl/crypto/bio/bf_buff.c \
+ ./openssl/crypto/bio/bf_nbio.c \
+ ./openssl/crypto/bio/bf_null.c \
+ ./openssl/crypto/bio/bio_cb.c \
+ ./openssl/crypto/bio/bio_err.c \
+ ./openssl/crypto/bio/bio_lib.c \
+ ./openssl/crypto/bio/bss_acpt.c \
+ ./openssl/crypto/bio/bss_bio.c \
+ ./openssl/crypto/bio/bss_conn.c \
+ ./openssl/crypto/bio/bss_dgram.c \
+ ./openssl/crypto/bio/bss_fd.c \
+ ./openssl/crypto/bio/bss_file.c \
+ ./openssl/crypto/bio/bss_log.c \
+ ./openssl/crypto/bio/bss_mem.c \
+ ./openssl/crypto/bio/bss_null.c \
+ ./openssl/crypto/bio/bss_sock.c \
+ ./openssl/crypto/bn/bn_add.c \
+ ./openssl/crypto/bn/bn_asm.c \
+ ./openssl/crypto/bn/bn_blind.c \
+ ./openssl/crypto/bn/bn_ctx.c \
+ ./openssl/crypto/bn/bn_div.c \
+ ./openssl/crypto/bn/bn_err.c \
+ ./openssl/crypto/bn/bn_exp.c \
+ ./openssl/crypto/bn/bn_exp2.c \
+ ./openssl/crypto/bn/bn_gcd.c \
+ ./openssl/crypto/bn/bn_gf2m.c \
+ ./openssl/crypto/bn/bn_kron.c \
+ ./openssl/crypto/bn/bn_lib.c \
+ ./openssl/crypto/bn/bn_mod.c \
+ ./openssl/crypto/bn/bn_mont.c \
+ ./openssl/crypto/bn/bn_mpi.c \
+ ./openssl/crypto/bn/bn_mul.c \
+ ./openssl/crypto/bn/bn_nist.c \
+ ./openssl/crypto/bn/bn_prime.c \
+ ./openssl/crypto/bn/bn_print.c \
+ ./openssl/crypto/bn/bn_rand.c \
+ ./openssl/crypto/bn/bn_recp.c \
+ ./openssl/crypto/bn/bn_shift.c \
+ ./openssl/crypto/bn/bn_sqr.c \
+ ./openssl/crypto/bn/bn_sqrt.c \
+ ./openssl/crypto/bn/bn_word.c \
+ ./openssl/crypto/buffer/buf_err.c \
+ ./openssl/crypto/buffer/buf_str.c \
+ ./openssl/crypto/buffer/buffer.c \
+ ./openssl/crypto/camellia/camellia.c \
+ ./openssl/crypto/camellia/cmll_cbc.c \
+ ./openssl/crypto/camellia/cmll_cfb.c \
+ ./openssl/crypto/camellia/cmll_ctr.c \
+ ./openssl/crypto/camellia/cmll_ecb.c \
+ ./openssl/crypto/camellia/cmll_misc.c \
+ ./openssl/crypto/camellia/cmll_ofb.c \
+ ./openssl/crypto/camellia/cmll_utl.c \
+ ./openssl/crypto/cast/c_cfb64.c \
+ ./openssl/crypto/cast/c_ecb.c \
+ ./openssl/crypto/cast/c_enc.c \
+ ./openssl/crypto/cast/c_ofb64.c \
+ ./openssl/crypto/cast/c_skey.c \
+ ./openssl/crypto/cmac/cm_ameth.c \
+ ./openssl/crypto/cmac/cm_pmeth.c \
+ ./openssl/crypto/cmac/cmac.c \
+ ./openssl/crypto/comp/c_rle.c \
+ ./openssl/crypto/comp/c_zlib.c \
+ ./openssl/crypto/comp/comp_err.c \
+ ./openssl/crypto/comp/comp_lib.c \
+ ./openssl/crypto/conf/conf_api.c \
+ ./openssl/crypto/conf/conf_def.c \
+ ./openssl/crypto/conf/conf_err.c \
+ ./openssl/crypto/conf/conf_lib.c \
+ ./openssl/crypto/conf/conf_mall.c \
+ ./openssl/crypto/conf/conf_mod.c \
+ ./openssl/crypto/conf/conf_sap.c \
+ ./openssl/crypto/des/cbc_cksm.c \
+ ./openssl/crypto/des/cbc_enc.c \
+ ./openssl/crypto/des/cfb64ede.c \
+ ./openssl/crypto/des/cfb64enc.c \
+ ./openssl/crypto/des/cfb_enc.c \
+ ./openssl/crypto/des/des_enc.c \
+ ./openssl/crypto/des/des_old.c \
+ ./openssl/crypto/des/des_old2.c \
+ ./openssl/crypto/des/ecb3_enc.c \
+ ./openssl/crypto/des/ecb_enc.c \
+ ./openssl/crypto/des/ede_cbcm_enc.c \
+ ./openssl/crypto/des/enc_read.c \
+ ./openssl/crypto/des/enc_writ.c \
+ ./openssl/crypto/des/fcrypt.c \
+ ./openssl/crypto/des/fcrypt_b.c \
+ ./openssl/crypto/des/ofb64ede.c \
+ ./openssl/crypto/des/ofb64enc.c \
+ ./openssl/crypto/des/ofb_enc.c \
+ ./openssl/crypto/des/pcbc_enc.c \
+ ./openssl/crypto/des/qud_cksm.c \
+ ./openssl/crypto/des/rand_key.c \
+ ./openssl/crypto/des/read2pwd.c \
+ ./openssl/crypto/des/rpc_enc.c \
+ ./openssl/crypto/des/set_key.c \
+ ./openssl/crypto/des/str2key.c \
+ ./openssl/crypto/des/xcbc_enc.c \
+ ./openssl/crypto/dh/dh_ameth.c \
+ ./openssl/crypto/dh/dh_asn1.c \
+ ./openssl/crypto/dh/dh_check.c \
+ ./openssl/crypto/dh/dh_depr.c \
+ ./openssl/crypto/dh/dh_err.c \
+ ./openssl/crypto/dh/dh_gen.c \
+ ./openssl/crypto/dh/dh_key.c \
+ ./openssl/crypto/dh/dh_lib.c \
+ ./openssl/crypto/dh/dh_pmeth.c \
+ ./openssl/crypto/dsa/dsa_ameth.c \
+ ./openssl/crypto/dsa/dsa_asn1.c \
+ ./openssl/crypto/dsa/dsa_depr.c \
+ ./openssl/crypto/dsa/dsa_err.c \
+ ./openssl/crypto/dsa/dsa_gen.c \
+ ./openssl/crypto/dsa/dsa_key.c \
+ ./openssl/crypto/dsa/dsa_lib.c \
+ ./openssl/crypto/dsa/dsa_ossl.c \
+ ./openssl/crypto/dsa/dsa_pmeth.c \
+ ./openssl/crypto/dsa/dsa_prn.c \
+ ./openssl/crypto/dsa/dsa_sign.c \
+ ./openssl/crypto/dsa/dsa_vrf.c \
+ ./openssl/crypto/dso/dso_dl.c \
+ ./openssl/crypto/dso/dso_dlfcn.c \
+ ./openssl/crypto/dso/dso_err.c \
+ ./openssl/crypto/dso/dso_lib.c \
+ ./openssl/crypto/dso/dso_null.c \
+ ./openssl/crypto/dso/dso_openssl.c \
+ ./openssl/crypto/dso/dso_vms.c \
+ ./openssl/crypto/dso/dso_win32.c \
+ ./openssl/crypto/ec/ec2_mult.c \
+ ./openssl/crypto/ec/ec2_oct.c \
+ ./openssl/crypto/ec/ec2_smpl.c \
+ ./openssl/crypto/ec/ec_ameth.c \
+ ./openssl/crypto/ec/ec_asn1.c \
+ ./openssl/crypto/ec/ec_check.c \
+ ./openssl/crypto/ec/ec_curve.c \
+ ./openssl/crypto/ec/ec_cvt.c \
+ ./openssl/crypto/ec/ec_err.c \
+ ./openssl/crypto/ec/ec_key.c \
+ ./openssl/crypto/ec/ec_lib.c \
+ ./openssl/crypto/ec/ec_mult.c \
+ ./openssl/crypto/ec/ec_oct.c \
+ ./openssl/crypto/ec/ec_pmeth.c \
+ ./openssl/crypto/ec/ec_print.c \
+ ./openssl/crypto/ec/eck_prn.c \
+ ./openssl/crypto/ec/ecp_mont.c \
+ ./openssl/crypto/ec/ecp_nist.c \
+ ./openssl/crypto/ec/ecp_nistp224.c \
+ ./openssl/crypto/ec/ecp_nistp256.c \
+ ./openssl/crypto/ec/ecp_nistp521.c \
+ ./openssl/crypto/ec/ecp_nistputil.c \
+ ./openssl/crypto/ec/ecp_oct.c \
+ ./openssl/crypto/ec/ecp_smpl.c \
+ ./openssl/crypto/ecdh/ech_err.c \
+ ./openssl/crypto/ecdh/ech_key.c \
+ ./openssl/crypto/ecdh/ech_lib.c \
+ ./openssl/crypto/ecdh/ech_ossl.c \
+ ./openssl/crypto/ecdsa/ecs_asn1.c \
+ ./openssl/crypto/ecdsa/ecs_err.c \
+ ./openssl/crypto/ecdsa/ecs_lib.c \
+ ./openssl/crypto/ecdsa/ecs_ossl.c \
+ ./openssl/crypto/ecdsa/ecs_sign.c \
+ ./openssl/crypto/ecdsa/ecs_vrf.c \
+ ./openssl/crypto/err/err.c \
+ ./openssl/crypto/err/err_all.c \
+ ./openssl/crypto/err/err_prn.c \
+ ./openssl/crypto/evp/bio_b64.c \
+ ./openssl/crypto/evp/bio_enc.c \
+ ./openssl/crypto/evp/bio_md.c \
+ ./openssl/crypto/evp/bio_ok.c \
+ ./openssl/crypto/evp/c_all.c \
+ ./openssl/crypto/evp/c_allc.c \
+ ./openssl/crypto/evp/c_alld.c \
+ ./openssl/crypto/evp/digest.c \
+ ./openssl/crypto/evp/e_aes.c \
+ ./openssl/crypto/evp/e_aes_cbc_hmac_sha1.c \
+ ./openssl/crypto/evp/e_bf.c \
+ ./openssl/crypto/evp/e_camellia.c \
+ ./openssl/crypto/evp/e_cast.c \
+ ./openssl/crypto/evp/e_des.c \
+ ./openssl/crypto/evp/e_des3.c \
+ ./openssl/crypto/evp/e_null.c \
+ ./openssl/crypto/evp/e_old.c \
+ ./openssl/crypto/evp/e_rc2.c \
+ ./openssl/crypto/evp/e_rc4.c \
+ ./openssl/crypto/evp/e_rc4_hmac_md5.c \
+ ./openssl/crypto/evp/e_rc5.c \
+ ./openssl/crypto/evp/e_xcbc_d.c \
+ ./openssl/crypto/evp/encode.c \
+ ./openssl/crypto/evp/evp_acnf.c \
+ ./openssl/crypto/evp/evp_enc.c \
+ ./openssl/crypto/evp/evp_err.c \
+ ./openssl/crypto/evp/evp_key.c \
+ ./openssl/crypto/evp/evp_lib.c \
+ ./openssl/crypto/evp/evp_pbe.c \
+ ./openssl/crypto/evp/evp_pkey.c \
+ ./openssl/crypto/evp/m_dss.c \
+ ./openssl/crypto/evp/m_dss1.c \
+ ./openssl/crypto/evp/m_ecdsa.c \
+ ./openssl/crypto/evp/m_md4.c \
+ ./openssl/crypto/evp/m_md5.c \
+ ./openssl/crypto/evp/m_mdc2.c \
+ ./openssl/crypto/evp/m_null.c \
+ ./openssl/crypto/evp/m_ripemd.c \
+ ./openssl/crypto/evp/m_sha1.c \
+ ./openssl/crypto/evp/m_sigver.c \
+ ./openssl/crypto/evp/m_wp.c \
+ ./openssl/crypto/evp/names.c \
+ ./openssl/crypto/evp/p5_crpt.c \
+ ./openssl/crypto/evp/p5_crpt2.c \
+ ./openssl/crypto/evp/p_dec.c \
+ ./openssl/crypto/evp/p_enc.c \
+ ./openssl/crypto/evp/p_lib.c \
+ ./openssl/crypto/evp/p_open.c \
+ ./openssl/crypto/evp/p_seal.c \
+ ./openssl/crypto/evp/p_sign.c \
+ ./openssl/crypto/evp/p_verify.c \
+ ./openssl/crypto/evp/pmeth_fn.c \
+ ./openssl/crypto/evp/pmeth_gn.c \
+ ./openssl/crypto/evp/pmeth_lib.c \
+ ./openssl/crypto/hmac/hm_ameth.c \
+ ./openssl/crypto/hmac/hm_pmeth.c \
+ ./openssl/crypto/hmac/hmac.c \
+ ./openssl/crypto/krb5/krb5_asn.c \
+ ./openssl/crypto/lhash/lh_stats.c \
+ ./openssl/crypto/lhash/lhash.c \
+ ./openssl/crypto/md4/md4_dgst.c \
+ ./openssl/crypto/md4/md4_one.c \
+ ./openssl/crypto/md5/md5_dgst.c \
+ ./openssl/crypto/md5/md5_one.c \
+ ./openssl/crypto/modes/cbc128.c \
+ ./openssl/crypto/modes/ccm128.c \
+ ./openssl/crypto/modes/cfb128.c \
+ ./openssl/crypto/modes/ctr128.c \
+ ./openssl/crypto/modes/cts128.c \
+ ./openssl/crypto/modes/gcm128.c \
+ ./openssl/crypto/modes/ofb128.c \
+ ./openssl/crypto/modes/xts128.c \
+ ./openssl/crypto/objects/o_names.c \
+ ./openssl/crypto/objects/obj_dat.c \
+ ./openssl/crypto/objects/obj_err.c \
+ ./openssl/crypto/objects/obj_lib.c \
+ ./openssl/crypto/objects/obj_xref.c \
+ ./openssl/crypto/ocsp/ocsp_asn.c \
+ ./openssl/crypto/ocsp/ocsp_cl.c \
+ ./openssl/crypto/ocsp/ocsp_err.c \
+ ./openssl/crypto/ocsp/ocsp_ext.c \
+ ./openssl/crypto/ocsp/ocsp_ht.c \
+ ./openssl/crypto/ocsp/ocsp_lib.c \
+ ./openssl/crypto/ocsp/ocsp_prn.c \
+ ./openssl/crypto/ocsp/ocsp_srv.c \
+ ./openssl/crypto/ocsp/ocsp_vfy.c \
+ ./openssl/crypto/pem/pem_all.c \
+ ./openssl/crypto/pem/pem_err.c \
+ ./openssl/crypto/pem/pem_info.c \
+ ./openssl/crypto/pem/pem_lib.c \
+ ./openssl/crypto/pem/pem_oth.c \
+ ./openssl/crypto/pem/pem_pk8.c \
+ ./openssl/crypto/pem/pem_pkey.c \
+ ./openssl/crypto/pem/pem_seal.c \
+ ./openssl/crypto/pem/pem_sign.c \
+ ./openssl/crypto/pem/pem_x509.c \
+ ./openssl/crypto/pem/pem_xaux.c \
+ ./openssl/crypto/pem/pvkfmt.c \
+ ./openssl/crypto/pkcs12/p12_add.c \
+ ./openssl/crypto/pkcs12/p12_asn.c \
+ ./openssl/crypto/pkcs12/p12_attr.c \
+ ./openssl/crypto/pkcs12/p12_crpt.c \
+ ./openssl/crypto/pkcs12/p12_crt.c \
+ ./openssl/crypto/pkcs12/p12_decr.c \
+ ./openssl/crypto/pkcs12/p12_init.c \
+ ./openssl/crypto/pkcs12/p12_key.c \
+ ./openssl/crypto/pkcs12/p12_kiss.c \
+ ./openssl/crypto/pkcs12/p12_mutl.c \
+ ./openssl/crypto/pkcs12/p12_npas.c \
+ ./openssl/crypto/pkcs12/p12_p8d.c \
+ ./openssl/crypto/pkcs12/p12_p8e.c \
+ ./openssl/crypto/pkcs12/p12_utl.c \
+ ./openssl/crypto/pkcs12/pk12err.c \
+ ./openssl/crypto/pkcs7/pk7_asn1.c \
+ ./openssl/crypto/pkcs7/pk7_attr.c \
+ ./openssl/crypto/pkcs7/pk7_doit.c \
+ ./openssl/crypto/pkcs7/pk7_lib.c \
+ ./openssl/crypto/pkcs7/pk7_mime.c \
+ ./openssl/crypto/pkcs7/pk7_smime.c \
+ ./openssl/crypto/pkcs7/pkcs7err.c \
+ ./openssl/crypto/pqueue/pqueue.c \
+ ./openssl/crypto/rand/md_rand.c \
+ ./openssl/crypto/rand/rand_egd.c \
+ ./openssl/crypto/rand/rand_err.c \
+ ./openssl/crypto/rand/rand_lib.c \
+ ./openssl/crypto/rand/rand_unix.c \
+ ./openssl/crypto/rand/randfile.c \
+ ./openssl/crypto/rc2/rc2_cbc.c \
+ ./openssl/crypto/rc2/rc2_ecb.c \
+ ./openssl/crypto/rc2/rc2_skey.c \
+ ./openssl/crypto/rc2/rc2cfb64.c \
+ ./openssl/crypto/rc2/rc2ofb64.c \
+ ./openssl/crypto/rc4/rc4_enc.c \
+ ./openssl/crypto/rc4/rc4_skey.c \
+ ./openssl/crypto/rc4/rc4_utl.c \
+ ./openssl/crypto/ripemd/rmd_dgst.c \
+ ./openssl/crypto/ripemd/rmd_one.c \
+ ./openssl/crypto/rsa/rsa_ameth.c \
+ ./openssl/crypto/rsa/rsa_asn1.c \
+ ./openssl/crypto/rsa/rsa_chk.c \
+ ./openssl/crypto/rsa/rsa_crpt.c \
+ ./openssl/crypto/rsa/rsa_depr.c \
+ ./openssl/crypto/rsa/rsa_eay.c \
+ ./openssl/crypto/rsa/rsa_err.c \
+ ./openssl/crypto/rsa/rsa_gen.c \
+ ./openssl/crypto/rsa/rsa_lib.c \
+ ./openssl/crypto/rsa/rsa_none.c \
+ ./openssl/crypto/rsa/rsa_null.c \
+ ./openssl/crypto/rsa/rsa_oaep.c \
+ ./openssl/crypto/rsa/rsa_pk1.c \
+ ./openssl/crypto/rsa/rsa_pmeth.c \
+ ./openssl/crypto/rsa/rsa_prn.c \
+ ./openssl/crypto/rsa/rsa_pss.c \
+ ./openssl/crypto/rsa/rsa_saos.c \
+ ./openssl/crypto/rsa/rsa_sign.c \
+ ./openssl/crypto/rsa/rsa_ssl.c \
+ ./openssl/crypto/rsa/rsa_x931.c \
+ ./openssl/crypto/sha/sha1_one.c \
+ ./openssl/crypto/sha/sha1dgst.c \
+ ./openssl/crypto/sha/sha256.c \
+ ./openssl/crypto/sha/sha512.c \
+ ./openssl/crypto/sha/sha_dgst.c \
+ ./openssl/crypto/srp/srp_lib.c \
+ ./openssl/crypto/srp/srp_vfy.c \
+ ./openssl/crypto/stack/stack.c \
+ ./openssl/crypto/ts/ts_err.c \
+ ./openssl/crypto/txt_db/txt_db.c \
+ ./openssl/crypto/ui/ui_compat.c \
+ ./openssl/crypto/ui/ui_err.c \
+ ./openssl/crypto/ui/ui_lib.c \
+ ./openssl/crypto/ui/ui_openssl.c \
+ ./openssl/crypto/ui/ui_util.c \
+ ./openssl/crypto/x509/by_dir.c \
+ ./openssl/crypto/x509/by_file.c \
+ ./openssl/crypto/x509/x509_att.c \
+ ./openssl/crypto/x509/x509_cmp.c \
+ ./openssl/crypto/x509/x509_d2.c \
+ ./openssl/crypto/x509/x509_def.c \
+ ./openssl/crypto/x509/x509_err.c \
+ ./openssl/crypto/x509/x509_ext.c \
+ ./openssl/crypto/x509/x509_lu.c \
+ ./openssl/crypto/x509/x509_obj.c \
+ ./openssl/crypto/x509/x509_r2x.c \
+ ./openssl/crypto/x509/x509_req.c \
+ ./openssl/crypto/x509/x509_set.c \
+ ./openssl/crypto/x509/x509_trs.c \
+ ./openssl/crypto/x509/x509_txt.c \
+ ./openssl/crypto/x509/x509_v3.c \
+ ./openssl/crypto/x509/x509_vfy.c \
+ ./openssl/crypto/x509/x509_vpm.c \
+ ./openssl/crypto/x509/x509cset.c \
+ ./openssl/crypto/x509/x509name.c \
+ ./openssl/crypto/x509/x509rset.c \
+ ./openssl/crypto/x509/x509spki.c \
+ ./openssl/crypto/x509/x509type.c \
+ ./openssl/crypto/x509/x_all.c \
+ ./openssl/crypto/x509v3/pcy_cache.c \
+ ./openssl/crypto/x509v3/pcy_data.c \
+ ./openssl/crypto/x509v3/pcy_lib.c \
+ ./openssl/crypto/x509v3/pcy_map.c \
+ ./openssl/crypto/x509v3/pcy_node.c \
+ ./openssl/crypto/x509v3/pcy_tree.c \
+ ./openssl/crypto/x509v3/v3_akey.c \
+ ./openssl/crypto/x509v3/v3_akeya.c \
+ ./openssl/crypto/x509v3/v3_alt.c \
+ ./openssl/crypto/x509v3/v3_bcons.c \
+ ./openssl/crypto/x509v3/v3_bitst.c \
+ ./openssl/crypto/x509v3/v3_conf.c \
+ ./openssl/crypto/x509v3/v3_cpols.c \
+ ./openssl/crypto/x509v3/v3_crld.c \
+ ./openssl/crypto/x509v3/v3_enum.c \
+ ./openssl/crypto/x509v3/v3_extku.c \
+ ./openssl/crypto/x509v3/v3_genn.c \
+ ./openssl/crypto/x509v3/v3_ia5.c \
+ ./openssl/crypto/x509v3/v3_info.c \
+ ./openssl/crypto/x509v3/v3_int.c \
+ ./openssl/crypto/x509v3/v3_lib.c \
+ ./openssl/crypto/x509v3/v3_ncons.c \
+ ./openssl/crypto/x509v3/v3_ocsp.c \
+ ./openssl/crypto/x509v3/v3_pci.c \
+ ./openssl/crypto/x509v3/v3_pcia.c \
+ ./openssl/crypto/x509v3/v3_pcons.c \
+ ./openssl/crypto/x509v3/v3_pku.c \
+ ./openssl/crypto/x509v3/v3_pmaps.c \
+ ./openssl/crypto/x509v3/v3_prn.c \
+ ./openssl/crypto/x509v3/v3_purp.c \
+ ./openssl/crypto/x509v3/v3_skey.c \
+ ./openssl/crypto/x509v3/v3_sxnet.c \
+ ./openssl/crypto/x509v3/v3_utl.c \
+ ./openssl/crypto/x509v3/v3err.c \
+ ./openssl/ssl/bio_ssl.c \
+ ./openssl/ssl/s2_meth.c \
+ ./openssl/ssl/ssl_algs.c \
+ ./openssl/ssl/kssl.c \
+ ./openssl/ssl/s2_pkt.c \
+ ./openssl/ssl/ssl_asn1.c \
+ ./openssl/ssl/d1_both.c \
+ ./openssl/ssl/s2_srvr.c \
+ ./openssl/ssl/ssl_cert.c \
+ ./openssl/ssl/ssl_txt.c \
+ ./openssl/ssl/d1_clnt.c \
+ ./openssl/ssl/s23_clnt.c \
+ ./openssl/ssl/s3_both.c \
+ ./openssl/ssl/ssl_ciph.c \
+ ./openssl/ssl/ssl_utst.c \
+ ./openssl/ssl/d1_enc.c \
+ ./openssl/ssl/s23_lib.c \
+ ./openssl/ssl/s3_cbc.c \
+ ./openssl/ssl/ssl_err2.c \
+ ./openssl/ssl/t1_clnt.c \
+ ./openssl/ssl/d1_lib.c \
+ ./openssl/ssl/s23_meth.c \
+ ./openssl/ssl/s3_clnt.c \
+ ./openssl/ssl/ssl_err.c \
+ ./openssl/ssl/t1_enc.c \
+ ./openssl/ssl/d1_meth.c \
+ ./openssl/ssl/s23_pkt.c \
+ ./openssl/ssl/s3_enc.c \
+ ./openssl/ssl/ssl_lib.c \
+ ./openssl/ssl/t1_lib.c \
+ ./openssl/ssl/d1_pkt.c \
+ ./openssl/ssl/s23_srvr.c \
+ ./openssl/ssl/s3_lib.c \
+ ./openssl/ssl/t1_meth.c \
+ ./openssl/ssl/d1_srtp.c \
+ ./openssl/ssl/s2_clnt.c \
+ ./openssl/ssl/s3_meth.c \
+ ./openssl/ssl/ssl_rsa.c \
+ ./openssl/ssl/t1_reneg.c \
+ ./openssl/ssl/d1_srvr.c \
+ ./openssl/ssl/s2_enc.c \
+ ./openssl/ssl/s3_pkt.c \
+ ./openssl/ssl/ssl_sess.c \
+ ./openssl/ssl/t1_srvr.c \
+ ./openssl/ssl/s2_lib.c \
+ ./openssl/ssl/s3_srvr.c \
+ ./openssl/ssl/ssl_stat.c \
+ ./openssl/ssl/tls_srp.c
+
+local_c_includes := \
+ $(LOCAL_PATH)/openssl \
+ $(LOCAL_PATH)/openssl/crypto \
+ $(LOCAL_PATH)/openssl/crypto/asn1 \
+ $(LOCAL_PATH)/openssl/crypto/evp \
+ $(LOCAL_PATH)/openssl/crypto/modes \
+ $(LOCAL_PATH)/openssl/include \
+ $(LOCAL_PATH)/openssl/include/openssl
+
+local_c_flags := -DNO_WINDOWS_BRAINDEATH
+
+
+include $(LOCAL_PATH)/openssl/android-config.mk
+LOCAL_SRC_FILES += $(local_src_files)
+LOCAL_CFLAGS += $(local_c_flags) -DPURIFY
+LOCAL_C_INCLUDES += $(local_c_includes)
+LOCAL_MODULE_TAGS := optional
+LOCAL_MODULE:= libcrypto
+include $(BUILD_STATIC_LIBRARY)
+
+#include $(CLEAR_VARS)
+#LOCAL_MODULE := crypto
+#
+#ifeq ($(TARGET_ARCH_ABI),armeabi-v7a)
+# LOCAL_SRC_FILES := ./openssl/obj/local/armeabi-v7a/libcrypto.a
+#else
+# ifeq ($(TARGET_ARCH_ABI),armeabi)
+# LOCAL_SRC_FILES := ./openssl/obj/local/armeabi/libcrypto.a
+# else
+# ifeq ($(TARGET_ARCH_ABI),x86)
+# LOCAL_SRC_FILES := ./openssl/obj/local/x86/libcrypto.a
+# endif
+# endif
+#endif
+
+#include $(PREBUILT_STATIC_LIBRARY)
+
+################################################################################
+# libiconv
+################################################################################
+
+
+# rough howto
+# - run the normal ./configure to create iconv.h
+# - copy the needed files
+# - in localchatset.c, avoid including langinfo.h
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := libiconv
+LOCAL_CFLAGS := \
+ -Wno-multichar \
+ -D_ANDROID \
+ -DLIBDIR="\"c\"" \
+ -DBUILDING_LIBICONV \
+ -DIN_LIBRARY
+LOCAL_C_INCLUDES := \
+ $(LOCAL_PATH)/libiconv/ \
+ $(LOCAL_PATH)/libiconv/include \
+ $(LOCAL_PATH)/libiconv/lib \
+ $(LOCAL_PATH)/libiconv/libcharset/include
+LOCAL_SRC_FILES := \
+ ./libiconv/lib/iconv.c \
+ ./libiconv/lib/relocatable.c \
+ ./libiconv/libcharset/lib/localcharset.c
+
+include $(BUILD_STATIC_LIBRARY)
+
+
+################################################################################
+# libetpan
+################################################################################
+
+
+# rough howto:
+# - copy files from original source
+# - create include file links using "./autogen.sh; cd include; make" (or so)
+# - use config.h from libetpan/build-android/include
+# - use libetpan-config.h from local installation
+
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE := etpan
+LOCAL_CFLAGS += -DHAVE_CONFIG_H=1 -DHAVE_ICONV=1
+LOCAL_SRC_FILES := \
+ ./messenger-backend/libs/libetpan/src/data-types/base64.c \
+ ./messenger-backend/libs/libetpan/src/data-types/carray.c \
+ ./messenger-backend/libs/libetpan/src/data-types/charconv.c \
+ ./messenger-backend/libs/libetpan/src/data-types/chash.c \
+ ./messenger-backend/libs/libetpan/src/data-types/clist.c \
+ ./messenger-backend/libs/libetpan/src/data-types/connect.c \
+ ./messenger-backend/libs/libetpan/src/data-types/mail_cache_db.c \
+ ./messenger-backend/libs/libetpan/src/data-types/maillock.c \
+ ./messenger-backend/libs/libetpan/src/data-types/mailsasl.c \
+ ./messenger-backend/libs/libetpan/src/data-types/mailsem.c \
+ ./messenger-backend/libs/libetpan/src/data-types/mailstream.c \
+ ./messenger-backend/libs/libetpan/src/data-types/mailstream_cancel.c \
+ ./messenger-backend/libs/libetpan/src/data-types/mailstream_cfstream.c \
+ ./messenger-backend/libs/libetpan/src/data-types/mailstream_compress.c \
+ ./messenger-backend/libs/libetpan/src/data-types/mailstream_helper.c \
+ ./messenger-backend/libs/libetpan/src/data-types/mailstream_low.c \
+ ./messenger-backend/libs/libetpan/src/data-types/mailstream_socket.c \
+ ./messenger-backend/libs/libetpan/src/data-types/mailstream_ssl.c \
+ ./messenger-backend/libs/libetpan/src/data-types/md5.c \
+ ./messenger-backend/libs/libetpan/src/data-types/mmapstring.c \
+ ./messenger-backend/libs/libetpan/src/data-types/timeutils.c \
+ ./messenger-backend/libs/libetpan/src/low-level/imap/acl.c \
+ ./messenger-backend/libs/libetpan/src/low-level/imap/acl_parser.c \
+ ./messenger-backend/libs/libetpan/src/low-level/imap/acl_sender.c \
+ ./messenger-backend/libs/libetpan/src/low-level/imap/acl_types.c \
+ ./messenger-backend/libs/libetpan/src/low-level/imap/annotatemore.c \
+ ./messenger-backend/libs/libetpan/src/low-level/imap/annotatemore_parser.c \
+ ./messenger-backend/libs/libetpan/src/low-level/imap/annotatemore_sender.c \
+ ./messenger-backend/libs/libetpan/src/low-level/imap/annotatemore_types.c \
+ ./messenger-backend/libs/libetpan/src/low-level/imap/condstore.c \
+ ./messenger-backend/libs/libetpan/src/low-level/imap/condstore_types.c \
+ ./messenger-backend/libs/libetpan/src/low-level/imap/enable.c \
+ ./messenger-backend/libs/libetpan/src/low-level/imap/idle.c \
+ ./messenger-backend/libs/libetpan/src/low-level/imap/mailimap.c \
+ ./messenger-backend/libs/libetpan/src/low-level/imap/mailimap_compress.c \
+ ./messenger-backend/libs/libetpan/src/low-level/imap/mailimap_extension.c \
+ ./messenger-backend/libs/libetpan/src/low-level/imap/mailimap_helper.c \
+ ./messenger-backend/libs/libetpan/src/low-level/imap/mailimap_id.c \
+ ./messenger-backend/libs/libetpan/src/low-level/imap/mailimap_id_parser.c \
+ ./messenger-backend/libs/libetpan/src/low-level/imap/mailimap_id_sender.c \
+ ./messenger-backend/libs/libetpan/src/low-level/imap/mailimap_id_types.c \
+ ./messenger-backend/libs/libetpan/src/low-level/imap/mailimap_keywords.c \
+ ./messenger-backend/libs/libetpan/src/low-level/imap/mailimap_oauth2.c \
+ ./messenger-backend/libs/libetpan/src/low-level/imap/mailimap_parser.c \
+ ./messenger-backend/libs/libetpan/src/low-level/imap/mailimap_print.c \
+ ./messenger-backend/libs/libetpan/src/low-level/imap/mailimap_sender.c \
+ ./messenger-backend/libs/libetpan/src/low-level/imap/mailimap_socket.c \
+ ./messenger-backend/libs/libetpan/src/low-level/imap/mailimap_sort.c \
+ ./messenger-backend/libs/libetpan/src/low-level/imap/mailimap_sort_types.c \
+ ./messenger-backend/libs/libetpan/src/low-level/imap/mailimap_ssl.c \
+ ./messenger-backend/libs/libetpan/src/low-level/imap/mailimap_types.c \
+ ./messenger-backend/libs/libetpan/src/low-level/imap/mailimap_types_helper.c \
+ ./messenger-backend/libs/libetpan/src/low-level/imap/namespace.c \
+ ./messenger-backend/libs/libetpan/src/low-level/imap/namespace_parser.c \
+ ./messenger-backend/libs/libetpan/src/low-level/imap/namespace_sender.c \
+ ./messenger-backend/libs/libetpan/src/low-level/imap/namespace_types.c \
+ ./messenger-backend/libs/libetpan/src/low-level/imap/qresync.c \
+ ./messenger-backend/libs/libetpan/src/low-level/imap/qresync_types.c \
+ ./messenger-backend/libs/libetpan/src/low-level/imap/quota.c \
+ ./messenger-backend/libs/libetpan/src/low-level/imap/quota_parser.c \
+ ./messenger-backend/libs/libetpan/src/low-level/imap/quota_sender.c \
+ ./messenger-backend/libs/libetpan/src/low-level/imap/quota_types.c \
+ ./messenger-backend/libs/libetpan/src/low-level/imap/uidplus.c \
+ ./messenger-backend/libs/libetpan/src/low-level/imap/uidplus_parser.c \
+ ./messenger-backend/libs/libetpan/src/low-level/imap/uidplus_sender.c \
+ ./messenger-backend/libs/libetpan/src/low-level/imap/uidplus_types.c \
+ ./messenger-backend/libs/libetpan/src/low-level/imap/xgmlabels.c \
+ ./messenger-backend/libs/libetpan/src/low-level/imap/xgmmsgid.c \
+ ./messenger-backend/libs/libetpan/src/low-level/imap/xgmthrid.c \
+ ./messenger-backend/libs/libetpan/src/low-level/imap/xlist.c \
+ ./messenger-backend/libs/libetpan/src/low-level/imf/mailimf.c \
+ ./messenger-backend/libs/libetpan/src/low-level/imf/mailimf_types.c \
+ ./messenger-backend/libs/libetpan/src/low-level/imf/mailimf_types_helper.c \
+ ./messenger-backend/libs/libetpan/src/low-level/imf/mailimf_write_file.c \
+ ./messenger-backend/libs/libetpan/src/low-level/imf/mailimf_write_generic.c \
+ ./messenger-backend/libs/libetpan/src/low-level/imf/mailimf_write_mem.c \
+ ./messenger-backend/libs/libetpan/src/low-level/mime/mailmime.c \
+ ./messenger-backend/libs/libetpan/src/low-level/mime/mailmime_content.c \
+ ./messenger-backend/libs/libetpan/src/low-level/mime/mailmime_decode.c \
+ ./messenger-backend/libs/libetpan/src/low-level/mime/mailmime_disposition.c \
+ ./messenger-backend/libs/libetpan/src/low-level/mime/mailmime_types.c \
+ ./messenger-backend/libs/libetpan/src/low-level/mime/mailmime_types_helper.c \
+ ./messenger-backend/libs/libetpan/src/low-level/mime/mailmime_write_file.c \
+ ./messenger-backend/libs/libetpan/src/low-level/mime/mailmime_write_generic.c \
+ ./messenger-backend/libs/libetpan/src/low-level/mime/mailmime_write_mem.c \
+ ./messenger-backend/libs/libetpan/src/low-level/smtp/mailsmtp.c \
+ ./messenger-backend/libs/libetpan/src/low-level/smtp/mailsmtp_helper.c \
+ ./messenger-backend/libs/libetpan/src/low-level/smtp/mailsmtp_oauth2.c \
+ ./messenger-backend/libs/libetpan/src/low-level/smtp/mailsmtp_socket.c \
+ ./messenger-backend/libs/libetpan/src/low-level/smtp/mailsmtp_ssl.c \
+ ./messenger-backend/libs/libetpan/src/main/libetpan_version.c \
+ ./messenger-backend/libs/libetpan/src/driver/implementation/data-message/data_message_driver.c \
+ ./messenger-backend/libs/libetpan/src/driver/implementation/mime-message/mime_message_driver.c \
+ ./messenger-backend/libs/libetpan/src/driver/interface/maildriver.c \
+ ./messenger-backend/libs/libetpan/src/driver/interface/maildriver_tools.c \
+ ./messenger-backend/libs/libetpan/src/driver/interface/maildriver_types.c \
+ ./messenger-backend/libs/libetpan/src/driver/interface/maildriver_types_helper.c \
+ ./messenger-backend/libs/libetpan/src/driver/interface/mailfolder.c \
+ ./messenger-backend/libs/libetpan/src/driver/interface/mailmessage.c \
+ ./messenger-backend/libs/libetpan/src/driver/interface/mailmessage_tools.c \
+ ./messenger-backend/libs/libetpan/src/driver/interface/mailmessage_types.c \
+ ./messenger-backend/libs/libetpan/src/driver/interface/mailstorage.c \
+ ./messenger-backend/libs/libetpan/src/driver/interface/mailstorage_tools.c \
+ ./messenger-backend/libs/libetpan/src/engine/mailprivacy.c \
+ ./messenger-backend/libs/libetpan/src/engine/mailprivacy_tools.c
+LOCAL_C_INCLUDES = \
+ $(LOCAL_PATH)/messenger-backend/libs/libetpan/src \
+ $(LOCAL_PATH)/messenger-backend/libs/libetpan/src/data-types \
+ $(LOCAL_PATH)/messenger-backend/libs/libetpan/src/low-level \
+ $(LOCAL_PATH)/messenger-backend/libs/libetpan/src/low-level/imap \
+ $(LOCAL_PATH)/messenger-backend/libs/libetpan/src/low-level/imf \
+ $(LOCAL_PATH)/messenger-backend/libs/libetpan/src/low-level/mime \
+ $(LOCAL_PATH)/messenger-backend/libs/libetpan/src/low-level/nntp \
+ $(LOCAL_PATH)/messenger-backend/libs/libetpan/src/low-level/smtp \
+ $(LOCAL_PATH)/messenger-backend/libs/libetpan/src/main \
+ $(LOCAL_PATH)/messenger-backend/libs/libetpan/src/driver/implementation/data-message \
+ $(LOCAL_PATH)/messenger-backend/libs/libetpan/src/driver/interface \
+ $(LOCAL_PATH)/messenger-backend/libs/libetpan/include \
+ $(LOCAL_PATH)/messenger-backend/libs/libetpan/include/libetpan \
+ $(LOCAL_PATH)/openssl/include \
+ $(LOCAL_PATH)/libiconv/include \
+ $(LOCAL_PATH)/cyrussasl/include \
+ $(LOCAL_PATH)/cyrussasl/include/sasl
+
+include $(BUILD_STATIC_LIBRARY)
+
+
+################################################################################
+# cyrus sasl
+################################################################################
+
+
+# rough howto:
+# - copy files from original source
+# - use config.h from libetpan/build-android/dependencies/cyrus-sasl/build-android/include
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE := sasl2
+
+LOCAL_C_INCLUDES += \
+ $(LOCAL_PATH)/cyrussasl/include \
+ $(LOCAL_PATH)/cyrussasl/include/sasl \
+ $(LOCAL_PATH)/cyrussasl/plugins \
+ $(LOCAL_PATH)/openssl/include
+LOCAL_SRC_FILES := \
+ ./cyrussasl/lib/auxprop.c \
+ ./cyrussasl/lib/canonusr.c \
+ ./cyrussasl/lib/checkpw.c \
+ ./cyrussasl/lib/client.c \
+ ./cyrussasl/lib/common.c \
+ ./cyrussasl/lib/config.c \
+ ./cyrussasl/lib/dlopen.c \
+ ./cyrussasl/lib/external.c \
+ ./cyrussasl/lib/getsubopt.c \
+ ./cyrussasl/lib/md5.c \
+ ./cyrussasl/lib/saslutil.c \
+ ./cyrussasl/lib/server.c \
+ ./cyrussasl/lib/seterror.c \
+ ./cyrussasl/lib/snprintf.c \
+ ./cyrussasl/plugins/anonymous.c \
+ ./cyrussasl/plugins/anonymous_init.c \
+ ./cyrussasl/plugins/cram.c \
+ ./cyrussasl/plugins/crammd5_init.c \
+ ./cyrussasl/plugins/digestmd5.c \
+ ./cyrussasl/plugins/digestmd5_init.c \
+ ./cyrussasl/plugins/login.c \
+ ./cyrussasl/plugins/login_init.c \
+ ./cyrussasl/plugins/ntlm.c \
+ ./cyrussasl/plugins/ntlm_init.c \
+ ./cyrussasl/plugins/otp.c \
+ ./cyrussasl/plugins/otp_init.c \
+ ./cyrussasl/plugins/passdss.c \
+ ./cyrussasl/plugins/passdss_init.c \
+ ./cyrussasl/plugins/plain.c \
+ ./cyrussasl/plugins/plain_init.c \
+ ./cyrussasl/plugins/plugin_common.c \
+ ./cyrussasl/plugins/scram.c \
+ ./cyrussasl/plugins/scram_init.c \
+ ./cyrussasl/plugins/srp.c \
+ ./cyrussasl/plugins/srp_init.c
+
+include $(BUILD_STATIC_LIBRARY)
+
+################################################################################
+# sqlite
+################################################################################
+
+include $(CLEAR_VARS)
+ifeq ($(TARGET_ARCH_ABI),armeabi)
+ LOCAL_ARM_MODE := thumb
+else
+ LOCAL_ARM_MODE := arm
+endif
+LOCAL_MODULE := sqlite
+LOCAL_CFLAGS := -w -std=c11 -Os -DNULL=0 -DSOCKLEN_T=socklen_t -DLOCALE_NOT_USED -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64
+LOCAL_CFLAGS += -DANDROID_NDK -DDISABLE_IMPORTGL -fno-strict-aliasing -fprefetch-loop-arrays -DAVOID_TABLES -DANDROID_TILE_BASED_DECODE -DANDROID_ARMV6_IDCT -DHAVE_STRCHRNUL=0
+LOCAL_CFLAGS += -DSQLITE_OMIT_LOAD_EXTENSION
+LOCAL_CFLAGS += -DSQLITE_MAX_MMAP_SIZE=0 -DSQLITE_OMIT_WAL # HACK: the defines are used to skip the pointer reference to mmap set in aSyscall[] - mmap seems to be a #define that cannot be used this way on Android - otherwise we get the error: 'mmap' undeclared here (not in a function)
+
+LOCAL_SRC_FILES := \
+./messenger-backend/libs/sqlite/sqlite3.c
+
+include $(BUILD_STATIC_LIBRARY)
+
+################################################################################
+# main shared library as used from Java (includes the static ones)
+################################################################################
include $(CLEAR_VARS)
LOCAL_MODULE := native-utils
-LOCAL_C_INCLUDES := $(JNI_DIR)/utils/
-LOCAL_CFLAGS += -Wall
-LOCAL_SRC_FILES := $(JNI_DIR)/utils/org_thoughtcrime_securesms_util_FileUtils.cpp
+LOCAL_C_INCLUDES := $(JNI_DIR)/utils/ \
+$(JNI_DIR)/openssl/include \
+$(JNI_DIR)/messenger-backend/libs/libetpan/include \
+$(JNI_DIR)/messenger-backend/libs/netpgp/include \
+$(JNI_DIR)/messenger-backend/libs/sqlite
+
+LOCAL_LDLIBS := -ljnigraphics -llog -lz -latomic
+LOCAL_STATIC_LIBRARIES := etpan sasl2 sqlite crypto libiconv
+# if you get "undefined reference" errors, the reason for this may be the _order_! Eg. libiconv as the first library does not work!
+# "breakpad" was placed after "crypto", NativeLoader.cpp after mrwrapper.c
+
+LOCAL_CFLAGS := -w -Os -DNULL=0 -DSOCKLEN_T=socklen_t -DLOCALE_NOT_USED -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64
+LOCAL_CFLAGS += -Drestrict='' -D__EMX__ -DOPUS_BUILD -DFIXED_POINT -DUSE_ALLOCA -DHAVE_LRINT -DHAVE_LRINTF -fno-math-errno
+LOCAL_CFLAGS += -DANDROID_NDK -DDISABLE_IMPORTGL -fno-strict-aliasing -fprefetch-loop-arrays -DAVOID_TABLES -DANDROID_TILE_BASED_DECODE -DANDROID_ARMV6_IDCT -ffast-math -D__STDC_CONSTANT_MACROS
+
+LOCAL_SRC_FILES := \
+$(JNI_DIR)/utils/org_thoughtcrime_securesms_util_FileUtils.cpp \
+$(JNI_DIR)/messenger-backend/libs/netpgp/src/compress.c \
+$(JNI_DIR)/messenger-backend/libs/netpgp/src/create.c \
+$(JNI_DIR)/messenger-backend/libs/netpgp/src/crypto.c \
+$(JNI_DIR)/messenger-backend/libs/netpgp/src/keyring.c \
+$(JNI_DIR)/messenger-backend/libs/netpgp/src/misc.c \
+$(JNI_DIR)/messenger-backend/libs/netpgp/src/openssl_crypto.c \
+$(JNI_DIR)/messenger-backend/libs/netpgp/src/packet-parse.c \
+$(JNI_DIR)/messenger-backend/libs/netpgp/src/packet-show.c \
+$(JNI_DIR)/messenger-backend/libs/netpgp/src/reader.c \
+$(JNI_DIR)/messenger-backend/libs/netpgp/src/signature.c \
+$(JNI_DIR)/messenger-backend/libs/netpgp/src/symmetric.c \
+$(JNI_DIR)/messenger-backend/libs/netpgp/src/validate.c \
+$(JNI_DIR)/messenger-backend/libs/netpgp/src/writer.c \
+$(JNI_DIR)/messenger-backend/src/dc_aheader.c \
+$(JNI_DIR)/messenger-backend/src/dc_apeerstate.c \
+$(JNI_DIR)/messenger-backend/src/dc_array.c \
+$(JNI_DIR)/messenger-backend/src/dc_chat.c \
+$(JNI_DIR)/messenger-backend/src/dc_chatlist.c \
+$(JNI_DIR)/messenger-backend/src/dc_contact.c \
+$(JNI_DIR)/messenger-backend/src/dc_dehtml.c \
+$(JNI_DIR)/messenger-backend/src/dc_hash.c \
+$(JNI_DIR)/messenger-backend/src/dc_imap.c \
+$(JNI_DIR)/messenger-backend/src/dc_job.c \
+$(JNI_DIR)/messenger-backend/src/dc_key.c \
+$(JNI_DIR)/messenger-backend/src/dc_keyring.c \
+$(JNI_DIR)/messenger-backend/src/dc_loginparam.c \
+$(JNI_DIR)/messenger-backend/src/dc_lot.c \
+$(JNI_DIR)/messenger-backend/src/dc_context.c \
+$(JNI_DIR)/messenger-backend/src/dc_configure.c \
+$(JNI_DIR)/messenger-backend/src/dc_e2ee.c \
+$(JNI_DIR)/messenger-backend/src/dc_imex.c \
+$(JNI_DIR)/messenger-backend/src/dc_keyhistory.c \
+$(JNI_DIR)/messenger-backend/src/dc_log.c \
+$(JNI_DIR)/messenger-backend/src/dc_openssl.c \
+$(JNI_DIR)/messenger-backend/src/dc_qr.c \
+$(JNI_DIR)/messenger-backend/src/dc_receive_imf.c \
+$(JNI_DIR)/messenger-backend/src/dc_securejoin.c \
+$(JNI_DIR)/messenger-backend/src/dc_mimefactory.c \
+$(JNI_DIR)/messenger-backend/src/dc_mimeparser.c \
+$(JNI_DIR)/messenger-backend/src/dc_msg.c \
+$(JNI_DIR)/messenger-backend/src/dc_param.c \
+$(JNI_DIR)/messenger-backend/src/dc_pgp.c \
+$(JNI_DIR)/messenger-backend/src/dc_saxparser.c \
+$(JNI_DIR)/messenger-backend/src/dc_simplify.c \
+$(JNI_DIR)/messenger-backend/src/dc_smtp.c \
+$(JNI_DIR)/messenger-backend/src/dc_sqlite3.c \
+$(JNI_DIR)/messenger-backend/src/dc_stock.c \
+$(JNI_DIR)/messenger-backend/src/dc_strbuilder.c \
+$(JNI_DIR)/messenger-backend/src/dc_strencode.c \
+$(JNI_DIR)/messenger-backend/src/dc_token.c \
+$(JNI_DIR)/messenger-backend/src/dc_tools.c \
+$(JNI_DIR)/messenger-backend/src/dc_uudecode.c \
+$(JNI_DIR)/messenger-backend/cmdline/cmdline.c \
+$(JNI_DIR)/mrwrapper.c
-include $(BUILD_SHARED_LIBRARY)
\ No newline at end of file
+include $(BUILD_SHARED_LIBRARY)
diff --git a/jni/mrjnimain.c b/jni/mrjnimain.c
new file mode 100644
index 0000000..354dbab
--- /dev/null
+++ b/jni/mrjnimain.c
@@ -0,0 +1,77 @@
+/*******************************************************************************
+ *
+ * Delta Chat Android
+ * (C) 2013-2016 Nikolai Kudashov
+ * (C) 2017 Björn Petersen
+ * Contact: r10s@b44t.com, http://b44t.com
+ *
+ * This program is free software: you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see http://www.gnu.org/licenses/ .
+ *
+ ******************************************************************************/
+
+
+#include <stdio.h>
+#include <string.h>
+#include <jni.h>
+#include <sys/types.h>
+#include <inttypes.h>
+#include <stdlib.h>
+#include <openssl/aes.h>
+#include <unistd.h>
+#include "mrjnimain.h"
+#include "image.h"
+#include "gifvideo.h"
+
+
+jint JNI_OnLoad(JavaVM *vm, void *reserved) { /* this function is called automatically by the JNI when the library gets loaded */
+ JNIEnv *env = 0;
+ srand(time(NULL));
+
+ __android_log_print(ANDROID_LOG_INFO, "DeltaChat", "JNI_OnLoad() ..."); /* please note, that __android_log_print() may not work (eg. on LG X Cam), however, we don't have an option here. */
+
+ if ((*vm)->GetEnv(vm, (void **) &env, JNI_VERSION_1_6) != JNI_OK) {
+ return -1;
+ }
+
+ /*if (imageOnJNILoad(vm, reserved, env) == -1) {
+ return -1;
+ }
+
+ if (gifvideoOnJNILoad(vm, env) == -1) {
+ return -1;
+ }*/
+
+ __android_log_print(ANDROID_LOG_INFO, "DeltaChat", "JNI_OnLoad() succeeded.");
+
+ return JNI_VERSION_1_6;
+}
+
+
+void JNI_OnUnload(JavaVM *vm, void *reserved) {
+}
+
+
+/*JNIEXPORT jstring Java_com_b44t_messenger_Utilities_readlink(JNIEnv *env, jclass class, jstring path) {
+ static char buf[1000];
+ char *fileName = (*env)->GetStringUTFChars(env, path, NULL);
+ int result = readlink(fileName, buf, 999);
+ jstring value = 0;
+ if (result != -1) {
+ buf[result] = '\0';
+ value = (*env)->NewStringUTF(env, buf);
+ }
+ (*env)->ReleaseStringUTFChars(env, path, fileName);
+ return value;
+}
+*/
diff --git a/jni/mrjnimain.h b/jni/mrjnimain.h
new file mode 100644
index 0000000..331f30a
--- /dev/null
+++ b/jni/mrjnimain.h
@@ -0,0 +1,54 @@
+/*******************************************************************************
+ *
+ * Delta Chat Android
+ * (C) 2013-2016 Nikolai Kudashov
+ * (C) 2017 Björn Petersen
+ * Contact: r10s@b44t.com, http://b44t.com
+ *
+ * This program is free software: you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see http://www.gnu.org/licenses/ .
+ *
+ ******************************************************************************/
+
+
+#ifndef __MRJNIMAIN_H__
+#define __MRJNIMAIN_H__
+
+
+#include <android/log.h>
+#include <jni.h>
+
+
+#define LOG_TAG "DeltaChat"
+#ifndef LOG_DISABLED
+#define LOGI(...) __android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__)
+#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__)
+#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__)
+#define LOGV(...) __android_log_print(ANDROID_LOG_VERBOSE, LOG_TAG, __VA_ARGS__)
+#else
+#define LOGI(...)
+#define LOGD(...)
+#define LOGE(...)
+#define LOGV(...)
+#endif
+
+#ifndef max
+#define max(x, y) ((x) > (y)) ? (x) : (y)
+#endif
+#ifndef min
+#define min(x, y) ((x) < (y)) ? (x) : (y)
+#endif
+
+
+#endif /* __MRJNIMAIN_H__*/
+
diff --git a/jni/mrwrapper.c b/jni/mrwrapper.c
new file mode 100644
index 0000000..cfa2ac9
--- /dev/null
+++ b/jni/mrwrapper.c
@@ -0,0 +1,1299 @@
+/*******************************************************************************
+ *
+ * Delta Chat Android
+ * (C) 2017 Björn Petersen
+ * Contact: r10s@b44t.com, http://b44t.com
+ *
+ * This program is free software: you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see http://www.gnu.org/licenses/ .
+ *
+ *******************************************************************************
+ *
+ * File: mrwrapper.c
+ * Purpose: The C part of the Java<->C Wrapper, see also MrMailbox.java
+ *
+ ******************************************************************************/
+
+
+#include <jni.h>
+#include <android/log.h>
+#include "messenger-backend/src/deltachat.h"
+#include "messenger-backend/cmdline/cmdline.h"
+
+
+#define CHAR_REF(a) \
+ const char* a##Ptr = (a)? (*env)->GetStringUTFChars(env, (a), 0) : NULL; // passing a NULL-jstring results in a NULL-ptr - this is needed by functions using eg. NULL for "delete"
+
+#define CHAR_UNREF(a) \
+ if(a) { (*env)->ReleaseStringUTFChars(env, (a), a##Ptr); }
+
+#define JSTRING_NEW(a) jstring_new__(env, (a))
+static jstring jstring_new__(JNIEnv* env, const char* a)
+{
+ if( a==NULL || a[0]==0 ) {
+ return (*env)->NewStringUTF(env, "");
+ }
+
+ /* for non-empty strings, do not use NewStringUTF() as this is buggy on some Android versions.
+ Instead, create the string using `new String(ByteArray, "UTF-8);` which seems to be programmed more properly.
+ (eg. on KitKat a simple "SMILING FACE WITH SMILING EYES" (U+1F60A, UTF-8 F0 9F 98 8A) will let the app crash, reporting 0xF0 is a bad UTF-8 start,
+ see http://stackoverflow.com/questions/12127817/android-ics-4-0-ndk-newstringutf-is-crashing-down-the-app ) */
+ static jclass s_strCls = NULL;
+ static jmethodID s_strCtor = NULL;
+ static jclass s_strEncode = NULL;
+ if( s_strCls==NULL ) {
+ s_strCls = (*env)->NewGlobalRef(env, (*env)->FindClass(env, "java/lang/String"));
+ s_strCtor = (*env)->GetMethodID(env, s_strCls, "<init>", "([BLjava/lang/String;)V");
+ s_strEncode = (*env)->NewGlobalRef(env, (*env)->NewStringUTF(env, "UTF-8"));
+ }
+
+ int a_bytes = strlen(a);
+ jbyteArray array = (*env)->NewByteArray(env, a_bytes);
+ (*env)->SetByteArrayRegion(env, array, 0, a_bytes, a);
+ jstring ret = (jstring) (*env)->NewObject(env, s_strCls, s_strCtor, array, s_strEncode);
+ (*env)->DeleteLocalRef(env, array); /* we have to delete the reference as it is not returned to Java, AFAIK */
+
+ return ret;
+}
+
+
+/* global stuff */
+
+static JavaVM* s_jvm = NULL;
+static jclass s_MrMailbox_class = NULL;
+static jmethodID s_MrCallback_methodID = NULL;
+static int s_global_init_done = 0;
+
+
+static void s_init_globals(JNIEnv *env, jclass MrMailbox_class)
+{
+ /* make sure, the intialisation is done only once */
+ if( s_global_init_done ) { return; }
+ s_global_init_done = 1;
+
+ /* prepare calling back a Java function */
+ __android_log_print(ANDROID_LOG_INFO, "DeltaChat", "JNI: s_init_globals()..."); /* low-level logging, dc_log_*() may not be yet available. However, please note that __android_log_print() may not work (eg. on LG X Cam) */
+
+ (*env)->GetJavaVM(env, &s_jvm); /* JNIEnv cannot be shared between threads, so we share the JavaVM object */
+ s_MrMailbox_class = (*env)->NewGlobalRef(env, MrMailbox_class);
+ s_MrCallback_methodID = (*env)->GetStaticMethodID(env, MrMailbox_class, "MrCallback","(IJJ)J" /*signature as "(param)ret" with I=int, J=long*/ );
+}
+
+
+/* tools */
+
+static jintArray dc_array2jintArray_n_unref(JNIEnv *env, dc_array_t* ca)
+{
+ /* takes a C-array of type dc_array_t and converts it it a Java-Array.
+ then the C-array is freed and the Java-Array is returned. */
+ int i, icnt = ca? dc_array_get_cnt(ca) : 0;
+ jintArray ret = (*env)->NewIntArray(env, icnt); if (ret == NULL) { return NULL; }
+
+ if( ca ) {
+ if( icnt ) {
+ uintptr_t* ca_data = dc_array_get_raw(ca);
+ if( sizeof(uintptr_t)==sizeof(jint) ) {
+ (*env)->SetIntArrayRegion(env, ret, 0, icnt, (jint*)ca_data);
+ }
+ else {
+ jint* temp = calloc(icnt, sizeof(jint));
+ for( i = 0; i < icnt; i++ ) {
+ temp[i] = (jint)ca_data[i];
+ }
+ (*env)->SetIntArrayRegion(env, ret, 0, icnt, temp);
+ free(temp);
+ }
+ }
+ dc_array_unref(ca);
+ }
+
+ return ret;
+}
+
+
+static uint32_t* jintArray2uint32Pointer(JNIEnv* env, jintArray ja, int* ret_icnt)
+{
+ /* takes a Java-Array and converts it to a C-Array. */
+ uint32_t* ret = NULL;
+ if( ret_icnt ) { *ret_icnt = 0; }
+
+ if( env && ja && ret_icnt )
+ {
+ int i, icnt = (*env)->GetArrayLength(env, ja);
+ if( icnt > 0 )
+ {
+ const jint* temp = (*env)->GetIntArrayElements(env, ja, NULL);
+ if( temp )
+ {
+ ret = calloc(icnt, sizeof(uint32_t));
+ if( ret )
+ {
+ for( i = 0; i < icnt; i++ ) {
+ ret[i] = (uint32_t)temp[i];
+ }
+ *ret_icnt = icnt;
+ }
+ (*env)->ReleaseIntArrayElements(env, ja, temp, 0);
+ }
+ }
+ }
+
+ return ret;
+}
+
+
+/*******************************************************************************
+ * MrMailbox
+ ******************************************************************************/
+
+
+static dc_context_t* get_dc_context(JNIEnv *env, jclass cls)
+{
+ static jfieldID fid = 0;
+ if( fid == 0 ) {
+ fid = (*env)->GetStaticFieldID(env, cls, "m_hMailbox", "J" /*Signature, J=long*/);
+ }
+ if( fid ) {
+ return (dc_context_t*)(*env)->GetStaticLongField(env, cls, fid);
+ }
+ return NULL;
+}
+
+
+/* MrMailbox - new/delete */
+
+static uintptr_t s_context_callback_(dc_context_t* context, int event, uintptr_t data1, uintptr_t data2)
+{
+ jlong l;
+ JNIEnv* env;
+
+ #if 0 /* -- __android_log_print() does not log eg. on LG X Cam - but Javas Log.i() etc. do. So, we do not optimize these calls and just use the Java logging. */
+ if( event==DC_EVENT_INFO || event==DC_EVENT_WARNING ) {
+ __android_log_print(event==DC_EVENT_INFO? ANDROID_LOG_INFO : ANDROID_LOG_WARN, "DeltaChat", "%s", (char*)data2); /* on problems, add `-llog` to `Android.mk` */
+ return 0; /* speed up things for info/warning */
+ }
+ else if( event == DC_EVENT_ERROR ) {
+ __android_log_print(ANDROID_LOG_ERROR, "DeltaChat", "%s", (char*)data2);
+ /* errors are also forwarded to Java to show them in a bubble or so */
+ }
+ #endif
+
+ if( s_jvm==NULL || s_MrMailbox_class==NULL || s_MrCallback_methodID==NULL ) {
+ return 0; /* may happen on startup */
+ }
+
+ (*s_jvm)->GetEnv(s_jvm, &env, JNI_VERSION_1_6); /* as this function may be called from _any_ thread, we cannot use a static pointer to JNIEnv */
+ if( env==NULL ) {
+ return 0; /* may happen on startup */
+ }
+
+ l = (*env)->CallStaticLongMethod(env, s_MrMailbox_class, s_MrCallback_methodID, (jint)event, (jlong)data1, (jlong)data2);
+ return (uintptr_t)l;
+}
+
+
+JNIEXPORT jlong Java_com_b44t_messenger_MrMailbox_MrMailboxNew(JNIEnv *env, jclass c)
+{
+ s_init_globals(env, c);
+ return (jlong)dc_context_new(s_context_callback_, NULL, "Android");
+}
+
+
+/* MrMailbox - open/configure/connect/fetch */
+
+JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_open(JNIEnv *env, jclass cls, jstring dbfile)
+{
+ CHAR_REF(dbfile);
+ jint ret = dc_open(get_dc_context(env, cls), dbfilePtr, NULL);
+ CHAR_UNREF(dbfile)
+ return ret;
+}
+
+
+JNIEXPORT void Java_com_b44t_messenger_MrMailbox_close(JNIEnv *env, jclass cls)
+{
+ dc_close(get_dc_context(env, cls));
+}
+
+
+JNIEXPORT jstring Java_com_b44t_messenger_MrMailbox_getBlobdir(JNIEnv *env, jclass cls)
+{
+ char* temp = dc_get_blobdir(get_dc_context(env, cls));
+ jstring ret = JSTRING_NEW(temp);
+ free(temp);
+ return ret;
+}
+
+
+JNIEXPORT void Java_com_b44t_messenger_MrMailbox_configure(JNIEnv *env, jclass cls)
+{
+ dc_configure(get_dc_context(env, cls));
+}
+
+
+JNIEXPORT void Java_com_b44t_messenger_MrMailbox_stopOngoingProcess(JNIEnv *env, jclass cls)
+{
+ dc_stop_ongoing_process(get_dc_context(env, cls));
+}
+
+
+JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_isConfigured(JNIEnv *env, jclass cls)
+{
+ return (jint)dc_is_configured(get_dc_context(env, cls));
+}
+
+
+JNIEXPORT void Java_com_b44t_messenger_MrMailbox_performJobs(JNIEnv *env, jclass cls)
+{
+ dc_perform_imap_jobs(get_dc_context(env, cls));
+}
+
+
+JNIEXPORT void Java_com_b44t_messenger_MrMailbox_idle(JNIEnv *env, jclass cls)
+{
+ dc_perform_imap_idle(get_dc_context(env, cls));
+}
+
+
+JNIEXPORT void Java_com_b44t_messenger_MrMailbox_interruptIdle(JNIEnv *env, jclass cls)
+{
+ dc_interrupt_imap_idle(get_dc_context(env, cls));
+}
+
+
+JNIEXPORT void Java_com_b44t_messenger_MrMailbox_fetch(JNIEnv *env, jclass cls)
+{
+ dc_perform_imap_fetch(get_dc_context(env, cls));
+}
+
+
+JNIEXPORT void Java_com_b44t_messenger_MrMailbox_performSmtpJobs(JNIEnv *env, jclass cls)
+{
+ dc_perform_smtp_jobs(get_dc_context(env, cls));
+}
+
+
+JNIEXPORT void Java_com_b44t_messenger_MrMailbox_performSmtpIdle(JNIEnv *env, jclass cls)
+{
+ dc_perform_smtp_idle(get_dc_context(env, cls));
+}
+
+
+JNIEXPORT void Java_com_b44t_messenger_MrMailbox_interruptSmtpIdle(JNIEnv *env, jclass cls)
+{
+ dc_interrupt_smtp_idle(get_dc_context(env, cls));
+}
+
+
+/* MrMailbox - handle contacts */
+
+JNIEXPORT jintArray Java_com_b44t_messenger_MrMailbox_getContacts(JNIEnv *env, jclass cls, jint flags, jstring query)
+{
+ CHAR_REF(query);
+ dc_array_t* ca = dc_get_contacts(get_dc_context(env, cls), flags, queryPtr);
+ CHAR_UNREF(query);
+ return dc_array2jintArray_n_unref(env, ca);
+}
+
+
+JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_getBlockedCount(JNIEnv *env, jclass cls)
+{
+ return dc_get_blocked_cnt(get_dc_context(env, cls));
+}
+
+
+JNIEXPORT jintArray Java_com_b44t_messenger_MrMailbox_getBlockedContacts(JNIEnv *env, jclass cls)
+{
+ dc_array_t* ca = dc_get_blocked_contacts(get_dc_context(env, cls));
+ return dc_array2jintArray_n_unref(env, ca);
+}
+
+
+JNIEXPORT jlong Java_com_b44t_messenger_MrMailbox_MrMailboxGetContact(JNIEnv *env, jclass c, jlong hMailbox, jint contact_id)
+{
+ return (jlong)dc_get_contact((dc_context_t*)hMailbox, contact_id);
+}
+
+
+JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_MrMailboxCreateContact(JNIEnv *env, jclass c, jlong hMailbox, jstring name, jstring addr)
+{
+ CHAR_REF(name);
+ CHAR_REF(addr);
+ jint ret = (jint)dc_create_contact((dc_context_t*)hMailbox, namePtr, addrPtr);
+ CHAR_UNREF(addr);
+ CHAR_UNREF(name);
+ return ret;
+}
+
+
+JNIEXPORT void Java_com_b44t_messenger_MrMailbox_MrMailboxBlockContact(JNIEnv *env, jclass c, jlong hMailbox, jint contact_id, jint block)
+{
+ dc_block_contact((dc_context_t*)hMailbox, contact_id, block);
+}
+
+
+JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_MrMailboxDeleteContact(JNIEnv *env, jclass c, jlong hMailbox, jint contact_id)
+{
+ return (jint)dc_delete_contact((dc_context_t*)hMailbox, contact_id);
+}
+
+
+/* MrMailbox - handle chats */
+
+JNIEXPORT jlong Java_com_b44t_messenger_MrMailbox_MrMailboxGetChatlist(JNIEnv *env, jclass c, jlong hMailbox, jint listflags, jstring query, jint queryId)
+{
+ jlong ret;
+ if( query ) {
+ CHAR_REF(query);
+ ret = (jlong)dc_get_chatlist((dc_context_t*)hMailbox, listflags, queryPtr, queryId);
+ CHAR_UNREF(query);
+ }
+ else {
+ ret = (jlong)dc_get_chatlist((dc_context_t*)hMailbox, listflags, NULL, queryId);
+ }
+ return ret;
+}
+
+
+JNIEXPORT jlong Java_com_b44t_messenger_MrMailbox_MrMailboxGetChat(JNIEnv *env, jclass c, jlong hMailbox, jint chat_id)
+{
+ return (jlong)dc_get_chat((dc_context_t*)hMailbox, chat_id);
+}
+
+
+JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_getChatIdByContactId(JNIEnv *env, jclass cls, jint contact_id)
+{
+ return (jint)dc_get_chat_id_by_contact_id(get_dc_context(env, cls), contact_id);
+}
+
+
+JNIEXPORT void Java_com_b44t_messenger_MrMailbox_markseenMsgs(JNIEnv *env, jclass cls, jintArray msg_ids)
+{
+ int msg_ids_cnt = 0;
+ const uint32_t* msg_ids_ptr = jintArray2uint32Pointer(env, msg_ids, &msg_ids_cnt);
+ dc_markseen_msgs(get_dc_context(env, cls), msg_ids_ptr, msg_ids_cnt);
+ free(msg_ids_ptr);
+}
+
+
+JNIEXPORT void Java_com_b44t_messenger_MrMailbox_marknoticedChat(JNIEnv *env, jclass cls, jint chat_id)
+{
+ dc_marknoticed_chat(get_dc_context(env, cls), chat_id);
+}
+
+
+JNIEXPORT void Java_com_b44t_messenger_MrMailbox_marknoticedContact(JNIEnv *env, jclass cls, jint contact_id)
+{
+ dc_marknoticed_contact(get_dc_context(env, cls), contact_id);
+}
+
+
+JNIEXPORT void Java_com_b44t_messenger_MrMailbox_archiveChat(JNIEnv *env, jclass cls, jint chat_id, jint archive)
+{
+ dc_archive_chat(get_dc_context(env, cls), chat_id, archive);
+}
+
+
+JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_createChatByContactId(JNIEnv *env, jclass cls, jint contact_id)
+{
+ return (jint)dc_create_chat_by_contact_id(get_dc_context(env, cls), contact_id);
+}
+
+
+JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_createChatByMsgId(JNIEnv *env, jclass cls, jint msg_id)
+{
+ return (jint)dc_create_chat_by_msg_id(get_dc_context(env, cls), msg_id);
+}
+
+
+JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_createGroupChat(JNIEnv *env, jclass cls, jboolean verified, jstring name)
+{
+ CHAR_REF(name);
+ jint ret = (jint)dc_create_group_chat(get_dc_context(env, cls), verified, namePtr);
+ CHAR_UNREF(name);
+ return ret;
+}
+
+
+JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_isContactInChat(JNIEnv *env, jclass cls, jint chat_id, jint contact_id)
+{
+ return (jint)dc_is_contact_in_chat(get_dc_context(env, cls), chat_id, contact_id);
+}
+
+
+JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_addContactToChat(JNIEnv *env, jclass cls, jint chat_id, jint contact_id)
+{
+ return (jint)dc_add_contact_to_chat(get_dc_context(env, cls), chat_id, contact_id);
+}
+
+
+JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_removeContactFromChat(JNIEnv *env, jclass cls, jint chat_id, jint contact_id)
+{
+ return (jint)dc_remove_contact_from_chat(get_dc_context(env, cls), chat_id, contact_id);
+}
+
+
+JNIEXPORT void Java_com_b44t_messenger_MrMailbox_setDraft(JNIEnv *env, jclass cls, jint chat_id, jstring draft /* NULL=delete */)
+{
+ CHAR_REF(draft);
+ dc_set_text_draft(get_dc_context(env, cls), chat_id, draftPtr /* NULL=delete */);
+ CHAR_UNREF(draft);
+}
+
+
+JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_setChatName(JNIEnv *env, jclass cls, jint chat_id, jstring name)
+{
+ CHAR_REF(name);
+ jint ret = (jint)dc_set_chat_name(get_dc_context(env, cls), chat_id, namePtr);
+ CHAR_UNREF(name);
+ return ret;
+}
+
+
+JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_setChatProfileImage(JNIEnv *env, jclass cls, jint chat_id, jstring image/*NULL=delete*/)
+{
+ CHAR_REF(image);
+ jint ret = (jint)dc_set_chat_profile_image(get_dc_context(env, cls), chat_id, imagePtr/*CHAR_REF() preserves NULL*/);
+ CHAR_UNREF(image);
+ return ret;
+}
+
+
+JNIEXPORT void Java_com_b44t_messenger_MrMailbox_deleteChat(JNIEnv *env, jclass cls, jint chat_id)
+{
+ dc_delete_chat(get_dc_context(env, cls), chat_id);
+}
+
+
+/* MrMailbox - handle messages */
+
+
+JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_getFreshMsgCount(JNIEnv *env, jclass cls, jint chat_id)
+{
+ return dc_get_fresh_msg_cnt(get_dc_context(env, cls), chat_id);
+}
+
+
+JNIEXPORT jlong Java_com_b44t_messenger_MrMailbox_MrMailboxGetMsg(JNIEnv *env, jclass c, jlong hMailbox, jint id)
+{
+ return (jlong)dc_get_msg((dc_context_t*)hMailbox, id);
+}
+
+
+JNIEXPORT jstring Java_com_b44t_messenger_MrMailbox_MrMailboxGetMsgInfo(JNIEnv *env, jclass c, jlong hMailbox, jint msg_id)
+{
+ char* temp = dc_get_msg_info((dc_context_t*)hMailbox, msg_id);
+ jstring ret = JSTRING_NEW(temp);
+ free(temp);
+ return ret;
+}
+
+
+JNIEXPORT void Java_com_b44t_messenger_MrMailbox_deleteMsgs(JNIEnv *env, jclass cls, jintArray msg_ids)
+{
+ int msg_ids_cnt = 0;
+ const uint32_t* msg_ids_ptr = jintArray2uint32Pointer(env, msg_ids, &msg_ids_cnt);
+ dc_delete_msgs(get_dc_context(env, cls), msg_ids_ptr, msg_ids_cnt);
+ free(msg_ids_ptr);
+}
+
+
+JNIEXPORT void Java_com_b44t_messenger_MrMailbox_forwardMsgs(JNIEnv *env, jclass cls, jintArray msg_ids, jint chat_id)
+{
+ int msg_ids_cnt = 0;
+ const uint32_t* msg_ids_ptr = jintArray2uint32Pointer(env, msg_ids, &msg_ids_cnt);
+ dc_forward_msgs(get_dc_context(env, cls), msg_ids_ptr, msg_ids_cnt, chat_id);
+ free(msg_ids_ptr);
+}
+
+
+JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_sendTextMsg(JNIEnv *env, jclass cls, jint chat_id, jstring text)
+{
+ CHAR_REF(text);
+ jint msg_id = dc_send_text_msg(get_dc_context(env, cls), chat_id, textPtr);
+ CHAR_UNREF(text);
+ return msg_id;
+}
+
+
+JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_sendVcardMsg(JNIEnv *env, jobject obj, jint chat_id, jint contact_id)
+{
+ return dc_send_vcard_msg(get_dc_context(env, obj), chat_id, contact_id);
+}
+
+
+JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_sendMediaMsg(JNIEnv *env, jclass cls, jint chat_id, jint type, jstring file, jstring mime, jint w, jint h, jint ms, jstring author, jstring trackname)
+{
+ jint msg_id = 0;
+ CHAR_REF(file);
+ CHAR_REF(mime);
+ CHAR_REF(author);
+ CHAR_REF(trackname);
+ switch( type ) {
+ case DC_MSG_IMAGE: msg_id = (jint)dc_send_image_msg(get_dc_context(env, cls), chat_id, filePtr, mimePtr, w, h); break;
+ case DC_MSG_VIDEO: msg_id = (jint)dc_send_video_msg(get_dc_context(env, cls), chat_id, filePtr, mimePtr, w, h, ms); break;
+ case DC_MSG_VOICE: msg_id = (jint)dc_send_voice_msg(get_dc_context(env, cls), chat_id, filePtr, mimePtr, ms); break;
+ case DC_MSG_AUDIO: msg_id = (jint)dc_send_audio_msg(get_dc_context(env, cls), chat_id, filePtr, mimePtr, ms, authorPtr, tracknamePtr); break;
+ default: msg_id = (jint)dc_send_file_msg (get_dc_context(env, cls), chat_id, filePtr, mimePtr); break;
+ }
+ CHAR_UNREF(trackname);
+ CHAR_UNREF(author);
+ CHAR_UNREF(mime);
+ CHAR_UNREF(file);
+ return msg_id;
+}
+
+
+/* MrMailbox - handle config */
+
+JNIEXPORT void Java_com_b44t_messenger_MrMailbox_setConfig(JNIEnv *env, jclass cls, jstring key, jstring value /*may be NULL*/)
+{
+ CHAR_REF(key);
+ CHAR_REF(value);
+ dc_set_config(get_dc_context(env, cls), keyPtr, valuePtr /*is NULL if value is NULL, CHAR_REF() handles this*/);
+ CHAR_UNREF(key);
+ CHAR_UNREF(value);
+}
+
+
+JNIEXPORT void Java_com_b44t_messenger_MrMailbox_setConfigInt(JNIEnv *env, jclass cls, jstring key, jint value)
+{
+ CHAR_REF(key);
+ dc_set_config_int(get_dc_context(env, cls), keyPtr, value);
+ CHAR_UNREF(key);
+}
+
+
+JNIEXPORT jstring Java_com_b44t_messenger_MrMailbox_getConfig(JNIEnv *env, jclass cls, jstring key, jstring def/*may be NULL*/)
+{
+ CHAR_REF(key);
+ CHAR_REF(def);
+ char* temp = dc_get_config(get_dc_context(env, cls), keyPtr, defPtr /*is NULL if value is NULL, CHAR_REF() handles this*/);
+ jstring ret = NULL;
+ if( temp ) {
+ ret = JSTRING_NEW(temp);
+ }
+ free(temp);
+ CHAR_UNREF(key);
+ CHAR_UNREF(def);
+ return ret; /* returns NULL only if key is unset and "def" is NULL */
+}
+
+
+JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_getConfigInt(JNIEnv *env, jclass cls, jstring key, jint def)
+{
+ CHAR_REF(key);
+ jint ret = dc_get_config_int(get_dc_context(env, cls), keyPtr, def);
+ CHAR_UNREF(key);
+ return ret;
+}
+
+
+/* MrMailbox - out-of-band verification */
+
+JNIEXPORT jlong Java_com_b44t_messenger_MrMailbox_checkQrCPtr(JNIEnv *env, jclass cls, jstring qr)
+{
+ CHAR_REF(qr);
+ jlong ret = (jlong)dc_check_qr(get_dc_context(env, cls), qrPtr);
+ CHAR_UNREF(qr);
+ return ret;
+}
+
+JNIEXPORT jstring Java_com_b44t_messenger_MrMailbox_getSecurejoinQr(JNIEnv *env, jclass cls, jint chat_id)
+{
+ char* temp = dc_get_securejoin_qr(get_dc_context(env, cls), chat_id);
+ jstring ret = JSTRING_NEW(temp);
+ free(temp);
+ return ret;
+}
+
+JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_joinSecurejoin(JNIEnv *env, jclass cls, jstring qr)
+{
+ CHAR_REF(qr);
+ jint ret = dc_join_securejoin(get_dc_context(env, cls), qrPtr);
+ CHAR_UNREF(qr);
+ return ret;
+}
+
+
+/* MrMailbox - misc. */
+
+JNIEXPORT jstring Java_com_b44t_messenger_MrMailbox_getInfo(JNIEnv *env, jclass cls)
+{
+ char* temp = dc_get_info(get_dc_context(env, cls));
+ jstring ret = JSTRING_NEW(temp);
+ free(temp);
+ return ret;
+}
+
+
+JNIEXPORT jstring Java_com_b44t_messenger_MrMailbox_getContactEncrInfo(JNIEnv *env, jclass cls, jint contact_id)
+{
+ char* temp = dc_get_contact_encrinfo(get_dc_context(env, cls), contact_id);
+ jstring ret = JSTRING_NEW(temp);
+ free(temp);
+ return ret;
+}
+
+
+JNIEXPORT jstring Java_com_b44t_messenger_MrMailbox_cmdline(JNIEnv *env, jclass cls, jstring cmd)
+{
+ CHAR_REF(cmd);
+ char* temp = dc_cmdline(get_dc_context(env, cls), cmdPtr);
+ jstring ret = JSTRING_NEW(temp);
+ free(temp);
+ CHAR_UNREF(cmd);
+ return ret;
+}
+
+
+JNIEXPORT jstring Java_com_b44t_messenger_MrMailbox_initiateKeyTransfer(JNIEnv *env, jclass cls)
+{
+ jstring setup_code = NULL;
+ char* temp = dc_initiate_key_transfer(get_dc_context(env, cls));
+ if( temp ) {
+ setup_code = JSTRING_NEW(temp);
+ free(temp);
+ }
+ return setup_code;
+}
+
+
+JNIEXPORT jboolean Java_com_b44t_messenger_MrMailbox_continueKeyTransfer(JNIEnv *env, jclass cls, jint msg_id, jstring setupCode)
+{
+ CHAR_REF(setupCode);
+ jboolean ret = dc_continue_key_transfer(get_dc_context(env, cls), msg_id, setupCodePtr);
+ CHAR_UNREF(setupCode);
+ return ret;
+}
+
+
+JNIEXPORT void Java_com_b44t_messenger_MrMailbox_imex(JNIEnv *env, jclass cls, jint what, jstring dir)
+{
+ CHAR_REF(dir);
+ dc_imex(get_dc_context(env, cls), what, dirPtr, "");
+ CHAR_UNREF(dir);
+}
+
+
+JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_checkPassword(JNIEnv *env, jclass cls, jstring pw)
+{
+ CHAR_REF(pw);
+ jint r = dc_check_password(get_dc_context(env, cls), pwPtr);
+ CHAR_UNREF(pw);
+ return r;
+}
+
+
+JNIEXPORT jstring Java_com_b44t_messenger_MrMailbox_imexHasBackup(JNIEnv *env, jclass cls, jstring dir)
+{
+ CHAR_REF(dir);
+ jstring ret = NULL;
+ char* temp = dc_imex_has_backup(get_dc_context(env, cls), dirPtr);
+ if( temp ) {
+ ret = JSTRING_NEW(temp);
+ free(temp);
+ }
+ CHAR_UNREF(dir);
+ return ret; /* may be NULL! */
+}
+
+
+JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_MrMailboxAddAddressBook(JNIEnv *env, jclass c, jlong hMailbox, jstring adrbook)
+{
+ CHAR_REF(adrbook);
+ int modify_count = dc_add_address_book((dc_context_t*)hMailbox, adrbookPtr);
+ CHAR_UNREF(adrbook);
+ return modify_count;
+}
+
+
+
+/*******************************************************************************
+ * MrChatlist
+ ******************************************************************************/
+
+
+JNIEXPORT void Java_com_b44t_messenger_MrChatlist_MrChatlistUnref(JNIEnv *env, jclass c, jlong hChatlist)
+{
+ dc_chatlist_unref((dc_chatlist_t*)hChatlist);
+}
+
+
+JNIEXPORT jint Java_com_b44t_messenger_MrChatlist_MrChatlistGetCnt(JNIEnv *env, jclass c, jlong hChatlist)
+{
+ return dc_chatlist_get_cnt((dc_chatlist_t*)hChatlist);
+}
+
+
+JNIEXPORT jlong Java_com_b44t_messenger_MrChatlist_MrChatlistGetChatByIndex(JNIEnv *env, jclass c, jlong hChatlist, jint index)
+{
+ dc_chatlist_t* chatlist = (dc_chatlist_t*)hChatlist;
+ return (jlong)dc_get_chat(dc_chatlist_get_context(chatlist), dc_chatlist_get_chat_id(chatlist, index));
+}
+
+
+JNIEXPORT jlong Java_com_b44t_messenger_MrChatlist_MrChatlistGetMsgByIndex(JNIEnv *env, jclass c, jlong hChatlist, jint index)
+{
+ dc_chatlist_t* chatlist = (dc_chatlist_t*)hChatlist;
+ return (jlong)dc_get_msg(dc_chatlist_get_context(chatlist), dc_chatlist_get_msg_id(chatlist, index));
+}
+
+
+JNIEXPORT jlong Java_com_b44t_messenger_MrChatlist_MrChatlistGetSummaryByIndex(JNIEnv *env, jclass c, jlong hChatlist, jint index, jlong hChat)
+{
+ return (jlong)dc_chatlist_get_summary((dc_chatlist_t*)hChatlist, index, (dc_chat_t*)hChat);
+}
+
+
+/*******************************************************************************
+ * MrChat
+ ******************************************************************************/
+
+
+static dc_chat_t* get_dc_chat(JNIEnv *env, jobject obj)
+{
+ static jfieldID fid = 0;
+ if( fid == 0 ) {
+ jclass cls = (*env)->GetObjectClass(env, obj);
+ fid = (*env)->GetFieldID(env, cls, "m_hChat", "J" /*Signature, J=long*/);
+ }
+ if( fid ) {
+ return (dc_chat_t*)(*env)->GetLongField(env, obj, fid);
+ }
+ return NULL;
+}
+
+
+JNIEXPORT void Java_com_b44t_messenger_MrChat_MrChatUnref(JNIEnv *env, jclass c, jlong hChat)
+{
+ dc_chat_unref((dc_chat_t*)hChat);
+}
+
+
+JNIEXPORT jint Java_com_b44t_messenger_MrChat_getId(JNIEnv *env, jobject obj)
+{
+ return dc_chat_get_id(get_dc_chat(env, obj));
+}
+
+
+JNIEXPORT jboolean Java_com_b44t_messenger_MrChat_isGroup(JNIEnv *env, jobject obj)
+{
+ int chat_type = dc_chat_get_type(get_dc_chat(env, obj));
+ return (chat_type==DC_CHAT_TYPE_GROUP || chat_type==DC_CHAT_TYPE_VERIFIED_GROUP);
+}
+
+
+JNIEXPORT jint Java_com_b44t_messenger_MrChat_getArchived(JNIEnv *env, jobject obj)
+{
+ return dc_chat_get_archived(get_dc_chat(env, obj));
+}
+
+
+JNIEXPORT jstring Java_com_b44t_messenger_MrChat_getName(JNIEnv *env, jobject obj)
+{
+ const char* temp = dc_chat_get_name(get_dc_chat(env, obj));
+ jstring ret = JSTRING_NEW(temp);
+ free(temp);
+ return ret;
+}
+
+
+JNIEXPORT jstring Java_com_b44t_messenger_MrChat_getSubtitle(JNIEnv *env, jobject obj)
+{
+ const char* temp = dc_chat_get_subtitle(get_dc_chat(env, obj));
+ jstring ret = JSTRING_NEW(temp);
+ free(temp);
+ return ret;
+}
+
+
+JNIEXPORT jstring Java_com_b44t_messenger_MrChat_getProfileImage(JNIEnv *env, jobject obj)
+{
+ const char* temp = dc_chat_get_profile_image(get_dc_chat(env, obj));
+ jstring ret = JSTRING_NEW(temp);
+ free(temp);
+ return ret;
+}
+
+
+JNIEXPORT jboolean Java_com_b44t_messenger_MrChat_isUnpromoted(JNIEnv *env, jobject obj)
+{
+ return dc_chat_is_unpromoted(get_dc_chat(env, obj)) != 0;
+}
+
+
+JNIEXPORT jboolean Java_com_b44t_messenger_MrChat_isSelfTalk(JNIEnv *env, jobject obj)
+{
+ return dc_chat_is_self_talk(get_dc_chat(env, obj)) != 0;
+}
+
+
+JNIEXPORT jboolean Java_com_b44t_messenger_MrChat_isVerified(JNIEnv *env, jobject obj)
+{
+ return dc_chat_is_verified(get_dc_chat(env, obj)) != 0;
+}
+
+
+JNIEXPORT jstring Java_com_b44t_messenger_MrChat_getDraft(JNIEnv *env, jobject obj) /* returns NULL for "no draft" */
+{
+ const char* temp = dc_chat_get_text_draft(get_dc_chat(env, obj));
+ jstring ret = temp? JSTRING_NEW(temp) : NULL;
+ free(temp);
+ return ret;
+}
+
+
+JNIEXPORT jlong Java_com_b44t_messenger_MrChat_getDraftTimestamp(JNIEnv *env, jobject obj)
+{
+ return (jlong)dc_chat_get_draft_timestamp(get_dc_chat(env, obj));
+}
+
+
+JNIEXPORT jintArray Java_com_b44t_messenger_MrMailbox_getChatMedia(JNIEnv *env, jclass cls, jint chat_id, jint msg_type, jint or_msg_type)
+{
+ dc_array_t* ca = dc_get_chat_media(get_dc_context(env, cls), chat_id, msg_type, or_msg_type);
+ return dc_array2jintArray_n_unref(env, ca);
+}
+
+
+JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_getNextMedia(JNIEnv *env, jclass cls, jint msg_id, jint dir)
+{
+ return dc_get_next_media(get_dc_context(env, cls), msg_id, dir);
+}
+
+
+JNIEXPORT jintArray Java_com_b44t_messenger_MrMailbox_getChatMsgs(JNIEnv *env, jclass cls, jint chat_id, jint flags, jint marker1before)
+{
+ dc_array_t* ca = dc_get_chat_msgs(get_dc_context(env, cls), chat_id, flags, marker1before);
+ return dc_array2jintArray_n_unref(env, ca);
+}
+
+
+JNIEXPORT jintArray Java_com_b44t_messenger_MrMailbox_searchMsgs(JNIEnv *env, jclass cls, jint chat_id, jstring query)
+{
+ CHAR_REF(query);
+ dc_array_t* ca = dc_search_msgs(get_dc_context(env, cls), chat_id, queryPtr);
+ CHAR_UNREF(query);
+ return dc_array2jintArray_n_unref(env, ca);
+}
+
+
+JNIEXPORT jintArray Java_com_b44t_messenger_MrMailbox_getFreshMsgs(JNIEnv *env, jclass cls)
+{
+ dc_array_t* ca = dc_get_fresh_msgs(get_dc_context(env, cls));
+ return dc_array2jintArray_n_unref(env, ca);
+}
+
+
+JNIEXPORT jintArray Java_com_b44t_messenger_MrMailbox_getChatContacts(JNIEnv *env, jclass cls, jint chat_id)
+{
+ dc_array_t* ca = dc_get_chat_contacts(get_dc_context(env, cls), chat_id);
+ return dc_array2jintArray_n_unref(env, ca);
+}
+
+
+/*******************************************************************************
+ * MrMsg
+ ******************************************************************************/
+
+
+static dc_msg_t* get_dc_msg(JNIEnv *env, jobject obj)
+{
+ static jfieldID fid = 0;
+ if( fid == 0 ) {
+ jclass cls = (*env)->GetObjectClass(env, obj);
+ fid = (*env)->GetFieldID(env, cls, "m_hMsg", "J" /*Signature, J=long*/);
+ }
+ if( fid ) {
+ return (dc_msg_t*)(*env)->GetLongField(env, obj, fid);
+ }
+ return NULL;
+}
+
+
+JNIEXPORT void Java_com_b44t_messenger_MrMsg_MrMsgUnref(JNIEnv *env, jclass c, jlong hMsg)
+{
+ dc_msg_unref((dc_msg_t*)hMsg);
+}
+
+
+JNIEXPORT jint Java_com_b44t_messenger_MrMsg_getId(JNIEnv *env, jobject obj)
+{
+ return dc_msg_get_id(get_dc_msg(env, obj));
+}
+
+
+JNIEXPORT jstring Java_com_b44t_messenger_MrMsg_getText(JNIEnv *env, jobject obj)
+{
+ char* temp = dc_msg_get_text(get_dc_msg(env, obj));
+ jstring ret = JSTRING_NEW(temp);
+ free(temp);
+ return ret;
+}
+
+
+JNIEXPORT jlong Java_com_b44t_messenger_MrMsg_getTimestamp(JNIEnv *env, jobject obj)
+{
+ return (jlong)dc_msg_get_timestamp(get_dc_msg(env, obj));
+}
+
+
+JNIEXPORT jint Java_com_b44t_messenger_MrMsg_getType(JNIEnv *env, jobject obj)
+{
+ return dc_msg_get_type(get_dc_msg(env, obj));
+}
+
+
+JNIEXPORT jint Java_com_b44t_messenger_MrMsg_getState(JNIEnv *env, jobject obj)
+{
+ return dc_msg_get_state(get_dc_msg(env, obj));
+}
+
+
+JNIEXPORT jint Java_com_b44t_messenger_MrMsg_getChatId(JNIEnv *env, jobject obj)
+{
+ return dc_msg_get_chat_id(get_dc_msg(env, obj));
+}
+
+
+JNIEXPORT jint Java_com_b44t_messenger_MrMsg_getFromId(JNIEnv *env, jobject obj)
+{
+ return dc_msg_get_from_id(get_dc_msg(env, obj));
+}
+
+
+JNIEXPORT jint Java_com_b44t_messenger_MrMsg_getWidth(JNIEnv *env, jobject obj, jint def)
+{
+ jint ret = (jint)dc_msg_get_width(get_dc_msg(env, obj));
+ return ret? ret : def;
+}
+
+
+JNIEXPORT jint Java_com_b44t_messenger_MrMsg_getHeight(JNIEnv *env, jobject obj, jint def)
+{
+ jint ret = (jint)dc_msg_get_height(get_dc_msg(env, obj));
+ return ret? ret : def;
+}
+
+
+JNIEXPORT jint Java_com_b44t_messenger_MrMsg_getDuration(JNIEnv *env, jobject obj)
+{
+ return dc_msg_get_duration(get_dc_msg(env, obj));
+}
+
+
+JNIEXPORT void Java_com_b44t_messenger_MrMsg_lateFilingMediaSize(JNIEnv *env, jobject obj, jint width, jint height, jint duration)
+{
+ dc_msg_latefiling_mediasize(get_dc_msg(env, obj), width, height, duration);
+}
+
+
+JNIEXPORT jint Java_com_b44t_messenger_MrMsg_getBytes(JNIEnv *env, jobject obj)
+{
+ return (jint)dc_msg_get_filebytes(get_dc_msg(env, obj));
+}
+
+
+JNIEXPORT jlong Java_com_b44t_messenger_MrMsg_getSummaryCPtr(JNIEnv *env, jobject obj, jlong hChat)
+{
+ return (jlong)dc_msg_get_summary(get_dc_msg(env, obj), (dc_chat_t*)hChat);
+}
+
+
+JNIEXPORT jstring Java_com_b44t_messenger_MrMsg_getSummarytext(JNIEnv *env, jobject obj, jint approx_characters)
+{
+ char* temp = dc_msg_get_summarytext(get_dc_msg(env, obj), approx_characters);
+ jstring ret = JSTRING_NEW(temp);
+ free(temp);
+ return ret;
+}
+
+
+JNIEXPORT jint Java_com_b44t_messenger_MrMsg_showPadlock(JNIEnv *env, jobject obj)
+{
+ return dc_msg_get_showpadlock(get_dc_msg(env, obj));
+}
+
+
+JNIEXPORT jstring Java_com_b44t_messenger_MrMsg_getFile(JNIEnv *env, jobject obj)
+{
+ char* temp = dc_msg_get_file(get_dc_msg(env, obj));
+ jstring ret = JSTRING_NEW(temp);
+ free(temp);
+ return ret;
+}
+
+
+JNIEXPORT jstring Java_com_b44t_messenger_MrMsg_getFilemime(JNIEnv *env, jobject obj)
+{
+ char* temp = dc_msg_get_filemime(get_dc_msg(env, obj));
+ jstring ret = JSTRING_NEW(temp);
+ free(temp);
+ return ret;
+}
+
+
+JNIEXPORT jstring Java_com_b44t_messenger_MrMsg_getFilename(JNIEnv *env, jobject obj)
+{
+ char* temp = dc_msg_get_filename(get_dc_msg(env, obj));
+ jstring ret = JSTRING_NEW(temp);
+ free(temp);
+ return ret;
+}
+
+
+JNIEXPORT jlong Java_com_b44t_messenger_MrMsg_getMediainfoCPtr(JNIEnv *env, jobject obj)
+{
+ return (jlong)dc_msg_get_mediainfo(get_dc_msg(env, obj));
+}
+
+
+JNIEXPORT jboolean Java_com_b44t_messenger_MrMsg_isForwarded(JNIEnv *env, jobject obj)
+{
+ return dc_msg_is_forwarded(get_dc_msg(env, obj)) != 0;
+}
+
+
+JNIEXPORT jboolean Java_com_b44t_messenger_MrMsg_isIncreation(JNIEnv *env, jobject obj)
+{
+ return dc_msg_is_increation(get_dc_msg(env, obj)) != 0;
+}
+
+
+JNIEXPORT jboolean Java_com_b44t_messenger_MrMsg_isInfo(JNIEnv *env, jobject obj)
+{
+ return dc_msg_is_info(get_dc_msg(env, obj)) != 0;
+}
+
+
+JNIEXPORT jboolean Java_com_b44t_messenger_MrMsg_isSetupMessage(JNIEnv *env, jobject obj)
+{
+ return dc_msg_is_setupmessage(get_dc_msg(env, obj));
+}
+
+
+JNIEXPORT jstring Java_com_b44t_messenger_MrMsg_getSetupCodeBegin(JNIEnv *env, jobject obj)
+{
+ char* temp = dc_msg_get_setupcodebegin(get_dc_msg(env, obj));
+ jstring ret = JSTRING_NEW(temp);
+ free(temp);
+ return ret;
+}
+
+
+
+/*******************************************************************************
+ * MrContact
+ ******************************************************************************/
+
+
+static dc_contact_t* get_dc_contact(JNIEnv *env, jobject obj)
+{
+ static jfieldID fid = 0;
+ if( fid == 0 ) {
+ jclass cls = (*env)->GetObjectClass(env, obj);
+ fid = (*env)->GetFieldID(env, cls, "m_hContact", "J" /*Signature, J=long*/);
+ }
+ if( fid ) {
+ return (dc_contact_t*)(*env)->GetLongField(env, obj, fid);
+ }
+ return NULL;
+}
+
+
+JNIEXPORT void Java_com_b44t_messenger_MrContact_MrContactUnref(JNIEnv *env, jclass c, jlong hContact)
+{
+ dc_contact_unref((dc_contact_t*)hContact);
+}
+
+
+JNIEXPORT jstring Java_com_b44t_messenger_MrContact_getName(JNIEnv *env, jobject obj)
+{
+ const char* temp = dc_contact_get_name(get_dc_contact(env, obj));
+ jstring ret = JSTRING_NEW(temp);
+ free(temp);
+ return ret;
+}
+
+
+JNIEXPORT jstring Java_com_b44t_messenger_MrContact_getDisplayName(JNIEnv *env, jobject obj)
+{
+ const char* temp = dc_contact_get_display_name(get_dc_contact(env, obj));
+ jstring ret = JSTRING_NEW(temp);
+ free(temp);
+ return ret;
+}
+
+
+JNIEXPORT jstring Java_com_b44t_messenger_MrContact_getFirstName(JNIEnv *env, jobject obj)
+{
+ const char* temp = dc_contact_get_first_name(get_dc_contact(env, obj));
+ jstring ret = JSTRING_NEW(temp);
+ free(temp);
+ return ret;
+}
+
+
+JNIEXPORT jstring Java_com_b44t_messenger_MrContact_getAddr(JNIEnv *env, jobject obj)
+{
+ const char* temp = dc_contact_get_addr(get_dc_contact(env, obj));
+ jstring ret = JSTRING_NEW(temp);
+ free(temp);
+ return ret;
+}
+
+
+JNIEXPORT jstring Java_com_b44t_messenger_MrContact_getNameNAddr(JNIEnv *env, jobject obj)
+{
+ const char* temp = dc_contact_get_name_n_addr(get_dc_contact(env, obj));
+ jstring ret = JSTRING_NEW(temp);
+ free(temp);
+ return ret;
+}
+
+
+JNIEXPORT jboolean Java_com_b44t_messenger_MrContact_isBlocked(JNIEnv *env, jobject obj)
+{
+ return (jboolean)( dc_contact_is_blocked(get_dc_contact(env, obj)) != 0 );
+}
+
+
+JNIEXPORT jboolean Java_com_b44t_messenger_MrContact_isVerified(JNIEnv *env, jobject obj)
+{
+ return dc_contact_is_verified(get_dc_contact(env, obj)) == 2;
+}
+
+
+/*******************************************************************************
+ * MrLot
+ ******************************************************************************/
+
+
+static dc_lot_t* get_dc_lot(JNIEnv *env, jobject obj)
+{
+ static jfieldID fid = 0;
+ if( fid == 0 ) {
+ jclass cls = (*env)->GetObjectClass(env, obj);
+ fid = (*env)->GetFieldID(env, cls, "m_hLot", "J" /*Signature, J=long*/);
+ }
+ if( fid ) {
+ return (dc_lot_t*)(*env)->GetLongField(env, obj, fid);
+ }
+ return NULL;
+}
+
+
+JNIEXPORT void Java_com_b44t_messenger_MrLot_unref(JNIEnv *env, jclass cls, jlong hLot)
+{
+ dc_lot_unref((dc_lot_t*)hLot);
+}
+
+
+JNIEXPORT jstring Java_com_b44t_messenger_MrLot_getText1(JNIEnv *env, jobject obj)
+{
+ char* temp = dc_lot_get_text1(get_dc_lot(env, obj));
+ jstring ret = JSTRING_NEW(temp);
+ free(temp);
+ return ret;
+}
+
+
+JNIEXPORT jint Java_com_b44t_messenger_MrLot_getText1Meaning(JNIEnv *env, jobject obj)
+{
+ return dc_lot_get_text1_meaning(get_dc_lot(env, obj));
+}
+
+
+JNIEXPORT jstring Java_com_b44t_messenger_MrLot_getText2(JNIEnv *env, jobject obj)
+{
+ char* temp = dc_lot_get_text2(get_dc_lot(env, obj));
+ jstring ret = JSTRING_NEW(temp);
+ free(temp);
+ return ret;
+}
+
+
+JNIEXPORT jlong Java_com_b44t_messenger_MrLot_getTimestamp(JNIEnv *env, jobject obj)
+{
+ return dc_lot_get_timestamp(get_dc_lot(env, obj));
+}
+
+
+JNIEXPORT jint Java_com_b44t_messenger_MrLot_getState(JNIEnv *env, jobject obj)
+{
+ return dc_lot_get_state(get_dc_lot(env, obj));
+}
+
+
+JNIEXPORT jint Java_com_b44t_messenger_MrLot_getId(JNIEnv *env, jobject obj)
+{
+ return dc_lot_get_id(get_dc_lot(env, obj));
+}
+
+
+JNIEXPORT void Java_com_b44t_messenger_MrLot_MrLotUnref(JNIEnv *env, jclass c, jlong hLot)
+{
+ dc_lot_unref((dc_lot_t*)hLot);
+}
+
+
+/*******************************************************************************
+ * Tools
+ ******************************************************************************/
+
+
+JNIEXPORT jstring Java_com_b44t_messenger_MrMailbox_CPtr2String(JNIEnv *env, jclass c, jlong hStr)
+{
+ /* the callback may return a long that represents a pointer to a C-String; this function creates a Java-string from such values. */
+ if( hStr == 0 ) {
+ return NULL;
+ }
+ const char* ptr = (const char*)hStr;
+ return JSTRING_NEW(ptr);
+}
+
+
+JNIEXPORT jlong Java_com_b44t_messenger_MrMailbox_String2CPtr(JNIEnv *env, jclass c, jstring str)
+{
+ char* hStr = NULL;
+ if( str ) {
+ CHAR_REF(str);
+ hStr = strdup(strPtr);
+ CHAR_UNREF(str);
+ }
+ return (jlong)hStr;
+}
+
+
+JNIEXPORT jstring Java_com_b44t_messenger_MrMailbox_MrGetVersionStr(JNIEnv *env, jclass c)
+{
+ s_init_globals(env, c);
+ const char* temp = dc_get_version_str();
+ jstring ret = JSTRING_NEW(temp);
+ free(temp);
+ return ret;
+}
+
+
+#include <time.h>
+JNIEXPORT jlong Java_com_b44t_messenger_MrMailbox_getCurrentTimeMillis(JNIEnv *env, jclass c) {
+ struct timespec ts;
+ clock_gettime(CLOCK_REALTIME, &ts);
+ return (jlong) ts.tv_sec * 1000 + (int64_t) ts.tv_nsec / 1000000;
+}
+JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_getCurrentTime(JNIEnv *env, jclass c) {
+ return (jint) (Java_com_b44t_messenger_MrMailbox_getCurrentTimeMillis(env, c) / 1000);
+}
+
+
--
2.8.2