X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=libmemcached%2Foptions%2Fcontext.h;h=2597b196180ded836ef0a9b1c6dde53c387c3847;hb=a5f039742fa3d25829d788edff0e84bdc41401f7;hp=9e4ecb3a32d5d873f25e2937a914a5838f0bbe30;hpb=de46e62fe493ce152e1804feec0d19d5d0cfaa9f;p=m6w6%2Flibmemcached diff --git a/libmemcached/options/context.h b/libmemcached/options/context.h index 9e4ecb3a..2597b196 100644 --- a/libmemcached/options/context.h +++ b/libmemcached/options/context.h @@ -37,7 +37,7 @@ #pragma once -#include +#include class Context { @@ -49,8 +49,10 @@ public: pos(0), memc(NULL), rc(rc_arg), + _is_server(false), _end(false) { + _hostname[0]= 0; buf= option_string; length= option_string_length; memc= memc_arg; @@ -71,6 +73,60 @@ public: _end= true; } + void set_server() + { + _is_server= true; + } + + void unset_server() + { + _is_server= false; + } + + bool is_server() + { + return _is_server; + } + + const char *set_hostname(const char *str, size_t size) + { + size_t copy_length= (size_t)NI_MAXHOST > size ? size : (size_t)NI_MAXHOST; + memcpy(_hostname, str, copy_length); + _hostname[copy_length]= 0; + + return _hostname; + } + + const char *hostname() + { + return _hostname; + } + + void abort(const char *error) + { + if (rc == MEMCACHED_SUCCESS) + rc= MEMCACHED_PARSE_ERROR; + + memcached_string_st *error_string= memcached_string_create(memc, NULL, 1024); + memcached_string_append(error_string, memcached_literal_param("Error occured while parsing: ")); + memcached_string_append(error_string, memcached_string_make_from_cstr(begin)); + memcached_string_append(error_string, memcached_literal_param(" (")); + + if (rc == MEMCACHED_PARSE_ERROR and error) + { + memcached_string_append(error_string, memcached_string_make_from_cstr(error)); + } + else + { + memcached_string_append(error_string, memcached_string_make_from_cstr(memcached_strerror(NULL, rc))); + } + memcached_string_append(error_string, memcached_literal_param(")")); + + memcached_set_error(*memc, rc, MEMCACHED_AT, memcached_string_value(error_string), memcached_string_length(error_string)); + + memcached_string_free(error_string); + } + ~Context() { destroy_scanner(); @@ -89,5 +145,7 @@ protected: void destroy_scanner(); private: + bool _is_server; bool _end; + char _hostname[NI_MAXHOST]; };