Skip to content

Commit

Permalink
opening and closing database
Browse files Browse the repository at this point in the history
  • Loading branch information
on4akh committed Aug 2, 2014
1 parent 7d735bc commit 24fc58b
Show file tree
Hide file tree
Showing 6 changed files with 53 additions and 12 deletions.
4 changes: 2 additions & 2 deletions dmr.c
Original file line number Diff line number Diff line change
Expand Up @@ -342,13 +342,13 @@ void *dmrListener(void *f){
}

if (slotType == 0x5555 && dmrState[slot] == DATA){ // 1/2 rate data continuation
syslog(LOG_NOTICE,"[%i-%s]1/2 rate data continuation on slot %i src %i dst %i type %i",baseDmrPort + repPos,repeaterList[repPos].callsign,slot,srcId,dstId,callType);
//syslog(LOG_NOTICE,"[%i-%s]1/2 rate data continuation on slot %i src %i dst %i type %i",baseDmrPort + repPos,repeaterList[repPos].callsign,slot,srcId,dstId,callType);
dataBlocks[slot]++;
if(BPTC1969decode[slot].appendBlocks == dataBlocks[slot]){
dmrState[slot] = IDLE;
dataBlocks[slot] = 0;
repeaterList[repPos].sending[slot] = false;
syslog(LOG_NOTICE,"All data blocks received");
//syslog(LOG_NOTICE,"All data blocks received");
}
break;
}
Expand Down
7 changes: 6 additions & 1 deletion htmlpost.c
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,9 @@

char page[50];
void handleParameter();
sqlite3 *openDatabase();
void closeDatabase();


int handlePost(int conn, struct ReqInfo *reqinfo){
char buffer[MAX_REQ_LINE] = {0};
Expand Down Expand Up @@ -57,6 +60,7 @@ void handleParameter(char buffer[MAX_REQ_LINE]){
char *value;
char *listValue;
char SQLQUERY[300];
db = openDatabase();
if(param = strtok(buffer,"=")){
if (strstr(param,"page")){
value = strtok(NULL,"=");
Expand Down Expand Up @@ -113,4 +117,5 @@ void handleParameter(char buffer[MAX_REQ_LINE]){
}
}
}
}
closeDatabase(db);
}
7 changes: 6 additions & 1 deletion htmlreplace.c
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,9 @@
*/

#include "master_server.h"
sqlite3 *openDatabase();
void closeDatabase();


