AtherEnergy / rumqtt

Pure rust mqtt cilent
The Unlicense
203 stars 72 forks source link

invalid CA error catch with SSL #165

Open Kxtreme opened 5 years ago

Kxtreme commented 5 years ago

when connecting to an SSL broker and set_ca(/invalid cert/), I can't catch the error example:


        let reconnect_options = ReconnectOptions::Always(5);
        let mqtt_options = MqttOptions::new("rumqttRules".to_string(), "127.0.0.1".to_string(),8883u16)
            .set_keep_alive(30)
            .set_reconnect_opts(reconnect_options)
            .set_ca(include_bytes!("dummy_ca"))
            .set_clean_session(false);

if let Ok((mqtt_client, notifications)) = MqttClient::start(mqtt_options) {
     if let Ok(qos) = QoS::from_u8(0u8) {
           if let Err(error) = client.subscribe(topic, 0) {
               println!("ERROR: {:?}", error);
           }
     }
     for notification in notifications {
           //notification handling
     }
} else {
//Err handling
}

output:


thread '<unnamed>' panicked at 'called `Option::unwrap()` on a `None` value', src/libcore/option.rs:347:21
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
stack backtrace:
   0: std::sys::unix::backtrace::tracing::imp::unwind_backtrace
             at src/libstd/sys/unix/backtrace/tracing/gcc_s.rs:39
   1: std::sys_common::backtrace::_print
             at src/libstd/sys_common/backtrace.rs:71
   2: std::panicking::default_hook::{{closure}}
             at src/libstd/sys_common/backtrace.rs:59
             at src/libstd/panicking.rs:197
   3: std::panicking::default_hook
             at src/libstd/panicking.rs:211
   4: std::panicking::rust_panic_with_hook
             at src/libstd/panicking.rs:474
   5: std::panicking::continue_panic_fmt
             at src/libstd/panicking.rs:381
   6: rust_begin_unwind
             at src/libstd/panicking.rs:308
   7: core::panicking::panic_fmt
             at src/libcore/panicking.rs:85
   8: core::panicking::panic
             at src/libcore/panicking.rs:49
   9: core::option::Option<T>::unwrap
             at /rustc/a53f9df32fbb0b5f4382caaad8f1a46f36ea887c/src/libcore/macros.rs:12
  10: rumqtt::client::connection::Connection::handle_connection_error
             at /home/{username}/.cargo/git/checkouts/rumqtt-97ac1717aa98c207/f1d9885/src/client/connection.rs:278
  11: rumqtt::client::connection::Connection::connect_or_not
             at /home/{username}/.cargo/git/checkouts/rumqtt-97ac1717aa98c207/f1d9885/src/client/connection.rs:133
  12: rumqtt::client::connection::Connection::mqtt_eventloop
             at /home/{username}/.cargo/git/checkouts/rumqtt-97ac1717aa98c207/f1d9885/src/client/connection.rs:92
  13: rumqtt::client::connection::Connection::run::{{closure}}
             at /home/{username}/.cargo/git/checkouts/rumqtt-97ac1717aa98c207/f1d9885/src/client/connection.rs:60

I intended to capture this error so that I can inform the error cause.

tekjar commented 5 years ago

This bug is fixed in shutdown branch. I'll bring the fix to master before merging the branch as it might take some time.