Home | History | Annotate | Download | only in Internal
      1 %YAML 1.2
      2 --- |
      3   <%
      4     native_method_signatures = [
      5       'void grpcsharp_init()',
      6       'void grpcsharp_shutdown()',
      7       'IntPtr grpcsharp_version_string()  // returns not-owned const char*',
      8       'BatchContextSafeHandle grpcsharp_batch_context_create()',
      9       'IntPtr grpcsharp_batch_context_recv_initial_metadata(BatchContextSafeHandle ctx)',
     10       'IntPtr grpcsharp_batch_context_recv_message_length(BatchContextSafeHandle ctx)',
     11       'void grpcsharp_batch_context_recv_message_to_buffer(BatchContextSafeHandle ctx, byte[] buffer, UIntPtr bufferLen)',
     12       'StatusCode grpcsharp_batch_context_recv_status_on_client_status(BatchContextSafeHandle ctx)',
     13       'IntPtr grpcsharp_batch_context_recv_status_on_client_details(BatchContextSafeHandle ctx, out UIntPtr detailsLength)',
     14       'IntPtr grpcsharp_batch_context_recv_status_on_client_trailing_metadata(BatchContextSafeHandle ctx)',
     15       'int grpcsharp_batch_context_recv_close_on_server_cancelled(BatchContextSafeHandle ctx)',
     16       'void grpcsharp_batch_context_reset(BatchContextSafeHandle ctx)',
     17       'void grpcsharp_batch_context_destroy(IntPtr ctx)',
     18       'RequestCallContextSafeHandle grpcsharp_request_call_context_create()',
     19       'CallSafeHandle grpcsharp_request_call_context_call(RequestCallContextSafeHandle ctx)',
     20       'IntPtr grpcsharp_request_call_context_method(RequestCallContextSafeHandle ctx, out UIntPtr methodLength)',
     21       'IntPtr grpcsharp_request_call_context_host(RequestCallContextSafeHandle ctx, out UIntPtr hostLength)',
     22       'Timespec grpcsharp_request_call_context_deadline(RequestCallContextSafeHandle ctx)',
     23       'IntPtr grpcsharp_request_call_context_request_metadata(RequestCallContextSafeHandle ctx)',
     24       'void grpcsharp_request_call_context_reset(RequestCallContextSafeHandle ctx)',
     25       'void grpcsharp_request_call_context_destroy(IntPtr ctx)',
     26       'CallCredentialsSafeHandle grpcsharp_composite_call_credentials_create(CallCredentialsSafeHandle creds1, CallCredentialsSafeHandle creds2)',
     27       'void grpcsharp_call_credentials_release(IntPtr credentials)',
     28       'CallError grpcsharp_call_cancel(CallSafeHandle call)',
     29       'CallError grpcsharp_call_cancel_with_status(CallSafeHandle call, StatusCode status, string description)',
     30       'CallError grpcsharp_call_start_unary(CallSafeHandle call, BatchContextSafeHandle ctx, byte[] sendBuffer, UIntPtr sendBufferLen, WriteFlags writeFlags, MetadataArraySafeHandle metadataArray, CallFlags metadataFlags)',
     31       'CallError grpcsharp_call_start_client_streaming(CallSafeHandle call, BatchContextSafeHandle ctx, MetadataArraySafeHandle metadataArray, CallFlags metadataFlags)',
     32       'CallError grpcsharp_call_start_server_streaming(CallSafeHandle call, BatchContextSafeHandle ctx, byte[] sendBuffer, UIntPtr sendBufferLen, WriteFlags writeFlags, MetadataArraySafeHandle metadataArray, CallFlags metadataFlags)',
     33       'CallError grpcsharp_call_start_duplex_streaming(CallSafeHandle call, BatchContextSafeHandle ctx, MetadataArraySafeHandle metadataArray, CallFlags metadataFlags)',
     34       'CallError grpcsharp_call_send_message(CallSafeHandle call, BatchContextSafeHandle ctx, byte[] sendBuffer, UIntPtr sendBufferLen, WriteFlags writeFlags, int sendEmptyInitialMetadata)',
     35       'CallError grpcsharp_call_send_close_from_client(CallSafeHandle call, BatchContextSafeHandle ctx)',
     36       'CallError grpcsharp_call_send_status_from_server(CallSafeHandle call, BatchContextSafeHandle ctx, StatusCode statusCode, byte[] statusMessage, UIntPtr statusMessageLen, MetadataArraySafeHandle metadataArray, int sendEmptyInitialMetadata, byte[] optionalSendBuffer, UIntPtr optionalSendBufferLen, WriteFlags writeFlags)',
     37       'CallError grpcsharp_call_recv_message(CallSafeHandle call, BatchContextSafeHandle ctx)',
     38       'CallError grpcsharp_call_recv_initial_metadata(CallSafeHandle call, BatchContextSafeHandle ctx)',
     39       'CallError grpcsharp_call_start_serverside(CallSafeHandle call, BatchContextSafeHandle ctx)',
     40       'CallError grpcsharp_call_send_initial_metadata(CallSafeHandle call, BatchContextSafeHandle ctx, MetadataArraySafeHandle metadataArray)',
     41       'CallError grpcsharp_call_set_credentials(CallSafeHandle call, CallCredentialsSafeHandle credentials)',
     42       'CStringSafeHandle grpcsharp_call_get_peer(CallSafeHandle call)',
     43       'void grpcsharp_call_destroy(IntPtr call)',
     44       'ChannelArgsSafeHandle grpcsharp_channel_args_create(UIntPtr numArgs)',
     45       'void grpcsharp_channel_args_set_string(ChannelArgsSafeHandle args, UIntPtr index, string key, string value)',
     46       'void grpcsharp_channel_args_set_integer(ChannelArgsSafeHandle args, UIntPtr index, string key, int value)',
     47       'void grpcsharp_channel_args_destroy(IntPtr args)',
     48       'void grpcsharp_override_default_ssl_roots(string pemRootCerts)',
     49       'ChannelCredentialsSafeHandle grpcsharp_ssl_credentials_create(string pemRootCerts, string keyCertPairCertChain, string keyCertPairPrivateKey)',
     50       'ChannelCredentialsSafeHandle grpcsharp_composite_channel_credentials_create(ChannelCredentialsSafeHandle channelCreds, CallCredentialsSafeHandle callCreds)',
     51       'void grpcsharp_channel_credentials_release(IntPtr credentials)',
     52       'ChannelSafeHandle grpcsharp_insecure_channel_create(string target, ChannelArgsSafeHandle channelArgs)',
     53       'ChannelSafeHandle grpcsharp_secure_channel_create(ChannelCredentialsSafeHandle credentials, string target, ChannelArgsSafeHandle channelArgs)',
     54       'CallSafeHandle grpcsharp_channel_create_call(ChannelSafeHandle channel, CallSafeHandle parentCall, ContextPropagationFlags propagationMask, CompletionQueueSafeHandle cq, string method, string host, Timespec deadline)',
     55       'ChannelState grpcsharp_channel_check_connectivity_state(ChannelSafeHandle channel, int tryToConnect)',
     56       'void grpcsharp_channel_watch_connectivity_state(ChannelSafeHandle channel, ChannelState lastObservedState, Timespec deadline, CompletionQueueSafeHandle cq, BatchContextSafeHandle ctx)',
     57       'CStringSafeHandle grpcsharp_channel_get_target(ChannelSafeHandle call)',
     58       'void grpcsharp_channel_destroy(IntPtr channel)',
     59       'int grpcsharp_sizeof_grpc_event()',
     60       'CompletionQueueSafeHandle grpcsharp_completion_queue_create_async()',
     61       'CompletionQueueSafeHandle grpcsharp_completion_queue_create_sync()',
     62       'void grpcsharp_completion_queue_shutdown(CompletionQueueSafeHandle cq)',
     63       'CompletionQueueEvent grpcsharp_completion_queue_next(CompletionQueueSafeHandle cq)',
     64       'CompletionQueueEvent grpcsharp_completion_queue_pluck(CompletionQueueSafeHandle cq, IntPtr tag)',
     65       'void grpcsharp_completion_queue_destroy(IntPtr cq)',
     66       'void gprsharp_free(IntPtr ptr)',
     67       'MetadataArraySafeHandle grpcsharp_metadata_array_create(UIntPtr capacity)',
     68       'void grpcsharp_metadata_array_add(MetadataArraySafeHandle array, string key, byte[] value, UIntPtr valueLength)',
     69       'UIntPtr grpcsharp_metadata_array_count(IntPtr metadataArray)',
     70       'IntPtr grpcsharp_metadata_array_get_key(IntPtr metadataArray, UIntPtr index, out UIntPtr keyLength)',
     71       'IntPtr grpcsharp_metadata_array_get_value(IntPtr metadataArray, UIntPtr index, out UIntPtr valueLength)',
     72       'void grpcsharp_metadata_array_destroy_full(IntPtr array)',
     73       'void grpcsharp_redirect_log(GprLogDelegate callback)',
     74       'CallCredentialsSafeHandle grpcsharp_metadata_credentials_create_from_plugin(NativeMetadataInterceptor interceptor)',
     75       'void grpcsharp_metadata_credentials_notify_from_plugin(IntPtr callbackPtr, IntPtr userData, MetadataArraySafeHandle metadataArray, StatusCode statusCode, string errorDetails)',
     76       'ServerCredentialsSafeHandle grpcsharp_ssl_server_credentials_create(string pemRootCerts, string[] keyCertPairCertChainArray, string[] keyCertPairPrivateKeyArray, UIntPtr numKeyCertPairs, int forceClientAuth)',
     77       'void grpcsharp_server_credentials_release(IntPtr credentials)',
     78       'ServerSafeHandle grpcsharp_server_create(ChannelArgsSafeHandle args)',
     79       'void grpcsharp_server_register_completion_queue(ServerSafeHandle server, CompletionQueueSafeHandle cq)',
     80       'int grpcsharp_server_add_insecure_http2_port(ServerSafeHandle server, string addr)',
     81       'int grpcsharp_server_add_secure_http2_port(ServerSafeHandle server, string addr, ServerCredentialsSafeHandle creds)',
     82       'void grpcsharp_server_start(ServerSafeHandle server)',
     83       'CallError grpcsharp_server_request_call(ServerSafeHandle server, CompletionQueueSafeHandle cq, RequestCallContextSafeHandle ctx)',
     84       'void grpcsharp_server_cancel_all_calls(ServerSafeHandle server)',
     85       'void grpcsharp_server_shutdown_and_notify_callback(ServerSafeHandle server, CompletionQueueSafeHandle cq, BatchContextSafeHandle ctx)',
     86       'void grpcsharp_server_destroy(IntPtr server)',
     87       'AuthContextSafeHandle grpcsharp_call_auth_context(CallSafeHandle call)',
     88       'IntPtr grpcsharp_auth_context_peer_identity_property_name(AuthContextSafeHandle authContext)  // returns const char*',
     89       'AuthContextSafeHandle.NativeAuthPropertyIterator grpcsharp_auth_context_property_iterator(AuthContextSafeHandle authContext)',
     90       'IntPtr grpcsharp_auth_property_iterator_next(ref AuthContextSafeHandle.NativeAuthPropertyIterator iterator)  // returns const auth_property*',
     91       'void grpcsharp_auth_context_release(IntPtr authContext)',
     92       'Timespec gprsharp_now(ClockType clockType)',
     93       'Timespec gprsharp_inf_future(ClockType clockType)',
     94       'Timespec gprsharp_inf_past(ClockType clockType)',
     95       'Timespec gprsharp_convert_clock_type(Timespec t, ClockType targetClock)',
     96       'int gprsharp_sizeof_timespec()',
     97       'CallError grpcsharp_test_callback([MarshalAs(UnmanagedType.FunctionPtr)] NativeCallbackTestDelegate callback)',
     98       'IntPtr grpcsharp_test_nop(IntPtr ptr)',
     99       'void grpcsharp_test_override_method(string methodName, string variant)',
    100     ]
    101     
    102     import re
    103     native_methods = []
    104     for signature in native_method_signatures:
    105       match = re.match('([A-Za-z0-9_.]+) +([A-Za-z0-9_]+)\\((.*)\\)(.*)', signature)
    106       if not match:
    107         raise Exception('Malformed signature "%s"' % signature)
    108       native_methods.append({'returntype': match.group(1), 'name': match.group(2), 'params': match.group(3), 'comment': match.group(4)})
    109   %>
    110   #region Copyright notice and license
    111   
    112   // Copyright 2015 gRPC authors.
    113   //
    114   // Licensed under the Apache License, Version 2.0 (the "License");
    115   // you may not use this file except in compliance with the License.
    116   // You may obtain a copy of the License at
    117   //
    118   //     http://www.apache.org/licenses/LICENSE-2.0
    119   //
    120   // Unless required by applicable law or agreed to in writing, software
    121   // distributed under the License is distributed on an "AS IS" BASIS,
    122   // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    123   // See the License for the specific language governing permissions and
    124   // limitations under the License.
    125   
    126   #endregion
    127   
    128   using System;
    129   using System.Collections.Concurrent;
    130   using System.Diagnostics;
    131   using System.IO;
    132   using System.Reflection;
    133   using System.Runtime.InteropServices;
    134   using System.Threading;
    135   
    136   using Grpc.Core.Logging;
    137   using Grpc.Core.Utils;
    138   
    139   namespace Grpc.Core.Internal
    140   {
    141       internal partial class NativeMethods
    142       {
    143           #region Native methods
    144           
    145           % for method in native_methods:
    146           public readonly Delegates.${method['name']}_delegate ${method['name']};
    147           % endfor
    148 
    149           #endregion
    150   
    151           public NativeMethods(UnmanagedLibrary library)
    152           {
    153               % for method in native_methods:
    154               this.${method['name']} = GetMethodDelegate<Delegates.${method['name']}_delegate>(library);
    155               % endfor
    156           }
    157           
    158           public NativeMethods(DllImportsFromStaticLib unusedInstance)
    159           {
    160               % for method in native_methods:
    161               this.${method['name']} = DllImportsFromStaticLib.${method['name']};
    162               % endfor
    163           }
    164           
    165           public NativeMethods(DllImportsFromSharedLib unusedInstance)
    166           {
    167               % for method in native_methods:
    168               this.${method['name']} = DllImportsFromSharedLib.${method['name']};
    169               % endfor
    170           }
    171 
    172           /// <summary>
    173           /// Delegate types for all published native methods. Declared under inner class to prevent scope pollution.
    174           /// </summary>
    175           public class Delegates
    176           {
    177               % for method in native_methods:
    178               public delegate ${method['returntype']} ${method['name']}_delegate(${method['params']});${method['comment']}
    179               % endfor
    180           }
    181           
    182           /// <summary>
    183           /// grpc_csharp_ext used as a static library (e.g Unity iOS).
    184           /// </summary>
    185           internal class DllImportsFromStaticLib
    186           {
    187               private const string ImportName = "__Internal";
    188               % for method in native_methods:
    189               
    190               [DllImport(ImportName)]
    191               public static extern ${method['returntype']} ${method['name']}(${method['params']});
    192               % endfor
    193           }
    194           
    195           /// <summary>
    196           /// grpc_csharp_ext used a shared library (e.g on Unity Standalone and Android).
    197           /// </summary>
    198           internal class DllImportsFromSharedLib
    199           {
    200               private const string ImportName = "grpc_csharp_ext";
    201               % for method in native_methods:
    202               
    203               [DllImport(ImportName)]
    204               public static extern ${method['returntype']} ${method['name']}(${method['params']});
    205               % endfor
    206           }
    207       }
    208   }
    209