1 #region Copyright notice and license
2 // Copyright 2015 gRPC authors.
3 //
4 // Licensed under the Apache License, Version 2.0 (the "License");
5 // you may not use this file except in compliance with the License.
6 // You may obtain a copy of the License at
7 //
8 //     http://www.apache.org/licenses/LICENSE-2.0
9 //
10 // Unless required by applicable law or agreed to in writing, software
11 // distributed under the License is distributed on an "AS IS" BASIS,
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 // See the License for the specific language governing permissions and
14 // limitations under the License.
15 #endregion
16 using System;
17 using System.Runtime.InteropServices;
18 using System.Threading;
19 using System.Threading.Tasks;
20 
21 namespace Grpc.Core.Internal
22 {
23     /// <summary>
24     /// grpc_channel_credentials from <c>grpc/grpc_security.h</c>
25     /// </summary>
26     internal class ChannelCredentialsSafeHandle : SafeHandleZeroIsInvalid
27     {
28         static readonly NativeMethods Native = NativeMethods.Get();
29 
ChannelCredentialsSafeHandle()30         private ChannelCredentialsSafeHandle()
31         {
32         }
33 
CreateNullCredentials()34         public static ChannelCredentialsSafeHandle CreateNullCredentials()
35         {
36             var creds = new ChannelCredentialsSafeHandle();
37             creds.SetHandle(IntPtr.Zero);
38             return creds;
39         }
40 
CreateSslCredentials(string pemRootCerts, KeyCertificatePair keyCertPair, IntPtr verifyPeerCallbackTag)41         public static ChannelCredentialsSafeHandle CreateSslCredentials(string pemRootCerts, KeyCertificatePair keyCertPair, IntPtr verifyPeerCallbackTag)
42         {
43             if (keyCertPair != null)
44             {
45                 return Native.grpcsharp_ssl_credentials_create(pemRootCerts, keyCertPair.CertificateChain, keyCertPair.PrivateKey, verifyPeerCallbackTag);
46             }
47             else
48             {
49                 return Native.grpcsharp_ssl_credentials_create(pemRootCerts, null, null, verifyPeerCallbackTag);
50             }
51         }
52 
CreateComposite(ChannelCredentialsSafeHandle channelCreds, CallCredentialsSafeHandle callCreds)53         public static ChannelCredentialsSafeHandle CreateComposite(ChannelCredentialsSafeHandle channelCreds, CallCredentialsSafeHandle callCreds)
54         {
55             return Native.grpcsharp_composite_channel_credentials_create(channelCreds, callCreds);
56         }
57 
ReleaseHandle()58         protected override bool ReleaseHandle()
59         {
60             Native.grpcsharp_channel_credentials_release(handle);
61             return true;
62         }
63     }
64 }
65