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

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: }

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