/* create new connection pool handle */ void *mod_conn_create(void *instance) { rlm_couchbase_t *inst = instance; /* module instance pointer */ rlm_couchbase_handle_t *chandle = NULL; /* connection handle pointer */ cookie_t *cookie = NULL; /* couchbase cookie */ lcb_t cb_inst; /* couchbase connection instance */ lcb_error_t cb_error = LCB_SUCCESS; /* couchbase error status */ /* create instance */ cb_inst = couchbase_init_connection(inst->server, inst->bucket, inst->password); /* check couchbase instance status */ if ((cb_error = lcb_get_last_error(cb_inst)) != LCB_SUCCESS) { ERROR("rlm_couchbase: failed to initiate couchbase connection: %s (0x%x)", lcb_strerror(NULL, cb_error), cb_error); /* destroy/free couchbase instance */ lcb_destroy(cb_inst); /* fail */ return NULL; } /* allocate memory for couchbase connection instance abstraction */ chandle = talloc_zero(inst, rlm_couchbase_handle_t); cookie = talloc_zero(chandle, cookie_t); /* initialize cookie error holder */ cookie->jerr = json_tokener_success; /* populate handle with allocated structs */ chandle->cookie = cookie; chandle->handle = cb_inst; /* return handle struct */ return chandle; }
/* verify valid couchbase connection handle */ int mod_conn_alive(UNUSED void *instance, void *handle) { rlm_couchbase_handle_t *chandle = handle; /* connection handle pointer */ lcb_t cb_inst = chandle->handle; /* couchbase instance */ lcb_error_t cb_error = LCB_SUCCESS; /* couchbase error status */ /* attempt to get server list */ const char *const *servers = lcb_get_server_list(cb_inst); /* check error state and server list return */ if (((cb_error = lcb_get_last_error(cb_inst)) != LCB_SUCCESS) || (servers == NULL)) { /* log error */ ERROR("rlm_couchbase: failed to get couchbase server topology: %s (0x%x)", lcb_strerror(NULL, cb_error), cb_error); /* return false */ return false; } return true; }
int couchbase_set(cachedb_con *connection,str *attr, str *val,int expires) { lcb_t instance; lcb_error_t oprc; lcb_store_cmd_t cmd; const lcb_store_cmd_t *commands[1]; last_error = LCB_SUCCESS; instance = COUCHBASE_CON(connection); commands[0] = &cmd; memset(&cmd, 0, sizeof(cmd)); cmd.v.v0.operation = LCB_SET; cmd.v.v0.key = attr->s; cmd.v.v0.nkey = attr->len; cmd.v.v0.bytes = val->s; cmd.v.v0.nbytes = val->len; cmd.v.v0.exptime = expires; oprc = lcb_store(instance, NULL, 1, commands); if (oprc != LCB_SUCCESS) { LM_ERR("Failed to send the insert query - %s\n", lcb_strerror(instance, oprc)); couchbase_conditional_reconnect(connection, oprc); return -2; } lcb_wait(instance); oprc = lcb_get_last_error(instance); if (last_error != LCB_SUCCESS) { couchbase_conditional_reconnect(connection, last_error); return -1; } LM_DBG("Succesfully stored\n"); return 1; }