blob: f9b8e686988f08722d00f571415a5fb6665f6ac7 [file] [log] [blame]
Craig Tilleraf691802015-06-23 14:57:07 -07001/*
2 *
Craig Tiller6169d5f2016-03-31 07:46:18 -07003 * Copyright 2015, Google Inc.
Craig Tilleraf691802015-06-23 14:57:07 -07004 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are
8 * met:
9 *
10 * * Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 * * Redistributions in binary form must reproduce the above
13 * copyright notice, this list of conditions and the following disclaimer
14 * in the documentation and/or other materials provided with the
15 * distribution.
16 * * Neither the name of Google Inc. nor the names of its
17 * contributors may be used to endorse or promote products derived from
18 * this software without specific prior written permission.
19 *
20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31 *
32 */
33
Craig Tillerd4c98332016-03-31 13:45:47 -070034#include "src/core/ext/client_config/client_config.h"
Craig Tiller7c0b4d72015-06-25 14:44:44 -070035
36#include <string.h>
37
38#include <grpc/support/alloc.h>
39
Craig Tillera82950e2015-09-22 12:33:20 -070040struct grpc_client_config {
Craig Tiller7c0b4d72015-06-25 14:44:44 -070041 gpr_refcount refs;
42 grpc_lb_policy *lb_policy;
43};
44
Craig Tillera82950e2015-09-22 12:33:20 -070045grpc_client_config *grpc_client_config_create() {
46 grpc_client_config *c = gpr_malloc(sizeof(*c));
47 memset(c, 0, sizeof(*c));
48 gpr_ref_init(&c->refs, 1);
Craig Tiller7c0b4d72015-06-25 14:44:44 -070049 return c;
50}
51
Craig Tillera82950e2015-09-22 12:33:20 -070052void grpc_client_config_ref(grpc_client_config *c) { gpr_ref(&c->refs); }
53
54void grpc_client_config_unref(grpc_exec_ctx *exec_ctx, grpc_client_config *c) {
55 if (gpr_unref(&c->refs)) {
Craig Tiller1e55bd42016-03-11 09:47:43 -080056 if (c->lb_policy != NULL) {
57 GRPC_LB_POLICY_UNREF(exec_ctx, c->lb_policy, "client_config");
58 }
Craig Tillera82950e2015-09-22 12:33:20 -070059 gpr_free(c);
60 }
Craig Tiller7c0b4d72015-06-25 14:44:44 -070061}
62
Craig Tillera82950e2015-09-22 12:33:20 -070063void grpc_client_config_set_lb_policy(grpc_client_config *c,
64 grpc_lb_policy *lb_policy) {
65 GPR_ASSERT(c->lb_policy == NULL);
66 if (lb_policy) {
67 GRPC_LB_POLICY_REF(lb_policy, "client_config");
68 }
Craig Tiller7c0b4d72015-06-25 14:44:44 -070069 c->lb_policy = lb_policy;
70}
71
Craig Tillera82950e2015-09-22 12:33:20 -070072grpc_lb_policy *grpc_client_config_get_lb_policy(grpc_client_config *c) {
Craig Tiller7c0b4d72015-06-25 14:44:44 -070073 return c->lb_policy;
74}