aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/csharp/ext
diff options
context:
space:
mode:
authorGravatar Jan Tattermusch <jan.tattermusch@gmail.com>2016-02-02 06:39:10 -0800
committerGravatar Jan Tattermusch <jtattermusch@google.com>2016-02-02 12:23:42 -0800
commit660c15b844ffb5496435437379bb8ac45b7ce4bd (patch)
treef113a63e8cc9bb75e9507477de028ddf794ba7a2 /src/csharp/ext
parent4d48522f0075884b2b57ff24a65fee76b918e52f (diff)
add roots.pem as a resource
Diffstat (limited to 'src/csharp/ext')
-rw-r--r--src/csharp/ext/grpc_csharp_ext.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/csharp/ext/grpc_csharp_ext.c b/src/csharp/ext/grpc_csharp_ext.c
index 26f1537398..8c362cf7c2 100644
--- a/src/csharp/ext/grpc_csharp_ext.c
+++ b/src/csharp/ext/grpc_csharp_ext.c
@@ -835,6 +835,30 @@ grpcsharp_server_request_call(grpc_server *server, grpc_completion_queue *cq,
/* Security */
+static char *default_pem_root_certs = NULL;
+
+static grpc_ssl_roots_override_result override_ssl_roots_handler(
+ char **pem_root_certs) {
+ if (!default_pem_root_certs) {
+ *pem_root_certs = NULL;
+ return GRPC_SSL_ROOTS_OVERRIDE_FAIL_PERMANENTLY;
+ }
+ *pem_root_certs = gpr_strdup(default_pem_root_certs);
+ return GRPC_SSL_ROOTS_OVERRIDE_OK;
+}
+
+GPR_EXPORT void GPR_CALLTYPE grpcsharp_override_default_ssl_roots(
+ const char *pem_root_certs) {
+ /*
+ * This currently wastes ~300kB of memory by keeping a copy of roots
+ * in a static variable, but for desktop/server use, the overhead
+ * is negligible. In the future, we might want to change the behavior
+ * for mobile (e.g. Xamarin).
+ */
+ default_pem_root_certs = gpr_strdup(pem_root_certs);
+ grpc_set_ssl_roots_override_callback(override_ssl_roots_handler);
+}
+
GPR_EXPORT grpc_channel_credentials *GPR_CALLTYPE
grpcsharp_ssl_credentials_create(const char *pem_root_certs,
const char *key_cert_pair_cert_chain,
@@ -917,6 +941,7 @@ GPR_EXPORT grpc_call_credentials *GPR_CALLTYPE grpcsharp_composite_call_credenti
return grpc_composite_call_credentials_create(creds1, creds2, NULL);
}
+
/* Metadata credentials plugin */
GPR_EXPORT void GPR_CALLTYPE grpcsharp_metadata_credentials_notify_from_plugin(