change license header library name to libmemcached-awesome
[awesomized/libmemcached] / src / libmemcachedutil / ping.cc
1 /*
2 +--------------------------------------------------------------------+
3 | libmemcached-awesome - C/C++ Client Library for memcached |
4 +--------------------------------------------------------------------+
5 | Redistribution and use in source and binary forms, with or without |
6 | modification, are permitted under the terms of the BSD license. |
7 | You should have received a copy of the license in a bundled file |
8 | named LICENSE; in case you did not receive a copy you can review |
9 | the terms online at: https://opensource.org/licenses/BSD-3-Clause |
10 +--------------------------------------------------------------------+
11 | Copyright (c) 2006-2014 Brian Aker https://datadifferential.com/ |
12 | Copyright (c) 2020-2021 Michael Wallner https://awesome.co/ |
13 +--------------------------------------------------------------------+
14 */
15
16 #include "libmemcachedutil/common.h"
17
18 bool libmemcached_util_ping(const char *hostname, in_port_t port, memcached_return_t *ret) {
19 memcached_return_t unused;
20 if (ret == NULL) {
21 ret = &unused;
22 }
23
24 memcached_st *memc_ptr = memcached_create(NULL);
25 if (memc_ptr == NULL) {
26 *ret = MEMCACHED_MEMORY_ALLOCATION_FAILURE;
27 return false;
28 }
29
30 if (memcached_success(
31 (*ret = memcached_behavior_set(memc_ptr, MEMCACHED_BEHAVIOR_CONNECT_TIMEOUT, 400000))))
32 {
33 memcached_return_t rc = memcached_server_add(memc_ptr, hostname, port);
34 if (memcached_success(rc)) {
35 rc = memcached_version(memc_ptr);
36 }
37
38 if (memcached_failed(rc) and rc == MEMCACHED_SOME_ERRORS) {
39 const memcached_instance_st *instance = memcached_server_instance_by_position(memc_ptr, 0);
40
41 assert_msg(instance and memcached_server_error(instance), " ");
42 if (instance and memcached_server_error(instance)) {
43 rc = memcached_server_error_return(instance);
44 }
45 }
46
47 *ret = rc;
48 }
49 memcached_free(memc_ptr);
50
51 return memcached_success(*ret);
52 }
53
54 bool libmemcached_util_ping2(const char *hostname, in_port_t port, const char *username,
55 const char *password, memcached_return_t *ret) {
56 if (username == NULL) {
57 return libmemcached_util_ping(hostname, port, ret);
58 }
59
60 memcached_return_t unused;
61 if (not ret)
62 ret = &unused;
63
64 if (LIBMEMCACHED_WITH_SASL_SUPPORT == 0) {
65 *ret = MEMCACHED_NOT_SUPPORTED;
66 return false;
67 }
68
69 memcached_st *memc_ptr = memcached_create(NULL);
70 if (not memc_ptr) {
71 *ret = MEMCACHED_MEMORY_ALLOCATION_FAILURE;
72 return false;
73 }
74
75 if (memcached_failed(*ret = memcached_set_sasl_auth_data(memc_ptr, username, password))) {
76 memcached_free(memc_ptr);
77 return false;
78 }
79
80 memcached_return_t rc = memcached_server_add(memc_ptr, hostname, port);
81 if (memcached_success(rc)) {
82 rc = memcached_version(memc_ptr);
83 }
84
85 if (memcached_failed(rc) and rc == MEMCACHED_SOME_ERRORS) {
86 const memcached_instance_st *instance = memcached_server_instance_by_position(memc_ptr, 0);
87
88 assert_msg(instance and memcached_server_error(instance), " ");
89 if (instance and memcached_server_error(instance)) {
90 rc = memcached_server_error_return(instance);
91 }
92 }
93 memcached_free(memc_ptr);
94
95 *ret = rc;
96
97 return memcached_success(rc);
98 }