VALUE mc_set_prefix(VALUE self, VALUE prefix) { memcached_st *mc; static memcached_return_t result; Data_Get_Struct(self, memcached_st, mc); if (NIL_P(prefix)) { result = memcached_callback_set(mc, MEMCACHED_CALLBACK_PREFIX_KEY, NULL); } else { prefix = StringValue(prefix); result = memcached_callback_set(mc, MEMCACHED_CALLBACK_PREFIX_KEY, StringValuePtr(prefix)); } return prefix; }
static VALUE mc_initialize(VALUE self, VALUE opts) { memcached_st *mc; VALUE servers_aryv, prefixv, hashv, distributionv; Data_Get_Struct(self, memcached_st, mc); hashv = rb_hash_aref(opts, sym_hash); distributionv = rb_hash_aref(opts, sym_distribution); prefixv = rb_hash_aref(opts, sym_prefix); servers_aryv = rb_hash_aref(opts, sym_servers); if (!NIL_P(hashv)) { memcached_behavior_set(mc, MEMCACHED_BEHAVIOR_HASH, hash_behavior(hashv)); memcached_behavior_set(mc, MEMCACHED_BEHAVIOR_KETAMA_HASH, hash_behavior(hashv)); } if (!NIL_P(distributionv)) memcached_behavior_set_distribution(mc, distribution_behavior(distributionv)); if (RTEST( rb_hash_aref(opts, sym_ketama) )) memcached_behavior_set(mc, MEMCACHED_BEHAVIOR_KETAMA, true); if (RTEST( rb_hash_aref(opts, sym_ketama_weighted) )) memcached_behavior_set(mc, MEMCACHED_BEHAVIOR_KETAMA_WEIGHTED, true); if (RTEST( rb_hash_aref(opts, sym_hash_with_prefix) )) memcached_behavior_set(mc, MEMCACHED_BEHAVIOR_HASH_WITH_PREFIX_KEY, true); if (RTEST( rb_hash_aref(opts, sym_binary) )) memcached_behavior_set(mc, MEMCACHED_BEHAVIOR_BINARY_PROTOCOL, true); if (!NIL_P(prefixv)) memcached_callback_set(mc, MEMCACHED_CALLBACK_PREFIX_KEY, StringValuePtr(prefixv)); if (!NIL_P(servers_aryv)) { char* server; int i; for (i = 0; i < RARRAY_LEN(servers_aryv); i++) { server = StringValuePtr(RARRAY_PTR(servers_aryv)[i]); memcached_server_push(mc, memcached_servers_parse(server)); } } else { VALUE hostv, portv, weightv; char* host; int port, weight; hostv = rb_hash_aref(opts, sym_host); portv = rb_hash_aref(opts, sym_port); weightv = rb_hash_aref(opts, sym_weight); host = StringValuePtr(hostv); port = NIL_P(portv) ? MEMCACHED_DEFAULT_PORT : NUM2INT(portv); weight = NIL_P(weightv) ? 0 : NUM2INT(weightv); memcached_server_add_with_weight(mc, StringValuePtr(hostv), port, weight); } return self; }
static void mcache_set_module_namespace(pr_memcache_t *mcache, module *m) { memcached_return res = MEMCACHED_SUCCESS; if (m == NULL) { res = memcached_callback_set(mcache->mc, MEMCACHED_CALLBACK_PREFIX_KEY, NULL); } else { if (mcache->namespace_tab != NULL) { const char *v; v = pr_table_kget(mcache->namespace_tab, m, sizeof(module *), NULL); if (v != NULL) { pr_trace_msg(trace_channel, 25, "using namespace prefix '%s' for module 'mod_%s.c'", v, m->name); res = memcached_callback_set(mcache->mc, MEMCACHED_CALLBACK_PREFIX_KEY, (void *) v); } } else { res = MEMCACHED_SUCCESS; } } if (res != MEMCACHED_SUCCESS) { if (m != NULL) { pr_trace_msg(trace_channel, 9, "unable to set MEMCACHED_CALLBACK_PREFIX_KEY for module 'mod_%s.c': %s", m->name, memcached_strerror(mcache->mc, res)); } else { pr_trace_msg(trace_channel, 9, "unable to clear MEMCACHED_CALLBACK_PREFIX_KEY: %s", memcached_strerror(mcache->mc, res)); } } }
static zend_bool s_configure_from_ini_values(memcached_st *memc, zend_bool silent) { memcached_return rc; #define check_set_behavior(behavior, value) \ if ((rc = memcached_behavior_set(memc, (behavior), (value))) != MEMCACHED_SUCCESS) { \ if (!silent) { php_error_docref(NULL, E_WARNING, "failed to initialise session memcached configuration: %s", memcached_strerror(memc, rc)); } \ return 0; \ } if (MEMC_SESS_INI(binary_protocol_enabled)) { check_set_behavior(MEMCACHED_BEHAVIOR_BINARY_PROTOCOL, 1); } if (MEMC_SESS_INI(consistent_hash_enabled)) { check_set_behavior(MEMCACHED_BEHAVIOR_KETAMA, 1); } if (MEMC_SESS_INI(server_failure_limit)) { check_set_behavior(MEMCACHED_BEHAVIOR_SERVER_FAILURE_LIMIT, MEMC_SESS_INI(server_failure_limit)); } if (MEMC_SESS_INI(number_of_replicas)) { check_set_behavior(MEMCACHED_BEHAVIOR_NUMBER_OF_REPLICAS, MEMC_SESS_INI(number_of_replicas)); } if (MEMC_SESS_INI(randomize_replica_read_enabled)) { check_set_behavior(MEMCACHED_BEHAVIOR_RANDOMIZE_REPLICA_READ, 1); } if (MEMC_SESS_INI(remove_failed_servers_enabled)) { check_set_behavior(MEMCACHED_BEHAVIOR_REMOVE_FAILED_SERVERS, 1); } if (MEMC_SESS_INI(connect_timeout)) { check_set_behavior(MEMCACHED_BEHAVIOR_CONNECT_TIMEOUT, MEMC_SESS_INI(connect_timeout)); } if (MEMC_SESS_STR_INI(prefix)) { memcached_callback_set(memc, MEMCACHED_CALLBACK_NAMESPACE, MEMC_SESS_STR_INI(prefix)); } if (MEMC_SESS_STR_INI(sasl_username) && MEMC_SESS_STR_INI(sasl_password)) { php_memcached_user_data *user_data; if (!php_memc_init_sasl_if_needed()) { return 0; } check_set_behavior(MEMCACHED_BEHAVIOR_BINARY_PROTOCOL, 1); if (memcached_set_sasl_auth_data(memc, MEMC_SESS_STR_INI(sasl_username), MEMC_SESS_STR_INI(sasl_password)) == MEMCACHED_FAILURE) { php_error_docref(NULL, E_WARNING, "failed to set memcached session sasl credentials"); return 0; } user_data = memcached_get_user_data(memc); user_data->has_sasl_data = 1; } #undef safe_set_behavior return 1; }