|  | @@ -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,44 +73,53 @@ 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;
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -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_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);
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -void grpc_credentials_get_request_metadata(
 | 
	
		
			
				|  |  | -    grpc_exec_ctx *exec_ctx, grpc_credentials *creds, grpc_pollset *pollset,
 | 
	
		
			
				|  |  | +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_call_credentials_get_request_metadata(
 | 
	
		
			
				|  |  | +    grpc_exec_ctx *exec_ctx, grpc_call_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) {
 | 
	
		
			
				|  |  | +  if (creds == NULL || creds->vtable->get_request_metadata == NULL) {
 | 
	
		
			
				|  |  |      if (cb != NULL) {
 | 
	
		
			
				|  |  |        cb(exec_ctx, user_data, NULL, 0, GRPC_CREDENTIALS_OK);
 | 
	
		
			
				|  |  |      }
 | 
	
	
		
			
				|  | @@ -120,19 +129,17 @@ void grpc_credentials_get_request_metadata(
 | 
	
		
			
				|  |  |                                        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 +152,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);
 | 
	
		
			
				|  |  |      }
 | 
	
	
		
			
				|  | @@ -224,7 +231,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);
 | 
	
	
		
			
				|  | @@ -253,15 +260,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;
 | 
	
	
		
			
				|  | @@ -278,7 +279,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;
 | 
	
		
			
				|  |  |    }
 | 
	
	
		
			
				|  | @@ -295,9 +296,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};
 | 
	
	
		
			
				|  | @@ -362,7 +362,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));
 | 
	
	
		
			
				|  | @@ -373,7 +373,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);
 | 
	
	
		
			
				|  | @@ -393,7 +393,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,
 | 
	
	
		
			
				|  | @@ -415,7 +415,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);
 | 
	
	
		
			
				|  | @@ -423,14 +423,8 @@ 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,
 | 
	
		
			
				|  |  | +    grpc_exec_ctx *exec_ctx, grpc_call_credentials *creds, grpc_pollset *pollset,
 | 
	
		
			
				|  |  |      const char *service_url, grpc_credentials_metadata_cb cb, void *user_data) {
 | 
	
		
			
				|  |  |    grpc_service_account_jwt_access_credentials *c =
 | 
	
		
			
				|  |  |        (grpc_service_account_jwt_access_credentials *)creds;
 | 
	
	
		
			
				|  | @@ -483,11 +477,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;
 | 
	
	
		
			
				|  | @@ -497,7 +490,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;
 | 
	
	
		
			
				|  | @@ -507,7 +500,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("
 | 
	
	
		
			
				|  | @@ -524,7 +517,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);
 | 
	
	
		
			
				|  | @@ -532,16 +525,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,
 | 
	
	
		
			
				|  | @@ -659,8 +642,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, const char *service_url,
 | 
	
		
			
				|  |  | +    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(
 | 
	
	
		
			
				|  | @@ -693,7 +677,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);
 | 
	
	
		
			
				|  | @@ -703,10 +687,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,
 | 
	
	
		
			
				|  | @@ -723,7 +705,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));
 | 
	
	
		
			
				|  | @@ -737,17 +719,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,
 | 
	
	
		
			
				|  | @@ -773,7 +753,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)) {
 | 
	
	
		
			
				|  | @@ -788,7 +769,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, "
 | 
	
	
		
			
				|  | @@ -801,20 +782,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;
 | 
	
	
		
			
				|  | @@ -827,7 +799,7 @@ 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,
 | 
	
		
			
				|  |  | +    grpc_exec_ctx *exec_ctx, grpc_call_credentials *creds, grpc_pollset *pollset,
 | 
	
		
			
				|  |  |      const char *service_url, grpc_credentials_metadata_cb cb, void *user_data) {
 | 
	
		
			
				|  |  |    grpc_md_only_test_credentials *c = (grpc_md_only_test_credentials *)creds;
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -841,18 +813,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);
 | 
	
	
		
			
				|  | @@ -863,34 +832,23 @@ 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,
 | 
	
		
			
				|  |  | +    grpc_exec_ctx *exec_ctx, grpc_call_credentials *creds, grpc_pollset *pollset,
 | 
	
		
			
				|  |  |      const char *service_url, 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;
 | 
	
	
		
			
				|  | @@ -900,7 +858,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);
 | 
	
	
		
			
				|  | @@ -913,31 +871,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;
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -948,21 +886,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;
 | 
	
	
		
			
				|  | @@ -972,69 +908,46 @@ 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;
 | 
	
		
			
				|  |  |    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;
 | 
	
	
		
			
				|  | @@ -1050,158 +963,111 @@ 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->service_url,
 | 
	
		
			
				|  |  | +                                               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,
 | 
	
		
			
				|  |  | +static void composite_call_get_request_metadata(
 | 
	
		
			
				|  |  | +    grpc_exec_ctx *exec_ctx, grpc_call_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));
 | 
	
		
			
				|  |  | +  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->service_url = gpr_strdup(service_url);
 | 
	
		
			
				|  |  |    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, service_url,
 | 
	
		
			
				|  |  | +      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_call_credentials_vtable composite_call_credentials_vtable = {
 | 
	
		
			
				|  |  | +    composite_call_destruct, composite_call_get_request_metadata};
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -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_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;
 | 
	
	
		
			
				|  | @@ -1214,30 +1080,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,
 | 
	
		
			
				|  |  | +                                     const char *service_url,
 | 
	
		
			
				|  |  | +                                     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(
 | 
	
	
		
			
				|  | @@ -1249,7 +1111,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);
 | 
	
	
		
			
				|  | @@ -1267,21 +1129,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,
 | 
	
	
		
			
				|  | @@ -1320,9 +1174,12 @@ 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,
 | 
	
		
			
				|  |  | +                                        const char *service_url,
 | 
	
		
			
				|  |  | +                                        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));
 | 
	
	
		
			
				|  | @@ -1336,18 +1193,76 @@ static void plugin_get_request_metadata(
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -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 = GRPC_CALL_CREDENTIALS_TYPE_METADATA_PLUGIN;
 | 
	
		
			
				|  |  |    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;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 |