From c9078654443cbda4eaa6b93d0e9015f3cf69385c Mon Sep 17 00:00:00 2001 From: vms Date: Tue, 30 Jun 2020 14:45:04 +0300 Subject: [PATCH] find ipsf address by the env variable --- examples/ipfs_node/Config.toml | 2 +- examples/ipfs_node/src/main.rs | 6 ++-- .../artifacts/wasm_modules/ipfs_node.wasm | Bin 144134 -> 135797 bytes examples/ipfs_node/wasm/ipfs_node/src/main.rs | 29 +++++++----------- examples/ipfs_node/wasm/ipfs_node/wit | 8 ++--- 5 files changed, 19 insertions(+), 26 deletions(-) diff --git a/examples/ipfs_node/Config.toml b/examples/ipfs_node/Config.toml index c19e5d69..d340ff91 100644 --- a/examples/ipfs_node/Config.toml +++ b/examples/ipfs_node/Config.toml @@ -8,7 +8,7 @@ ipfs = "/usr/local/bin/ipfs" [core_module.wasi] - envs = [] + envs = ["IPFS_ADDR=/dns4/relay02.fluence.dev/tcp/15001"] preopened_files = ["./wasm/artifacts"] mapped_dirs = { "tmp" = "./wasm/artifacts" } diff --git a/examples/ipfs_node/src/main.rs b/examples/ipfs_node/src/main.rs index 865d78e3..5fb81000 100644 --- a/examples/ipfs_node/src/main.rs +++ b/examples/ipfs_node/src/main.rs @@ -34,11 +34,11 @@ fn main() { println!("ipfs node interface is\n{}", ipfs_node.get_interface()); - let node_addresses = ipfs_node - .call_module("ipfs_node.wasm", "get_addresses", &[]) + let node_address = ipfs_node + .call_module("ipfs_node.wasm", "get_address", &[]) .unwrap(); - println!("ipfs node addresses are:\n{:?}", node_addresses); + println!("ipfs node address is:\n{:?}", node_address); let result = ipfs_node .call_code( diff --git a/examples/ipfs_node/wasm/artifacts/wasm_modules/ipfs_node.wasm b/examples/ipfs_node/wasm/artifacts/wasm_modules/ipfs_node.wasm index 67d21f9cdde222f92ee550a091c7c696508d6ea1..6028f984525a08ad7c0e8307c74426da4f0614b9 100644 GIT binary patch delta 28253 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 Jak~6`{~ugt;Z*0xTVZpr`>s1pzPKK@KP? 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

=b3*om) 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 diff --git a/examples/ipfs_node/wasm/ipfs_node/src/main.rs b/examples/ipfs_node/wasm/ipfs_node/src/main.rs index 77fcd5d6..74a9811c 100644 --- a/examples/ipfs_node/wasm/ipfs_node/src/main.rs +++ b/examples/ipfs_node/wasm/ipfs_node/src/main.rs @@ -24,6 +24,7 @@ use crate::result::{RESULT_PTR, RESULT_SIZE}; use crate::path::to_full_path; const RESULT_FILE_PATH: &str = "/tmp/ipfs_rpc_file"; +const IPFS_ADDR_ENV_NAME: &str = "IPFS_ADDR"; pub fn main() { let msg = "ipfs_node.main: WASI initialization finished"; @@ -92,32 +93,24 @@ pub unsafe fn get(hash_ptr: *mut u8, hash_size: usize) { } #[no_mangle] -pub unsafe fn get_addresses() { - let msg = "ipfs_node.get_addresses".to_string(); +pub unsafe fn get_address() { + let msg = "ipfs_node.get_address".to_string(); log_utf8_string(msg.as_ptr() as _, msg.len() as _); - let cmd = "id -f''"; - let result = ipfs(cmd.as_ptr() as _, cmd.len() as _); - - let multiaddrs = if result == 0 { - String::from_raw_parts( - *RESULT_PTR.get_mut() as _, - *RESULT_SIZE.get_mut(), - *RESULT_SIZE.get_mut(), - ) - } else { - "host ipfs call failed".to_string() + let ipfs_address = match std::env::var(IPFS_ADDR_ENV_NAME) { + Ok(addr) => addr, + Err(e) => format!("getting {} env variable failed with error {:?}", IPFS_ADDR_ENV_NAME, e) }; let msg = format!( - "ipfs_node.get_addresses: node addresses are {} \n", - multiaddrs + "ipfs_node.get_address: node address is {} \n", + ipfs_address ); log_utf8_string(msg.as_ptr() as _, msg.len() as _); - *RESULT_PTR.get_mut() = multiaddrs.as_ptr() as _; - *RESULT_SIZE.get_mut() = multiaddrs.len(); - std::mem::forget(multiaddrs); + *RESULT_PTR.get_mut() = ipfs_address.as_ptr() as _; + *RESULT_SIZE.get_mut() = ipfs_address.len(); + std::mem::forget(ipfs_address); } #[link(wasm_import_module = "host")] diff --git a/examples/ipfs_node/wasm/ipfs_node/wit b/examples/ipfs_node/wasm/ipfs_node/wit index 9773b342..bc2b1e61 100644 --- a/examples/ipfs_node/wasm/ipfs_node/wit +++ b/examples/ipfs_node/wasm/ipfs_node/wit @@ -25,10 +25,10 @@ ;; import ipfs put/get function (@interface type (func (param string) (result string))) ;; 8 -;; export ipfs.get_addresses function +;; export ipfs.get_address function (@interface type (func (result string))) ;; 9 -;; export ipfs.get_addresses function +;; export ipfs.get_address function (@interface type (func )) ;; 10 (@interface export "allocate" (func 0)) ;; 0 @@ -40,7 +40,7 @@ (@interface export "put" (func 5)) ;; 6 (@interface export "get" (func 6)) ;; 7 -(@interface export "get_addresses" (func 10)) ;; 8 +(@interface export "get_address" (func 10)) ;; 8 ;; adapter for export function put (@interface func (type 7) @@ -74,7 +74,7 @@ call-core 1 ;; call deallocate ) -;; adapter for export function get_addresses +;; adapter for export function get_address (@interface func (type 9) call-core 8 ;; call self.get call-core 3 ;; call get_result_ptr