--- mqtt/src/pubmqtt.c 2012/06/26 13:43:59 1.2.2.12 +++ mqtt/src/pubmqtt.c 2012/07/03 12:46:01 1.4 @@ -1,3 +1,48 @@ +/************************************************************************* +* (C) 2011 AITNET ltd - Sofia/Bulgaria - +* by Michael Pounov +* +* $Author: misho $ +* $Id: pubmqtt.c,v 1.4 2012/07/03 12:46:01 misho Exp $ +* +************************************************************************** +The ELWIX and AITNET software is distributed under the following +terms: + +All of the documentation and software included in the ELWIX and AITNET +Releases is copyrighted by ELWIX - Sofia/Bulgaria + +Copyright 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 + by Michael Pounov . All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. All advertising materials mentioning features or use of this software + must display the following acknowledgement: +This product includes software developed by Michael Pounov +ELWIX - Embedded LightWeight unIX and its contributors. +4. Neither the name of AITNET nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY AITNET AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. +*/ #include "global.h" @@ -421,13 +466,12 @@ mqtt_rtlm_delete_topic(cfg_root_t *cfg, sqlite3 *sql, * @cfg = loaded config * @sql = SQL handle * @connid = connection id - * @msgid = MessageID * @topic = topic * @retain = retain 0 get only dynamic, >0 get only retained and -1 no matter * return: NULL error or not found and !=NULL allocated subscribe topics */ mqtt_subscr_t * -mqtt_rtlm_read_topic(cfg_root_t *cfg, sqlite3 *sql, const char *connid, u_short msgid, +mqtt_rtlm_read_topic(cfg_root_t *cfg, sqlite3 *sql, const char *connid, const char *topic, char retain) { int rowz = 0; @@ -457,9 +501,9 @@ mqtt_rtlm_read_topic(cfg_root_t *cfg, sqlite3 *sql, co mqtt_rtlm_log("Error:: not found topics table name"); return NULL; } - psStmt = sqlite3_mprintf("SELECT Retain, Topic, Value FROM %s WHERE " - "ConnID = '%q' AND MsgID = %d AND Topic LIKE '%q' %s;", - str, connid, msgid, topic, szStr); + psStmt = sqlite3_mprintf("SELECT QoS, Topic, Value FROM %s WHERE " + "ConnID LIKE '%q' AND Topic LIKE '%q' %s;", + str, connid, topic, szStr); if (sqlite3_prepare_v2(sql, psStmt, strlen(psStmt), &stmt, NULL)) { MQTT_RTLM_LOG(sql); @@ -471,7 +515,7 @@ mqtt_rtlm_read_topic(cfg_root_t *cfg, sqlite3 *sql, co /* calculate count of rows and allocate subscribe items */ while (sqlite3_step(stmt) == SQLITE_ROW) rowz++; - if (!(s = io_malloc((rowz + 1) * sizeof(mqtt_subscr_t)))) { + if (!(s = malloc((rowz + 1) * sizeof(mqtt_subscr_t)))) { mqtt_rtlm_log("Error:: System #%d - %s", errno, strerror(errno)); goto end; } else @@ -481,13 +525,14 @@ mqtt_rtlm_read_topic(cfg_root_t *cfg, sqlite3 *sql, co /* fill with data */ for (j = 0; j < rowz && sqlite3_step(stmt) == SQLITE_ROW; j++) { s[j].sub_ret = (char) sqlite3_column_int(stmt, 0); - s[j].sub_topic.msg_base = (u_char*) io_strdup((char*) sqlite3_column_text(stmt, 1)); + s[j].sub_topic.msg_base = (u_char*) strdup((char*) sqlite3_column_text(stmt, 1)); s[j].sub_topic.msg_len = strlen((char*) s[j].sub_topic.msg_base); AIT_SET_PTR(&v, (void*) sqlite3_column_blob(stmt, 2), sqlite3_column_bytes(stmt, 2)); s[j].sub_value.msg_len = AIT_LEN(&v); - s[j].sub_value.msg_base = (u_char*) io_malloc(s[j].sub_value.msg_len); + s[j].sub_value.msg_base = (u_char*) malloc(s[j].sub_value.msg_len); if (s[j].sub_value.msg_base) memcpy(s[j].sub_value.msg_base, AIT_GET_PTR(&v), s[j].sub_value.msg_len); + AIT_FREE_VAL(&v); } end: sqlite3_finalize(stmt); @@ -635,7 +680,7 @@ mqtt_rtlm_read_subscribe(cfg_root_t *cfg, sqlite3 *sql /* calculate count of rows and allocate subscribe items */ while (sqlite3_step(stmt) == SQLITE_ROW) rowz++; - if (!(s = io_malloc((rowz + 1) * sizeof(mqtt_subscr_t)))) { + if (!(s = malloc((rowz + 1) * sizeof(mqtt_subscr_t)))) { mqtt_rtlm_log("Error:: System #%d - %s", errno, strerror(errno)); goto end; } else @@ -645,7 +690,7 @@ mqtt_rtlm_read_subscribe(cfg_root_t *cfg, sqlite3 *sql /* fill with data */ for (j = 0; j < rowz && sqlite3_step(stmt) == SQLITE_ROW; j++) { s[j].sub_ret = (char) sqlite3_column_int(stmt, 0); - s[j].sub_topic.msg_base = (u_char*) io_strdup((char*) sqlite3_column_text(stmt, 1)); + s[j].sub_topic.msg_base = (u_char*) strdup((char*) sqlite3_column_text(stmt, 1)); s[j].sub_topic.msg_len = strlen((char*) s[j].sub_topic.msg_base); s[j].sub_value.msg_base = NULL; s[j].sub_value.msg_len = 0;