static void _fill_session_array(tui_list_t *p, int i) { online_users_t *up = p->data; db_res_t *res = up->res; bool visible = db_get_bool(res, i, 3); if (!visible && !HAS_PERM(PERM_SEECLOAK)) return; session_id_t sid = db_get_session_id(res, i, 0); if (up->bid && session_get_board(sid) != up->bid) return; online_user_info_t *ip = up->users + up->num; memset(ip, 0, sizeof(*ip)); ip->sid = sid; ip->name = db_get_value(res, i, 2); ip->host = db_get_value(res, i, 4); ip->note = up->follow ? db_get_value(res, i, 6) : NULL; ip->uid = db_get_user_id(res, i, 1); ip->flag = (db_get_bool(res, i, 5) ? SESSION_FLAG_WEB : 0) | (visible ? 0 : SESSION_FLAG_INVISIBLE); ++up->num; }
static bool _get_session(const char *uname, const char *key) { user_id_t uid = get_user_id(uname); if (uid > 0) { session_id_t sid = session_get_web_cache(uid, key, fromhost); if (sid > 0) { session_set_id(sid); session_set_uid(uid); return true; } db_res_t *res = db_query("SELECT id, active FROM sessions" " WHERE user_id = %"DBIdUID" AND session_key = %s AND web", uid, key); if (res && db_res_rows(res) == 1) { sid = db_get_session_id(res, 0, 0); bool active = db_get_bool(res, 0, 1); if (active || activate_session(sid, uname)) { session_set_id(sid); session_set_uid(uid); session_set_web_cache(uid, key, session_id(), fromhost); } } db_clear(res); } return session_id(); }
static void show_sessions_of_friends(void) { db_res_t *res = session_get_followed(); if (!res) return; fb_time_t now = fb_time(); for (int i = 0; i < db_res_rows(res); ++i) { bool visible = db_get_bool(res, i, 3); if (!visible && !HAS_PERM(PERM_SEECLOAK)) continue; session_id_t sid = db_get_session_id(res, i, 0); const char *uname = db_get_value(res, i, 2); const char *ip = db_get_value(res, i, 4); fb_time_t refresh = session_get_idle(sid); int status = get_user_status(sid); struct userec user; getuserec(uname, &user); int idle; if (refresh < 1 || status == ST_BBSNET) idle = 0; else idle = (now - refresh) / 60; if (HAS_DEFINE(user.userdefine, DEF_NOTHIDEIP)) ip = mask_host(ip); else ip = "......"; printf("<ov id='%s' action='%s' idle='%d' ip='%s'>", uname, session_status_descr(status), idle, ip); xml_fputs(user.username); printf("</ov>"); } db_clear(res); }
static int show_title_detail(int record) { db_res_t *res = db_query("SELECT title, approved FROM titles" " WHERE record_id = %d AND user_id = %"DBIdUID, record, session_uid()); if (!res || db_res_rows(res) <= 0) { db_clear(res); return BBS_EINVAL; } GBK_BUFFER(title, TITLE_CCHARS); convert_u2g(db_get_value(res, 0, 0), gbk_title); xml_header(NULL); printf("<bbspropdetail>"); print_session(); //% printf("<prop>自定义身份%s: %s</prop></bbspropdetail>", printf("<prop>\xd7\xd4\xb6\xa8\xd2\xe5\xc9\xed\xb7\xdd%s: %s</prop></bbspropdetail>", //% db_get_bool(res, 0, 1) ? "" : "[尚在审核]", gbk_title); db_get_bool(res, 0, 1) ? "" : "[\xc9\xd0\xd4\xda\xc9\xf3\xba\xcb]", gbk_title); db_clear(res); return 0; }