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