NEOERR* blog_static_get(HDF *hdf, HASH *dbh) { mdb_conn *conn = (mdb_conn*)hash_lookup(dbh, "aux"); NEOERR *err; LPRE_DBOP(hdf, conn); int bid = hdf_get_int_value(hdf, PRE_QUERY".bid", 0); MDB_QUERY_RAW(conn, "blog", BLOG_COL, " id=%d AND state=%d ", NULL, bid, BLOG_ST_NORMAL); err = mdb_set_row(hdf, conn, BLOG_COL, PRE_OUTPUT".blog"); if (err != STATUS_OK) return nerr_pass(err); /* * previous * TODO id%32 ===> id%%d, BLOG_SUBDIR_NUM */ MDB_QUERY_RAW(conn, "blog", " id%32 ||'/'|| id as id, title ", " id < %d AND state=%d ORDER BY ID DESC LIMIT 1 ", NULL, bid, BLOG_ST_NORMAL); err = mdb_set_row(hdf, conn, " fnameprev, titleprev ", PRE_OUTPUT".blog"); if (err != STATUS_OK) return nerr_pass(err); /* * next */ MDB_QUERY_RAW(conn, "blog", " id%32 ||'/'|| id as id, title ", " id > %d AND state=%d ORDER BY ID LIMIT 1 ", NULL, bid, BLOG_ST_NORMAL); err = mdb_set_row(hdf, conn, " fnamenext, titlenext ", PRE_OUTPUT".blog"); return nerr_pass(err); }
NEOERR* blog_data_get(CGI *cgi, HASH *dbh, HASH *evth, session_t *ses) { mdb_conn *conn = (mdb_conn*)hash_lookup(dbh, "aux"); mevent_t *evt = (mevent_t*)hash_lookup(evth, "aic"); char *aname, *author; NEOERR *err; LPRE_DBOP(cgi->hdf, conn); APP_CHECK_LOGIN(); if (hdf_get_int_value(evt->hdfrcv, "state", 0) < LCS_ST_ADMIN) return nerr_raise(LERR_LIMIT, "%s wan't be admin", aname); int bid = hdf_get_int_value(cgi->hdf, PRE_QUERY".bid", 0); /* just rend tpl */ if (bid == 0) return STATUS_OK; MDB_QUERY_RAW(conn, "blog", BLOG_COL, " id=%d ", NULL, bid, BLOG_ST_NORMAL); err = mdb_set_row(cgi->hdf, conn, BLOG_COL, PRE_OUTPUT".blog"); if (err != STATUS_OK) return nerr_pass(err); author = hdf_get_value(cgi->hdf, PRE_OUTPUT".blog.author", NULL); if (!author) return nerr_raise(LERR_MISS_DATA, "%s not exist", aname); if (strcmp(aname, author)) return nerr_raise(LERR_LIMIT, "%s not %s", aname, author); return STATUS_OK; }
static NEOERR* aux_cmd_memoryget(struct aux_entry *e, QueueEntry *q) { unsigned char *val = NULL; size_t vsize = 0; NEOERR *err; int id = 0; mdb_conn *db = e->db; struct cache *cd = e->cd; REQ_FETCH_PARAM_INT(q->hdfrcv, "id", id); if (m_memory_maxid < 1) return nerr_raise(NERR_ASSERT, "empty memory"); /* * neo_rand() may get 0, so, +1 */ if (id == 0) id = neo_rand(m_memory_maxid) + 1; if (cache_getf(cd, &val, &vsize, PREFIX_MEMORY"%d", id)) { unpack_hdf(val, vsize, &q->hdfsnd); } else { MDB_QUERY_RAW(db, "memory", _COL_MEMORY, "id<=%d AND statu=%d ORDER BY id DESC LIMIT 1", NULL, id, MEMORY_ST_OK); err = mdb_set_row(q->hdfsnd, db, _COL_MEMORY, NULL); if (err != STATUS_OK) return nerr_pass(err); CACHE_HDF(q->hdfsnd, MEMORY_CC_SEC, PREFIX_MEMORY"%d", id); } return STATUS_OK; }
NEOERR* member_check_login_data_get(CGI *cgi, HASH *dbh, HASH *evth, session_t *ses) { mdb_conn *db = hash_lookup(dbh, "main"); char *mname, *mmsn; NEOERR *err; MCS_NOT_NULLB(cgi->hdf, db); HDF_FETCH_STR(cgi->hdf, PRE_QUERY".mname", mname); HDF_FETCH_STR(cgi->hdf, PRE_QUERY".mmsn", mmsn); if (!mname || !mmsn) { HDF_GET_STR_IDENT(cgi->hdf, PRE_COOKIE".mname", mname); HDF_GET_STR_IDENT(cgi->hdf, PRE_COOKIE".mmsn", mmsn); } hdf_set_value(cgi->hdf, PRE_RESERVE".mname", mname); MDB_QUERY_RAW(db, "member", _COL_MEMBER, "mname=$1", "s", mname); err = mdb_set_row(cgi->hdf, db, _COL_MEMBER, PRE_OUTPUT".member", MDB_FLAG_Z); if (err != STATUS_OK) return nerr_pass(err); char *mmsndb = hdf_get_value(cgi->hdf, PRE_OUTPUT".member.mmsn", NULL); if (!mmsndb || strcmp(mmsndb, mmsn)) { hdf_remove_tree(cgi->hdf, PRE_OUTPUT".member"); return nerr_raise(LERR_NOTLOGIN, "msn don't match"); } return STATUS_OK; }
static NEOERR* dyn_cmd_getadmin(struct queue_entry *q, struct cache *cd, mdb_conn *db) { unsigned char *val = NULL; size_t vsize = 0; char *uname, *aname; int uid, aid; NEOERR *err; REQ_GET_PARAM_STR(q->hdfrcv, "uname", uname); REQ_GET_PARAM_STR(q->hdfrcv, "aname", aname); uid = hash_string(uname); aid = hash_string(aname); if (cache_getf(cd, &val, &vsize, PREFIX_ADMIN"%d_%d", uid, aid)) { unpack_hdf(val, vsize, &q->hdfsnd); } else { MDB_QUERY_RAW(db, "track", TRACK_COL, "uid=%d AND aid=%d AND type=%d " " ORDER BY id DESC LIMIT 1;", NULL, uid, aid, TYPE_JOIN); err = mdb_set_row(q->hdfsnd, db, TRACK_COL, NULL); nerr_handle(&err, NERR_NOT_FOUND); if (err != STATUS_OK) return nerr_pass(err); CACHE_HDF(q->hdfsnd, ONE_MINUTE, PREFIX_ADMIN"%d_%d", uid, aid); } return STATUS_OK; }
static NEOERR* aic_cmd_app_getrlink(struct queue_entry *q, struct cache *cd, mdb_conn *db) { char *aname; NEOERR *err; REQ_GET_PARAM_STR(q->hdfrcv, "aname", aname); MDB_QUERY_RAW(db, "appreset", RESET_COL, "aname=$1", "s", aname); err = mdb_set_row(q->hdfsnd, db, RESET_COL, NULL); if (nerr_handle(&err, NERR_NOT_FOUND)) return nerr_raise(REP_ERR_NRESET, "%s hasn't reseted", aname); return nerr_pass(err); }
/* * input : aname(STR) * return: NORMAL * reply : ["state": 0, ...] OR [] */ static NEOERR* aic_cmd_appinfo(struct queue_entry *q, struct cache *cd, mdb_conn *db) { unsigned char *val = NULL; size_t vsize = 0; int aid, pid; char *aname; NEOERR *err; REQ_GET_PARAM_STR(q->hdfrcv, "aname", aname); aid = hash_string(aname); if (cache_getf(cd, &val, &vsize, PREFIX_APPINFO"%d", aid)) { unpack_hdf(val, vsize, &q->hdfsnd); } else { hdf_set_value(q->hdfsnd, "pname", aname); MDB_QUERY_RAW(db, "appinfo", APPINFO_COL, "aid=%d", NULL, aid); err = mdb_set_row(q->hdfsnd, db, APPINFO_COL, NULL); if (nerr_handle(&err, NERR_NOT_FOUND)) return nerr_raise(REP_ERR_NREGIST, "%s %d hasn't regist", aname, aid); if (err != STATUS_OK) return nerr_pass(err); pid = hdf_get_int_value(q->hdfsnd, "pid", 0); if (pid != 0) { MDB_QUERY_RAW(db, "appinfo", "aname", "aid=%d", NULL, pid); err = mdb_set_row(q->hdfsnd, db, "pname", NULL); nerr_handle(&err, NERR_NOT_FOUND); if (err != STATUS_OK) return nerr_pass(err); } MDB_QUERY_RAW(db, "appinfo", "COUNT(*)+1 AS numuser", "pid=%d", NULL, aid); err = mdb_set_row(q->hdfsnd, db, "numuser", NULL); if (err != STATUS_OK) return nerr_pass(err); CACHE_HDF(q->hdfsnd, AIC_CC_SEC, PREFIX_APPINFO"%d", aid); } return STATUS_OK; }
static NEOERR* aux_cmd_impdetail(struct queue_entry *q, struct cache *cd, mdb_conn *db) { unsigned char *val = NULL; size_t vsize = 0; NEOERR *err; int id; REQ_GET_PARAM_INT(q->hdfrcv, "id", id); if (cache_getf(cd, &val, &vsize, PREFIX_IMP_DETAIL"%d", id)) { unpack_hdf(val, vsize, &q->hdfsnd); } else { MDB_QUERY_RAW(db, "improve", IMP_COL, "id=%d", NULL, id); err = mdb_set_row(q->hdfsnd, db, IMP_COL, NULL); if (err != STATUS_OK) return nerr_pass(err); CACHE_HDF(q->hdfsnd, IMP_CC_SEC, PREFIX_IMP_DETAIL"%d", id); } return STATUS_OK; }
static NEOERR* aic_cmd_appousers(struct queue_entry *q, struct cache *cd, mdb_conn *db) { unsigned char *val = NULL; size_t vsize = 0; int count, offset; int pid; char *pname, *aname; NEOERR *err; REQ_GET_PARAM_STR(q->hdfrcv, "pname", pname); pid = hash_string(pname); mmisc_pagediv(q->hdfrcv, NULL, &count, &offset, NULL, q->hdfsnd); if (cache_getf(cd, &val, &vsize, PREFIX_APPOUSER"%d_%d", pid, offset)) { unpack_hdf(val, vsize, &q->hdfsnd); } else { MMISC_PAGEDIV_SET_N(q->hdfsnd, db, "appinfo", "pid=%d OR aid=%d", NULL, pid, pid); MDB_QUERY_RAW(db, "appinfo", APPINFO_COL, "pid=%d OR aid=%d ORDER BY uptime DESC LIMIT %d OFFSET %d", NULL, pid, pid, count, offset); err = mdb_set_rows(q->hdfsnd, db, APPINFO_COL, "users", "1"); if (err != STATUS_OK) return nerr_pass(err); HDF *node = hdf_get_child(q->hdfsnd, "users"); while (node) { /* numcamer */ aname = hdf_get_value(node, "aname", NULL); if (aname) { MDB_QUERY_RAW(db, "userinfo", " COUNT(*) AS numcamer ", "aid=%d", NULL, hash_string(aname)); err = mdb_set_row(node, db, " numcamer ", NULL); if (err != STATUS_OK) return nerr_pass(err); } node = hdf_obj_next(node); } CACHE_HDF(q->hdfsnd, AIC_CC_SEC, PREFIX_APPOUSER"%d_%d", pid, offset); } return STATUS_OK; }
NEOERR* member_login_data_get(CGI *cgi, HASH *dbh, HASH *evth, session_t *ses) { mdb_conn *db = hash_lookup(dbh, "main"); char *mname, *msn; NEOERR *err; MCS_NOT_NULLB(cgi->hdf, db); HDF_GET_STR(cgi->hdf, PRE_QUERY".mname", mname); HDF_GET_STR(cgi->hdf, PRE_QUERY".msn", msn); MDB_QUERY_RAW(db, "member", _COL_MEMBER, "mname=$1", "s", mname); err = mdb_set_row(cgi->hdf, db, _COL_MEMBER, PRE_OUTPUT".member", MDB_FLAG_Z); if (err != STATUS_OK) return nerr_pass(err); char *msndb = hdf_get_value(cgi->hdf, PRE_OUTPUT".member.msn", NULL); if (!msndb || strcmp(msndb, msn)) { hdf_remove_tree(cgi->hdf, PRE_OUTPUT".member"); return nerr_raise(LERR_LOGINPSW, "msn incorrct"); } return nerr_pass(member_after_login(cgi, dbh, mname)); }
static NEOERR* aic_cmd_app_getsecy(struct queue_entry *q, struct cache *cd, mdb_conn *db) { unsigned char *val = NULL; size_t vsize = 0; char *aname; int aid; NEOERR *err; REQ_GET_PARAM_STR(q->hdfrcv, "aname", aname); aid = hash_string(aname); if (cache_getf(cd, &val, &vsize, PREFIX_SECY"%d", aid)) { unpack_hdf(val, vsize, &q->hdfsnd); } else { MDB_QUERY_RAW(db, "appinfo", " aname ", " (aid=%d OR pid=%d) AND tune & %d = %d ", NULL, aid, aid, LCS_TUNE_SECY, LCS_TUNE_SECY); err = mdb_set_row(q->hdfsnd, db, " aname ", NULL); nerr_handle(&err, NERR_NOT_FOUND); if (err != STATUS_OK) return nerr_pass(err); CACHE_HDF(q->hdfsnd, AIC_CC_SEC, PREFIX_SECY"%d", aid); } return STATUS_OK; }
static NEOERR* city_cmd_s(struct city_entry *e, QueueEntry *q) { unsigned char *val = NULL; size_t vsize = 0; char *p = NULL, *c; NEOERR *err; mdb_conn *db = e->db; struct cache *cd = e->cd; REQ_GET_PARAM_STR(q->hdfrcv, "c", c); REQ_FETCH_PARAM_STR(q->hdfrcv, "p", p); if (cache_getf(cd, &val, &vsize, PREFIX_CITY"%s.%s", p, c)) { unpack_hdf(val, vsize, &q->hdfsnd); } else { if (p) { char tok[64] = {0}; strncpy(tok, p, 64); if (!strstr(p, "省") && !strstr(p, "区")) snprintf(tok, sizeof(tok), "%s省", p); MDB_QUERY_RAW(db, "city", _COL_CITY, "s=$1", "s", tok); mdb_set_row(q->hdfsnd, db, _COL_CITY, "province", MDB_FLAG_NO_ERR); } MDB_QUERY_RAW(db, "city", _COL_CITY, "s=$1", "s", c); err = mdb_set_rows(q->hdfsnd, db, _COL_CITY, "citys", NULL, MDB_FLAG_Z); if (nerr_handle(&err, NERR_NOT_FOUND)) { if (strstr(c, "市")) c[strlen(c)-3] = '\0'; MDB_QUERY_RAW(db, "city", _COL_CITY, "s=$1", "s", c); err = mdb_set_rows(q->hdfsnd, db, _COL_CITY, "citys", NULL, MDB_FLAG_EMPTY_OK); } if (err != STATUS_OK) return nerr_pass(err); /* * get city's parents */ int cnt = 0; char *pid = hdf_get_valuef(q->hdfsnd, "citys.0.pid"); while (pid && atoi(pid) > 0) { MDB_QUERY_RAW(db, "city", _COL_CITY, "id=%d", NULL, atoi(pid)); err = mdb_set_rows(q->hdfsnd, db, _COL_CITY, "citys", NULL, MDB_FLAG_Z); TRACE_NOK(err); pid = hdf_get_valuef(q->hdfsnd, "citys.%d.pid", ++cnt); } /* * 北京市 has no subcities */ /* int id = hdf_get_int_value(q->hdfsnd, "city.id", 0); MDB_QUERY_RAW(db, "city", _COL_CITY, "pid=%d", NULL, id); err = mdb_set_rows(q->hdfsnd, db, _COL_CITY, "subcities", NULL, MDB_FLAG_EMPTY_OK); if (err != STATUS_OK) return nerr_pass(err); */ CACHE_HDF(q->hdfsnd, CITY_CC_SEC, PREFIX_CITY"%s.%s", p, c); } return STATUS_OK; }