| 
					
				 | 
			
			
				@@ -33,16 +33,16 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #include "src/core/security/credentials.h" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#include <string.h> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #include <stdio.h> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#include <string.h> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #include "src/core/channel/channel_args.h" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #include "src/core/channel/http_client_filter.h" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#include "src/core/json/json.h" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #include "src/core/httpcli/httpcli.h" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #include "src/core/iomgr/iomgr.h" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#include "src/core/surface/api_trace.h" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#include "src/core/json/json.h" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #include "src/core/support/string.h" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#include "src/core/surface/api_trace.h" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #include <grpc/support/alloc.h> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #include <grpc/support/log.h> 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -54,18 +54,18 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 /* -- Common. -- */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 struct grpc_credentials_metadata_request { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  grpc_credentials *creds; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  grpc_call_credentials *creds; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   grpc_credentials_metadata_cb cb; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   void *user_data; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 static grpc_credentials_metadata_request * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-grpc_credentials_metadata_request_create(grpc_credentials *creds, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+grpc_credentials_metadata_request_create(grpc_call_credentials *creds, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                          grpc_credentials_metadata_cb cb, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                          void *user_data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   grpc_credentials_metadata_request *r = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       gpr_malloc(sizeof(grpc_credentials_metadata_request)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  r->creds = grpc_credentials_ref(creds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  r->creds = grpc_call_credentials_ref(creds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   r->cb = cb; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   r->user_data = user_data; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   return r; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -73,66 +73,74 @@ grpc_credentials_metadata_request_create(grpc_credentials *creds, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 static void grpc_credentials_metadata_request_destroy( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     grpc_credentials_metadata_request *r) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  grpc_credentials_unref(r->creds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  grpc_call_credentials_unref(r->creds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   gpr_free(r); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-grpc_credentials *grpc_credentials_ref(grpc_credentials *creds) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+grpc_channel_credentials *grpc_channel_credentials_ref( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    grpc_channel_credentials *creds) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   if (creds == NULL) return NULL; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   gpr_ref(&creds->refcount); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   return creds; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-void grpc_credentials_unref(grpc_credentials *creds) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+void grpc_channel_credentials_unref(grpc_channel_credentials *creds) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   if (creds == NULL) return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   if (gpr_unref(&creds->refcount)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    creds->vtable->destruct(creds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (creds->vtable->destruct != NULL) creds->vtable->destruct(creds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     gpr_free(creds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-void grpc_credentials_release(grpc_credentials *creds) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  GRPC_API_TRACE("grpc_credentials_release(creds=%p)", 1, (creds)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  grpc_credentials_unref(creds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+void grpc_channel_credentials_release(grpc_channel_credentials *creds) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  GRPC_API_TRACE("grpc_channel_credentials_release(creds=%p)", 1, (creds)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  grpc_channel_credentials_unref(creds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-int grpc_credentials_has_request_metadata(grpc_credentials *creds) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  if (creds == NULL) return 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  return creds->vtable->has_request_metadata(creds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+grpc_call_credentials *grpc_call_credentials_ref(grpc_call_credentials *creds) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  if (creds == NULL) return NULL; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  gpr_ref(&creds->refcount); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  return creds; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+void grpc_call_credentials_unref(grpc_call_credentials *creds) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  if (creds == NULL) return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  if (gpr_unref(&creds->refcount)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (creds->vtable->destruct != NULL) creds->vtable->destruct(creds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    gpr_free(creds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-int grpc_credentials_has_request_metadata_only(grpc_credentials *creds) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  if (creds == NULL) return 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  return creds->vtable->has_request_metadata_only(creds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+void grpc_call_credentials_release(grpc_call_credentials *creds) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  GRPC_API_TRACE("grpc_call_credentials_release(creds=%p)", 1, (creds)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  grpc_call_credentials_unref(creds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-void grpc_credentials_get_request_metadata( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    grpc_exec_ctx *exec_ctx, grpc_credentials *creds, grpc_pollset *pollset, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    const char *service_url, grpc_credentials_metadata_cb cb, void *user_data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  if (creds == NULL || !grpc_credentials_has_request_metadata(creds) || 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      creds->vtable->get_request_metadata == NULL) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+void grpc_call_credentials_get_request_metadata( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    grpc_exec_ctx *exec_ctx, grpc_call_credentials *creds, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    grpc_pollset *pollset, grpc_auth_metadata_context context, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    grpc_credentials_metadata_cb cb, void *user_data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  if (creds == NULL || creds->vtable->get_request_metadata == NULL) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     if (cb != NULL) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       cb(exec_ctx, user_data, NULL, 0, GRPC_CREDENTIALS_OK); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  creds->vtable->get_request_metadata(exec_ctx, creds, pollset, service_url, cb, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  creds->vtable->get_request_metadata(exec_ctx, creds, pollset, context, cb, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                       user_data); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-grpc_security_status grpc_credentials_create_security_connector( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    grpc_credentials *creds, const char *target, const grpc_channel_args *args, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    grpc_credentials *request_metadata_creds, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    grpc_channel_security_connector **sc, grpc_channel_args **new_args) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+grpc_security_status grpc_channel_credentials_create_security_connector( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    grpc_channel_credentials *channel_creds, const char *target, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const grpc_channel_args *args, grpc_channel_security_connector **sc, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    grpc_channel_args **new_args) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   *new_args = NULL; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  if (creds == NULL || creds->vtable->create_security_connector == NULL || 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      grpc_credentials_has_request_metadata_only(creds)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    gpr_log(GPR_ERROR, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            "Invalid credentials for creating a security connector."); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  if (channel_creds == NULL) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     return GRPC_SECURITY_ERROR; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  return creds->vtable->create_security_connector( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      creds, target, args, request_metadata_creds, sc, new_args); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  GPR_ASSERT(channel_creds->vtable->create_security_connector != NULL); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  return channel_creds->vtable->create_security_connector( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      channel_creds, NULL, target, args, sc, new_args); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 grpc_server_credentials *grpc_server_credentials_ref( 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -145,7 +153,7 @@ grpc_server_credentials *grpc_server_credentials_ref( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 void grpc_server_credentials_unref(grpc_server_credentials *creds) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   if (creds == NULL) return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   if (gpr_unref(&creds->refcount)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    creds->vtable->destruct(creds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (creds->vtable->destruct != NULL) creds->vtable->destruct(creds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     if (creds->processor.destroy != NULL && creds->processor.state != NULL) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       creds->processor.destroy(creds->processor.state); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -200,8 +208,7 @@ grpc_arg grpc_server_credentials_to_arg(grpc_server_credentials *p) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   return arg; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-grpc_server_credentials *grpc_server_credentials_from_arg( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    const grpc_arg *arg) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+grpc_server_credentials *grpc_server_credentials_from_arg(const grpc_arg *arg) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   if (strcmp(arg->key, GRPC_SERVER_CREDENTIALS_ARG) != 0) return NULL; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   if (arg->type != GRPC_ARG_POINTER) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     gpr_log(GPR_ERROR, "Invalid type %d for arg %s", arg->type, 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -225,7 +232,7 @@ grpc_server_credentials *grpc_find_server_credentials_in_args( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 /* -- Ssl credentials. -- */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-static void ssl_destruct(grpc_credentials *creds) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static void ssl_destruct(grpc_channel_credentials *creds) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   grpc_ssl_credentials *c = (grpc_ssl_credentials *)creds; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   if (c->config.pem_root_certs != NULL) gpr_free(c->config.pem_root_certs); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   if (c->config.pem_private_key != NULL) gpr_free(c->config.pem_private_key); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -254,15 +261,9 @@ static void ssl_server_destruct(grpc_server_credentials *creds) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   if (c->config.pem_root_certs != NULL) gpr_free(c->config.pem_root_certs); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-static int ssl_has_request_metadata(const grpc_credentials *creds) { return 0; } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-static int ssl_has_request_metadata_only(const grpc_credentials *creds) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  return 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 static grpc_security_status ssl_create_security_connector( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    grpc_credentials *creds, const char *target, const grpc_channel_args *args, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    grpc_credentials *request_metadata_creds, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    grpc_channel_credentials *creds, grpc_call_credentials *call_creds, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const char *target, const grpc_channel_args *args, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     grpc_channel_security_connector **sc, grpc_channel_args **new_args) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   grpc_ssl_credentials *c = (grpc_ssl_credentials *)creds; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   grpc_security_status status = GRPC_SECURITY_OK; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -279,7 +280,7 @@ static grpc_security_status ssl_create_security_connector( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   status = grpc_ssl_channel_security_connector_create( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      request_metadata_creds, &c->config, target, overridden_target_name, sc); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      call_creds, &c->config, target, overridden_target_name, sc); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   if (status != GRPC_SECURITY_OK) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     return status; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -296,9 +297,8 @@ static grpc_security_status ssl_server_create_security_connector( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   return grpc_ssl_server_security_connector_create(&c->config, sc); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-static grpc_credentials_vtable ssl_vtable = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    ssl_destruct, ssl_has_request_metadata, ssl_has_request_metadata_only, NULL, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    ssl_create_security_connector}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static grpc_channel_credentials_vtable ssl_vtable = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ssl_destruct, ssl_create_security_connector}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 static grpc_server_credentials_vtable ssl_server_vtable = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     ssl_server_destruct, ssl_server_create_security_connector}; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -363,7 +363,7 @@ static void ssl_build_server_config( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-grpc_credentials *grpc_ssl_credentials_create( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+grpc_channel_credentials *grpc_ssl_credentials_create( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     const char *pem_root_certs, grpc_ssl_pem_key_cert_pair *pem_key_cert_pair, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     void *reserved) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   grpc_ssl_credentials *c = gpr_malloc(sizeof(grpc_ssl_credentials)); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -374,7 +374,7 @@ grpc_credentials *grpc_ssl_credentials_create( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       3, (pem_root_certs, pem_key_cert_pair, reserved)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   GPR_ASSERT(reserved == NULL); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   memset(c, 0, sizeof(grpc_ssl_credentials)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  c->base.type = GRPC_CREDENTIALS_TYPE_SSL; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  c->base.type = GRPC_CHANNEL_CREDENTIALS_TYPE_SSL; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   c->base.vtable = &ssl_vtable; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   gpr_ref_init(&c->base.refcount, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   ssl_build_config(pem_root_certs, pem_key_cert_pair, &c->config); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -394,7 +394,7 @@ grpc_server_credentials *grpc_ssl_server_credentials_create( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           force_client_auth, reserved)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   GPR_ASSERT(reserved == NULL); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   memset(c, 0, sizeof(grpc_ssl_server_credentials)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  c->base.type = GRPC_CREDENTIALS_TYPE_SSL; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  c->base.type = GRPC_CHANNEL_CREDENTIALS_TYPE_SSL; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   gpr_ref_init(&c->base.refcount, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   c->base.vtable = &ssl_server_vtable; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   ssl_build_server_config(pem_root_certs, pem_key_cert_pairs, 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -416,7 +416,7 @@ static void jwt_reset_cache(grpc_service_account_jwt_access_credentials *c) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   c->cached.jwt_expiration = gpr_inf_past(GPR_CLOCK_REALTIME); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-static void jwt_destruct(grpc_credentials *creds) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static void jwt_destruct(grpc_call_credentials *creds) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   grpc_service_account_jwt_access_credentials *c = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       (grpc_service_account_jwt_access_credentials *)creds; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   grpc_auth_json_key_destruct(&c->key); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -424,15 +424,12 @@ static void jwt_destruct(grpc_credentials *creds) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   gpr_mu_destroy(&c->cache_mu); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-static int jwt_has_request_metadata(const grpc_credentials *creds) { return 1; } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-static int jwt_has_request_metadata_only(const grpc_credentials *creds) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  return 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-static void jwt_get_request_metadata( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    grpc_exec_ctx *exec_ctx, grpc_credentials *creds, grpc_pollset *pollset, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    const char *service_url, grpc_credentials_metadata_cb cb, void *user_data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static void jwt_get_request_metadata(grpc_exec_ctx *exec_ctx, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                     grpc_call_credentials *creds, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                     grpc_pollset *pollset, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                     grpc_auth_metadata_context context, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                     grpc_credentials_metadata_cb cb, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                     void *user_data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   grpc_service_account_jwt_access_credentials *c = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       (grpc_service_account_jwt_access_credentials *)creds; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   gpr_timespec refresh_threshold = gpr_time_from_seconds( 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -443,7 +440,7 @@ static void jwt_get_request_metadata( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     gpr_mu_lock(&c->cache_mu); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     if (c->cached.service_url != NULL && 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        strcmp(c->cached.service_url, service_url) == 0 && 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        strcmp(c->cached.service_url, context.service_url) == 0 && 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         c->cached.jwt_md != NULL && 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         (gpr_time_cmp(gpr_time_sub(c->cached.jwt_expiration, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                    gpr_now(GPR_CLOCK_REALTIME)), 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -458,14 +455,15 @@ static void jwt_get_request_metadata( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /* Generate a new jwt. */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     gpr_mu_lock(&c->cache_mu); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     jwt_reset_cache(c); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    jwt = grpc_jwt_encode_and_sign(&c->key, service_url, c->jwt_lifetime, NULL); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    jwt = grpc_jwt_encode_and_sign(&c->key, context.service_url, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                   c->jwt_lifetime, NULL); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     if (jwt != NULL) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       char *md_value; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       gpr_asprintf(&md_value, "Bearer %s", jwt); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       gpr_free(jwt); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       c->cached.jwt_expiration = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           gpr_time_add(gpr_now(GPR_CLOCK_REALTIME), c->jwt_lifetime); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      c->cached.service_url = gpr_strdup(service_url); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      c->cached.service_url = gpr_strdup(context.service_url); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       c->cached.jwt_md = grpc_credentials_md_store_create(1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       grpc_credentials_md_store_add_cstrings( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           c->cached.jwt_md, GRPC_AUTHORIZATION_METADATA_KEY, md_value); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -484,11 +482,10 @@ static void jwt_get_request_metadata( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-static grpc_credentials_vtable jwt_vtable = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    jwt_destruct, jwt_has_request_metadata, jwt_has_request_metadata_only, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    jwt_get_request_metadata, NULL}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static grpc_call_credentials_vtable jwt_vtable = {jwt_destruct, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                                  jwt_get_request_metadata}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-grpc_credentials * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+grpc_call_credentials * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 grpc_service_account_jwt_access_credentials_create_from_auth_json_key( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     grpc_auth_json_key key, gpr_timespec token_lifetime) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   grpc_service_account_jwt_access_credentials *c; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -498,7 +495,7 @@ grpc_service_account_jwt_access_credentials_create_from_auth_json_key( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   c = gpr_malloc(sizeof(grpc_service_account_jwt_access_credentials)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   memset(c, 0, sizeof(grpc_service_account_jwt_access_credentials)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  c->base.type = GRPC_CREDENTIALS_TYPE_JWT; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  c->base.type = GRPC_CALL_CREDENTIALS_TYPE_JWT; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   gpr_ref_init(&c->base.refcount, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   c->base.vtable = &jwt_vtable; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   c->key = key; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -508,7 +505,7 @@ grpc_service_account_jwt_access_credentials_create_from_auth_json_key( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   return &c->base; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-grpc_credentials *grpc_service_account_jwt_access_credentials_create( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+grpc_call_credentials *grpc_service_account_jwt_access_credentials_create( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     const char *json_key, gpr_timespec token_lifetime, void *reserved) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   GRPC_API_TRACE( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       "grpc_service_account_jwt_access_credentials_create(" 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -525,7 +522,7 @@ grpc_credentials *grpc_service_account_jwt_access_credentials_create( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 /* -- Oauth2TokenFetcher credentials -- */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-static void oauth2_token_fetcher_destruct(grpc_credentials *creds) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static void oauth2_token_fetcher_destruct(grpc_call_credentials *creds) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   grpc_oauth2_token_fetcher_credentials *c = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       (grpc_oauth2_token_fetcher_credentials *)creds; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   grpc_credentials_md_store_unref(c->access_token_md); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -533,16 +530,6 @@ static void oauth2_token_fetcher_destruct(grpc_credentials *creds) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   grpc_httpcli_context_destroy(&c->httpcli_context); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-static int oauth2_token_fetcher_has_request_metadata( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    const grpc_credentials *creds) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  return 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-static int oauth2_token_fetcher_has_request_metadata_only( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    const grpc_credentials *creds) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  return 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 grpc_credentials_status 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 grpc_oauth2_token_fetcher_credentials_parse_server_response( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     const grpc_httpcli_response *response, grpc_credentials_md_store **token_md, 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -660,8 +647,9 @@ static void on_oauth2_token_fetcher_http_response( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 static void oauth2_token_fetcher_get_request_metadata( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    grpc_exec_ctx *exec_ctx, grpc_credentials *creds, grpc_pollset *pollset, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    const char *service_url, grpc_credentials_metadata_cb cb, void *user_data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    grpc_exec_ctx *exec_ctx, grpc_call_credentials *creds, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    grpc_pollset *pollset, grpc_auth_metadata_context context, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    grpc_credentials_metadata_cb cb, void *user_data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   grpc_oauth2_token_fetcher_credentials *c = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       (grpc_oauth2_token_fetcher_credentials *)creds; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   gpr_timespec refresh_threshold = gpr_time_from_seconds( 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -694,7 +682,7 @@ static void oauth2_token_fetcher_get_request_metadata( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 static void init_oauth2_token_fetcher(grpc_oauth2_token_fetcher_credentials *c, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                       grpc_fetch_oauth2_func fetch_func) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   memset(c, 0, sizeof(grpc_oauth2_token_fetcher_credentials)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  c->base.type = GRPC_CREDENTIALS_TYPE_OAUTH2; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  c->base.type = GRPC_CALL_CREDENTIALS_TYPE_OAUTH2; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   gpr_ref_init(&c->base.refcount, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   gpr_mu_init(&c->mu); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   c->token_expiration = gpr_inf_past(GPR_CLOCK_REALTIME); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -704,10 +692,8 @@ static void init_oauth2_token_fetcher(grpc_oauth2_token_fetcher_credentials *c, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 /* -- GoogleComputeEngine credentials. -- */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-static grpc_credentials_vtable compute_engine_vtable = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    oauth2_token_fetcher_destruct, oauth2_token_fetcher_has_request_metadata, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    oauth2_token_fetcher_has_request_metadata_only, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    oauth2_token_fetcher_get_request_metadata, NULL}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static grpc_call_credentials_vtable compute_engine_vtable = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    oauth2_token_fetcher_destruct, oauth2_token_fetcher_get_request_metadata}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 static void compute_engine_fetch_oauth2( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     grpc_exec_ctx *exec_ctx, grpc_credentials_metadata_request *metadata_req, 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -724,7 +710,7 @@ static void compute_engine_fetch_oauth2( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    response_cb, metadata_req); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-grpc_credentials *grpc_google_compute_engine_credentials_create( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+grpc_call_credentials *grpc_google_compute_engine_credentials_create( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     void *reserved) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   grpc_oauth2_token_fetcher_credentials *c = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       gpr_malloc(sizeof(grpc_oauth2_token_fetcher_credentials)); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -738,17 +724,15 @@ grpc_credentials *grpc_google_compute_engine_credentials_create( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 /* -- GoogleRefreshToken credentials. -- */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-static void refresh_token_destruct(grpc_credentials *creds) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static void refresh_token_destruct(grpc_call_credentials *creds) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   grpc_google_refresh_token_credentials *c = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       (grpc_google_refresh_token_credentials *)creds; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   grpc_auth_refresh_token_destruct(&c->refresh_token); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   oauth2_token_fetcher_destruct(&c->base.base); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-static grpc_credentials_vtable refresh_token_vtable = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    refresh_token_destruct, oauth2_token_fetcher_has_request_metadata, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    oauth2_token_fetcher_has_request_metadata_only, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    oauth2_token_fetcher_get_request_metadata, NULL}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static grpc_call_credentials_vtable refresh_token_vtable = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    refresh_token_destruct, oauth2_token_fetcher_get_request_metadata}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 static void refresh_token_fetch_oauth2( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     grpc_exec_ctx *exec_ctx, grpc_credentials_metadata_request *metadata_req, 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -774,7 +758,8 @@ static void refresh_token_fetch_oauth2( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   gpr_free(body); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-grpc_credentials *grpc_refresh_token_credentials_create_from_auth_refresh_token( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+grpc_call_credentials * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+grpc_refresh_token_credentials_create_from_auth_refresh_token( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     grpc_auth_refresh_token refresh_token) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   grpc_google_refresh_token_credentials *c; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   if (!grpc_auth_refresh_token_is_valid(&refresh_token)) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -789,7 +774,7 @@ grpc_credentials *grpc_refresh_token_credentials_create_from_auth_refresh_token( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   return &c->base.base; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-grpc_credentials *grpc_google_refresh_token_credentials_create( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+grpc_call_credentials *grpc_google_refresh_token_credentials_create( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     const char *json_refresh_token, void *reserved) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   GRPC_API_TRACE( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       "grpc_refresh_token_credentials_create(json_refresh_token=%s, " 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -802,20 +787,11 @@ grpc_credentials *grpc_google_refresh_token_credentials_create( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 /* -- Metadata-only credentials. -- */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-static void md_only_test_destruct(grpc_credentials *creds) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static void md_only_test_destruct(grpc_call_credentials *creds) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   grpc_md_only_test_credentials *c = (grpc_md_only_test_credentials *)creds; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   grpc_credentials_md_store_unref(c->md_store); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-static int md_only_test_has_request_metadata(const grpc_credentials *creds) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  return 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-static int md_only_test_has_request_metadata_only( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    const grpc_credentials *creds) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  return 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 static void on_simulated_token_fetch_done(void *user_data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   grpc_credentials_metadata_request *r = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       (grpc_credentials_metadata_request *)user_data; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -828,8 +804,9 @@ static void on_simulated_token_fetch_done(void *user_data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 static void md_only_test_get_request_metadata( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    grpc_exec_ctx *exec_ctx, grpc_credentials *creds, grpc_pollset *pollset, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    const char *service_url, grpc_credentials_metadata_cb cb, void *user_data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    grpc_exec_ctx *exec_ctx, grpc_call_credentials *creds, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    grpc_pollset *pollset, grpc_auth_metadata_context context, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    grpc_credentials_metadata_cb cb, void *user_data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   grpc_md_only_test_credentials *c = (grpc_md_only_test_credentials *)creds; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   if (c->is_async) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -842,18 +819,15 @@ static void md_only_test_get_request_metadata( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-static grpc_credentials_vtable md_only_test_vtable = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    md_only_test_destruct, md_only_test_has_request_metadata, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    md_only_test_has_request_metadata_only, md_only_test_get_request_metadata, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    NULL}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static grpc_call_credentials_vtable md_only_test_vtable = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    md_only_test_destruct, md_only_test_get_request_metadata}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-grpc_credentials *grpc_md_only_test_credentials_create(const char *md_key, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                                       const char *md_value, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                                       int is_async) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+grpc_call_credentials *grpc_md_only_test_credentials_create( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const char *md_key, const char *md_value, int is_async) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   grpc_md_only_test_credentials *c = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       gpr_malloc(sizeof(grpc_md_only_test_credentials)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   memset(c, 0, sizeof(grpc_md_only_test_credentials)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  c->base.type = GRPC_CREDENTIALS_TYPE_OAUTH2; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  c->base.type = GRPC_CALL_CREDENTIALS_TYPE_OAUTH2; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   c->base.vtable = &md_only_test_vtable; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   gpr_ref_init(&c->base.refcount, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   c->md_store = grpc_credentials_md_store_create(1); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -864,34 +838,24 @@ grpc_credentials *grpc_md_only_test_credentials_create(const char *md_key, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 /* -- Oauth2 Access Token credentials. -- */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-static void access_token_destruct(grpc_credentials *creds) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static void access_token_destruct(grpc_call_credentials *creds) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   grpc_access_token_credentials *c = (grpc_access_token_credentials *)creds; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   grpc_credentials_md_store_unref(c->access_token_md); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-static int access_token_has_request_metadata(const grpc_credentials *creds) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  return 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-static int access_token_has_request_metadata_only( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    const grpc_credentials *creds) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  return 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 static void access_token_get_request_metadata( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    grpc_exec_ctx *exec_ctx, grpc_credentials *creds, grpc_pollset *pollset, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    const char *service_url, grpc_credentials_metadata_cb cb, void *user_data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    grpc_exec_ctx *exec_ctx, grpc_call_credentials *creds, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    grpc_pollset *pollset, grpc_auth_metadata_context context, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    grpc_credentials_metadata_cb cb, void *user_data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   grpc_access_token_credentials *c = (grpc_access_token_credentials *)creds; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   cb(exec_ctx, user_data, c->access_token_md->entries, 1, GRPC_CREDENTIALS_OK); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-static grpc_credentials_vtable access_token_vtable = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    access_token_destruct, access_token_has_request_metadata, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    access_token_has_request_metadata_only, access_token_get_request_metadata, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    NULL}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static grpc_call_credentials_vtable access_token_vtable = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    access_token_destruct, access_token_get_request_metadata}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-grpc_credentials *grpc_access_token_credentials_create(const char *access_token, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                                       void *reserved) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+grpc_call_credentials *grpc_access_token_credentials_create( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const char *access_token, void *reserved) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   grpc_access_token_credentials *c = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       gpr_malloc(sizeof(grpc_access_token_credentials)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   char *token_md_value; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -901,7 +865,7 @@ grpc_credentials *grpc_access_token_credentials_create(const char *access_token, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       2, (access_token, reserved)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   GPR_ASSERT(reserved == NULL); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   memset(c, 0, sizeof(grpc_access_token_credentials)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  c->base.type = GRPC_CREDENTIALS_TYPE_OAUTH2; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  c->base.type = GRPC_CALL_CREDENTIALS_TYPE_OAUTH2; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   c->base.vtable = &access_token_vtable; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   gpr_ref_init(&c->base.refcount, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   c->access_token_md = grpc_credentials_md_store_create(1); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -914,31 +878,11 @@ grpc_credentials *grpc_access_token_credentials_create(const char *access_token, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 /* -- Fake transport security credentials. -- */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-static void fake_transport_security_credentials_destruct( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    grpc_credentials *creds) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  /* Nothing to do here. */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-static void fake_transport_security_server_credentials_destruct( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    grpc_server_credentials *creds) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  /* Nothing to do here. */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-static int fake_transport_security_has_request_metadata( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    const grpc_credentials *creds) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  return 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-static int fake_transport_security_has_request_metadata_only( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    const grpc_credentials *creds) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  return 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 static grpc_security_status fake_transport_security_create_security_connector( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    grpc_credentials *c, const char *target, const grpc_channel_args *args, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    grpc_credentials *request_metadata_creds, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    grpc_channel_credentials *c, grpc_call_credentials *call_creds, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const char *target, const grpc_channel_args *args, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     grpc_channel_security_connector **sc, grpc_channel_args **new_args) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  *sc = grpc_fake_channel_security_connector_create(request_metadata_creds, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  *sc = grpc_fake_channel_security_connector_create(call_creds, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   return GRPC_SECURITY_OK; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -949,21 +893,19 @@ fake_transport_security_server_create_security_connector( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   return GRPC_SECURITY_OK; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-static grpc_credentials_vtable fake_transport_security_credentials_vtable = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    fake_transport_security_credentials_destruct, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    fake_transport_security_has_request_metadata, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    fake_transport_security_has_request_metadata_only, NULL, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    fake_transport_security_create_security_connector}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static grpc_channel_credentials_vtable 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    fake_transport_security_credentials_vtable = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        NULL, fake_transport_security_create_security_connector}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 static grpc_server_credentials_vtable 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     fake_transport_security_server_credentials_vtable = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        fake_transport_security_server_credentials_destruct, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        fake_transport_security_server_create_security_connector}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        NULL, fake_transport_security_server_create_security_connector}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-grpc_credentials *grpc_fake_transport_security_credentials_create(void) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  grpc_credentials *c = gpr_malloc(sizeof(grpc_credentials)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  memset(c, 0, sizeof(grpc_credentials)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  c->type = GRPC_CREDENTIALS_TYPE_FAKE_TRANSPORT_SECURITY; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+grpc_channel_credentials *grpc_fake_transport_security_credentials_create( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    void) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  grpc_channel_credentials *c = gpr_malloc(sizeof(grpc_channel_credentials)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  memset(c, 0, sizeof(grpc_channel_credentials)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  c->type = GRPC_CHANNEL_CREDENTIALS_TYPE_FAKE_TRANSPORT_SECURITY; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   c->vtable = &fake_transport_security_credentials_vtable; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   gpr_ref_init(&c->refcount, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   return c; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -973,69 +915,45 @@ grpc_server_credentials *grpc_fake_transport_security_server_credentials_create( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     void) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   grpc_server_credentials *c = gpr_malloc(sizeof(grpc_server_credentials)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   memset(c, 0, sizeof(grpc_server_credentials)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  c->type = GRPC_CREDENTIALS_TYPE_FAKE_TRANSPORT_SECURITY; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  c->type = GRPC_CHANNEL_CREDENTIALS_TYPE_FAKE_TRANSPORT_SECURITY; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   gpr_ref_init(&c->refcount, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   c->vtable = &fake_transport_security_server_credentials_vtable; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   return c; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-/* -- Composite credentials. -- */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/* -- Composite call credentials. -- */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 typedef struct { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  grpc_composite_credentials *composite_creds; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  grpc_composite_call_credentials *composite_creds; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   size_t creds_index; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   grpc_credentials_md_store *md_elems; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  char *service_url; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  grpc_auth_metadata_context auth_md_context; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   void *user_data; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   grpc_pollset *pollset; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   grpc_credentials_metadata_cb cb; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} grpc_composite_credentials_metadata_context; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} grpc_composite_call_credentials_metadata_context; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-static void composite_destruct(grpc_credentials *creds) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  grpc_composite_credentials *c = (grpc_composite_credentials *)creds; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static void composite_call_destruct(grpc_call_credentials *creds) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  grpc_composite_call_credentials *c = (grpc_composite_call_credentials *)creds; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   size_t i; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   for (i = 0; i < c->inner.num_creds; i++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    grpc_credentials_unref(c->inner.creds_array[i]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    grpc_call_credentials_unref(c->inner.creds_array[i]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   gpr_free(c->inner.creds_array); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-static int composite_has_request_metadata(const grpc_credentials *creds) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  const grpc_composite_credentials *c = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      (const grpc_composite_credentials *)creds; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  size_t i; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  for (i = 0; i < c->inner.num_creds; i++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if (grpc_credentials_has_request_metadata(c->inner.creds_array[i])) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      return 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  return 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-static int composite_has_request_metadata_only(const grpc_credentials *creds) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  const grpc_composite_credentials *c = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      (const grpc_composite_credentials *)creds; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  size_t i; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  for (i = 0; i < c->inner.num_creds; i++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if (!grpc_credentials_has_request_metadata_only(c->inner.creds_array[i])) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      return 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  return 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-static void composite_md_context_destroy( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    grpc_composite_credentials_metadata_context *ctx) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static void composite_call_md_context_destroy( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    grpc_composite_call_credentials_metadata_context *ctx) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   grpc_credentials_md_store_unref(ctx->md_elems); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  if (ctx->service_url != NULL) gpr_free(ctx->service_url); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   gpr_free(ctx); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-static void composite_metadata_cb(grpc_exec_ctx *exec_ctx, void *user_data, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                  grpc_credentials_md *md_elems, size_t num_md, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                  grpc_credentials_status status) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  grpc_composite_credentials_metadata_context *ctx = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      (grpc_composite_credentials_metadata_context *)user_data; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static void composite_call_metadata_cb(grpc_exec_ctx *exec_ctx, void *user_data, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                       grpc_credentials_md *md_elems, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                       size_t num_md, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                       grpc_credentials_status status) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  grpc_composite_call_credentials_metadata_context *ctx = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      (grpc_composite_call_credentials_metadata_context *)user_data; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   if (status != GRPC_CREDENTIALS_OK) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     ctx->cb(exec_ctx, ctx->user_data, NULL, 0, status); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     return; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1051,158 +969,112 @@ static void composite_metadata_cb(grpc_exec_ctx *exec_ctx, void *user_data, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   /* See if we need to get some more metadata. */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  while (ctx->creds_index < ctx->composite_creds->inner.num_creds) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    grpc_credentials *inner_creds = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  if (ctx->creds_index < ctx->composite_creds->inner.num_creds) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    grpc_call_credentials *inner_creds = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         ctx->composite_creds->inner.creds_array[ctx->creds_index++]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if (grpc_credentials_has_request_metadata(inner_creds)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      grpc_credentials_get_request_metadata(exec_ctx, inner_creds, ctx->pollset, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                            ctx->service_url, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                            composite_metadata_cb, ctx); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    grpc_call_credentials_get_request_metadata( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        exec_ctx, inner_creds, ctx->pollset, ctx->auth_md_context, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        composite_call_metadata_cb, ctx); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   /* We're done!. */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   ctx->cb(exec_ctx, ctx->user_data, ctx->md_elems->entries, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           ctx->md_elems->num_entries, GRPC_CREDENTIALS_OK); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  composite_md_context_destroy(ctx); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  composite_call_md_context_destroy(ctx); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-static void composite_get_request_metadata( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    grpc_exec_ctx *exec_ctx, grpc_credentials *creds, grpc_pollset *pollset, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    const char *service_url, grpc_credentials_metadata_cb cb, void *user_data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  grpc_composite_credentials *c = (grpc_composite_credentials *)creds; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  grpc_composite_credentials_metadata_context *ctx; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  if (!grpc_credentials_has_request_metadata(creds)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    cb(exec_ctx, user_data, NULL, 0, GRPC_CREDENTIALS_OK); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  ctx = gpr_malloc(sizeof(grpc_composite_credentials_metadata_context)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  memset(ctx, 0, sizeof(grpc_composite_credentials_metadata_context)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  ctx->service_url = gpr_strdup(service_url); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static void composite_call_get_request_metadata( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    grpc_exec_ctx *exec_ctx, grpc_call_credentials *creds, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    grpc_pollset *pollset, grpc_auth_metadata_context auth_md_context, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    grpc_credentials_metadata_cb cb, void *user_data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  grpc_composite_call_credentials *c = (grpc_composite_call_credentials *)creds; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  grpc_composite_call_credentials_metadata_context *ctx; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  ctx = gpr_malloc(sizeof(grpc_composite_call_credentials_metadata_context)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  memset(ctx, 0, sizeof(grpc_composite_call_credentials_metadata_context)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  ctx->auth_md_context = auth_md_context; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   ctx->user_data = user_data; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   ctx->cb = cb; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   ctx->composite_creds = c; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   ctx->pollset = pollset; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   ctx->md_elems = grpc_credentials_md_store_create(c->inner.num_creds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  while (ctx->creds_index < c->inner.num_creds) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    grpc_credentials *inner_creds = c->inner.creds_array[ctx->creds_index++]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if (grpc_credentials_has_request_metadata(inner_creds)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      grpc_credentials_get_request_metadata(exec_ctx, inner_creds, pollset, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                            service_url, composite_metadata_cb, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                            ctx); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  GPR_ASSERT(0); /* Should have exited before. */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  grpc_call_credentials_get_request_metadata( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      exec_ctx, c->inner.creds_array[ctx->creds_index++], pollset, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      auth_md_context, composite_call_metadata_cb, ctx); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-static grpc_security_status composite_create_security_connector( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    grpc_credentials *creds, const char *target, const grpc_channel_args *args, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    grpc_credentials *request_metadata_creds, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    grpc_channel_security_connector **sc, grpc_channel_args **new_args) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  grpc_composite_credentials *c = (grpc_composite_credentials *)creds; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  if (c->connector_creds == NULL) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    gpr_log(GPR_ERROR, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            "Cannot create security connector, missing connector credentials."); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    return GRPC_SECURITY_ERROR; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  return grpc_credentials_create_security_connector(c->connector_creds, target, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                                    args, creds, sc, new_args); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-static grpc_credentials_vtable composite_credentials_vtable = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    composite_destruct, composite_has_request_metadata, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    composite_has_request_metadata_only, composite_get_request_metadata, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    composite_create_security_connector}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static grpc_call_credentials_vtable composite_call_credentials_vtable = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    composite_call_destruct, composite_call_get_request_metadata}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-static grpc_credentials_array get_creds_array(grpc_credentials **creds_addr) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  grpc_credentials_array result; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  grpc_credentials *creds = *creds_addr; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static grpc_call_credentials_array get_creds_array( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    grpc_call_credentials **creds_addr) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  grpc_call_credentials_array result; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  grpc_call_credentials *creds = *creds_addr; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   result.creds_array = creds_addr; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   result.num_creds = 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  if (strcmp(creds->type, GRPC_CREDENTIALS_TYPE_COMPOSITE) == 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    result = *grpc_composite_credentials_get_credentials(creds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  if (strcmp(creds->type, GRPC_CALL_CREDENTIALS_TYPE_COMPOSITE) == 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    result = *grpc_composite_call_credentials_get_credentials(creds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   return result; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-grpc_credentials *grpc_composite_credentials_create(grpc_credentials *creds1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                                    grpc_credentials *creds2, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                                    void *reserved) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+grpc_call_credentials *grpc_composite_call_credentials_create( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    grpc_call_credentials *creds1, grpc_call_credentials *creds2, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    void *reserved) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   size_t i; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   size_t creds_array_byte_size; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  grpc_credentials_array creds1_array; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  grpc_credentials_array creds2_array; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  grpc_composite_credentials *c; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  grpc_call_credentials_array creds1_array; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  grpc_call_credentials_array creds2_array; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  grpc_composite_call_credentials *c; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   GRPC_API_TRACE( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      "grpc_composite_credentials_create(creds1=%p, creds2=%p, " 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      "grpc_composite_call_credentials_create(creds1=%p, creds2=%p, " 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       "reserved=%p)", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       3, (creds1, creds2, reserved)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   GPR_ASSERT(reserved == NULL); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   GPR_ASSERT(creds1 != NULL); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   GPR_ASSERT(creds2 != NULL); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  c = gpr_malloc(sizeof(grpc_composite_credentials)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  memset(c, 0, sizeof(grpc_composite_credentials)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  c->base.type = GRPC_CREDENTIALS_TYPE_COMPOSITE; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  c->base.vtable = &composite_credentials_vtable; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  c = gpr_malloc(sizeof(grpc_composite_call_credentials)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  memset(c, 0, sizeof(grpc_composite_call_credentials)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  c->base.type = GRPC_CALL_CREDENTIALS_TYPE_COMPOSITE; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  c->base.vtable = &composite_call_credentials_vtable; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   gpr_ref_init(&c->base.refcount, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   creds1_array = get_creds_array(&creds1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   creds2_array = get_creds_array(&creds2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   c->inner.num_creds = creds1_array.num_creds + creds2_array.num_creds; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  creds_array_byte_size = c->inner.num_creds * sizeof(grpc_credentials *); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  creds_array_byte_size = c->inner.num_creds * sizeof(grpc_call_credentials *); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   c->inner.creds_array = gpr_malloc(creds_array_byte_size); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   memset(c->inner.creds_array, 0, creds_array_byte_size); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   for (i = 0; i < creds1_array.num_creds; i++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    grpc_credentials *cur_creds = creds1_array.creds_array[i]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if (!grpc_credentials_has_request_metadata_only(cur_creds)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      if (c->connector_creds == NULL) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        c->connector_creds = cur_creds; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        gpr_log(GPR_ERROR, "Cannot compose multiple connector credentials."); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        goto fail; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    c->inner.creds_array[i] = grpc_credentials_ref(cur_creds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    grpc_call_credentials *cur_creds = creds1_array.creds_array[i]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    c->inner.creds_array[i] = grpc_call_credentials_ref(cur_creds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   for (i = 0; i < creds2_array.num_creds; i++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    grpc_credentials *cur_creds = creds2_array.creds_array[i]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if (!grpc_credentials_has_request_metadata_only(cur_creds)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      if (c->connector_creds == NULL) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        c->connector_creds = cur_creds; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        gpr_log(GPR_ERROR, "Cannot compose multiple connector credentials."); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        goto fail; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    grpc_call_credentials *cur_creds = creds2_array.creds_array[i]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     c->inner.creds_array[i + creds1_array.num_creds] = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        grpc_credentials_ref(cur_creds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        grpc_call_credentials_ref(cur_creds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   return &c->base; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-fail: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  grpc_credentials_unref(&c->base); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  return NULL; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-const grpc_credentials_array *grpc_composite_credentials_get_credentials( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    grpc_credentials *creds) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  const grpc_composite_credentials *c = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      (const grpc_composite_credentials *)creds; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  GPR_ASSERT(strcmp(creds->type, GRPC_CREDENTIALS_TYPE_COMPOSITE) == 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const grpc_call_credentials_array * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+grpc_composite_call_credentials_get_credentials(grpc_call_credentials *creds) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  const grpc_composite_call_credentials *c = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      (const grpc_composite_call_credentials *)creds; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  GPR_ASSERT(strcmp(creds->type, GRPC_CALL_CREDENTIALS_TYPE_COMPOSITE) == 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   return &c->inner; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-grpc_credentials *grpc_credentials_contains_type( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    grpc_credentials *creds, const char *type, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    grpc_credentials **composite_creds) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+grpc_call_credentials *grpc_credentials_contains_type( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    grpc_call_credentials *creds, const char *type, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    grpc_call_credentials **composite_creds) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   size_t i; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   if (strcmp(creds->type, type) == 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     if (composite_creds != NULL) *composite_creds = NULL; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     return creds; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  } else if (strcmp(creds->type, GRPC_CREDENTIALS_TYPE_COMPOSITE) == 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    const grpc_credentials_array *inner_creds_array = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        grpc_composite_credentials_get_credentials(creds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } else if (strcmp(creds->type, GRPC_CALL_CREDENTIALS_TYPE_COMPOSITE) == 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const grpc_call_credentials_array *inner_creds_array = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        grpc_composite_call_credentials_get_credentials(creds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     for (i = 0; i < inner_creds_array->num_creds; i++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       if (strcmp(type, inner_creds_array->creds_array[i]->type) == 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (composite_creds != NULL) *composite_creds = creds; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1215,30 +1087,26 @@ grpc_credentials *grpc_credentials_contains_type( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 /* -- IAM credentials. -- */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-static void iam_destruct(grpc_credentials *creds) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static void iam_destruct(grpc_call_credentials *creds) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   grpc_google_iam_credentials *c = (grpc_google_iam_credentials *)creds; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   grpc_credentials_md_store_unref(c->iam_md); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-static int iam_has_request_metadata(const grpc_credentials *creds) { return 1; } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-static int iam_has_request_metadata_only(const grpc_credentials *creds) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  return 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-static void iam_get_request_metadata( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    grpc_exec_ctx *exec_ctx, grpc_credentials *creds, grpc_pollset *pollset, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    const char *service_url, grpc_credentials_metadata_cb cb, void *user_data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static void iam_get_request_metadata(grpc_exec_ctx *exec_ctx, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                     grpc_call_credentials *creds, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                     grpc_pollset *pollset, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                     grpc_auth_metadata_context context, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                     grpc_credentials_metadata_cb cb, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                     void *user_data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   grpc_google_iam_credentials *c = (grpc_google_iam_credentials *)creds; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   cb(exec_ctx, user_data, c->iam_md->entries, c->iam_md->num_entries, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      GRPC_CREDENTIALS_OK); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-static grpc_credentials_vtable iam_vtable = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    iam_destruct, iam_has_request_metadata, iam_has_request_metadata_only, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    iam_get_request_metadata, NULL}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static grpc_call_credentials_vtable iam_vtable = {iam_destruct, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                                  iam_get_request_metadata}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-grpc_credentials *grpc_google_iam_credentials_create( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+grpc_call_credentials *grpc_google_iam_credentials_create( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     const char *token, const char *authority_selector, void *reserved) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   grpc_google_iam_credentials *c; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   GRPC_API_TRACE( 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1250,7 +1118,7 @@ grpc_credentials *grpc_google_iam_credentials_create( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   GPR_ASSERT(authority_selector != NULL); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   c = gpr_malloc(sizeof(grpc_google_iam_credentials)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   memset(c, 0, sizeof(grpc_google_iam_credentials)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  c->base.type = GRPC_CREDENTIALS_TYPE_IAM; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  c->base.type = GRPC_CALL_CREDENTIALS_TYPE_IAM; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   c->base.vtable = &iam_vtable; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   gpr_ref_init(&c->base.refcount, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   c->iam_md = grpc_credentials_md_store_create(2); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1268,21 +1136,13 @@ typedef struct { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   grpc_credentials_metadata_cb cb; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } grpc_metadata_plugin_request; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-static void plugin_destruct(grpc_credentials *creds) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static void plugin_destruct(grpc_call_credentials *creds) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   grpc_plugin_credentials *c = (grpc_plugin_credentials *)creds; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   if (c->plugin.state != NULL && c->plugin.destroy != NULL) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     c->plugin.destroy(c->plugin.state); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-static int plugin_has_request_metadata(const grpc_credentials *creds) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  return 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-static int plugin_has_request_metadata_only(const grpc_credentials *creds) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  return 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 static void plugin_md_request_metadata_ready(void *request, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                              const grpc_metadata *md, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                              size_t num_md, 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1321,34 +1181,94 @@ static void plugin_md_request_metadata_ready(void *request, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   grpc_exec_ctx_finish(&exec_ctx); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-static void plugin_get_request_metadata( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    grpc_exec_ctx *exec_ctx, grpc_credentials *creds, grpc_pollset *pollset, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    const char *service_url, grpc_credentials_metadata_cb cb, void *user_data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static void plugin_get_request_metadata(grpc_exec_ctx *exec_ctx, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                        grpc_call_credentials *creds, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                        grpc_pollset *pollset, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                        grpc_auth_metadata_context context, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                        grpc_credentials_metadata_cb cb, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                        void *user_data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   grpc_plugin_credentials *c = (grpc_plugin_credentials *)creds; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   if (c->plugin.get_metadata != NULL) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     grpc_metadata_plugin_request *request = gpr_malloc(sizeof(*request)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     memset(request, 0, sizeof(*request)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     request->user_data = user_data; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     request->cb = cb; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    c->plugin.get_metadata(c->plugin.state, service_url, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    c->plugin.get_metadata(c->plugin.state, context, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            plugin_md_request_metadata_ready, request); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     cb(exec_ctx, user_data, NULL, 0, GRPC_CREDENTIALS_OK); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-static grpc_credentials_vtable plugin_vtable = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    plugin_destruct, plugin_has_request_metadata, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    plugin_has_request_metadata_only, plugin_get_request_metadata, NULL}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static grpc_call_credentials_vtable plugin_vtable = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    plugin_destruct, plugin_get_request_metadata}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-grpc_credentials *grpc_metadata_credentials_create_from_plugin( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+grpc_call_credentials *grpc_metadata_credentials_create_from_plugin( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     grpc_metadata_credentials_plugin plugin, void *reserved) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   grpc_plugin_credentials *c = gpr_malloc(sizeof(*c)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  GRPC_API_TRACE("grpc_metadata_credentials_create_from_plugin(reserved=%p)", 1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                 (reserved)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   GPR_ASSERT(reserved == NULL); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   memset(c, 0, sizeof(*c)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  c->base.type = GRPC_CREDENTIALS_TYPE_METADATA_PLUGIN; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  c->base.type = plugin.type; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   c->base.vtable = &plugin_vtable; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   gpr_ref_init(&c->base.refcount, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   c->plugin = plugin; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   return &c->base; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/* -- Composite channel credentials. -- */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static void composite_channel_destruct(grpc_channel_credentials *creds) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  grpc_composite_channel_credentials *c = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      (grpc_composite_channel_credentials *)creds; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  grpc_channel_credentials_unref(c->inner_creds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  grpc_call_credentials_unref(c->call_creds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static grpc_security_status composite_channel_create_security_connector( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    grpc_channel_credentials *creds, grpc_call_credentials *call_creds, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const char *target, const grpc_channel_args *args, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    grpc_channel_security_connector **sc, grpc_channel_args **new_args) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  grpc_composite_channel_credentials *c = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      (grpc_composite_channel_credentials *)creds; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  grpc_security_status status = GRPC_SECURITY_ERROR; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  GPR_ASSERT(c->inner_creds != NULL && c->call_creds != NULL && 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+             c->inner_creds->vtable != NULL && 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+             c->inner_creds->vtable->create_security_connector != NULL); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /* If we are passed a call_creds, create a call composite to pass it 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     downstream. */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  if (call_creds != NULL) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    grpc_call_credentials *composite_call_creds = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        grpc_composite_call_credentials_create(c->call_creds, call_creds, NULL); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    status = c->inner_creds->vtable->create_security_connector( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        c->inner_creds, composite_call_creds, target, args, sc, new_args); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    grpc_call_credentials_unref(composite_call_creds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    status = c->inner_creds->vtable->create_security_connector( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        c->inner_creds, c->call_creds, target, args, sc, new_args); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  return status; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static grpc_channel_credentials_vtable composite_channel_credentials_vtable = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    composite_channel_destruct, composite_channel_create_security_connector}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+grpc_channel_credentials *grpc_composite_channel_credentials_create( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    grpc_channel_credentials *channel_creds, grpc_call_credentials *call_creds, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    void *reserved) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  grpc_composite_channel_credentials *c = gpr_malloc(sizeof(*c)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  memset(c, 0, sizeof(*c)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  GPR_ASSERT(channel_creds != NULL && call_creds != NULL && reserved == NULL); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  GRPC_API_TRACE( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      "grpc_composite_channel_credentials_create(channel_creds=%p, " 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      "call_creds=%p, reserved=%p)", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      3, (channel_creds, call_creds, reserved)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  c->base.type = channel_creds->type; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  c->base.vtable = &composite_channel_credentials_vtable; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  gpr_ref_init(&c->base.refcount, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  c->inner_creds = grpc_channel_credentials_ref(channel_creds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  c->call_creds = grpc_call_credentials_ref(call_creds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  return &c->base; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 |