X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=libmemcached%2Futil%2Fversion.cc;fp=libmemcached%2Futil%2Fversion.cc;h=761cbbf576fddd82c6767f44fd83fd814eb0a39e;hb=a67cb6c2387217bb31d512f034374bade5a2c2f6;hp=0000000000000000000000000000000000000000;hpb=cfaa34d5cd9f5b393ee49cad1eee854dedce4b72;p=awesomized%2Flibmemcached diff --git a/libmemcached/util/version.cc b/libmemcached/util/version.cc new file mode 100644 index 00000000..761cbbf5 --- /dev/null +++ b/libmemcached/util/version.cc @@ -0,0 +1,63 @@ +/* LibMemcached + * Copyright (C) 2010 Brian Aker + * All rights reserved. + * + * Use and distribution licensed under the BSD license. See + * the COPYING file in the parent directory for full text. + * + * Summary: connect to all hosts, and make sure they meet a minimum version + * + */ + +/* -*- Mode: C; tab-width: 2; c-basic-offset: 2; indent-tabs-mode: nil -*- */ +#include "libmemcached/common.h" +#include "libmemcached/memcached_util.h" + +struct local_context +{ + uint8_t major_version; + uint8_t minor_version; + uint8_t micro_version; + + bool truth; +}; + +static memcached_return_t check_server_version(const memcached_st *ptr, + const memcached_server_st *instance, + void *context) +{ + /* Do Nothing */ + struct local_context *check= (struct local_context *)context; + (void)ptr; + + if (instance->major_version != UINT8_MAX && + instance->major_version >= check->major_version && + instance->minor_version >= check->minor_version && + instance->micro_version >= check->micro_version ) + { + return MEMCACHED_SUCCESS; + } + + check->truth= false; + + return MEMCACHED_FAILURE; +} + +bool libmemcached_util_version_check(memcached_st *memc, + uint8_t major_version, + uint8_t minor_version, + uint8_t micro_version) +{ + memcached_server_fn callbacks[1]; + memcached_return_t rc= memcached_version(memc); + + if (rc != MEMCACHED_SUCCESS) + return false; + + struct local_context check= { major_version, minor_version, micro_version, true }; + + callbacks[0]= check_server_version; + memcached_server_cursor(memc, callbacks, (void *)&check, 1); + + return check.truth; +}