|
|
|
@ -17,6 +17,7 @@
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
#include <string>
|
|
|
|
#include <string>
|
|
|
|
|
|
|
|
#include <thread>
|
|
|
|
|
|
|
|
|
|
|
|
#include "QnetDB.h"
|
|
|
|
#include "QnetDB.h"
|
|
|
|
|
|
|
|
|
|
|
|
@ -25,78 +26,106 @@ bool CQnetDB::Open(const char *name)
|
|
|
|
if (sqlite3_open(name, &db)) {
|
|
|
|
if (sqlite3_open(name, &db)) {
|
|
|
|
fprintf(stderr, "CQnetDB::Open: can't open %s\n", name);
|
|
|
|
fprintf(stderr, "CQnetDB::Open: can't open %s\n", name);
|
|
|
|
return true;
|
|
|
|
return true;
|
|
|
|
} else
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bool CQnetDB::Init()
|
|
|
|
void CQnetDB::Init()
|
|
|
|
{
|
|
|
|
{
|
|
|
|
std::string sql("DROP TABLE IF EXISTS LHEARD;");
|
|
|
|
std::string sql("DROP TABLE IF EXISTS LHEARD;");
|
|
|
|
|
|
|
|
|
|
|
|
char *eMsg;
|
|
|
|
char *eMsg;
|
|
|
|
if (SQLITE_OK != sqlite3_exec(db, sql.c_str(), NULL, 0, &eMsg)) {
|
|
|
|
int rval = SQLITE_ERROR;
|
|
|
|
fprintf(stderr, "CQnetDB::Open drop table LHEARD error: %s\n", eMsg);
|
|
|
|
for (int i=0; i<10 && rval!=SQLITE_OK; i++) {
|
|
|
|
sqlite3_free(eMsg);
|
|
|
|
rval = sqlite3_exec(db, sql.c_str(), NULL, 0, &eMsg);
|
|
|
|
return true;
|
|
|
|
if (SQLITE_OK != rval) {
|
|
|
|
|
|
|
|
fprintf(stderr, "CQnetDB::Open drop table LHEARD error: %s\n", eMsg);
|
|
|
|
|
|
|
|
sqlite3_free(eMsg);
|
|
|
|
|
|
|
|
std::this_thread::sleep_for(std::chrono::milliseconds(500));
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
sql.assign("CREATE TABLE LHEARD("
|
|
|
|
if (SQLITE_OK == rval) {
|
|
|
|
"callsign TEXT PRIMARY KEY, "
|
|
|
|
sql.assign("CREATE TABLE LHEARD("
|
|
|
|
"sfx TEXT, "
|
|
|
|
"callsign TEXT PRIMARY KEY, "
|
|
|
|
"module TEXT, "
|
|
|
|
"sfx TEXT, "
|
|
|
|
"reflector TEXT, "
|
|
|
|
"module TEXT, "
|
|
|
|
"lasttime INT NOT NULL"
|
|
|
|
"reflector TEXT, "
|
|
|
|
") WITHOUT ROWID;");
|
|
|
|
"lasttime INT NOT NULL"
|
|
|
|
|
|
|
|
") WITHOUT ROWID;");
|
|
|
|
if (SQLITE_OK != sqlite3_exec(db, sql.c_str(), NULL, 0, &eMsg)) {
|
|
|
|
|
|
|
|
fprintf(stderr, "CQnetDB::Open create table LHEARD error: %s\n", eMsg);
|
|
|
|
rval = SQLITE_ERROR;
|
|
|
|
sqlite3_free(eMsg);
|
|
|
|
for (int i=0; i<10 && rval!=SQLITE_OK; i++) {
|
|
|
|
return true;
|
|
|
|
rval = sqlite3_exec(db, sql.c_str(), NULL, 0, &eMsg);
|
|
|
|
|
|
|
|
if (SQLITE_OK != rval) {
|
|
|
|
|
|
|
|
fprintf(stderr, "CQnetDB::Open create table LHEARD error: %s\n", eMsg);
|
|
|
|
|
|
|
|
sqlite3_free(eMsg);
|
|
|
|
|
|
|
|
std::this_thread::sleep_for(std::chrono::milliseconds(500));
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
sql.assign("DROP TABLE IF EXISTS LINKSTATUS;");
|
|
|
|
sql.assign("DROP TABLE IF EXISTS LINKSTATUS;");
|
|
|
|
|
|
|
|
|
|
|
|
if (SQLITE_OK != sqlite3_exec(db, sql.c_str(), NULL, 0, &eMsg)) {
|
|
|
|
rval = SQLITE_ERROR;
|
|
|
|
fprintf(stderr, "CQnetDB::Open drop table LINKSTATUS error: %s\n", eMsg);
|
|
|
|
for (int i=0; i<10 && rval!=SQLITE_OK; i++) {
|
|
|
|
sqlite3_free(eMsg);
|
|
|
|
rval = sqlite3_exec(db, sql.c_str(), NULL, 0, &eMsg);
|
|
|
|
return true;
|
|
|
|
if (SQLITE_OK != rval) {
|
|
|
|
|
|
|
|
fprintf(stderr, "CQnetDB::Open drop table LINKSTATUS error: %s\n", eMsg);
|
|
|
|
|
|
|
|
sqlite3_free(eMsg);
|
|
|
|
|
|
|
|
std::this_thread::sleep_for(std::chrono::milliseconds(500));
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
sql.assign("CREATE TABLE LINKSTATUS("
|
|
|
|
if (SQLITE_OK == rval) {
|
|
|
|
"ip_address TEXT PRIMARY KEY, "
|
|
|
|
sql.assign("CREATE TABLE LINKSTATUS("
|
|
|
|
"from_mod TEXT NOT NULL, "
|
|
|
|
"ip_address TEXT PRIMARY KEY, "
|
|
|
|
"to_callsign TEXT NOT NULL, "
|
|
|
|
"from_mod TEXT NOT NULL, "
|
|
|
|
"to_mod TEXT NOT NULL, "
|
|
|
|
"to_callsign TEXT NOT NULL, "
|
|
|
|
"linked_time INT NOT NULL"
|
|
|
|
"to_mod TEXT NOT NULL, "
|
|
|
|
") WITHOUT ROWID;");
|
|
|
|
"linked_time INT NOT NULL"
|
|
|
|
|
|
|
|
") WITHOUT ROWID;");
|
|
|
|
if (SQLITE_OK != sqlite3_exec(db, sql.c_str(), NULL, 0, &eMsg)) {
|
|
|
|
|
|
|
|
fprintf(stderr, "CQnetDB::Open create table LINKSTATUS error: %s\n", eMsg);
|
|
|
|
rval = SQLITE_ERROR;
|
|
|
|
sqlite3_free(eMsg);
|
|
|
|
for (int i=0; i<10 && rval!=SQLITE_OK; i++) {
|
|
|
|
return true;
|
|
|
|
rval = sqlite3_exec(db, sql.c_str(), NULL, 0, &eMsg);
|
|
|
|
|
|
|
|
if (SQLITE_OK != rval) {
|
|
|
|
|
|
|
|
fprintf(stderr, "CQnetDB::Open create table LINKSTATUS error: %s\n", eMsg);
|
|
|
|
|
|
|
|
sqlite3_free(eMsg);
|
|
|
|
|
|
|
|
std::this_thread::sleep_for(std::chrono::milliseconds(500));
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
sql.assign("DROP TABLE IF EXISTS GATEWAYS;");
|
|
|
|
sql.assign("DROP TABLE IF EXISTS GATEWAYS;");
|
|
|
|
|
|
|
|
|
|
|
|
if (SQLITE_OK != sqlite3_exec(db, sql.c_str(), NULL, 0, &eMsg)) {
|
|
|
|
rval = SQLITE_ERROR;
|
|
|
|
fprintf(stderr, "CQnetDB::Open drop table LINKSTATUS error: %s\n", eMsg);
|
|
|
|
for (int i=0; i<10 && rval!=SQLITE_OK; i++) {
|
|
|
|
sqlite3_free(eMsg);
|
|
|
|
rval = sqlite3_exec(db, sql.c_str(), NULL, 0, &eMsg);
|
|
|
|
return true;
|
|
|
|
if (SQLITE_OK != rval) {
|
|
|
|
|
|
|
|
fprintf(stderr, "CQnetDB::Open drop table GATEWAYS error: %s\n", eMsg);
|
|
|
|
|
|
|
|
sqlite3_free(eMsg);
|
|
|
|
|
|
|
|
std::this_thread::sleep_for(std::chrono::milliseconds(500));
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
sql.assign("CREATE TABLE GATEWAYS("
|
|
|
|
if (SQLITE_OK == rval) {
|
|
|
|
"name TEXT PRIMARY KEY, "
|
|
|
|
sql.assign("CREATE TABLE GATEWAYS("
|
|
|
|
"address TEXT NOT NULL, "
|
|
|
|
"name TEXT PRIMARY KEY, "
|
|
|
|
"port INT NOT NULL"
|
|
|
|
"address TEXT NOT NULL, "
|
|
|
|
") WITHOUT ROWID;");
|
|
|
|
"port INT NOT NULL"
|
|
|
|
|
|
|
|
") WITHOUT ROWID;");
|
|
|
|
if (SQLITE_OK != sqlite3_exec(db, sql.c_str(), NULL, 0, &eMsg)) {
|
|
|
|
|
|
|
|
fprintf(stderr, "CQnetDB::Open create table GATEWAYS error: %s\n", eMsg);
|
|
|
|
rval = SQLITE_ERROR;
|
|
|
|
sqlite3_free(eMsg);
|
|
|
|
for (int i=0; i<10 && rval!=SQLITE_OK; i++) {
|
|
|
|
return true;
|
|
|
|
rval = sqlite3_exec(db, sql.c_str(), NULL, 0, &eMsg);
|
|
|
|
|
|
|
|
if (SQLITE_OK != rval) {
|
|
|
|
|
|
|
|
fprintf(stderr, "CQnetDB::Open create table GATEWAYS error: %s\n", eMsg);
|
|
|
|
|
|
|
|
sqlite3_free(eMsg);
|
|
|
|
|
|
|
|
std::this_thread::sleep_for(std::chrono::milliseconds(500));
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bool CQnetDB::UpdateLH(const char *callsign, const char *sfx, const char module, const char *reflector)
|
|
|
|
bool CQnetDB::UpdateLH(const char *callsign, const char *sfx, const char module, const char *reflector)
|
|
|
|
|