Annotation of mqtt/src/pubmqtt.c, revision 1.1.2.5

1.1.2.1   misho       1: #include "global.h"
                      2: 
                      3: 
1.1.2.2   misho       4: /*
                      5:  * mqtt_db_log() Log database connection message
                      6:  *
                      7:  * @fmt = format string
                      8:  * @... = argument list
                      9:  * return: none
                     10:  */
                     11: static void
                     12: mqtt_rtlm_log(const char *fmt, ...)
                     13: {
                     14:        va_list lst;
                     15: 
                     16:        va_start(lst, fmt);
                     17:        vsyslog(LOG_ERR, fmt, lst);
                     18:        va_end(lst);
                     19: }
1.1.2.3   misho      20: #define MQTT_RTLM_LOG(_sql)    (assert((_sql)), mqtt_rtlm_log("Error:: SQL #%d - %s", \
1.1.2.2   misho      21:                                        sqlite3_errcode((_sql)), sqlite3_errmsg((_sql))))
                     22: 
                     23: 
                     24: /*
                     25:  * mqtt_rtlm_open() Open database connection
                     26:  *
1.1.2.3   misho      27:  * @cfg = config filename
1.1.2.2   misho      28:  * return: NULL error or SQL handle
                     29:  */
                     30: sqlite3 *
                     31: mqtt_rtlm_open(sl_config *cfg)
                     32: {
                     33:        sqlite3 *sql = NULL;
                     34:        const char *str = NULL;
                     35: 
                     36:        if (!cfg)
                     37:                return NULL;
                     38: 
                     39:        str = (const char*) cfg_GetAttribute(cfg, CFG("mqtt_pub"), CFG("name"));
                     40:        if (!str) {
                     41:                mqtt_rtlm_log("Error:: Unknown database name ...\n");
                     42:                return NULL;
                     43:        }
                     44: 
                     45:        if (sqlite3_open_v2(str, &sql, SQLITE_OPEN_READWRITE, NULL)) {
1.1.2.3   misho      46:                MQTT_RTLM_LOG(sql);
1.1.2.2   misho      47:                sqlite3_close(sql);
                     48:                return NULL;
                     49:        }
                     50: 
                     51:        return sql;
                     52: }
                     53: 
                     54: /*
                     55:  * mqtt_rtlm_close() Close database connection
                     56:  *
                     57:  * @sql = SQL handle
                     58:  * return: none
                     59:  */
                     60: void
                     61: mqtt_rtlm_close(sqlite3 *sql)
                     62: {
                     63:        sqlite3_close(sql);
                     64: }
1.1.2.4   misho      65: 
                     66: /*
                     67:  * mqtt_rtlm_init_session() Create session
                     68:  *
                     69:  * @cfg = loaded config
                     70:  * @sql = SQL handle
                     71:  * @user = username
                     72:  * @host = hostname
                     73:  * @port = port
                     74:  * return: -1 error, 0 session already appears or >0 row changed
                     75:  */
                     76: int
                     77: mqtt_rtlm_init_session(sl_config *cfg, sqlite3 *sql, const char *user, const char *host, u_short port)
                     78: {
                     79:        int ret = 0;
                     80:        char *str, szStmt[BUFSIZ] = { 0 };
                     81:        sqlite3_stmt *stmt;
                     82: 
                     83:        if (!cfg || !sql)
                     84:                return -1;
                     85: 
                     86:        str = (char*) cfg_GetAttribute(cfg, CFG("mqtt_pub"), CFG("tbl_online"));
                     87:        if (!str) {
                     88:                mqtt_rtlm_log("Error:: not found topics table name");
                     89:                return -1;
                     90:        }
                     91:        snprintf(szStmt, sizeof szStmt, "INSERT INTO %s (Username, RemoteHost, RemotePort) "
                     92:                       "VALUES ('%s', '%s', %d);", str, user, host, port);
                     93: 
                     94:        if (sqlite3_prepare_v2(sql, szStmt, strlen(szStmt), &stmt, NULL)) {
                     95:                MQTT_RTLM_LOG(sql);
                     96:                return -1;
                     97:        }
                     98:        if ((ret = sqlite3_step(stmt)) == SQLITE_DONE)
                     99:                ret = sqlite3_changes(sql);
                    100:        else {
                    101:                if (ret > SQLITE_OK && ret < SQLITE_ROW)
                    102:                        MQTT_RTLM_LOG(sql);
                    103:                ret = 0;
                    104:        }
                    105:        sqlite3_finalize(stmt);
                    106: 
                    107:        return ret;
                    108: }
1.1.2.5 ! misho     109: 
        !           110: /*
        !           111:  * mqtt_rtlm_fini_session() Delete session(s)
        !           112:  *
        !           113:  * @cfg = loaded config
        !           114:  * @sql = SQL handle
        !           115:  * @user = username
        !           116:  * @host = hostname
        !           117:  * return: -1 error, 0 session already appears or >0 row changed
        !           118:  */
        !           119: int
        !           120: mqtt_rtlm_fini_session(sl_config *cfg, sqlite3 *sql, const char *user, const char *host)
        !           121: {
        !           122:        int ret = 0;
        !           123:        char *str, szStmt[BUFSIZ] = { 0 };
        !           124:        sqlite3_stmt *stmt;
        !           125: 
        !           126:        if (!cfg || !sql)
        !           127:                return -1;
        !           128: 
        !           129:        str = (char*) cfg_GetAttribute(cfg, CFG("mqtt_pub"), CFG("tbl_online"));
        !           130:        if (!str) {
        !           131:                mqtt_rtlm_log("Error:: not found topics table name");
        !           132:                return -1;
        !           133:        }
        !           134:        snprintf(szStmt, sizeof szStmt, "DELETE FROM %s WHERE Username = '%s' AND RemoteHost LIKE '%s';", 
        !           135:                        str, user, host);
        !           136: 
        !           137:        if (sqlite3_prepare_v2(sql, szStmt, strlen(szStmt), &stmt, NULL)) {
        !           138:                MQTT_RTLM_LOG(sql);
        !           139:                return -1;
        !           140:        }
        !           141:        if ((ret = sqlite3_step(stmt)) == SQLITE_DONE)
        !           142:                ret = sqlite3_changes(sql);
        !           143:        else {
        !           144:                if (ret > SQLITE_OK && ret < SQLITE_ROW)
        !           145:                        MQTT_RTLM_LOG(sql);
        !           146:                ret = 0;
        !           147:        }
        !           148:        sqlite3_finalize(stmt);
        !           149: 
        !           150:        return ret;
        !           151: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>