1 // Copyright 2020 TiKV Project Authors. Licensed under Apache-2.0. 2 3 #[cfg(feature = "_secure")] 4 mod auth_context; 5 #[cfg(feature = "_secure")] 6 mod credentials; 7 8 use grpcio_sys::{grpc_channel_credentials, grpc_server_credentials}; 9 10 #[cfg(feature = "_secure")] 11 pub use self::auth_context::*; 12 #[cfg(feature = "_secure")] 13 pub use self::credentials::{ 14 CertificateRequestType, ChannelCredentialsBuilder, ServerCredentialsBuilder, 15 ServerCredentialsFetcher, 16 }; 17 18 /// Client-side SSL credentials. 19 /// 20 /// Use [`ChannelCredentialsBuilder`] or [`ChannelCredentials::google_default_credentials`] to 21 /// build a [`ChannelCredentials`]. 22 pub struct ChannelCredentials { 23 creds: *mut grpc_channel_credentials, 24 } 25 26 impl ChannelCredentials { as_mut_ptr(&mut self) -> *mut grpc_channel_credentials27 pub fn as_mut_ptr(&mut self) -> *mut grpc_channel_credentials { 28 self.creds 29 } 30 31 /// Creates an insecure channel credentials object. insecure() -> ChannelCredentials32 pub fn insecure() -> ChannelCredentials { 33 unsafe { 34 let creds = grpcio_sys::grpc_insecure_credentials_create(); 35 ChannelCredentials { creds } 36 } 37 } 38 } 39 40 impl Drop for ChannelCredentials { drop(&mut self)41 fn drop(&mut self) { 42 unsafe { grpcio_sys::grpc_channel_credentials_release(self.creds) } 43 } 44 } 45 46 /// Server-side SSL credentials. 47 /// 48 /// Use [`ServerCredentialsBuilder`] to build a [`ServerCredentials`]. 49 pub struct ServerCredentials { 50 creds: *mut grpc_server_credentials, 51 // Double allocation to get around C call. 52 #[cfg(feature = "_secure")] 53 _fetcher: Option<Box<Box<dyn crate::ServerCredentialsFetcher + Send + Sync>>>, 54 } 55 56 unsafe impl Send for ServerCredentials {} 57 58 impl ServerCredentials { 59 /// Creates an insecure server credentials object. insecure() -> ServerCredentials60 pub fn insecure() -> ServerCredentials { 61 unsafe { 62 let creds = grpcio_sys::grpc_insecure_server_credentials_create(); 63 ServerCredentials::from_raw(creds) 64 } 65 } 66 from_raw(creds: *mut grpc_server_credentials) -> ServerCredentials67 pub(crate) unsafe fn from_raw(creds: *mut grpc_server_credentials) -> ServerCredentials { 68 ServerCredentials { 69 creds, 70 #[cfg(feature = "_secure")] 71 _fetcher: None, 72 } 73 } 74 as_mut_ptr(&mut self) -> *mut grpc_server_credentials75 pub fn as_mut_ptr(&mut self) -> *mut grpc_server_credentials { 76 self.creds 77 } 78 } 79 80 impl Drop for ServerCredentials { drop(&mut self)81 fn drop(&mut self) { 82 unsafe { 83 grpcio_sys::grpc_server_credentials_release(self.creds); 84 } 85 } 86 } 87