char *htmlReplace(char line[2000], char *resource){

Expand Down Expand Up @@ -179,13 +182,15 @@ if (strstr(resource,"sMaster.html")){
if (strstr(resource,"repeaters.html")){
if(pos = strstr(line,"$repeaters")){
memset(line,0,2000);
db = openDatabase();
sprintf(SQLQUERY,"SELECT repeaterId,callsign FROM repeaters");
if (sqlite3_prepare_v2(db,SQLQUERY,-1,&stmt,0) == 0){
while (sqlite3_step(stmt) != SQLITE_DONE){
sprintf(tmpLine,"<option value='%i'>%i-->%s</option>\n",sqlite3_column_int(stmt,0),sqlite3_column_int(stmt,0),sqlite3_column_text(stmt,1));
strcat(line,tmpLine);
}
sqlite3_finalize(stmt);
closeDatabase(db);
}
}
if (strlen(line) == 0){
Expand All @@ -204,4 +209,4 @@ if (strstr(resource,"restart.html")){
}
}
return line;
}
}
16 changes: 13 additions & 3 deletions main.c
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ int restart = 0;

sqlite3 *db;
sqlite3 *openDatabase();
void closeDatabase();

int setRdacRepeater();
int findRdacRepeater();
Expand Down Expand Up @@ -336,6 +337,7 @@ int getMasterInfo(){
unsigned char SQLQUERY[200] = {0};
sqlite3_stmt *stmt;

db = openDatabase();
sprintf(SQLQUERY,"SELECT ownName,ownCountryCode,ownRegion,sMasterIp,sMasterPort FROM sMaster");
if (sqlite3_prepare_v2(db,SQLQUERY,-1,&stmt,0) == 0){
if (sqlite3_step(stmt) == SQLITE_ROW){
Expand All @@ -349,11 +351,14 @@ int getMasterInfo(){
}
else{
syslog(LOG_NOTICE,"failed to read sMasterInfo, no row");
sqlite3_finalize(stmt);
closeDatabase(db);
return 0;
}
}
else{
syslog(LOG_NOTICE,"failed to read sMasterInfo, query bad");
closeDatabase(db);
return 0;
}
sqlite3_finalize(stmt);
Expand All @@ -373,22 +378,25 @@ int getMasterInfo(){
else{
syslog(LOG_NOTICE,"failed to read masterInfo, no row");
sqlite3_finalize(stmt);
closeDatabase(db);
return 0;
}
}
else{
syslog(LOG_NOTICE,"failed to read masterInfo, query bad");
sqlite3_finalize(stmt);
closeDatabase(db);
return 0;
}
syslog(LOG_NOTICE,"ServicePort %i rdacPort %i dmrPort %i baseDmrPort %i baseRdacPort %i maxRepeaters %i echoId %i rrsGpsId",
servicePort,rdacPort,dmrPort,baseDmrPort,baseRdacPort,maxRepeaters-1,echoId,rrsGpsId);
if (maxRepeaters > 98){
syslog(LOG_NOTICE,"maxRepeaters exceeded 98, quiting application");
closeDatabase(db);
sqlite3_finalize(stmt);
return 0;
}
sqlite3_finalize(stmt);
closeDatabase(db);
return 1;
}

Expand All @@ -409,6 +417,7 @@ int loadTalkGroups(){
unsigned char repTS1[100];
unsigned char repTS2[100];

db = openDatabase();
sprintf(SQLQUERY,"SELECT repTS1,repTS2,sMasterTS1,sMasterTS2 FROM master");
if (sqlite3_prepare_v2(db,SQLQUERY,-1,&stmt,0) == 0){
if (sqlite3_step(stmt) == SQLITE_ROW){
Expand Down Expand Up @@ -569,10 +578,11 @@ int loadTalkGroups(){
}
}
else syslog(LOG_NOTICE,"NONE");
closeDatabase(db);
return 1;
}
}
sqlite3_finalize(stmt);
closeDatabase(db);
syslog(LOG_NOTICE,"Failed to load talkgroups. Is master table populated in database ?");
return 0;
}
Expand Down Expand Up @@ -627,7 +637,7 @@ int main(int argc, char**argv)
syslog(LOG_NOTICE,"Failed to init database");
return 0;
}

closeDatabase(db);
//Start webserver thread
pthread_create(&thread, NULL, webServerListener,NULL);

Expand Down
26 changes: 22 additions & 4 deletions rdac.c
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,9 @@


struct repeater rdacList[100] = {0};
sqlite3 *dbase;
sqlite3 *openDatabase();
void closeDatabase();
void discard();

