Compare commits
7 Commits
Author | SHA1 | Date |
---|---|---|
Dan Ballard | a148e1af47 | |
Dan Ballard | 98571f5559 | |
Dan Ballard | 94a9a3448e | |
Dan Ballard | 9114c88110 | |
Dan Ballard | c9f5ec2e42 | |
Dan Ballard | 94504c1dbe | |
Dan Ballard | 4f49da65cc |
|
@ -8,6 +8,35 @@ version = "1.1.0"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
|
||||
|
||||
[[package]]
|
||||
name = "bindgen"
|
||||
version = "0.65.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "cfdf7b466f9a4903edc73f95d6d2bcd5baf8ae620638762244d3f60143643cc5"
|
||||
dependencies = [
|
||||
"bitflags",
|
||||
"cexpr",
|
||||
"clang-sys",
|
||||
"lazy_static",
|
||||
"lazycell",
|
||||
"log",
|
||||
"peeking_take_while",
|
||||
"prettyplease",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"regex",
|
||||
"rustc-hash",
|
||||
"shlex",
|
||||
"syn 2.0.22",
|
||||
"which",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "bitflags"
|
||||
version = "1.3.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
|
||||
|
||||
[[package]]
|
||||
name = "block-buffer"
|
||||
version = "0.10.2"
|
||||
|
@ -17,6 +46,15 @@ dependencies = [
|
|||
"generic-array",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "cexpr"
|
||||
version = "0.6.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766"
|
||||
dependencies = [
|
||||
"nom",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "cfg-if"
|
||||
version = "1.0.0"
|
||||
|
@ -36,6 +74,17 @@ dependencies = [
|
|||
"winapi",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "clang-sys"
|
||||
version = "1.6.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c688fc74432808e3eb684cae8830a86be1d66a2bd58e1f248ed0960a590baf6f"
|
||||
dependencies = [
|
||||
"glob",
|
||||
"libc",
|
||||
"libloading",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "cpufeatures"
|
||||
version = "0.2.1"
|
||||
|
@ -76,7 +125,7 @@ dependencies = [
|
|||
"proc-macro2",
|
||||
"quote",
|
||||
"strsim",
|
||||
"syn",
|
||||
"syn 1.0.85",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -87,7 +136,7 @@ checksum = "72c41b3b7352feb3211a0d743dc5700a4e3b60f51bd2b368892d1e0f9a95f44b"
|
|||
dependencies = [
|
||||
"darling_core",
|
||||
"quote",
|
||||
"syn",
|
||||
"syn 1.0.85",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -100,6 +149,12 @@ dependencies = [
|
|||
"crypto-common",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "either"
|
||||
version = "1.8.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91"
|
||||
|
||||
[[package]]
|
||||
name = "fnv"
|
||||
version = "1.0.7"
|
||||
|
@ -116,6 +171,12 @@ dependencies = [
|
|||
"version_check",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "glob"
|
||||
version = "0.3.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
|
||||
|
||||
[[package]]
|
||||
name = "hex-literal"
|
||||
version = "0.3.4"
|
||||
|
@ -135,15 +196,28 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||
checksum = "1aab8fc367588b89dcee83ab0fd66b72b50b72fa1904d7095045ace2b0c81c35"
|
||||
|
||||
[[package]]
|
||||
name = "libc"
|
||||
version = "0.2.112"
|
||||
name = "lazy_static"
|
||||
version = "1.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1b03d17f364a3a042d5e5d46b053bbbf82c92c9430c592dd4c064dc6ee997125"
|
||||
checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
|
||||
|
||||
[[package]]
|
||||
name = "lazycell"
|
||||
version = "1.3.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55"
|
||||
|
||||
[[package]]
|
||||
name = "libc"
|
||||
version = "0.2.147"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3"
|
||||
|
||||
[[package]]
|
||||
name = "libcwtch"
|
||||
version = "0.4.2"
|
||||
version = "0.8.0"
|
||||
dependencies = [
|
||||
"bindgen",
|
||||
"chrono",
|
||||
"hex-literal",
|
||||
"libc",
|
||||
|
@ -154,6 +228,44 @@ dependencies = [
|
|||
"sha2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "libloading"
|
||||
version = "0.7.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"winapi",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "log"
|
||||
version = "0.4.19"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b06a4cde4c0f271a446782e3eff8de789548ce57dbc8eca9292c27f4a42004b4"
|
||||
|
||||
[[package]]
|
||||
name = "memchr"
|
||||
version = "2.5.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
|
||||
|
||||
[[package]]
|
||||
name = "minimal-lexical"
|
||||
version = "0.2.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
|
||||
|
||||
[[package]]
|
||||
name = "nom"
|
||||
version = "7.1.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
|
||||
dependencies = [
|
||||
"memchr",
|
||||
"minimal-lexical",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "num-integer"
|
||||
version = "0.1.45"
|
||||
|
@ -174,23 +286,66 @@ dependencies = [
|
|||
]
|
||||
|
||||
[[package]]
|
||||
name = "proc-macro2"
|
||||
version = "1.0.36"
|
||||
name = "once_cell"
|
||||
version = "1.18.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c7342d5883fbccae1cc37a2353b09c87c9b0f3afd73f5fb9bba687a1f733b029"
|
||||
checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
|
||||
|
||||
[[package]]
|
||||
name = "peeking_take_while"
|
||||
version = "0.1.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099"
|
||||
|
||||
[[package]]
|
||||
name = "prettyplease"
|
||||
version = "0.2.9"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9825a04601d60621feed79c4e6b56d65db77cdca55cef43b46b0de1096d1c282"
|
||||
dependencies = [
|
||||
"unicode-xid",
|
||||
"proc-macro2",
|
||||
"syn 2.0.22",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "proc-macro2"
|
||||
version = "1.0.63"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7b368fba921b0dce7e60f5e04ec15e565b3303972b42bcfde1d0713b881959eb"
|
||||
dependencies = [
|
||||
"unicode-ident",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "quote"
|
||||
version = "1.0.14"
|
||||
version = "1.0.28"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "47aa80447ce4daf1717500037052af176af5d38cc3e571d9ec1c7353fc10c87d"
|
||||
checksum = "1b9ab9c7eadfd8df19006f1cf1a4aed13540ed5cbc047010ece5826e10825488"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "regex"
|
||||
version = "1.8.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d0ab3ca65655bb1e41f2a8c8cd662eb4fb035e67c3f78da1d61dffe89d07300f"
|
||||
dependencies = [
|
||||
"regex-syntax",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "regex-syntax"
|
||||
version = "0.7.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "436b050e76ed2903236f032a59761c1eb99e1b0aead2c257922771dab1fc8c78"
|
||||
|
||||
[[package]]
|
||||
name = "rustc-hash"
|
||||
version = "1.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
|
||||
|
||||
[[package]]
|
||||
name = "rustversion"
|
||||
version = "1.0.6"
|
||||
|
@ -220,7 +375,7 @@ checksum = "ed201699328568d8d08208fdd080e3ff594e6c422e438b6705905da01005d537"
|
|||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
"syn 1.0.85",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -242,7 +397,7 @@ checksum = "a2ad84e47328a31223de7fed7a4f5087f2d6ddfe586cf3ca25b7a165bc0a5aed"
|
|||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
"syn 1.0.85",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -265,7 +420,7 @@ dependencies = [
|
|||
"darling",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
"syn 1.0.85",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -279,6 +434,12 @@ dependencies = [
|
|||
"digest",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "shlex"
|
||||
version = "1.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "43b2853a4d09f215c24cc5489c992ce46052d359b5109343cbafbf26bc62f8a3"
|
||||
|
||||
[[package]]
|
||||
name = "strsim"
|
||||
version = "0.10.0"
|
||||
|
@ -296,6 +457,17 @@ dependencies = [
|
|||
"unicode-xid",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "syn"
|
||||
version = "2.0.22"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2efbeae7acf4eabd6bcdcbd11c92f45231ddda7539edc7806bd1a04a03b24616"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"unicode-ident",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "time"
|
||||
version = "0.1.44"
|
||||
|
@ -313,6 +485,12 @@ version = "1.15.0"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987"
|
||||
|
||||
[[package]]
|
||||
name = "unicode-ident"
|
||||
version = "1.0.9"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b15811caf2415fb889178633e7724bad2509101cde276048e013b9def5e51fa0"
|
||||
|
||||
[[package]]
|
||||
name = "unicode-xid"
|
||||
version = "0.2.2"
|
||||
|
@ -331,6 +509,17 @@ version = "0.10.0+wasi-snapshot-preview1"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f"
|
||||
|
||||
[[package]]
|
||||
name = "which"
|
||||
version = "4.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2441c784c52b289a054b7201fc93253e288f094e2f4be9058343127c4226a269"
|
||||
dependencies = [
|
||||
"either",
|
||||
"libc",
|
||||
"once_cell",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "winapi"
|
||||
version = "0.3.9"
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
[package]
|
||||
name = "libcwtch"
|
||||
version = "0.4.2"
|
||||
version = "0.8.0"
|
||||
authors = ["Dan Ballard <dan@mindstab.net>"]
|
||||
edition = "2018"
|
||||
license = "MIT"
|
||||
|
@ -12,6 +12,7 @@ documentation = "https://docs.rs/libcwtch/"
|
|||
[build-dependencies]
|
||||
hex-literal = "0.3.4"
|
||||
sha2 = "0.10.1"
|
||||
bindgen = "0.65.1"
|
||||
|
||||
[dependencies]
|
||||
libc = "0.2"
|
||||
|
|
17
README.md
17
README.md
|
@ -1,6 +1,6 @@
|
|||
# libCwtch-rs
|
||||
|
||||
Rust bindings for [libCwtch](https://git.openprivacy.ca/cwtch.im/libcwtch-go/)
|
||||
Rust bindings for [libCwtch autobindings](https://git.openprivacy.ca/cwtch.im/autobindings/)
|
||||
|
||||
Example echobot in examples/echobot.rs (`cargo run --example echobot` -- assumes tor is on $PATH)
|
||||
|
||||
|
@ -8,21 +8,12 @@ Example echobot in examples/echobot.rs (`cargo run --example echobot` -- assumes
|
|||
|
||||
### Updating libCwtch and bingings.rs with Bindgen
|
||||
|
||||
```sh
|
||||
cargo install bindgen
|
||||
```
|
||||
|
||||
libCwtch.so version is specified in build.rs. If updating, also download the corresponding libCwtch.h and delete
|
||||
the 'preamble from import "C"' section as it imports headers required for the C lib to compile
|
||||
but that we don't want to create rust bindings for (like importing stdlib.h). Then:
|
||||
|
||||
```sh
|
||||
bindgen libCwtch.h -o src/cwtchlib_go/bindings.rs
|
||||
```
|
||||
but that we don't want to create rust bindings for (like importing stdlib.h). `cargo build` automatically calls
|
||||
`bindgen` for us and will regenerate `src/cwtchlib_go/bindings.rs` if libCwtch.h has changed.
|
||||
|
||||
While developing you can use the `LCG_DIR` environment variable to specify the directory containing a local `libCwtch.so`
|
||||
library to override the default one.
|
||||
|
||||
This is useful in cases where you are adding or updating APIs prior to a release.
|
||||
|
||||
### Todo
|
||||
This is useful in cases where you are adding or updating APIs prior to a release.
|
33
build.rs
33
build.rs
|
@ -1,6 +1,6 @@
|
|||
use std::{env, io};
|
||||
use std::fs;
|
||||
use std::path::Path;
|
||||
use std::path::{Path, PathBuf};
|
||||
use std::process::Command;
|
||||
|
||||
use hex_literal::hex;
|
||||
|
@ -18,22 +18,43 @@ fn main() {
|
|||
println!("cargo:rerun-if-changed=build.rs");
|
||||
println!("cargo:rerun-if-changed=libCwtch.h");
|
||||
|
||||
|
||||
// The bindgen::Builder is the main entry point
|
||||
// to bindgen, and lets you build up options for
|
||||
// the resulting bindings.
|
||||
let bindings = bindgen::Builder::default()
|
||||
// The input header we would like to generate
|
||||
// bindings for.
|
||||
.header("libCwtch.h")
|
||||
// Tell cargo to invalidate the built crate whenever any of the
|
||||
// included header files changed.
|
||||
.parse_callbacks(Box::new(bindgen::CargoCallbacks))
|
||||
// Finish the builder and generate the bindings.
|
||||
.generate()
|
||||
// Unwrap the Result and panic on failure.
|
||||
.expect("Unable to generate bindings");
|
||||
|
||||
// Write the bindings to the $OUT_DIR/bindings.rs file.
|
||||
let out_path = PathBuf::from("src/cwtchlib_go");
|
||||
bindings
|
||||
.write_to_file(out_path.join("bindings.rs"))
|
||||
.expect("Couldn't write bindings!");
|
||||
|
||||
let lib_cwtch_path = Path::new(&out_dir).join("libCwtch.so");
|
||||
if std::env::var("LCG_DIR").is_err() {
|
||||
// https://git.openprivacy.ca/cwtch.im/libcwtch-go/releases v1.7.1
|
||||
Command::new("wget")
|
||||
.arg("https://git.openprivacy.ca/attachments/5fa8e7f5-13c2-4634-b531-0398cd7c6353")
|
||||
Command::new("wget")
|
||||
.arg("https://git.openprivacy.ca/cwtch.im/autobindings/releases/download/v0.0.12/libCwtch.x64.so")
|
||||
.arg("-O")
|
||||
.arg(lib_cwtch_path.clone())
|
||||
.output()
|
||||
.expect("failed to download libCwtch.so");
|
||||
.expect("failed to download libCwtch.x64.so");
|
||||
|
||||
let mut hasher = Sha512::new();
|
||||
let mut file = fs::File::open(&lib_cwtch_path).expect("could not open lib to hash");
|
||||
io::copy(&mut file, &mut hasher).expect("failed to copy file into hasher");
|
||||
let hash_bytes = hasher.finalize();
|
||||
|
||||
assert_eq!(hash_bytes[..], hex!("dc53eb4948357128a72f740cf48402e966e886c60bc150bd26d10d3c98dda64c3658322c15f3b93781365d40dd4315b1056fb9aa6ee3a56f8968d4bff1bc8f0d")[..]);
|
||||
assert_eq!(hash_bytes[..], hex!("a3742e0cdedc00eb3673063b100b7596b05bdc9bb68a0fba6fd2423c9a41f1653597c4d44ba3877be08cbb5bba2806435830061ab3517cdd4472a18c7557d9c7")[..]);
|
||||
} else {
|
||||
let local_lcg = Path::new(std::env::var("LCG_DIR").unwrap().as_str()).join("libCwtch.so");
|
||||
fs::copy(local_lcg, lib_cwtch_path).expect("could not find local lcg");
|
||||
|
|
55
libCwtch.h
55
libCwtch.h
|
@ -16,7 +16,6 @@ typedef struct { const char *p; ptrdiff_t n; } _GoString_;
|
|||
|
||||
#endif
|
||||
|
||||
|
||||
/* Start of boilerplate cgo prologue. */
|
||||
#line 1 "cgo-gcc-export-header-prolog"
|
||||
|
||||
|
@ -85,43 +84,55 @@ extern void c_SetConversationAttribute(char* profile_ptr, int profile_len, int c
|
|||
extern char* c_GetConversationAttribute(char* profile_ptr, int profile_len, int conversation_id, char* key_ptr, int key_len);
|
||||
extern void c_ResetTor();
|
||||
extern void c_UpdateSettings(char* json_ptr, int json_len);
|
||||
extern char* c_GetDebugInfo();
|
||||
extern void c_ActivatePeerEngine(char* onion_ptr, int onion_len);
|
||||
extern void c_DeactivatePeerEngine(char* onion_ptr, int onion_len);
|
||||
extern void c_CreateProfile(char* name_ptr, int name_len, char* password_ptr, int password_len, char autostart1);
|
||||
extern void c_ConfigureConnections(char* onion_ptr, int onion_len, char listen1, char peers2, char servers3);
|
||||
extern void c_CreateProfile(char* name_ptr, int name_len, char* password_ptr, int password_len, char autostart4);
|
||||
extern void c_LoadProfiles(char* password_ptr, int password_len);
|
||||
extern void c_DeleteProfile(char* onion_ptr, int onion_len, char* password_ptr, int password_len);
|
||||
extern char* c_ImportProfile(char* file2_ptr, int file2_len, char* password_ptr, int password_len);
|
||||
extern void c_ChangePassword(char* onion_ptr, int onion_len, char* current3_ptr, int current3_len, char* newPassword4_ptr, int newPassword4_len, char* newPasswordAgain5_ptr, int newPasswordAgain5_len);
|
||||
extern void c_ExportProfile(char* onion_ptr, int onion_len, char* file6_ptr, int file6_len);
|
||||
extern char* c_ImportBundle(char* onion_ptr, int onion_len, char* bundle7_ptr, int bundle7_len);
|
||||
extern char* c_ImportProfile(char* file5_ptr, int file5_len, char* password_ptr, int password_len);
|
||||
extern void c_ChangePassword(char* onion_ptr, int onion_len, char* current6_ptr, int current6_len, char* newPassword7_ptr, int newPassword7_len, char* newPasswordAgain8_ptr, int newPasswordAgain8_len);
|
||||
extern void c_ExportProfile(char* onion_ptr, int onion_len, char* file9_ptr, int file9_len);
|
||||
extern char* c_ImportBundle(char* onion_ptr, int onion_len, char* bundle10_ptr, int bundle10_len);
|
||||
extern void c_ArchiveConversation(char* onion_ptr, int onion_len, int conversation);
|
||||
extern void c_AcceptConversation(char* onion_ptr, int onion_len, int conversation);
|
||||
extern void c_BlockConversation(char* onion_ptr, int onion_len, int conversation);
|
||||
extern void c_UnblockConversation(char* onion_ptr, int onion_len, int conversation);
|
||||
extern void c_DeleteConversation(char* onion_ptr, int onion_len, int conversation);
|
||||
extern char* c_SendMessage(char* onion_ptr, int onion_len, int conversation, char* msg8_ptr, int msg8_len);
|
||||
extern void c_PeerWithOnion(char* onion_ptr, int onion_len, char* handle11_ptr, int handle11_len);
|
||||
extern void c_DisconnectFromPeer(char* onion_ptr, int onion_len, char* handle12_ptr, int handle12_len);
|
||||
extern char* c_GetConversationAccessControlList(char* onion_ptr, int onion_len, int conversation);
|
||||
extern void c_UpdateConversationAccessControlList(char* onion_ptr, int onion_len, int conversation, char* json13_ptr, int json13_len);
|
||||
extern char* c_SearchConversations(char* onion_ptr, int onion_len, char* pattern14_ptr, int pattern14_len);
|
||||
extern char* c_SendMessage(char* onion_ptr, int onion_len, int conversation, char* msg15_ptr, int msg15_len);
|
||||
extern char* c_GetMessageById(char* onion_ptr, int onion_len, int conversation, int message_id);
|
||||
extern char* c_GetMessageByContentHash(char* onion_ptr, int onion_len, int conversation, char* contentHash9_ptr, int contentHash9_len);
|
||||
extern char* c_GetMessages(char* onion_ptr, int onion_len, int conversation, int index, int count);
|
||||
extern char* c_GetMessageByContentHash(char* onion_ptr, int onion_len, int conversation, char* contentHash16_ptr, int contentHash16_len);
|
||||
extern char* c_GetMessages(char* onion_ptr, int onion_len, int conversation, int index, unsigned int count);
|
||||
extern char* c_SendInviteMessage(char* onion_ptr, int onion_len, int conversation, int target);
|
||||
extern void c_UpdateMessageAttribute(char* onion_ptr, int onion_len, int conversation, int channel_id, int message_id, char* attributeKey10_ptr, int attributeKey10_len, char* attributeValue11_ptr, int attributeValue11_len);
|
||||
extern void c_StartGroup(char* onion_ptr, int onion_len, char* name12_ptr, int name12_len, char* server13_ptr, int server13_len);
|
||||
extern void c_DownloadFileDefaultLimit(char* onion_ptr, int onion_len, int conversation, char* filepath14_ptr, int filepath14_len, char* manifest15_ptr, int manifest15_len, char* filekey16_ptr, int filekey16_len);
|
||||
extern void c_RestartFileShare(char* onion_ptr, int onion_len, char* filekey17_ptr, int filekey17_len);
|
||||
extern void c_StopFileShare(char* onion_ptr, int onion_len, char* filekey18_ptr, int filekey18_len);
|
||||
extern void c_CheckDownloadStatus(char* onion_ptr, int onion_len, char* filekey19_ptr, int filekey19_len);
|
||||
extern void c_VerifyOrResumeDownload(char* onion_ptr, int onion_len, int conversation, char* filekey20_ptr, int filekey20_len);
|
||||
extern char* c_ShareFile(char* onion_ptr, int onion_len, int conversation, char* filepath21_ptr, int filepath21_len);
|
||||
extern void c_UpdateMessageAttribute(char* onion_ptr, int onion_len, int conversation, int channel_id, int message_id, char* attributeKey17_ptr, int attributeKey17_len, char* attributeValue18_ptr, int attributeValue18_len);
|
||||
extern void c_StartGroup(char* onion_ptr, int onion_len, char* name19_ptr, int name19_len, char* server20_ptr, int server20_len);
|
||||
extern void c_QueueJoinServer(char* onion_ptr, int onion_len, char* handle21_ptr, int handle21_len);
|
||||
extern void c_DisconnectFromServer(char* onion_ptr, int onion_len, char* handle22_ptr, int handle22_len);
|
||||
extern void c_PublishServerUpdate(char* onion_ptr, int onion_len);
|
||||
extern void c_GetServerInfoList(char* onion_ptr, int onion_len);
|
||||
extern void c_DeleteServerInfo(char* onion_ptr, int onion_len, char* serverOnion23_ptr, int serverOnion23_len);
|
||||
extern void c_DownloadFileDefaultLimit(char* onion_ptr, int onion_len, int conversation, char* filepath24_ptr, int filepath24_len, char* manifest25_ptr, int manifest25_len, char* filekey26_ptr, int filekey26_len);
|
||||
extern void c_RestartFileShare(char* onion_ptr, int onion_len, char* filekey27_ptr, int filekey27_len);
|
||||
extern void c_StopFileShare(char* onion_ptr, int onion_len, char* filekey28_ptr, int filekey28_len);
|
||||
extern void c_CheckDownloadStatus(char* onion_ptr, int onion_len, char* filekey29_ptr, int filekey29_len);
|
||||
extern void c_VerifyOrResumeDownloadDefaultLimit(char* onion_ptr, int onion_len, int conversation, char* filekey30_ptr, int filekey30_len);
|
||||
extern char* c_ShareFile(char* onion_ptr, int onion_len, int conversation, char* filepath31_ptr, int filepath31_len);
|
||||
extern char* c_GetSharedFiles(char* onion_ptr, int onion_len, int conversation);
|
||||
extern void c_CreateServer(char* password_ptr, int password_len, char* description22_ptr, int description22_len, char autostart23);
|
||||
extern void c_SetServerAttribute(char* handle24_ptr, int handle24_len, char* key25_ptr, int key25_len, char* val26_ptr, int val26_len);
|
||||
extern void c_CreateServer(char* password_ptr, int password_len, char* description32_ptr, int description32_len, char autostart33);
|
||||
extern void c_SetServerAttribute(char* handle34_ptr, int handle34_len, char* key35_ptr, int key35_len, char* val36_ptr, int val36_len);
|
||||
extern void c_LoadServers(char* password_ptr, int password_len);
|
||||
extern void c_LaunchServers();
|
||||
extern void c_LaunchServer(char* handle27_ptr, int handle27_len);
|
||||
extern void c_StopServer(char* handle28_ptr, int handle28_len);
|
||||
extern void c_LaunchServer(char* handle37_ptr, int handle37_len);
|
||||
extern void c_StopServer(char* handle38_ptr, int handle38_len);
|
||||
extern void c_StopServers();
|
||||
extern void c_DestroyServers();
|
||||
extern void c_DeleteServer(char* handle29_ptr, int handle29_len, char* password_ptr, int password_len);
|
||||
extern void c_DeleteServer(char* handle39_ptr, int handle39_len, char* password_ptr, int password_len);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
@ -11,8 +11,18 @@ use crate::cwtchlib_go::bindings;
|
|||
use crate::{ConversationID, CwtchError, FileKey, ProfileIdentity, ServerIdentity, structs::*};
|
||||
use crate::event::Event;
|
||||
|
||||
type c_bool = core::ffi::c_char;
|
||||
|
||||
fn from_c_bool(b: c_bool) -> bool {
|
||||
b == 1
|
||||
}
|
||||
|
||||
fn to_c_bool(b: bool) -> c_bool {
|
||||
if b { 1 } else { 0 }
|
||||
}
|
||||
|
||||
struct c_str_wrap {
|
||||
raw: *mut i8,
|
||||
raw: *mut core::ffi::c_char,
|
||||
len: i32,
|
||||
}
|
||||
|
||||
|
@ -85,19 +95,25 @@ pub struct CwtchLibGo {}
|
|||
// Some bindings are going to be wrapped so we can handle their returns and give most rust idiomatic returns (esp for json returning apis)
|
||||
// so we pre define the real binding here as a _helper function and in the impl for CwtchLib define the wrapper
|
||||
impl CwtchLibGo {
|
||||
c_bind!(_peer_with(profile: &str, new_peer: &str;;) c_PeerWithOnion);
|
||||
c_bind!(_update_settings(settings_json: &str;;) c_UpdateSettings);
|
||||
c_bind!(_get_profile_attribute(profile: &str, key: &str;;) c_GetProfileAttribute -> String);
|
||||
c_bind!(_get_conversation_attribute(profile: &str; conversation_id: i32; key: &str) c_GetConversationAttribute -> String);
|
||||
c_bind!(_get_appbus_event(;;) c_GetAppBusEvent -> String);
|
||||
c_bind!(_create_profile(nick: &str, pass: &str; autostart: i8;) c_CreateProfile);
|
||||
c_bind!(_configure_connections(profile: &str; listen: c_bool, peers: c_bool, servers: c_bool;) c_ConfigureConnections);
|
||||
c_bind!(_create_profile(nick: &str, pass: &str; autostart: c_bool;) c_CreateProfile);
|
||||
c_bind!(_activate_peer_engine(profile: &str;;) c_ActivatePeerEngine);
|
||||
c_bind!(_deactivate_peer_engine(profile: &str;;) c_DeactivatePeerEngine);
|
||||
c_bind!(_accept_conversation(profile: &str ; conversation_id: i32; ) c_AcceptConversation);
|
||||
c_bind!(_block_conversation(profile: &str ; conversation_id: i32; ) c_BlockConversation);
|
||||
c_bind!(_unblock_conversation(profile: &str ; conversation_id: i32; ) c_UnblockConversation);
|
||||
c_bind!(_disconnect_from_peer(profile: &str, peer_address: &str;;) c_DisconnectFromPeer);
|
||||
c_bind!(_search_conversations(profile: &str, pattern: &str;;) c_SearchConversations -> String);
|
||||
c_bind!(_get_conversation_access_control_list(profile: &str; conversation_id: i32;) c_GetConversationAccessControlList -> String);
|
||||
c_bind!(_update_conversation_access_control_list(profile: &str; conversation_id: i32; acl: &str) c_UpdateConversationAccessControlList);
|
||||
c_bind!(_get_message_by_id(profile: &str ; conversation_id: i32, message_id: i32 ;) c_GetMessageById -> String);
|
||||
c_bind!(_get_message_by_content_hash(profile: &str ; conversation_id: i32 ; hash: &str) c_GetMessageByContentHash -> String);
|
||||
c_bind!(_get_messages(profile: &str; conversation_id: i32, message_index: i32, count: i32 ;) c_GetMessages -> String);
|
||||
c_bind!(_get_messages(profile: &str; conversation_id: i32, message_index: i32, count: u32 ;) c_GetMessages -> String);
|
||||
c_bind!(_send_message(profile: &str; conversation_id: i32; msg: &str) c_SendMessage -> String);
|
||||
c_bind!(_send_invite_message(profile: &str; conversation_id: i32, target_id: i32;) c_SendInviteMessage -> String);
|
||||
c_bind!(_share_file(profile: &str; conversation_id: i32; file_path: &str) c_ShareFile -> String);
|
||||
|
@ -106,8 +122,13 @@ impl CwtchLibGo {
|
|||
c_bind!(_stop_fileshare(profile: &str, file_key: &str;;) c_StopFileShare);
|
||||
c_bind!(_download_file_default_limit(profile: &str; conversation_id: i32; file_path: &str, manifest_path: &str, file_key: &str) c_DownloadFileDefaultLimit);
|
||||
c_bind!(_check_download_status(profile: &str, file_key: &str;;) c_CheckDownloadStatus);
|
||||
c_bind!(_verify_or_resume_download(profile: &str; conversation_id: i32; file_key: &str) c_VerifyOrResumeDownload);
|
||||
c_bind!(_verify_or_resume_download(profile: &str; conversation_id: i32; file_key: &str) c_VerifyOrResumeDownloadDefaultLimit);
|
||||
c_bind!(_start_group(profile: &str, name: &str, server: &str;;) c_StartGroup);
|
||||
c_bind!(_queue_join_server(profile: &str, server: &str;;) c_QueueJoinServer);
|
||||
c_bind!(_disconnect_from_server(profile: &str, server: &str;;) c_DisconnectFromServer);
|
||||
c_bind!(_publish_server_update(profile: &str;;) c_PublishServerUpdate);
|
||||
c_bind!(_get_server_info_list(profile: &str;;) c_GetServerInfoList);
|
||||
c_bind!(_delete_server_info(profile: &str, server: &str;;) c_DeleteServerInfo);
|
||||
c_bind!(_delete_profile(profile: &str, pass: &str;;) c_DeleteProfile);
|
||||
c_bind!(_archive_conversation(profile: &str; conversation_id: i32;) c_ArchiveConversation);
|
||||
c_bind!(_delete_conversation(profile: &str; conversation_id: i32;) c_DeleteConversation);
|
||||
|
@ -117,6 +138,7 @@ impl CwtchLibGo {
|
|||
c_bind!(_update_message_attribute(profile: &str; conversation_id: i32, channel_id: i32, message_id: i32; key: &str, val: &str) c_UpdateMessageAttribute);
|
||||
c_bind!(_change_password(profile: &str, old_pass: &str, new_pass: &str, new_pass_again: &str;;) c_ChangePassword);
|
||||
c_bind!(_export_profile(profile: &str, filename: &str;;) c_ExportProfile);
|
||||
c_bind!(_create_server(password: &str, description: &str; autostart: c_bool;) c_CreateServer);
|
||||
c_bind!(_delete_server(server: &str, current_password: &str;;) c_DeleteServer);
|
||||
c_bind!(_launch_server(server: &str;;) c_LaunchServer);
|
||||
c_bind!(_stop_server(server: &str;;) c_StopServer);
|
||||
|
@ -135,32 +157,64 @@ impl CwtchLib for CwtchLibGo {
|
|||
}
|
||||
c_bind!(reconnect_cwtch_foreground(;;) c_ReconnectCwtchForeground);
|
||||
fn create_profile(&self, nick: &str, pass: &str, autostart: bool) {
|
||||
self._create_profile(nick, pass, if autostart { 1 } else { 0 })
|
||||
self._create_profile(nick, pass, to_c_bool(autostart))
|
||||
}
|
||||
|
||||
fn activate_peer_engine(&self, profile: &ProfileIdentity) {
|
||||
self._activate_peer_engine(profile.as_str())
|
||||
}
|
||||
fn deactivate_peer_engine(&self, profile: &ProfileIdentity) {
|
||||
self._deactivate_peer_engine(profile.as_str())
|
||||
}
|
||||
fn configure_connections(&self, profile: &ProfileIdentity, listen: bool, peers: bool, servers: bool) {
|
||||
self._configure_connections(profile.as_str(), to_c_bool(listen), to_c_bool(peers), to_c_bool(servers))
|
||||
}
|
||||
fn search_conversations(&self, profile: &ProfileIdentity, pattern: &str) -> String {
|
||||
self._search_conversations(profile.as_str(), pattern)
|
||||
}
|
||||
|
||||
fn get_conversation_access_control_list(&self, profile: &ProfileIdentity, conversation_id: ConversationID) -> Result<ACL, CwtchError> {
|
||||
let json = self._get_conversation_access_control_list(profile.as_str(), conversation_id.into());
|
||||
|
||||
match serde_json::from_str(&json) {
|
||||
Ok(acl) => Ok(acl),
|
||||
Err(e) => Err(e.to_string()),
|
||||
}
|
||||
}
|
||||
|
||||
fn update_conversation_access_control_list(&self, profile: &ProfileIdentity, conversation_id: ConversationID, acl: ACL) {
|
||||
match serde_json::to_string(&acl) {
|
||||
Ok(acl_json) => self._update_conversation_access_control_list(profile.as_str(), conversation_id.into(), &acl_json),
|
||||
Err(_) => return,
|
||||
};
|
||||
}
|
||||
|
||||
c_bind!(load_profiles(pass: &str;;) c_LoadProfiles);
|
||||
fn accept_conversation(&self, profile: &ProfileIdentity, conversation_id: ConversationID) {
|
||||
self._accept_conversation(profile.as_str(), conversation_id.into())
|
||||
}
|
||||
|
||||
fn peer_with(&self, profile: &ProfileIdentity, new_peer_address: &str) {
|
||||
self._peer_with(profile.as_str(), new_peer_address)
|
||||
}
|
||||
|
||||
fn block_conversation(&self, profile: &ProfileIdentity, conversation_id: ConversationID) {
|
||||
self._block_conversation(String::from(profile).as_str(), conversation_id.into())
|
||||
}
|
||||
fn unblock_conversation(&self, profile: &ProfileIdentity, conversation_id: ConversationID) {
|
||||
self._unblock_conversation(String::from(profile).as_str(), conversation_id.into())
|
||||
}
|
||||
fn disconnect_from_peer(&self, profile: &ProfileIdentity, peer_id: &str) {
|
||||
self._disconnect_from_peer(profile.as_str(), peer_id)
|
||||
}
|
||||
|
||||
fn get_message_by_id(&self, profile: &ProfileIdentity, conversation_id: ConversationID, message_id: i32) -> String {
|
||||
self._get_message_by_id(String::from(profile).as_str(), conversation_id.into(), message_id)
|
||||
}
|
||||
fn get_message_by_content_hash(&self, profile: &ProfileIdentity, conversation_id: ConversationID, hash: &str) -> String {
|
||||
self._get_message_by_content_hash(String::from(profile).as_str(), conversation_id.into(), hash)
|
||||
}
|
||||
fn get_messages(&self, profile: &ProfileIdentity, conversation_id: ConversationID, message_index: i32, count: i32) -> String {
|
||||
fn get_messages(&self, profile: &ProfileIdentity, conversation_id: ConversationID, message_index: i32, count: u32) -> String {
|
||||
self._get_messages(String::from(profile).as_str(), conversation_id.into(), message_index, count)
|
||||
}
|
||||
fn send_message_raw(&self, profile: &ProfileIdentity, conversation_id: ConversationID, msg: &str) -> String {
|
||||
|
@ -210,6 +264,21 @@ impl CwtchLib for CwtchLibGo {
|
|||
fn start_group(&self, profile: &ProfileIdentity, server: &str, name: &str) {
|
||||
self._start_group(String::from(profile).as_str(), server, name)
|
||||
}
|
||||
fn queue_join_server(&self, profile: &ProfileIdentity, server: &ServerIdentity) {
|
||||
self._queue_join_server(profile.as_str(), server.as_str())
|
||||
}
|
||||
fn disconnect_from_server(&self, profile: &ProfileIdentity, server: &ServerIdentity) {
|
||||
self._disconnect_from_server(profile.as_str(), server.as_str())
|
||||
}
|
||||
fn publish_server_update(&self, profile: &ProfileIdentity) {
|
||||
self._publish_server_update(profile.as_str())
|
||||
}
|
||||
fn get_server_info_list(&self, profile: &ProfileIdentity) {
|
||||
self._get_server_info_list(profile.as_str())
|
||||
}
|
||||
fn delete_server_info(&self, profile: &ProfileIdentity, server: &ServerIdentity) {
|
||||
self._delete_server_info(profile.as_str(), server.as_str())
|
||||
}
|
||||
fn delete_profile(&self, profile: &ProfileIdentity, pass: &str) {
|
||||
self._delete_profile(String::from(profile).as_str(), pass)
|
||||
}
|
||||
|
@ -271,7 +340,9 @@ impl CwtchLib for CwtchLibGo {
|
|||
}
|
||||
|
||||
c_bind!(load_servers(password: &str;;) c_LoadServers);
|
||||
c_bind!(create_server(password: &str, description: &str; autostart: i8;) c_CreateServer);
|
||||
fn create_server(&self, password: &str, description: &str , autostart: bool) {
|
||||
self._create_server(password, description, to_c_bool(autostart))
|
||||
}
|
||||
fn delete_server(&self, server: ServerIdentity, current_password: &str) {
|
||||
self._delete_server(String::from(server).as_str(), current_password)
|
||||
}
|
||||
|
@ -287,8 +358,8 @@ impl CwtchLib for CwtchLibGo {
|
|||
fn set_server_attribute(&self, server: ServerIdentity, key: &str, val: &str) {
|
||||
self._set_server_attribute(String::from(server).as_str(), key, val)
|
||||
}
|
||||
// todo: reenabled in 1.12
|
||||
//c_bind!(get_debug_info(;;) c_GetDebugInfo -> String);
|
||||
|
||||
c_bind!(get_debug_info(;;) c_GetDebugInfo -> String);
|
||||
|
||||
fn get_appbus_event(&self) -> Event {
|
||||
let event_json = self._get_appbus_event();
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* automatically generated by rust-bindgen 0.59.2 */
|
||||
/* automatically generated by rust-bindgen 0.65.1 */
|
||||
|
||||
#[derive(PartialEq, Copy, Clone, Hash, Debug, Default)]
|
||||
#[repr(C)]
|
||||
|
@ -6,7 +6,6 @@ pub struct __BindgenComplex<T> {
|
|||
pub re: T,
|
||||
pub im: T,
|
||||
}
|
||||
pub type size_t = ::std::os::raw::c_ulong;
|
||||
pub type wchar_t = ::std::os::raw::c_int;
|
||||
#[repr(C)]
|
||||
#[repr(align(16))]
|
||||
|
@ -18,6 +17,8 @@ pub struct max_align_t {
|
|||
}
|
||||
#[test]
|
||||
fn bindgen_test_layout_max_align_t() {
|
||||
const UNINIT: ::std::mem::MaybeUninit<max_align_t> = ::std::mem::MaybeUninit::uninit();
|
||||
let ptr = UNINIT.as_ptr();
|
||||
assert_eq!(
|
||||
::std::mem::size_of::<max_align_t>(),
|
||||
32usize,
|
||||
|
@ -29,9 +30,7 @@ fn bindgen_test_layout_max_align_t() {
|
|||
concat!("Alignment of ", stringify!(max_align_t))
|
||||
);
|
||||
assert_eq!(
|
||||
unsafe {
|
||||
&(*(::std::ptr::null::<max_align_t>())).__clang_max_align_nonce1 as *const _ as usize
|
||||
},
|
||||
unsafe { ::std::ptr::addr_of!((*ptr).__clang_max_align_nonce1) as usize - ptr as usize },
|
||||
0usize,
|
||||
concat!(
|
||||
"Offset of field: ",
|
||||
|
@ -41,9 +40,7 @@ fn bindgen_test_layout_max_align_t() {
|
|||
)
|
||||
);
|
||||
assert_eq!(
|
||||
unsafe {
|
||||
&(*(::std::ptr::null::<max_align_t>())).__clang_max_align_nonce2 as *const _ as usize
|
||||
},
|
||||
unsafe { ::std::ptr::addr_of!((*ptr).__clang_max_align_nonce2) as usize - ptr as usize },
|
||||
16usize,
|
||||
concat!(
|
||||
"Offset of field: ",
|
||||
|
@ -61,6 +58,8 @@ pub struct _GoString_ {
|
|||
}
|
||||
#[test]
|
||||
fn bindgen_test_layout__GoString_() {
|
||||
const UNINIT: ::std::mem::MaybeUninit<_GoString_> = ::std::mem::MaybeUninit::uninit();
|
||||
let ptr = UNINIT.as_ptr();
|
||||
assert_eq!(
|
||||
::std::mem::size_of::<_GoString_>(),
|
||||
16usize,
|
||||
|
@ -72,7 +71,7 @@ fn bindgen_test_layout__GoString_() {
|
|||
concat!("Alignment of ", stringify!(_GoString_))
|
||||
);
|
||||
assert_eq!(
|
||||
unsafe { &(*(::std::ptr::null::<_GoString_>())).p as *const _ as usize },
|
||||
unsafe { ::std::ptr::addr_of!((*ptr).p) as usize - ptr as usize },
|
||||
0usize,
|
||||
concat!(
|
||||
"Offset of field: ",
|
||||
|
@ -82,7 +81,7 @@ fn bindgen_test_layout__GoString_() {
|
|||
)
|
||||
);
|
||||
assert_eq!(
|
||||
unsafe { &(*(::std::ptr::null::<_GoString_>())).n as *const _ as usize },
|
||||
unsafe { ::std::ptr::addr_of!((*ptr).n) as usize - ptr as usize },
|
||||
8usize,
|
||||
concat!(
|
||||
"Offset of field: ",
|
||||
|
@ -102,7 +101,7 @@ pub type GoInt64 = ::std::os::raw::c_longlong;
|
|||
pub type GoUint64 = ::std::os::raw::c_ulonglong;
|
||||
pub type GoInt = GoInt64;
|
||||
pub type GoUint = GoUint64;
|
||||
pub type GoUintptr = size_t;
|
||||
pub type GoUintptr = usize;
|
||||
pub type GoFloat32 = f32;
|
||||
pub type GoFloat64 = f64;
|
||||
pub type GoComplex64 = __BindgenComplex<f32>;
|
||||
|
@ -119,6 +118,8 @@ pub struct GoInterface {
|
|||
}
|
||||
#[test]
|
||||
fn bindgen_test_layout_GoInterface() {
|
||||
const UNINIT: ::std::mem::MaybeUninit<GoInterface> = ::std::mem::MaybeUninit::uninit();
|
||||
let ptr = UNINIT.as_ptr();
|
||||
assert_eq!(
|
||||
::std::mem::size_of::<GoInterface>(),
|
||||
16usize,
|
||||
|
@ -130,7 +131,7 @@ fn bindgen_test_layout_GoInterface() {
|
|||
concat!("Alignment of ", stringify!(GoInterface))
|
||||
);
|
||||
assert_eq!(
|
||||
unsafe { &(*(::std::ptr::null::<GoInterface>())).t as *const _ as usize },
|
||||
unsafe { ::std::ptr::addr_of!((*ptr).t) as usize - ptr as usize },
|
||||
0usize,
|
||||
concat!(
|
||||
"Offset of field: ",
|
||||
|
@ -140,7 +141,7 @@ fn bindgen_test_layout_GoInterface() {
|
|||
)
|
||||
);
|
||||
assert_eq!(
|
||||
unsafe { &(*(::std::ptr::null::<GoInterface>())).v as *const _ as usize },
|
||||
unsafe { ::std::ptr::addr_of!((*ptr).v) as usize - ptr as usize },
|
||||
8usize,
|
||||
concat!(
|
||||
"Offset of field: ",
|
||||
|
@ -159,6 +160,8 @@ pub struct GoSlice {
|
|||
}
|
||||
#[test]
|
||||
fn bindgen_test_layout_GoSlice() {
|
||||
const UNINIT: ::std::mem::MaybeUninit<GoSlice> = ::std::mem::MaybeUninit::uninit();
|
||||
let ptr = UNINIT.as_ptr();
|
||||
assert_eq!(
|
||||
::std::mem::size_of::<GoSlice>(),
|
||||
24usize,
|
||||
|
@ -170,7 +173,7 @@ fn bindgen_test_layout_GoSlice() {
|
|||
concat!("Alignment of ", stringify!(GoSlice))
|
||||
);
|
||||
assert_eq!(
|
||||
unsafe { &(*(::std::ptr::null::<GoSlice>())).data as *const _ as usize },
|
||||
unsafe { ::std::ptr::addr_of!((*ptr).data) as usize - ptr as usize },
|
||||
0usize,
|
||||
concat!(
|
||||
"Offset of field: ",
|
||||
|
@ -180,7 +183,7 @@ fn bindgen_test_layout_GoSlice() {
|
|||
)
|
||||
);
|
||||
assert_eq!(
|
||||
unsafe { &(*(::std::ptr::null::<GoSlice>())).len as *const _ as usize },
|
||||
unsafe { ::std::ptr::addr_of!((*ptr).len) as usize - ptr as usize },
|
||||
8usize,
|
||||
concat!(
|
||||
"Offset of field: ",
|
||||
|
@ -190,7 +193,7 @@ fn bindgen_test_layout_GoSlice() {
|
|||
)
|
||||
);
|
||||
assert_eq!(
|
||||
unsafe { &(*(::std::ptr::null::<GoSlice>())).cap as *const _ as usize },
|
||||
unsafe { ::std::ptr::addr_of!((*ptr).cap) as usize - ptr as usize },
|
||||
16usize,
|
||||
concat!(
|
||||
"Offset of field: ",
|
||||
|
@ -267,6 +270,9 @@ extern "C" {
|
|||
extern "C" {
|
||||
pub fn c_UpdateSettings(json_ptr: *mut ::std::os::raw::c_char, json_len: ::std::os::raw::c_int);
|
||||
}
|
||||
extern "C" {
|
||||
pub fn c_GetDebugInfo() -> *mut ::std::os::raw::c_char;
|
||||
}
|
||||
extern "C" {
|
||||
pub fn c_ActivatePeerEngine(
|
||||
onion_ptr: *mut ::std::os::raw::c_char,
|
||||
|
@ -279,13 +285,22 @@ extern "C" {
|
|||
onion_len: ::std::os::raw::c_int,
|
||||
);
|
||||
}
|
||||
extern "C" {
|
||||
pub fn c_ConfigureConnections(
|
||||
onion_ptr: *mut ::std::os::raw::c_char,
|
||||
onion_len: ::std::os::raw::c_int,
|
||||
listen1: ::std::os::raw::c_char,
|
||||
peers2: ::std::os::raw::c_char,
|
||||
servers3: ::std::os::raw::c_char,
|
||||
);
|
||||
}
|
||||
extern "C" {
|
||||
pub fn c_CreateProfile(
|
||||
name_ptr: *mut ::std::os::raw::c_char,
|
||||
name_len: ::std::os::raw::c_int,
|
||||
password_ptr: *mut ::std::os::raw::c_char,
|
||||
password_len: ::std::os::raw::c_int,
|
||||
autostart1: ::std::os::raw::c_char,
|
||||
autostart4: ::std::os::raw::c_char,
|
||||
);
|
||||
}
|
||||
extern "C" {
|
||||
|
@ -304,8 +319,8 @@ extern "C" {
|
|||
}
|
||||
extern "C" {
|
||||
pub fn c_ImportProfile(
|
||||
file2_ptr: *mut ::std::os::raw::c_char,
|
||||
file2_len: ::std::os::raw::c_int,
|
||||
file5_ptr: *mut ::std::os::raw::c_char,
|
||||
file5_len: ::std::os::raw::c_int,
|
||||
password_ptr: *mut ::std::os::raw::c_char,
|
||||
password_len: ::std::os::raw::c_int,
|
||||
) -> *mut ::std::os::raw::c_char;
|
||||
|
@ -314,28 +329,28 @@ extern "C" {
|
|||
pub fn c_ChangePassword(
|
||||
onion_ptr: *mut ::std::os::raw::c_char,
|
||||
onion_len: ::std::os::raw::c_int,
|
||||
current3_ptr: *mut ::std::os::raw::c_char,
|
||||
current3_len: ::std::os::raw::c_int,
|
||||
newPassword4_ptr: *mut ::std::os::raw::c_char,
|
||||
newPassword4_len: ::std::os::raw::c_int,
|
||||
newPasswordAgain5_ptr: *mut ::std::os::raw::c_char,
|
||||
newPasswordAgain5_len: ::std::os::raw::c_int,
|
||||
current6_ptr: *mut ::std::os::raw::c_char,
|
||||
current6_len: ::std::os::raw::c_int,
|
||||
newPassword7_ptr: *mut ::std::os::raw::c_char,
|
||||
newPassword7_len: ::std::os::raw::c_int,
|
||||
newPasswordAgain8_ptr: *mut ::std::os::raw::c_char,
|
||||
newPasswordAgain8_len: ::std::os::raw::c_int,
|
||||
);
|
||||
}
|
||||
extern "C" {
|
||||
pub fn c_ExportProfile(
|
||||
onion_ptr: *mut ::std::os::raw::c_char,
|
||||
onion_len: ::std::os::raw::c_int,
|
||||
file6_ptr: *mut ::std::os::raw::c_char,
|
||||
file6_len: ::std::os::raw::c_int,
|
||||
file9_ptr: *mut ::std::os::raw::c_char,
|
||||
file9_len: ::std::os::raw::c_int,
|
||||
);
|
||||
}
|
||||
extern "C" {
|
||||
pub fn c_ImportBundle(
|
||||
onion_ptr: *mut ::std::os::raw::c_char,
|
||||
onion_len: ::std::os::raw::c_int,
|
||||
bundle7_ptr: *mut ::std::os::raw::c_char,
|
||||
bundle7_len: ::std::os::raw::c_int,
|
||||
bundle10_ptr: *mut ::std::os::raw::c_char,
|
||||
bundle10_len: ::std::os::raw::c_int,
|
||||
) -> *mut ::std::os::raw::c_char;
|
||||
}
|
||||
extern "C" {
|
||||
|
@ -373,13 +388,53 @@ extern "C" {
|
|||
conversation: ::std::os::raw::c_int,
|
||||
);
|
||||
}
|
||||
extern "C" {
|
||||
pub fn c_PeerWithOnion(
|
||||
onion_ptr: *mut ::std::os::raw::c_char,
|
||||
onion_len: ::std::os::raw::c_int,
|
||||
handle11_ptr: *mut ::std::os::raw::c_char,
|
||||
handle11_len: ::std::os::raw::c_int,
|
||||
);
|
||||
}
|
||||
extern "C" {
|
||||
pub fn c_DisconnectFromPeer(
|
||||
onion_ptr: *mut ::std::os::raw::c_char,
|
||||
onion_len: ::std::os::raw::c_int,
|
||||
handle12_ptr: *mut ::std::os::raw::c_char,
|
||||
handle12_len: ::std::os::raw::c_int,
|
||||
);
|
||||
}
|
||||
extern "C" {
|
||||
pub fn c_GetConversationAccessControlList(
|
||||
onion_ptr: *mut ::std::os::raw::c_char,
|
||||
onion_len: ::std::os::raw::c_int,
|
||||
conversation: ::std::os::raw::c_int,
|
||||
) -> *mut ::std::os::raw::c_char;
|
||||
}
|
||||
extern "C" {
|
||||
pub fn c_UpdateConversationAccessControlList(
|
||||
onion_ptr: *mut ::std::os::raw::c_char,
|
||||
onion_len: ::std::os::raw::c_int,
|
||||
conversation: ::std::os::raw::c_int,
|
||||
json13_ptr: *mut ::std::os::raw::c_char,
|
||||
json13_len: ::std::os::raw::c_int,
|
||||
);
|
||||
}
|
||||
extern "C" {
|
||||
pub fn c_SearchConversations(
|
||||
onion_ptr: *mut ::std::os::raw::c_char,
|
||||
onion_len: ::std::os::raw::c_int,
|
||||
pattern14_ptr: *mut ::std::os::raw::c_char,
|
||||
pattern14_len: ::std::os::raw::c_int,
|
||||
) -> *mut ::std::os::raw::c_char;
|
||||
}
|
||||
extern "C" {
|
||||
pub fn c_SendMessage(
|
||||
onion_ptr: *mut ::std::os::raw::c_char,
|
||||
onion_len: ::std::os::raw::c_int,
|
||||
conversation: ::std::os::raw::c_int,
|
||||
msg8_ptr: *mut ::std::os::raw::c_char,
|
||||
msg8_len: ::std::os::raw::c_int,
|
||||
msg15_ptr: *mut ::std::os::raw::c_char,
|
||||
msg15_len: ::std::os::raw::c_int,
|
||||
) -> *mut ::std::os::raw::c_char;
|
||||
}
|
||||
extern "C" {
|
||||
|
@ -395,8 +450,8 @@ extern "C" {
|
|||
onion_ptr: *mut ::std::os::raw::c_char,
|
||||
onion_len: ::std::os::raw::c_int,
|
||||
conversation: ::std::os::raw::c_int,
|
||||
contentHash9_ptr: *mut ::std::os::raw::c_char,
|
||||
contentHash9_len: ::std::os::raw::c_int,
|
||||
contentHash16_ptr: *mut ::std::os::raw::c_char,
|
||||
contentHash16_len: ::std::os::raw::c_int,
|
||||
) -> *mut ::std::os::raw::c_char;
|
||||
}
|
||||
extern "C" {
|
||||
|
@ -405,7 +460,7 @@ extern "C" {
|
|||
onion_len: ::std::os::raw::c_int,
|
||||
conversation: ::std::os::raw::c_int,
|
||||
index: ::std::os::raw::c_int,
|
||||
count: ::std::os::raw::c_int,
|
||||
count: ::std::os::raw::c_uint,
|
||||
) -> *mut ::std::os::raw::c_char;
|
||||
}
|
||||
extern "C" {
|
||||
|
@ -423,20 +478,56 @@ extern "C" {
|
|||
conversation: ::std::os::raw::c_int,
|
||||
channel_id: ::std::os::raw::c_int,
|
||||
message_id: ::std::os::raw::c_int,
|
||||
attributeKey10_ptr: *mut ::std::os::raw::c_char,
|
||||
attributeKey10_len: ::std::os::raw::c_int,
|
||||
attributeValue11_ptr: *mut ::std::os::raw::c_char,
|
||||
attributeValue11_len: ::std::os::raw::c_int,
|
||||
attributeKey17_ptr: *mut ::std::os::raw::c_char,
|
||||
attributeKey17_len: ::std::os::raw::c_int,
|
||||
attributeValue18_ptr: *mut ::std::os::raw::c_char,
|
||||
attributeValue18_len: ::std::os::raw::c_int,
|
||||
);
|
||||
}
|
||||
extern "C" {
|
||||
pub fn c_StartGroup(
|
||||
onion_ptr: *mut ::std::os::raw::c_char,
|
||||
onion_len: ::std::os::raw::c_int,
|
||||
name12_ptr: *mut ::std::os::raw::c_char,
|
||||
name12_len: ::std::os::raw::c_int,
|
||||
server13_ptr: *mut ::std::os::raw::c_char,
|
||||
server13_len: ::std::os::raw::c_int,
|
||||
name19_ptr: *mut ::std::os::raw::c_char,
|
||||
name19_len: ::std::os::raw::c_int,
|
||||
server20_ptr: *mut ::std::os::raw::c_char,
|
||||
server20_len: ::std::os::raw::c_int,
|
||||
);
|
||||
}
|
||||
extern "C" {
|
||||
pub fn c_QueueJoinServer(
|
||||
onion_ptr: *mut ::std::os::raw::c_char,
|
||||
onion_len: ::std::os::raw::c_int,
|
||||
handle21_ptr: *mut ::std::os::raw::c_char,
|
||||
handle21_len: ::std::os::raw::c_int,
|
||||
);
|
||||
}
|
||||
extern "C" {
|
||||
pub fn c_DisconnectFromServer(
|
||||
onion_ptr: *mut ::std::os::raw::c_char,
|
||||
onion_len: ::std::os::raw::c_int,
|
||||
handle22_ptr: *mut ::std::os::raw::c_char,
|
||||
handle22_len: ::std::os::raw::c_int,
|
||||
);
|
||||
}
|
||||
extern "C" {
|
||||
pub fn c_PublishServerUpdate(
|
||||
onion_ptr: *mut ::std::os::raw::c_char,
|
||||
onion_len: ::std::os::raw::c_int,
|
||||
);
|
||||
}
|
||||
extern "C" {
|
||||
pub fn c_GetServerInfoList(
|
||||
onion_ptr: *mut ::std::os::raw::c_char,
|
||||
onion_len: ::std::os::raw::c_int,
|
||||
);
|
||||
}
|
||||
extern "C" {
|
||||
pub fn c_DeleteServerInfo(
|
||||
onion_ptr: *mut ::std::os::raw::c_char,
|
||||
onion_len: ::std::os::raw::c_int,
|
||||
serverOnion23_ptr: *mut ::std::os::raw::c_char,
|
||||
serverOnion23_len: ::std::os::raw::c_int,
|
||||
);
|
||||
}
|
||||
extern "C" {
|
||||
|
@ -444,45 +535,45 @@ extern "C" {
|
|||
onion_ptr: *mut ::std::os::raw::c_char,
|
||||
onion_len: ::std::os::raw::c_int,
|
||||
conversation: ::std::os::raw::c_int,
|
||||
filepath14_ptr: *mut ::std::os::raw::c_char,
|
||||
filepath14_len: ::std::os::raw::c_int,
|
||||
manifest15_ptr: *mut ::std::os::raw::c_char,
|
||||
manifest15_len: ::std::os::raw::c_int,
|
||||
filekey16_ptr: *mut ::std::os::raw::c_char,
|
||||
filekey16_len: ::std::os::raw::c_int,
|
||||
filepath24_ptr: *mut ::std::os::raw::c_char,
|
||||
filepath24_len: ::std::os::raw::c_int,
|
||||
manifest25_ptr: *mut ::std::os::raw::c_char,
|
||||
manifest25_len: ::std::os::raw::c_int,
|
||||
filekey26_ptr: *mut ::std::os::raw::c_char,
|
||||
filekey26_len: ::std::os::raw::c_int,
|
||||
);
|
||||
}
|
||||
extern "C" {
|
||||
pub fn c_RestartFileShare(
|
||||
onion_ptr: *mut ::std::os::raw::c_char,
|
||||
onion_len: ::std::os::raw::c_int,
|
||||
filekey17_ptr: *mut ::std::os::raw::c_char,
|
||||
filekey17_len: ::std::os::raw::c_int,
|
||||
filekey27_ptr: *mut ::std::os::raw::c_char,
|
||||
filekey27_len: ::std::os::raw::c_int,
|
||||
);
|
||||
}
|
||||
extern "C" {
|
||||
pub fn c_StopFileShare(
|
||||
onion_ptr: *mut ::std::os::raw::c_char,
|
||||
onion_len: ::std::os::raw::c_int,
|
||||
filekey18_ptr: *mut ::std::os::raw::c_char,
|
||||
filekey18_len: ::std::os::raw::c_int,
|
||||
filekey28_ptr: *mut ::std::os::raw::c_char,
|
||||
filekey28_len: ::std::os::raw::c_int,
|
||||
);
|
||||
}
|
||||
extern "C" {
|
||||
pub fn c_CheckDownloadStatus(
|
||||
onion_ptr: *mut ::std::os::raw::c_char,
|
||||
onion_len: ::std::os::raw::c_int,
|
||||
filekey19_ptr: *mut ::std::os::raw::c_char,
|
||||
filekey19_len: ::std::os::raw::c_int,
|
||||
filekey29_ptr: *mut ::std::os::raw::c_char,
|
||||
filekey29_len: ::std::os::raw::c_int,
|
||||
);
|
||||
}
|
||||
extern "C" {
|
||||
pub fn c_VerifyOrResumeDownload(
|
||||
pub fn c_VerifyOrResumeDownloadDefaultLimit(
|
||||
onion_ptr: *mut ::std::os::raw::c_char,
|
||||
onion_len: ::std::os::raw::c_int,
|
||||
conversation: ::std::os::raw::c_int,
|
||||
filekey20_ptr: *mut ::std::os::raw::c_char,
|
||||
filekey20_len: ::std::os::raw::c_int,
|
||||
filekey30_ptr: *mut ::std::os::raw::c_char,
|
||||
filekey30_len: ::std::os::raw::c_int,
|
||||
);
|
||||
}
|
||||
extern "C" {
|
||||
|
@ -490,8 +581,8 @@ extern "C" {
|
|||
onion_ptr: *mut ::std::os::raw::c_char,
|
||||
onion_len: ::std::os::raw::c_int,
|
||||
conversation: ::std::os::raw::c_int,
|
||||
filepath21_ptr: *mut ::std::os::raw::c_char,
|
||||
filepath21_len: ::std::os::raw::c_int,
|
||||
filepath31_ptr: *mut ::std::os::raw::c_char,
|
||||
filepath31_len: ::std::os::raw::c_int,
|
||||
) -> *mut ::std::os::raw::c_char;
|
||||
}
|
||||
extern "C" {
|
||||
|
@ -505,19 +596,19 @@ extern "C" {
|
|||
pub fn c_CreateServer(
|
||||
password_ptr: *mut ::std::os::raw::c_char,
|
||||
password_len: ::std::os::raw::c_int,
|
||||
description22_ptr: *mut ::std::os::raw::c_char,
|
||||
description22_len: ::std::os::raw::c_int,
|
||||
autostart23: ::std::os::raw::c_char,
|
||||
description32_ptr: *mut ::std::os::raw::c_char,
|
||||
description32_len: ::std::os::raw::c_int,
|
||||
autostart33: ::std::os::raw::c_char,
|
||||
);
|
||||
}
|
||||
extern "C" {
|
||||
pub fn c_SetServerAttribute(
|
||||
handle24_ptr: *mut ::std::os::raw::c_char,
|
||||
handle24_len: ::std::os::raw::c_int,
|
||||
key25_ptr: *mut ::std::os::raw::c_char,
|
||||
key25_len: ::std::os::raw::c_int,
|
||||
val26_ptr: *mut ::std::os::raw::c_char,
|
||||
val26_len: ::std::os::raw::c_int,
|
||||
handle34_ptr: *mut ::std::os::raw::c_char,
|
||||
handle34_len: ::std::os::raw::c_int,
|
||||
key35_ptr: *mut ::std::os::raw::c_char,
|
||||
key35_len: ::std::os::raw::c_int,
|
||||
val36_ptr: *mut ::std::os::raw::c_char,
|
||||
val36_len: ::std::os::raw::c_int,
|
||||
);
|
||||
}
|
||||
extern "C" {
|
||||
|
@ -531,14 +622,14 @@ extern "C" {
|
|||
}
|
||||
extern "C" {
|
||||
pub fn c_LaunchServer(
|
||||
handle27_ptr: *mut ::std::os::raw::c_char,
|
||||
handle27_len: ::std::os::raw::c_int,
|
||||
handle37_ptr: *mut ::std::os::raw::c_char,
|
||||
handle37_len: ::std::os::raw::c_int,
|
||||
);
|
||||
}
|
||||
extern "C" {
|
||||
pub fn c_StopServer(
|
||||
handle28_ptr: *mut ::std::os::raw::c_char,
|
||||
handle28_len: ::std::os::raw::c_int,
|
||||
handle38_ptr: *mut ::std::os::raw::c_char,
|
||||
handle38_len: ::std::os::raw::c_int,
|
||||
);
|
||||
}
|
||||
extern "C" {
|
||||
|
@ -549,8 +640,8 @@ extern "C" {
|
|||
}
|
||||
extern "C" {
|
||||
pub fn c_DeleteServer(
|
||||
handle29_ptr: *mut ::std::os::raw::c_char,
|
||||
handle29_len: ::std::os::raw::c_int,
|
||||
handle39_ptr: *mut ::std::os::raw::c_char,
|
||||
handle39_len: ::std::os::raw::c_int,
|
||||
password_ptr: *mut ::std::os::raw::c_char,
|
||||
password_len: ::std::os::raw::c_int,
|
||||
);
|
||||
|
|
40
src/event.rs
40
src/event.rs
|
@ -88,6 +88,12 @@ impl From<String> for GroupID {
|
|||
}
|
||||
}
|
||||
|
||||
impl GroupID {
|
||||
/// Get &str of GroupID String
|
||||
pub fn as_str(&self) -> &str {
|
||||
self.0.as_str()
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Serialize, Deserialize, Hash, Eq, PartialEq)]
|
||||
/// Server ID user to refer to a server in Cwtch
|
||||
|
@ -111,6 +117,13 @@ impl From<ServerIdentity> for String {
|
|||
}
|
||||
}
|
||||
|
||||
impl ServerIdentity {
|
||||
/// Get &str of ServerIdentity String
|
||||
pub fn as_str(&self) -> &str {
|
||||
self.0.as_str()
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Serialize, Deserialize, Hash, Eq, PartialEq)]
|
||||
/// FileKey ID user to refer to a file share in Cwtch
|
||||
pub struct FileKey(String);
|
||||
|
@ -252,7 +265,9 @@ pub enum Event {
|
|||
/// Cwtch had an error at the app level (not profile level), usually in response to an API call
|
||||
AppError {
|
||||
/// details of the app error that occured
|
||||
error: String
|
||||
error: String,
|
||||
/// possible data about the error
|
||||
data: String
|
||||
},
|
||||
/// Global settings being emited from lcg, usually in response to them being sent to be saved by client
|
||||
UpdateGlobalSettings {
|
||||
|
@ -474,8 +489,6 @@ pub enum Event {
|
|||
content_hash: String,
|
||||
/// path to picture for sender
|
||||
picture: String,
|
||||
/// name of sender
|
||||
nick: String,
|
||||
/// notification policy (based on settings)
|
||||
notification: MessageNotification,
|
||||
},
|
||||
|
@ -502,18 +515,12 @@ pub enum Event {
|
|||
profile_id: ProfileIdentity,
|
||||
/// conversation id
|
||||
conversation_id: ConversationID,
|
||||
/// group id
|
||||
group_id: GroupID,
|
||||
/// server the group is on
|
||||
group_server: String,
|
||||
/// invite string
|
||||
group_invite: String,
|
||||
/// group name
|
||||
group_name: String,
|
||||
/// path to group picture
|
||||
picture: String,
|
||||
/// Access Control List for group
|
||||
access_control_list: ACL,
|
||||
},
|
||||
/// a server connection state has changed
|
||||
ServerStateChange {
|
||||
|
@ -655,7 +662,14 @@ impl From<&CwtchEvent> for Event {
|
|||
},
|
||||
"PeerError" => Event::PeerError { error: cwtch_event.data["Error"].clone() },
|
||||
"AppError" => Event::AppError {
|
||||
error: cwtch_event.data["Error"].clone(),
|
||||
error: match cwtch_event.data.contains_key("Error") {
|
||||
true => cwtch_event.data["Error"].clone(),
|
||||
false => "".to_string()
|
||||
},
|
||||
data: match cwtch_event.data.contains_key("Data") {
|
||||
true => cwtch_event.data["Data"].clone(),
|
||||
false => "".to_string()
|
||||
}
|
||||
},
|
||||
"ContactCreated" => Event::ContactCreated {
|
||||
profile_id: cwtch_event.data["ProfileOnion"].clone().into(),
|
||||
|
@ -784,7 +798,6 @@ impl From<&CwtchEvent> for Event {
|
|||
content_hash: cwtch_event.data["ContentHash"].clone(),
|
||||
conversation_id: cwtch_event.data["ConversationID"].parse().unwrap_or(-2).into(),
|
||||
contact_id: cwtch_event.data["RemotePeer"].clone().into(),
|
||||
nick: cwtch_event.data["Nick"].clone(),
|
||||
message: MessageWrapper::from_json(&cwtch_event.data["Data"]),
|
||||
notification: MessageNotification::from(cwtch_event.data["notification"].clone()),
|
||||
picture: cwtch_event.data["picture"].clone(),
|
||||
|
@ -801,12 +814,9 @@ impl From<&CwtchEvent> for Event {
|
|||
"NewGroup" => Event::NewGroup {
|
||||
profile_id: cwtch_event.data["ProfileOnion"].clone().into(),
|
||||
conversation_id: cwtch_event.data["ConversationID"].parse().unwrap_or(-2).into(),
|
||||
group_id: cwtch_event.data["GroupID"].clone().into(),
|
||||
group_server: cwtch_event.data["GroupServer"].clone(),
|
||||
group_invite: cwtch_event.data["GroupInvite"].clone(),
|
||||
group_name: cwtch_event.data["GroupName"].clone(),
|
||||
picture: cwtch_event.data["picture"].clone(),
|
||||
access_control_list: serde_json::from_str(cwtch_event.data["accessControlList"].as_str()).unwrap_or(ACL::new()),
|
||||
group_invite: cwtch_event.data["GroupInvite"].clone(),
|
||||
},
|
||||
"ServerStateChange" => Event::ServerStateChange {
|
||||
profile_id: cwtch_event.data["ProfileOnion"].clone().into(),
|
||||
|
|
46
src/lib.rs
46
src/lib.rs
|
@ -4,7 +4,7 @@
|
|||
#![deny(missing_docs)]
|
||||
|
||||
use crate::event::{ConversationID, Event, FileKey, ProfileIdentity, ServerIdentity};
|
||||
use crate::structs::{MessageWrapper, Settings, SharedFile};
|
||||
use crate::structs::{ACL, MessageWrapper, Settings, SharedFile};
|
||||
|
||||
mod bindings_go;
|
||||
mod cwtchlib_go;
|
||||
|
@ -41,6 +41,9 @@ pub trait CwtchLib {
|
|||
/// Pull json of a structs::CwtchEvent off the appbus for responding to
|
||||
fn get_appbus_event(&self) -> Event;
|
||||
|
||||
/// configure a peer's connection settings, listen for incoming connections, connect to peers and connect to servers.
|
||||
fn configure_connections(&self, profile: &ProfileIdentity, listen: bool, peers: bool, servers: bool);
|
||||
|
||||
/// Create a new profile encrypted with pass
|
||||
fn create_profile(&self, nick: &str, pass: &str, autostart: bool);
|
||||
|
||||
|
@ -56,6 +59,21 @@ pub trait CwtchLib {
|
|||
/// Cause profile to unblock conversation
|
||||
fn unblock_conversation(&self, profile: &ProfileIdentity, conversation_id: ConversationID);
|
||||
|
||||
/// Attempt to peer with a a new peer
|
||||
fn peer_with(&self, profile: &ProfileIdentity, new_peer_address: &str);
|
||||
|
||||
/// manually disconnect from a conversation
|
||||
fn disconnect_from_peer(&self, profile: &ProfileIdentity, peer_id: &str);
|
||||
|
||||
/// starts a search process on a profile for pattern. returns a searchID that resulting SearchResult messages will have
|
||||
fn search_conversations(&self, profile: &ProfileIdentity, pattern: &str) -> String;
|
||||
|
||||
/// Get an ACL for a conversation
|
||||
fn get_conversation_access_control_list(&self, profile: &ProfileIdentity, conversation_id: ConversationID) -> Result<ACL, CwtchError>;
|
||||
|
||||
/// Update a conversation's ACL
|
||||
fn update_conversation_access_control_list(&self, profile: &ProfileIdentity, conversation_id: ConversationID, acl: ACL);
|
||||
|
||||
/// Get a specific message for a conversation by its id
|
||||
fn get_message_by_id(&self, profile: &ProfileIdentity, conversation_id: ConversationID, message_id: i32) -> String;
|
||||
|
||||
|
@ -68,7 +86,7 @@ pub trait CwtchLib {
|
|||
) -> String;
|
||||
|
||||
/// Bulk get messages starting at message index and of count amoung
|
||||
fn get_messages(&self, profile: &ProfileIdentity, conversation_id: ConversationID, message_index: i32, count: i32) -> String;
|
||||
fn get_messages(&self, profile: &ProfileIdentity, conversation_id: ConversationID, message_index: i32, count: u32) -> String;
|
||||
|
||||
/// Send json of a structs::Message from profile to contact. Returns computed sent message (including index and hash values)
|
||||
fn send_message_raw(&self, profile: &ProfileIdentity, conversation_id: ConversationID, msg: &str) -> String;
|
||||
|
@ -113,6 +131,21 @@ pub trait CwtchLib {
|
|||
/// Cause profile to create a group on server with name
|
||||
fn start_group(&self, profile: &ProfileIdentity, name: &str, server: &str);
|
||||
|
||||
/// Queue joining a server in the out going connections queue
|
||||
fn queue_join_server(&self, profile: &ProfileIdentity, server: &ServerIdentity);
|
||||
|
||||
/// Disconnect from a specific server
|
||||
fn disconnect_from_server(&self, profile: &ProfileIdentity, server: &ServerIdentity);
|
||||
|
||||
/// Publish server status updates for a profile
|
||||
fn publish_server_update(&self, profile: &ProfileIdentity);
|
||||
|
||||
/// Get list of known servers for a profile
|
||||
fn get_server_info_list(&self, profile: &ProfileIdentity);
|
||||
|
||||
/// Delete server information from a profile, preventing future connections for all groups hosted on it
|
||||
fn delete_server_info(&self, profile: &ProfileIdentity, server: &ServerIdentity);
|
||||
|
||||
/// Delete profile with encryption/password check of pass
|
||||
fn delete_profile(&self, profile: &ProfileIdentity, pass: &str);
|
||||
|
||||
|
@ -165,8 +198,8 @@ pub trait CwtchLib {
|
|||
/// Load all servers encrypted by password
|
||||
fn load_servers(&self, password: &str);
|
||||
|
||||
/// Create a new server, encrypted with password, autostart i8 used as bool
|
||||
fn create_server(&self, password: &str, description: &str, autostart: i8);
|
||||
/// Create a new server, encrypted with password
|
||||
fn create_server(&self, password: &str, description: &str, autostart: bool);
|
||||
|
||||
/// Delete the specified server (if password is correct)
|
||||
fn delete_server(&self, server: ServerIdentity, current_password: &str);
|
||||
|
@ -189,9 +222,8 @@ pub trait CwtchLib {
|
|||
/// Set the specified server's attribute of key to val
|
||||
fn set_server_attribute(&self, server: ServerIdentity, key: &str, val: &str);
|
||||
|
||||
// Get debug info (mem, goroutine stats) from lcg in json
|
||||
// todo: reenable in 1.12
|
||||
//fn get_debug_info(&self) -> String;
|
||||
/// Get debug info (mem, goroutine stats) from lcg in json
|
||||
fn get_debug_info(&self) -> String;
|
||||
}
|
||||
|
||||
/// Create a new CwtchLib that is backed by bindings to libcwtch-go
|
||||
|
|
|
@ -94,6 +94,18 @@ pub struct AccessControl {
|
|||
pub read: bool,
|
||||
/// Allows a handle to append new messages to the conversation
|
||||
pub append: bool,
|
||||
|
||||
/// Profile should automatically try to connect with peer
|
||||
pub auto_connect: bool,
|
||||
|
||||
/// Profile should automatically exchange attributes like Name, Profile Image, etc.
|
||||
pub exchange_attributes: bool,
|
||||
|
||||
/// Allows a handle to share files to a conversation
|
||||
pub share_files: bool,
|
||||
|
||||
/// Indicates that certain filetypes should be autodownloaded and rendered when shared by this contact
|
||||
pub render_images: bool
|
||||
}
|
||||
|
||||
/// represents an access control list for a conversation. Mapping handles to conversation functions
|
||||
|
|
Loading…
Reference in New Issue