|
|
@@ -4349,16 +4349,19 @@ quit:
|
|
|
|
|
|
////////////////mqtt/////////////////////////////////////////////
|
|
|
#define MQTT_MANAGER_TABLE "Table_MQTTManage"
|
|
|
-int dev_mqtt_init(sqlite3 *db, mqtt_server_t *ser)
|
|
|
+int dev_mqtt_init(sqlite3 *db, mqtt_info_t *info)
|
|
|
{
|
|
|
int i,r;
|
|
|
|
|
|
#ifdef USE_MQTT
|
|
|
+ int idx=0;
|
|
|
char temp[1024];
|
|
|
char *errmsg=NULL;
|
|
|
char *table=NULL;
|
|
|
+ char** pResult=NULL;
|
|
|
int nrow,ncol;
|
|
|
- char** pResult = NULL;
|
|
|
+ sqlite3_stmt *stmt=NULL;
|
|
|
+ mqtt_server_t *ser=info->ser;
|
|
|
|
|
|
table = MQTT_MANAGER_TABLE;
|
|
|
if(!tab_exists(db, table)) {
|
|
|
@@ -4370,7 +4373,8 @@ int dev_mqtt_init(sqlite3 *db, mqtt_server_t *ser)
|
|
|
"port TEXT,"
|
|
|
"cid TEXT,"
|
|
|
"user TEXT,"
|
|
|
- "password TEXT);", table);
|
|
|
+ "password TEXT,"
|
|
|
+ "cert TEXT);", table);
|
|
|
r = sqlite3_exec(db, temp, 0, 0, &errmsg);
|
|
|
if(r!=SQLITE_OK) {
|
|
|
log_e("___ %s create failed, %s\n%s\n", table, temp, errmsg); sqlite3_free(errmsg);
|
|
|
@@ -4378,47 +4382,72 @@ int dev_mqtt_init(sqlite3 *db, mqtt_server_t *ser)
|
|
|
}
|
|
|
|
|
|
#ifdef MQTT_SERVER_BUILTIN
|
|
|
- extern mqtt_server_t DFLT_MQTT;
|
|
|
- dev_mqtt_update(db, &DFLT_MQTT);
|
|
|
+ extern mqtt_info_t DFLT_MQTT;
|
|
|
+ dev_mqtt_update_info(db, &DFLT_MQTT);
|
|
|
#endif
|
|
|
}
|
|
|
|
|
|
- nrow = ncol = 0;
|
|
|
+
|
|
|
sprintf(temp, "SELECT * FROM %s;", table);
|
|
|
- r = sqlite3_get_table(db, temp, &pResult, &nrow, &ncol, &errmsg);
|
|
|
- if(r != SQLITE_OK) {
|
|
|
- log_e("sqlite handle error: %s \n%s\n", temp, errmsg); sqlite3_free(errmsg);
|
|
|
- return -1 ;
|
|
|
+ r = sqlite3_prepare_v2(db, temp, -1, &stmt, 0);
|
|
|
+ if (r != SQLITE_OK) {
|
|
|
+ log_e("___mqtt_load, sqlite3_prepare_v2 failed\n");
|
|
|
+ return -1;
|
|
|
}
|
|
|
+
|
|
|
+ memset(info, 0, sizeof(mqtt_info_t));
|
|
|
+ char *p=NULL;
|
|
|
+ while (sqlite3_step(stmt) == SQLITE_ROW) {
|
|
|
+ ser[idx].id = sqlite3_column_int(stmt, 0);
|
|
|
+ ser[idx].mode = sqlite3_column_int(stmt, 1);
|
|
|
|
|
|
- if(ser && ncol>0) {
|
|
|
- memset(ser, 0, sizeof(mqtt_server_t));
|
|
|
-
|
|
|
- ser->id = atoi(pResult[ncol+0]);
|
|
|
- ser->mode = atoi(pResult[ncol+1]);
|
|
|
- strcpy(ser->server, pResult[ncol+2]);
|
|
|
- strcpy(ser->ip, pResult[ncol+3]);
|
|
|
- strcpy(ser->port, pResult[ncol+4]);
|
|
|
- strcpy(ser->cid, pResult[ncol+5]);
|
|
|
- strcpy(ser->user, pResult[ncol+6]);
|
|
|
- strcpy(ser->password, pResult[ncol+7]);
|
|
|
+ p = (char*)sqlite3_column_text(stmt, 2);
|
|
|
+ if(p) strcpy(ser[idx].server, p);
|
|
|
+
|
|
|
+ p = (char*)sqlite3_column_text(stmt, 3);
|
|
|
+ if(p) strcpy(ser[idx].ip, p);
|
|
|
+
|
|
|
+ p = (char*)sqlite3_column_text(stmt, 4);
|
|
|
+ if(p) strcpy(ser[idx].port, p);
|
|
|
+
|
|
|
+ p = (char*)sqlite3_column_text(stmt, 5);
|
|
|
+ if(p) strcpy(ser[idx].cid, p);
|
|
|
+
|
|
|
+ p = (char*)sqlite3_column_text(stmt, 6);
|
|
|
+ if(p) strcpy(ser[idx].user, p);
|
|
|
+
|
|
|
+ p = (char*)sqlite3_column_text(stmt, 7);
|
|
|
+ if(p) strcpy(ser[idx].password, p);
|
|
|
+
|
|
|
+ p = (char*)sqlite3_column_text(stmt, 8);
|
|
|
+ if(p) strcpy(ser[idx].cert, p);
|
|
|
+
|
|
|
+ idx++;
|
|
|
+ if(idx>=MQTT_SER_MAX) {
|
|
|
+ break;
|
|
|
+ }
|
|
|
}
|
|
|
+ sqlite3_finalize(stmt);
|
|
|
#endif
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
|
|
|
-int dev_mqtt_update(sqlite3 *db, mqtt_server_t *ser)
|
|
|
+int dev_mqtt_update_ser(sqlite3 *db, mqtt_server_t *ser)
|
|
|
{
|
|
|
int i,r=0,exist=0,cnt=0;
|
|
|
char mac[10];
|
|
|
|
|
|
#ifdef USE_MQTT
|
|
|
- char temp[1024];
|
|
|
sqlite3_stmt *stmt;
|
|
|
char *errmsg=NULL;
|
|
|
char *table=MQTT_MANAGER_TABLE;
|
|
|
+ char *pbuf=malloc(sizeof(mqtt_server_t)+1024);
|
|
|
+
|
|
|
+ if(!pbuf) {
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
|
|
|
if(sys_get_mac(mac, sizeof(mac))==0) {
|
|
|
sprintf(ser->cid, "smartPDU_%s", mac);
|
|
|
@@ -4426,11 +4455,11 @@ int dev_mqtt_update(sqlite3 *db, mqtt_server_t *ser)
|
|
|
|
|
|
cnt = get_count(db, table);
|
|
|
if(cnt>0) {
|
|
|
- sprintf(temp, "UPDATE %s SET id=%d, mode=%d, server='%s', ip='%s', port='%s', cid='%s', user='%s', password='%s', WHERE id=%d;",
|
|
|
- table, ser->id, ser->mode, ser->server, ser->ip, ser->port, ser->cid, ser->user, ser->password, ser->id);
|
|
|
- r = sqlite3_exec(db, temp, NULL, 0, &errmsg);
|
|
|
+ sprintf(pbuf, "UPDATE %s SET id=%d, mode=%d, server='%s', ip='%s', port='%s', cid='%s', user='%s', password='%s, cert='%s', WHERE id=%d;",
|
|
|
+ table, ser->id, ser->mode, ser->server, ser->ip, ser->port, ser->cid, ser->user, ser->password, ser->cert, ser->id);
|
|
|
+ r = sqlite3_exec(db, pbuf, NULL, 0, &errmsg);
|
|
|
if(r != SQLITE_OK) {
|
|
|
- log_e("___dev_mqtt_update, sqlite3_exec failed, %s, %s\n\n", temp, errmsg);
|
|
|
+ log_e("___dev_mqtt_update_ser, sqlite3_exec failed, %s, %s\n\n", pbuf, errmsg);
|
|
|
sqlite3_free(errmsg);
|
|
|
}
|
|
|
else {
|
|
|
@@ -4439,10 +4468,10 @@ int dev_mqtt_update(sqlite3 *db, mqtt_server_t *ser)
|
|
|
}
|
|
|
|
|
|
if(exist==0) {
|
|
|
- sprintf(temp, "INSERT INTO %s (id,mode,server,ip,port,cid,user,password) VALUES (?,?,?,?,?,?,?,?);", table);
|
|
|
- r = sqlite3_prepare_v2(db, temp, -1, &stmt, 0);
|
|
|
+ sprintf(pbuf, "INSERT INTO %s (id,mode,server,ip,port,cid,user,password,cert) VALUES (?,?,?,?,?,?,?,?,?);", table);
|
|
|
+ r = sqlite3_prepare_v2(db, pbuf, -1, &stmt, 0);
|
|
|
if (r != SQLITE_OK) {
|
|
|
- log_e("___dev_mqtt_update, sqlite3_prepare_v2 failed, %s\n", sqlite3_errmsg(db));
|
|
|
+ log_e("___dev_mqtt_update_ser, sqlite3_prepare_v2 failed, %s\n", sqlite3_errmsg(db));
|
|
|
r = -1; goto quit;
|
|
|
}
|
|
|
|
|
|
@@ -4454,16 +4483,36 @@ int dev_mqtt_update(sqlite3 *db, mqtt_server_t *ser)
|
|
|
sqlite3_bind_text(stmt, 6, ser->cid, -1, NULL);
|
|
|
sqlite3_bind_text(stmt, 7, ser->user, -1, NULL);
|
|
|
sqlite3_bind_text(stmt, 8, ser->password, -1, NULL);
|
|
|
+ sqlite3_bind_text(stmt, 9, ser->cert, -1, NULL);
|
|
|
|
|
|
r = sqlite3_step(stmt);
|
|
|
sqlite3_finalize(stmt);
|
|
|
-
|
|
|
if (r != SQLITE_DONE) {
|
|
|
- log_e("___dev_mqtt_update, sqlite3_step failed\n");
|
|
|
+ log_e("___dev_mqtt_update_ser, sqlite3_step failed\n");
|
|
|
r = -1;
|
|
|
}
|
|
|
+ r = 0;
|
|
|
}
|
|
|
quit:
|
|
|
+ free(pbuf);
|
|
|
+#endif
|
|
|
+
|
|
|
+ return r;
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+int dev_mqtt_update_info(sqlite3 *db, mqtt_info_t *info)
|
|
|
+{
|
|
|
+ int i,r=-1;
|
|
|
+
|
|
|
+#ifdef USE_MQTT
|
|
|
+ for(i=0; i<MQTT_SER_MAX; i++) {
|
|
|
+ mqtt_server_t *ser=&info->ser[i];
|
|
|
+ r = dev_mqtt_update_ser(db, ser);
|
|
|
+ if(r) {
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
#endif
|
|
|
|
|
|
return r;
|