int select_str(char *s)
Expand Down Expand Up @@ -94,6 +97,7 @@ int setRdacRepeater(struct sockaddr_in address){
rdacList[i].address = address;
inet_ntop(AF_INET, &(address.sin_addr), str, INET_ADDRSTRLEN);
//See if there is already info in the database based on IP address
dbase = openDatabase();
sprintf(SQLQUERY,"SELECT repeaterId,callsign,txFreq,shift,hardware,firmware,mode,language FROM repeaters WHERE currentAddress = %lu",(long)address.sin_addr.s_addr);
if (sqlite3_prepare_v2(db,SQLQUERY,-1,&stmt,0) == 0){
if (sqlite3_step(stmt) == SQLITE_ROW){
Expand All @@ -110,6 +114,7 @@ int setRdacRepeater(struct sockaddr_in address){
}
}
sqlite3_finalize(stmt);
closeDatabase(dbase);
syslog(LOG_NOTICE,"Repeater not found in RDAC list, assigning pos %i",i);
return i;
}
Expand Down Expand Up @@ -211,18 +216,27 @@ bool getRepeaterInfo(int sockfd,int repPos,struct sockaddr_in cliaddrOrg){
case 0: //0 = repeaterId
rdacList[repPos].id = buffer[20] << 16 | buffer[19] << 8 | buffer[18];
syslog(LOG_NOTICE,"Assigning id %i to repeater on RDAC pos %i [%s]",rdacList[repPos].id,repPos,str);
dbase = openDatabase();
sprintf(SQLQUERY,"SELECT repeaterId FROM repeaters WHERE repeaterId = %i",rdacList[repPos].id);
if (sqlite3_prepare_v2(db,SQLQUERY,-1,&stmt,0) == 0){
if (sqlite3_prepare_v2(dbase,SQLQUERY,-1,&stmt,0) == 0){
if (sqlite3_step(stmt) != SQLITE_ROW){
syslog(LOG_NOTICE,"Repeater with id %i not known in database, removing from list pos %i [%s]",rdacList[repPos].id,repPos,str);
delRdacRepeater(cliaddrOrg);
fclose(fp);
syslog(LOG_NOTICE,"Setting repeater in discard list [%s]",str);
discard(cliaddrOrg);
close(sockfd);
sqlite3_finalize(stmt);
closeDatabase(dbase);
pthread_exit(NULL);
}
}
else{
closeDatabase(dbase);
break;
}
sqlite3_finalize(stmt);
closeDatabase(dbase);
break;

case 1: {//1 = callsign
Expand Down Expand Up @@ -287,18 +301,20 @@ bool getRepeaterInfo(int sockfd,int repPos,struct sockaddr_in cliaddrOrg){
}
syslog(LOG_NOTICE,"Updating from RDAC %s %s %s %s %s %s to repeater on pos %i [%s]",rdacList[repPos].callsign,rdacList[repPos].hardware
,rdacList[repPos].firmware,rdacList[repPos].mode,rdacList[repPos].txFreq,rdacList[repPos].shift,repPos,str);
dbase = openDatabase();
sprintf(SQLQUERY,"SELECT count(*) FROM repeaters WHERE repeaterId = %i",rdacList[repPos].id);
time_t now = time(NULL);
struct tm *t = localtime(&now);
strftime(timeStamp,sizeof(timeStamp),"%Y-%m-%d %H:%M:%S",t);
if (sqlite3_prepare_v2(db,SQLQUERY,-1,&stmt,0) == 0){
if (sqlite3_prepare_v2(dbase,SQLQUERY,-1,&stmt,0) == 0){
if (sqlite3_step(stmt) == SQLITE_ROW){
sqlite3_finalize(stmt);
sprintf(SQLQUERY,"UPDATE repeaters SET callsign = '%s', txFreq = '%s', shift = '%s', hardware = '%s', firmware = '%s', mode = '%s', currentAddress = %lu, timeStamp = '%s', ipAddress = '%s' WHERE repeaterId = %i",
rdacList[repPos].callsign,rdacList[repPos].txFreq,rdacList[repPos].shift,rdacList[repPos].hardware,rdacList[repPos].
firmware,rdacList[repPos].mode,(long)cliaddrOrg.sin_addr.s_addr,timeStamp,str,rdacList[repPos].id);
sqlite3_exec(db,SQLQUERY,0,0,0);
sqlite3_exec(dbase,SQLQUERY,0,0,0);
sprintf(SQLQUERY,"SELECT language FROM repeaters WHERE repeaterId = %i",rdacList[repPos].id);
if (sqlite3_prepare_v2(db,SQLQUERY,-1,&stmt,0) == 0){
if (sqlite3_prepare_v2(dbase,SQLQUERY,-1,&stmt,0) == 0){
if (sqlite3_step(stmt) == SQLITE_ROW){
sprintf(rdacList[repPos].language,"%s",sqlite3_column_text(stmt,0));
syslog(LOG_NOTICE,"Setting repeater language to %s [%s]",rdacList[repPos].language,str);
Expand All @@ -314,9 +330,11 @@ bool getRepeaterInfo(int sockfd,int repPos,struct sockaddr_in cliaddrOrg){
syslog(LOG_NOTICE,"RDAC, bad query, removing repeater from list [%s]",str);
delRdacRepeater(cliaddrOrg);
close(sockfd);
closeDatabase(dbase);
pthread_exit(NULL);
}
sqlite3_finalize(stmt);
closeDatabase(dbase);
fclose(fp);
return true;
}
Expand Down
5 changes: 4 additions & 1 deletion sqlite.c
Original file line number Diff line number Diff line change
Expand Up @@ -29,10 +29,13 @@ sqlite3 *openDatabase(){
sqlite3_close(db);
return NULL;
}
syslog(LOG_NOTICE,"Database opened");
return db;
}

void closeDatabase(sqlite3 *db){
if (sqlite3_close(db) != SQLITE_OK) syslog(LOG_NOTICE,"Failed to close SQLITE database");
}

bool isFieldExisting(sqlite3 *db, char *table, char *field){
sqlite3_stmt *stmt;
char SQLQUERY[200];
Expand Down

0 comments on commit 24fc58b

Please sign in to comment.