char* mmg_get_valuef(mmg_conn *db, char *dsn, char *key, int skip, char *qfmt, ...) { HDF *tmpnode; hdf_init(&tmpnode); char *val, *querys, sels[256]; va_list ap; NEOERR *err; va_start(ap, qfmt); querys = vsprintf_alloc(qfmt, ap); va_end(ap); if (!querys) { mtc_err("Unable to allocate mem for query string"); return NULL; } snprintf(sels, sizeof(sels), "{'%s': 1}", key); err = mmg_prepare(db, MMG_FLAG_EMPTY, skip, 1, NULL, sels, querys); RETURN_V_NOK(err, NULL); err = mmg_query(db, dsn, NULL, tmpnode); RETURN_V_NOK(err, NULL); err = hdf_get_copy(tmpnode, key, &val, NULL); RETURN_V_NOK(err, NULL); hdf_destroy(&tmpnode); SAFE_FREE(querys); return val; }
NEOERR* session_init(CGI *cgi, HASH *dbh, session_t **ses) { session_t *lses; char tok[_POSIX_PATH_MAX]; *ses = NULL; lses = calloc(1, sizeof(session_t)); if (!lses) return nerr_raise(NERR_NOMEM, "calloc memory for session_t failure"); lses->reqtype = CGI_REQ_HTML; hdf_get_copy(cgi->hdf, PRE_COOKIE".uname", &lses->uname, NULL); char *uri = hdf_get_value(cgi->hdf, PRE_REQ_URI_RW, NULL); if (!uri) { uri = "terminal"; lses->reqtype = CGI_REQ_TERMINAL; } /* TODO uniq req uri */ //uri = mmisc_str_uniq(uri, '/'); mmisc_str_repchr(uri, '/', '_'); uri = mmisc_str_strip(uri, '_'); if (!strncmp(uri, "json_", 5)) { uri = uri+5; lses->reqtype = CGI_REQ_AJAX; } switch (CGI_REQ_METHOD(cgi)) { case CGI_REQ_POST: snprintf(tok, sizeof(tok), "%s_data_mod", uri); break; case CGI_REQ_PUT: snprintf(tok, sizeof(tok), "%s_data_add", uri); break; case CGI_REQ_DEL: snprintf(tok, sizeof(tok), "%s_data_del", uri); break; default: case CGI_REQ_GET: snprintf(tok, sizeof(tok), "%s_data_get", uri); break; } lses->dataer = strdup(tok); lses->render = strdup(uri); /* process cache */ HDF *node = hdf_get_obj(g_cfg, PRE_CFG_FILECACHE".0"); while (node != NULL) { if (reg_search(hdf_get_value(node, "uri", "NULL"), uri)) { lses->tm_cache_browser = hdf_get_int_value(node, "tm_cache", 0); break; } node = hdf_obj_next(node); } *ses = lses; return STATUS_OK; }