inre / rust-mq Goto Github PK
View Code? Open in Web Editor NEWRustMQ is the MQTT client written on pure Rust.
License: MIT License
RustMQ is the MQTT client written on pure Rust.
License: MIT License
https://github.com/inre/rust-mq/blob/master/mqtt3/src/read.rs#L155
Hi @inre. Is that correct? Maybe you forgot to do take(len)
?
HI, I see that netopt has been updated to use latest openssl. Is it possible to publish it?
Hi.
Would it be possible to allow usage of this crate in #nostd devices, possibly behind a feature gate?
I can contribute a first edition PR if you guys think it would be a nice addition to your crate?
HellO! When attempting to build this on Mac Sierra (10.12.6
) I ran into the following issue:
$ cargo build
Compiling openssl v0.7.14
Compiling openssl-sys-extras v0.7.14
error: failed to run custom build command for `openssl v0.7.14`
process didn't exit successfully: `/Users/gorup/Dev/rust/toby/target/debug/build/openssl-dcf8b662fbd9cabe/build-script-build` (exit code: 101)
--- stdout
TARGET = Some("x86_64-apple-darwin")
OPT_LEVEL = Some("0")
TARGET = Some("x86_64-apple-darwin")
HOST = Some("x86_64-apple-darwin")
TARGET = Some("x86_64-apple-darwin")
TARGET = Some("x86_64-apple-darwin")
HOST = Some("x86_64-apple-darwin")
CC_x86_64-apple-darwin = None
CC_x86_64_apple_darwin = None
HOST_CC = None
CC = None
HOST = Some("x86_64-apple-darwin")
TARGET = Some("x86_64-apple-darwin")
HOST = Some("x86_64-apple-darwin")
CFLAGS_x86_64-apple-darwin = None
CFLAGS_x86_64_apple_darwin = None
HOST_CFLAGS = None
CFLAGS = None
DEBUG = Some("true")
running: "cc" "-O0" "-ffunction-sections" "-fdata-sections" "-fPIC" "-g" "-m64" "-Wall" "-Wextra" "-o" "/Users/gorup/Dev/rust/toby/target/debug/build/openssl-f2716e2019382eec/out/src/c_helpers.o" "-c" "src/c_helpers.c"
cargo:warning=src/c_helpers.c:1:10: fatal error: 'openssl/ssl.h' file not found
cargo:warning=#include <openssl/ssl.h>
cargo:warning= ^~~~~~~~~~~~~~~
cargo:warning=1 error generated.
exit code: 1
--- stderr
thread 'main' panicked at '
Internal error occurred: Command "cc" "-O0" "-ffunction-sections" "-fdata-sections" "-fPIC" "-g" "-m64" "-Wall" "-Wextra" "-o" "/Users/gorup/Dev/rust/toby/target/debug/build/openssl-f2716e2019382eec/out/src/c_helpers.o" "-c" "src/c_helpers.c" with args "cc" did not execute successfully (status code exit code: 1).
', /Users/gorup/.cargo/registry/src/github.com-1ecc6299db9ec823/gcc-0.3.54/src/lib.rs:1670:4
note: Run with `RUST_BACKTRACE=1` for a backtrace.
warning: build failed, waiting for other jobs to finish...
error: failed to run custom build command for `openssl-sys-extras v0.7.14`
process didn't exit successfully: `/Users/gorup/Dev/rust/toby/target/debug/build/openssl-sys-extras-2793cad237f238db/build-script-build` (exit code: 101)
--- stdout
TARGET = Some("x86_64-apple-darwin")
OPT_LEVEL = Some("0")
TARGET = Some("x86_64-apple-darwin")
HOST = Some("x86_64-apple-darwin")
TARGET = Some("x86_64-apple-darwin")
TARGET = Some("x86_64-apple-darwin")
HOST = Some("x86_64-apple-darwin")
CC_x86_64-apple-darwin = None
CC_x86_64_apple_darwin = None
HOST_CC = None
CC = None
HOST = Some("x86_64-apple-darwin")
TARGET = Some("x86_64-apple-darwin")
HOST = Some("x86_64-apple-darwin")
CFLAGS_x86_64-apple-darwin = None
CFLAGS_x86_64_apple_darwin = None
HOST_CFLAGS = None
CFLAGS = None
DEBUG = Some("true")
running: "cc" "-O0" "-ffunction-sections" "-fdata-sections" "-fPIC" "-g" "-m64" "-Wall" "-Wextra" "-o" "/Users/gorup/Dev/rust/toby/target/debug/build/openssl-sys-extras-dad78d7a0ee72c91/out/src/openssl_shim.o" "-c" "src/openssl_shim.c"
cargo:warning=src/openssl_shim.c:1:10: fatal error: 'openssl/hmac.h' file not found
cargo:warning=#include <openssl/hmac.h>
cargo:warning= ^~~~~~~~~~~~~~~~
cargo:warning=1 error generated.
exit code: 1
--- stderr
thread 'main' panicked at '
Internal error occurred: Command "cc" "-O0" "-ffunction-sections" "-fdata-sections" "-fPIC" "-g" "-m64" "-Wall" "-Wextra" "-o" "/Users/gorup/Dev/rust/toby/target/debug/build/openssl-sys-extras-dad78d7a0ee72c91/out/src/openssl_shim.o" "-c" "src/openssl_shim.c" with args "cc" did not execute successfully (status code exit code: 1).
', /Users/gorup/.cargo/registry/src/github.com-1ecc6299db9ec823/gcc-0.3.54/src/lib.rs:1670:4
note: Run with `RUST_BACKTRACE=1` for a backtrace.
I solved the issue by adding
export OPENSSL_INCLUDE_DIR=`brew --prefix openssl`/include
export OPENSSL_LIB_DIR=`brew --prefix openssl`/lib
export DEP_OPENSSL_INCLUDE=`brew --prefix openssl`/include
to my ~/.zshrc
.
I found this solution on another rust package, rust-openssl
Perhaps you could implement a fix for this, or put it in the README? Thx
Would it be possible to upgrade the openssl dependency of netopt from 0.7
to the current 0.9
. The 0.7
version does not support recent versions (1.1.0) of OpenSSL that are currently in use in distros such as Arch and Fedora 26.
Perhaps the ssl
feature could also be removed from the default features and instead be opt-in only?
Background: I posted a question to stack overflow: http://stackoverflow.com/questions/39210834/do-any-mqtt-clients-actually-reuse-packet-identifiers
The packet identifier is required for certain MQTT control packets (http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/csprd02/mqtt-v3.1.1-csprd02.html#_Toc385349761). It's defined by the standard as a 16bit integer (presumably), and is generated by each client. The identifiers are reusable by the client after the acknowledgement packet is received. So the standard allows up to 64k in-flight messages.
rust-mq/mqtt3 implements the packet identifier as a u16, and we have this implementation:
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
pub struct PacketIdentifier(pub u16);
impl PacketIdentifier {
pub fn zero() -> PacketIdentifier {
PacketIdentifier(0)
}
pub fn next(&self) -> PacketIdentifier {
PacketIdentifier(self.0 + 1)
}
}
Problem 1: next
can be made to overflow and panic if more than 64k messages requiring a packet identifier is sent by a single client. (My very first test client panicked :-)
Problem 2: even if it didn't panic, each client would still be limited to a total of 64k messages requiring a packet identifier.
I've noticed that between 0.1.2 and the current master, ClientOptions
added a Send
constraint to the incoming/outgoing stores. I need this for a project, so at first I attempted to reference each of mqttc
/mqtt3
/netopts
to this repository, but that seems to cause rustc to re-compile the packages, resulting in "type mismatch" errors when implementing the Store
trait. There's probably a way around that, but I figure it may just be easier for me and others if a version 0.1.3 is published with the recent changes.
Hi,
in mqttc-0.1.4/src/client.rs, line 690:
fn _write_packet(&mut self, packet: &Packet) {
trace!("{:?}", packet);
self.conn.write_packet(&packet).unwrap();
}
the unwrap()
panics:
thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: Io(Error { repr: Os { code: 32, message: "Broken pipe" } })', src/libcore/result.rs:799
stack backtrace:
1: 0x7f0d11cdadcf - std::sys::backtrace::tracing::imp::write::h6f1d53a70916b90d
2: 0x7f0d11cdf48d - std::panicking::default_hook::{{closure}}::h137e876f7d3b5850
3: 0x7f0d11cddfe0 - std::panicking::default_hook::h0ac3811ec7cee78c
4: 0x7f0d11cde5e8 - std::panicking::rust_panic_with_hook::hc303199e04562edf
5: 0x7f0d11cde482 - std::panicking::begin_panic::h6ed03353807cf54d
6: 0x7f0d11cde3c0 - std::panicking::begin_panic_fmt::hc321cece241bb2f5
7: 0x7f0d11cde341 - rust_begin_unwind
8: 0x7f0d11d1215f - core::panicking::panic_fmt::h27224b181f9f037f
9: 0x7f0d11ad97a2 - core::result::unwrap_failed::hf1a3b54c69e1eeef
at /build/rustc-1.13.0+dfsg1/src/libcore/macros.rs:29
10: 0x7f0d11acfad3 - <core::result::Result<T, E>>::unwrap::haa3663173b183954
at /build/rustc-1.13.0+dfsg1/src/libcore/result.rs:737
11: 0x7f0d11aeb64c - mqttc::client::Client::_write_packet::h28186173ff27678d
at /home/xav/.cargo/registry/src/github.com-1ecc6299db9ec823/mqttc-0.1.4/src/client.rs:690
12: 0x7f0d11aec2f5 - mqttc::client::Client::_publish::h83daa8036786cf37
at /home/xav/.cargo/registry/src/github.com-1ecc6299db9ec823/mqttc-0.1.4/src/client.rs:647
13: 0x7f0d11ae2bbb - <mqttc::client::Client as mqttc::PubSub>::publish::hba48b09bebf91cde
at /home/xav/.cargo/registry/src/github.com-1ecc6299db9ec823/mqttc-0.1.4/src/client.rs:215
...
Could it return something meaningful instead ?
Hi. Inspired by your work, I'm creating a new mqtt client implementation with mio. I'm using large parts of your code (for now). I'm planning to add MIT or UNLICENCE. Can you please let me know if that is ok?
I just wanted to check if you provide a method or have a recommendation on, how one would best go about ensuring – when a client is subscribed to multiple topics – which topic the incoming message matches to?
Eg. My client is subscribed to "/stuff/#" and "/things/awesome_things/#" and receives a message with the topic "/things/awesome_things/sandwich". How would I check which subscription topic the incoming message related to?
Sorry if that's a bit convoluted!
It's currently possible to set the retain flag on a message and then publish it. The packet published to the broker has the retain bit set to 0.
Reconnect is working but not as specified by ReconnnectAfter
duration
opts.set_keep_alive(15);
opts.set_reconnect(ReconnectMethod::ReconnectAfter(Duration::new(5,0)));
let mut client = opts.connect(address.as_str(), netopt).unwrap();
client.subscribe(topic.as_str()).unwrap();
client.await().unwrap();
loop {
match client.await() {
Ok(result) => match result {
Some(message) => println!("{:?}", message),
None => println!("."),
},
Err(_) => continue,
}
}
My test: Take the broker down and bring it up immediately again.
Here is the client log
ERROR:mqttc::client: UnexpectedEof
INFO:mqttc::client: Reconnect in 5 seconds
WARN:mqttc::client: mqttc is already connected
.
DEBUG:mqttc::client: Pingreq
TRACE:mqttc::client: Pingreq
ERROR:mqttc::client: UnexpectedEof
INFO:mqttc::client: Reconnect in 5 seconds
WARN:mqttc::client: mqttc is already connected
INFO:mqttc::client: Disconnected mqttc_2017656392
INFO:mqttc::client: Reconnect in 5 seconds
DEBUG:mqttc::client: Connect mqttc_2017656392
TRACE:mqttc::client: Connect(Connect { protocol: MQTT(4), keep_alive: 15, client_id: "mqttc_2017656392", clean_session: true, last_will: None, username: None, password: None })
TRACE:mqttc::client: Connack(Connack { session_present: false, code: Accepted })
INFO:mqttc::client: Connection accepted
Reconnection is being tried but it's failing because of ClientState::Connected. Actual client disconnection is happening after there is no PingResp
and the next reconnect try is being successful.
Is this the expected behaviour? Shouldn't client be in DisconnectedState
before retrying connection?
One use I saw is PubOpt::new
, whose first arg is Qos. At the moment, I have to add mqtt3 do Cargo.toml, which I would rather avoid (since it's an implicit dependency).
Slight modification to subscribe example in mqttc
loop {
match client.await() {
Ok(result) => {
match result {
Some(message) => println!("{:?}", message),
None => println!("."),
}
}
Err(_) => continue,
}
}
Start rust-mq
client
RUST_LOG=info,mqttc cargo run --example sub -- 127.0.0.1:1883 a/b/c
Keep publishing with mosquitto_pub
while true; do sleep 1; mosquitto_pub -t "a/b/c" -m "Hello World"; done
Take down the broker and bring it up again. rust-mq
client won't be receiving publishes anymore
https://github.com/inre/rust-mq/blob/master/mqtt3/src/write.rs#L74
Maybe all the writes should be replaced with write_all
since write
doesn't guarantee complete writes? This would be problem while doing synchronous request/response since you can't do a read_incoming_mqtt
call immediately after write_packet
Hi, I'm a n00b at MQTT - does it support http_proxy to allow events to be sent out from inside enterprises?
Hello! Can i use cert x.509 for Tls v1.2? Please do write a mini tutorial. Thks
In the codebase the call to self_disconnect
is commented. Why? This will prevent sending any kind of proper DISCONNECT
package to the broker.
https://github.com/inre/rust-mq/blob/master/mqttc/src/client.rs#L238
Is it possible to use same client to subscribe (and read incoming messages) and publish at the same time?
loop {
match client.await().unwrap() {
Some(message) => println!("{:?}", message),
None => {
println!(".");
}
}
}
Since this is blocking, where do I do my client.publish()
? Can you please write an example where a client does both subscribe and publish?
I'm new to rust, and trying to build this on OSX fails and none of the workarounds with brew and INCLIDE/LIB path exports work. I might be able to figure it out eventually, but it seems like this unnecessary hurdle could be avoided.
I have a compiler error. I am building on RPi4 4G using the latest RPiOS.
Linux raspberrypi 5.4.83-v7l+ #1379 SMP Mon Dec 14 13:11:54 GMT 2020 armv7l GNU/Linux
Using libssl.so.1.1 *
Steps:
$ cargo new --bin --vcs git mqttctl
Edit Cargo.toml
[dependencies]
mqttc = "0.1.4"
Do I have to use the github version?
$ cargo build
Updating crates.io index
Compiling libc v0.2.84
Compiling pkg-config v0.3.19
Compiling gcc v0.3.55
Compiling log v0.4.14
Compiling lazy_static v0.2.11
Compiling bitflags v0.7.0
Compiling byteorder v0.4.2
Compiling cfg-if v1.0.0
Compiling mqtt3 v0.1.4
Compiling log v0.3.9
Compiling openssl-sys v0.7.17
Compiling openssl-sys-extras v0.7.14
Compiling openssl v0.7.14
Compiling rand v0.3.23
The following warnings were emitted during compilation:
warning: src/c_helpers.c: In function ‘rust_SSL_clone’:
warning: src/c_helpers.c:4:5: warning: implicit declaration of function ‘CRYPTO_add’; did you mean ‘CRYPTO_free’? [-Wimplicit-function-declaration]
warning: CRYPTO_add(&ssl->references, 1, CRYPTO_LOCK_SSL);
warning: ^~~~~~~~~~
warning: CRYPTO_free
warning: src/c_helpers.c:4:20: error: dereferencing pointer to incomplete type ‘SSL’ {aka ‘struct ssl_st’}
warning: CRYPTO_add(&ssl->references, 1, CRYPTO_LOCK_SSL);
warning: ^~
warning: src/c_helpers.c:4:37: error: ‘CRYPTO_LOCK_SSL’ undeclared (first use in this function); did you mean ‘CRYPTO_LOCK’?
warning: CRYPTO_add(&ssl->references, 1, CRYPTO_LOCK_SSL);
warning: ^~~~~~~~~~~~~~~
warning: CRYPTO_LOCK
warning: src/c_helpers.c:4:37: note: each undeclared identifier is reported only once for each function it appears in
warning: src/c_helpers.c: In function ‘rust_SSL_CTX_clone’:
warning: src/c_helpers.c:8:20: error: dereferencing pointer to incomplete type ‘SSL_CTX’ {aka ‘struct ssl_ctx_st’}
warning: CRYPTO_add(&ctx->references,1,CRYPTO_LOCK_SSL_CTX);
warning: ^~
warning: src/c_helpers.c:8:35: error: ‘CRYPTO_LOCK_SSL_CTX’ undeclared (first use in this function); did you mean ‘CRYPTO_EX_INDEX_SSL_CTX’?
warning: CRYPTO_add(&ctx->references,1,CRYPTO_LOCK_SSL_CTX);
warning: ^~~~~~~~~~~~~~~~~~~
warning: CRYPTO_EX_INDEX_SSL_CTX
warning: src/c_helpers.c: In function ‘rust_X509_clone’:
warning: src/c_helpers.c:12:21: error: dereferencing pointer to incomplete type ‘X509’ {aka ‘struct x509_st’}
warning: CRYPTO_add(&x509->references,1,CRYPTO_LOCK_X509);
warning: ^~
warning: src/c_helpers.c:12:36: error: ‘CRYPTO_LOCK_X509’ undeclared (first use in this function); did you mean ‘CRYPTO_LOCK’?
warning: CRYPTO_add(&x509->references,1,CRYPTO_LOCK_X509);
warning: ^~~~~~~~~~~~~~~~
warning: CRYPTO_LOCK
error: failed to run custom build command for openssl v0.7.14
Caused by:
process didn't exit successfully: /home/pi/RUST/mctl/target/debug/build/openssl-6e0fb680d6c1cab5/build-script-build
(exit code: 101)
--- stdout
TARGET = Some("armv7-unknown-linux-gnueabihf")
OPT_LEVEL = Some("0")
TARGET = Some("armv7-unknown-linux-gnueabihf")
HOST = Some("armv7-unknown-linux-gnueabihf")
TARGET = Some("armv7-unknown-linux-gnueabihf")
TARGET = Some("armv7-unknown-linux-gnueabihf")
HOST = Some("armv7-unknown-linux-gnueabihf")
CC_armv7-unknown-linux-gnueabihf = None
CC_armv7_unknown_linux_gnueabihf = None
HOST_CC = None
CC = None
HOST = Some("armv7-unknown-linux-gnueabihf")
TARGET = Some("armv7-unknown-linux-gnueabihf")
HOST = Some("armv7-unknown-linux-gnueabihf")
CFLAGS_armv7-unknown-linux-gnueabihf = None
CFLAGS_armv7_unknown_linux_gnueabihf = None
HOST_CFLAGS = None
CFLAGS = None
DEBUG = Some("true")
running: "cc" "-O0" "-ffunction-sections" "-fdata-sections" "-fPIC" "-g" "-march=armv7-a" "-I" "/usr/include" "-Wall" "-Wextra" "-o" "/home/pi/RUST/mctl/target/debug/build/openssl-36d5fa2cddf00564/out/src/c_helpers.o" "-c" "src/c_helpers.c"
cargo:warning=src/c_helpers.c: In function ‘rust_SSL_clone’:
cargo:warning=src/c_helpers.c:4:5: warning: implicit declaration of function ‘CRYPTO_add’; did you mean ‘CRYPTO_free’? [-Wimplicit-function-declaration]
cargo:warning= CRYPTO_add(&ssl->references, 1, CRYPTO_LOCK_SSL);
cargo:warning= ^~~~~~~~~~
cargo:warning= CRYPTO_free
cargo:warning=src/c_helpers.c:4:20: error: dereferencing pointer to incomplete type ‘SSL’ {aka ‘struct ssl_st’}
cargo:warning= CRYPTO_add(&ssl->references, 1, CRYPTO_LOCK_SSL);
cargo:warning= ^~
cargo:warning=src/c_helpers.c:4:37: error: ‘CRYPTO_LOCK_SSL’ undeclared (first use in this function); did you mean ‘CRYPTO_LOCK’?
cargo:warning= CRYPTO_add(&ssl->references, 1, CRYPTO_LOCK_SSL);
cargo:warning= ^~~~~~~~~~~~~~~
cargo:warning= CRYPTO_LOCK
cargo:warning=src/c_helpers.c:4:37: note: each undeclared identifier is reported only once for each function it appears in
cargo:warning=src/c_helpers.c: In function ‘rust_SSL_CTX_clone’:
cargo:warning=src/c_helpers.c:8:20: error: dereferencing pointer to incomplete type ‘SSL_CTX’ {aka ‘struct ssl_ctx_st’}
cargo:warning= CRYPTO_add(&ctx->references,1,CRYPTO_LOCK_SSL_CTX);
cargo:warning= ^~
cargo:warning=src/c_helpers.c:8:35: error: ‘CRYPTO_LOCK_SSL_CTX’ undeclared (first use in this function); did you mean ‘CRYPTO_EX_INDEX_SSL_CTX’?
cargo:warning= CRYPTO_add(&ctx->references,1,CRYPTO_LOCK_SSL_CTX);
cargo:warning= ^~~~~~~~~~~~~~~~~~~
cargo:warning= CRYPTO_EX_INDEX_SSL_CTX
cargo:warning=src/c_helpers.c: In function ‘rust_X509_clone’:
cargo:warning=src/c_helpers.c:12:21: error: dereferencing pointer to incomplete type ‘X509’ {aka ‘struct x509_st’}
cargo:warning= CRYPTO_add(&x509->references,1,CRYPTO_LOCK_X509);
cargo:warning= ^~
cargo:warning=src/c_helpers.c:12:36: error: ‘CRYPTO_LOCK_X509’ undeclared (first use in this function); did you mean ‘CRYPTO_LOCK’?
cargo:warning= CRYPTO_add(&x509->references,1,CRYPTO_LOCK_X509);
cargo:warning= ^~~~~~~~~~~~~~~~
cargo:warning= CRYPTO_LOCK
exit code: 1
--- stderr
thread 'main' panicked at '
Internal error occurred: Command "cc" "-O0" "-ffunction-sections" "-fdata-sections" "-fPIC" "-g" "-march=armv7-a" "-I" "/usr/include" "-Wall" "-Wextra" "-o" "/home/pi/RUST/mctl/target/debug/build/openssl-36d5fa2cddf00564/out/src/c_helpers.o" "-c" "src/c_helpers.c" with args "cc" did not execute successfully (status code exit code: 1).
', /home/pi/.cargo/registry/src/github.com-1285ae84e5963aae/gcc-0.3.55/src/lib.rs:1672:5
stack backtrace:
0: rust_begin_unwind
at /rustc/e1884a8e3c3e813aada8254edfa120e85bf5ffca/library/std/src/panicking.rs:495:5
1: std::panicking::begin_panic_fmt
at /rustc/e1884a8e3c3e813aada8254edfa120e85bf5ffca/library/std/src/panicking.rs:437:5
2: gcc::fail
at /home/pi/.cargo/registry/src/github.com-1285ae84e5963aae/gcc-0.3.55/src/lib.rs:1672:5
3: gcc::Build::compile
at /home/pi/.cargo/registry/src/github.com-1285ae84e5963aae/gcc-0.3.55/src/lib.rs:785:13
4: build_script_build::main
at ./build.rs:15:5
5: core::ops::function::FnOnce::call_once
at /rustc/e1884a8e3c3e813aada8254edfa120e85bf5ffca/library/core/src/ops/function.rs:227:5
note: Some details are omitted, run with RUST_BACKTRACE=full
for a verbose backtrace.
warning: build failed, waiting for other jobs to finish...
The following warnings were emitted during compilation:
warning: src/openssl_shim.c: In function ‘SSL_CTX_set_ecdh_auto_shim’:
warning: src/openssl_shim.c:121:41: warning: unused parameter ‘ctx’ [-Wunused-parameter]
warning: int SSL_CTX_set_ecdh_auto_shim(SSL_CTX *ctx, int onoff) {
warning: ~~~~~~~~~^~~
warning: src/openssl_shim.c: In function ‘DH_new_from_params’:
warning: src/openssl_shim.c:132:7: error: dereferencing pointer to incomplete type ‘DH’ {aka ‘struct dh_st’}
warning: dh->p = p;
warning: ^~
warning: src/openssl_shim.c: In function ‘X509_get_extensions_shim’:
warning: src/openssl_shim.c:143:13: error: dereferencing pointer to incomplete type ‘X509’ {aka ‘struct x509_st’}
warning: return x->cert_info ? x->cert_info->extensions : NULL;
warning: ^~
warning: src/openssl_shim.c:144:1: warning: control reaches end of non-void function [-Wreturn-type]
warning: }
warning: ^
error: build failed
hello
what do you mean no server in readme?
you actually mean that this entire crate is just a client? no broker here?
basically, this crate can only provide client code for rust apps to be the device
from that image?
so am i supposed to use a 3rd party mqtt broker to be able to run these examples
?
because i tried running both examples and told me "Connection Refused", so im guessing there is no broker
running at that addres passed on the examples, right?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.