Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit5aba490

Browse files
authored
Update builder.rs
1 parent2f8cc89 commit5aba490

File tree

1 file changed

+29
-5
lines changed

1 file changed

+29
-5
lines changed

‎rmqtt-net/src/builder.rs‎

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ use tokio_tungstenite::{
6262
usecrate::stream::Dispatcher;
6363
#[cfg(feature ="ws")]
6464
usecrate::ws::WsStream;
65-
usecrate::{Error,Result};
65+
usecrate::{CertInfo,Error,Result,TlsCertExtractor};
6666

6767
/// Configuration builder for MQTT server instances
6868
#[derive(Clone,Debug)]
@@ -659,7 +659,7 @@ where
659659
#[inline]
660660
pubfntcp(self) ->Result<Dispatcher<S>>{
661661
ifmatches!(self.typ,ListenerType::TCP){
662-
Ok(Dispatcher::new(self.socket,self.remote_addr,self.cfg))
662+
Ok(Dispatcher::new(self.socket,self.remote_addr,None,self.cfg))
663663
}else{
664664
Err(anyhow!("Protocol mismatch: Expected TCP listener"))
665665
}
@@ -680,7 +680,10 @@ where
680680
Ok(Err(e)) =>returnErr(e.into()),
681681
Err(_) =>returnErr(crate::MqttError::ReadTimeout.into()),
682682
};
683-
Ok(Dispatcher::new(tls_s,self.remote_addr,self.cfg))
683+
684+
let cert_info =Self::get_extract_cert_info(&tls_s,self.cfg.cert_cn_as_username);
685+
686+
Ok(Dispatcher::new(tls_s,self.remote_addr, cert_info,self.cfg))
684687
}
685688

686689
#[cfg(feature ="ws")]
@@ -695,7 +698,7 @@ where
695698
.await
696699
{
697700
Ok(Ok(ws_stream)) =>{
698-
Ok(Dispatcher::new(WsStream::new(ws_stream),self.remote_addr,self.cfg.clone()))
701+
Ok(Dispatcher::new(WsStream::new(ws_stream),self.remote_addr,None,self.cfg.clone()))
699702
}
700703
Ok(Err(e)) =>Err(e.into()),
701704
Err(_) =>Err(crate::MqttError::ReadTimeout.into()),
@@ -718,14 +721,35 @@ where
718721
Ok(Err(e)) =>returnErr(e.into()),
719722
Err(_) =>returnErr(crate::MqttError::ReadTimeout.into()),
720723
};
724+
725+
let cert_info =Self::get_extract_cert_info(&tls_s,self.cfg.cert_cn_as_username);
726+
721727
match tokio::time::timeout(self.cfg.handshake_timeout,accept_hdr_async(tls_s, on_handshake)).await{
722728
Ok(Ok(ws_stream)) =>{
723-
Ok(Dispatcher::new(WsStream::new(ws_stream),self.remote_addr,self.cfg.clone()))
729+
Ok(Dispatcher::new(WsStream::new(ws_stream),self.remote_addr,cert_info,self.cfg.clone()))
724730
}
725731
Ok(Err(e)) =>Err(e.into()),
726732
Err(_) =>Err(crate::MqttError::ReadTimeout.into()),
727733
}
728734
}
735+
736+
#[inline]
737+
#[cfg(feature ="tls")]
738+
fnget_extract_cert_info<C:TlsCertExtractor>(io:&C,cert_cn_as_username:bool) ->Option<CertInfo>{
739+
if cert_cn_as_username{
740+
// Extract cert info BEFORE consuming self
741+
let cert_info:Option<CertInfo> = io.extract_cert_info();
742+
// Certificate info is now available in s.cert_info
743+
ifletSome(ref cert) = cert_info{
744+
log::info!("Client certificate: {}", cert);
745+
log::info!("CN: {:?}, Org: {:?}", cert.common_name, cert.organization);
746+
}
747+
log::info!("cert_info: {:?}", cert_info);
748+
cert_info
749+
}else{
750+
None
751+
}
752+
}
729753
}
730754

731755
#[allow(clippy::result_large_err)]

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp