aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/ext/client_config/resolver_result.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/ext/client_config/resolver_result.c')
-rw-r--r--src/core/ext/client_config/resolver_result.c54
1 files changed, 32 insertions, 22 deletions
diff --git a/src/core/ext/client_config/resolver_result.c b/src/core/ext/client_config/resolver_result.c
index 68f6f5bfb6..ac263b9a46 100644
--- a/src/core/ext/client_config/resolver_result.c
+++ b/src/core/ext/client_config/resolver_result.c
@@ -34,6 +34,7 @@
#include <string.h>
#include <grpc/support/alloc.h>
+#include <grpc/support/string_util.h>
grpc_addresses* grpc_addresses_create(size_t num_addresses) {
grpc_addresses* addresses = gpr_malloc(sizeof(grpc_addresses));
@@ -44,6 +45,13 @@ grpc_addresses* grpc_addresses_create(size_t num_addresses) {
return addresses;
}
+grpc_addresses* grpc_addresses_copy(grpc_addresses* addresses) {
+ grpc_addresses* new = grpc_addresses_create(addresses->num_addresses);
+ memcpy(new->addresses, addresses->addresses,
+ sizeof(grpc_address) * addresses->num_addresses);
+ return new;
+}
+
void grpc_addresses_set_address(grpc_addresses* addresses, size_t index,
void* address, size_t address_len,
bool is_balancer) {
@@ -61,37 +69,39 @@ void grpc_addresses_destroy(grpc_addresses* addresses) {
struct grpc_resolver_result {
gpr_refcount refs;
- grpc_lb_policy* lb_policy;
+ grpc_addresses* addresses;
+ char* lb_policy_name;
};
-grpc_resolver_result* grpc_resolver_result_create() {
- grpc_resolver_result* c = gpr_malloc(sizeof(*c));
- memset(c, 0, sizeof(*c));
- gpr_ref_init(&c->refs, 1);
- return c;
+grpc_resolver_result* grpc_resolver_result_create(grpc_addresses* addresses,
+ const char* lb_policy_name) {
+ grpc_resolver_result* result = gpr_malloc(sizeof(*result));
+ memset(result, 0, sizeof(*result));
+ gpr_ref_init(&result->refs, 1);
+ result->addresses = addresses;
+ result->lb_policy_name = gpr_strdup(lb_policy_name);
+ return result;
}
-void grpc_resolver_result_ref(grpc_resolver_result* c) { gpr_ref(&c->refs); }
+void grpc_resolver_result_ref(grpc_resolver_result* result) {
+ gpr_ref(&result->refs);
+}
void grpc_resolver_result_unref(grpc_exec_ctx* exec_ctx,
- grpc_resolver_result* c) {
- if (gpr_unref(&c->refs)) {
- if (c->lb_policy != NULL) {
- GRPC_LB_POLICY_UNREF(exec_ctx, c->lb_policy, "resolver_result");
- }
- gpr_free(c);
+ grpc_resolver_result* result) {
+ if (gpr_unref(&result->refs)) {
+ grpc_addresses_destroy(result->addresses);
+ gpr_free(result->lb_policy_name);
+ gpr_free(result);
}
}
-void grpc_resolver_result_set_lb_policy(grpc_resolver_result* c,
- grpc_lb_policy* lb_policy) {
- GPR_ASSERT(c->lb_policy == NULL);
- if (lb_policy) {
- GRPC_LB_POLICY_REF(lb_policy, "resolver_result");
- }
- c->lb_policy = lb_policy;
+grpc_addresses* grpc_resolver_result_get_addresses(
+ grpc_resolver_result* result) {
+ return result->addresses;
}
-grpc_lb_policy* grpc_resolver_result_get_lb_policy(grpc_resolver_result* c) {
- return c->lb_policy;
+const char* grpc_resolver_result_get_lb_policy_name(
+ grpc_resolver_result* result) {
+ return result->lb_policy_name;
}