static grpc_resolver_factory *resolve_factory(const char *target, grpc_uri **uri) { char *tmp; grpc_resolver_factory *factory = NULL; GPR_ASSERT(uri != NULL); *uri = grpc_uri_parse(target, 1); factory = lookup_factory(*uri); if (factory == NULL) { if (g_default_resolver_prefix != NULL) { grpc_uri_destroy(*uri); gpr_asprintf(&tmp, "%s%s", g_default_resolver_prefix, target); *uri = grpc_uri_parse(tmp, 1); factory = lookup_factory(*uri); if (factory == NULL) { grpc_uri_destroy(grpc_uri_parse(target, 0)); grpc_uri_destroy(grpc_uri_parse(tmp, 0)); gpr_log(GPR_ERROR, "don't know how to resolve '%s' or '%s'", target, tmp); } gpr_free(tmp); } else { grpc_uri_destroy(grpc_uri_parse(target, 0)); gpr_log(GPR_ERROR, "don't know how to resolve '%s'", target); } } return factory; }
grpc_lb_policy *grpc_lb_policy_create(const char *name, grpc_lb_policy_args *args) { grpc_lb_policy_factory *factory = lookup_factory(name); grpc_lb_policy *lb_policy = grpc_lb_policy_factory_create_lb_policy( factory, args); return lb_policy; }
static grpc_resolver_factory *lookup_factory_by_uri(grpc_uri *uri) { if (!uri) return NULL; return lookup_factory(uri->scheme); }
grpc_resolver_factory *grpc_resolver_factory_lookup(const char *name) { grpc_resolver_factory *f = lookup_factory(name); if (f) grpc_resolver_factory_ref(f); return f; }