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>