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" 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 +#include +#include +#include +#include +#include +#include +#include +#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 +#include + + +#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 +#include +#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, "", "([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 +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