db works
git-svn-id: file:///raid/svn-personal/irc-archiver/trunk@8 f310dea9-ad02-7e44-859a-30a050007fc7
This commit is contained in:
parent
d0af1bc41f
commit
ee3ab054db
|
@ -5,7 +5,7 @@ include $(PWD)/Platform/$(PLATFORM).mk
|
|||
.PHONY: all clean
|
||||
.SUFFIXES: .c .o
|
||||
|
||||
OBJS = main.o util.o bot.o ircfw.o
|
||||
OBJS = main.o util.o db.o bot.o ircfw.o
|
||||
|
||||
all: ircarc$(EXEC)
|
||||
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
#include "ia_bot.h"
|
||||
|
||||
#include "ia_util.h"
|
||||
#include "ia_db.h"
|
||||
|
||||
#include "ircfw.h"
|
||||
|
||||
|
@ -35,6 +36,7 @@ extern char* realname;
|
|||
extern char* nickname;
|
||||
extern char* username;
|
||||
extern char* password;
|
||||
extern char* nickserv;
|
||||
extern char* channels[];
|
||||
extern int port;
|
||||
|
||||
|
@ -132,6 +134,10 @@ void ia_bot_loop(void) {
|
|||
}
|
||||
sprintf(construct, "NOTICE %s :IRC-Archiver %s is ready to accept requests", admin, IRCARC_VERSION);
|
||||
ircfw_socket_send_cmd(ia_sock, NULL, construct);
|
||||
if(nickserv != NULL) {
|
||||
sprintf(construct, "PRIVMSG NickServ :%s", nickserv);
|
||||
ircfw_socket_send_cmd(ia_sock, NULL, construct);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if(strcasecmp(ircfw_message.command, "PING") == 0) {
|
||||
|
@ -167,6 +173,7 @@ void ia_bot_loop(void) {
|
|||
}
|
||||
} else if(sentin[0] == '#') {
|
||||
/* This was sent in channel ; log it */
|
||||
ia_db_put(nick, sentin, msg);
|
||||
} else {
|
||||
/* Command, I guess */
|
||||
int i;
|
||||
|
|
94
Bot/db.c
Normal file
94
Bot/db.c
Normal file
|
@ -0,0 +1,94 @@
|
|||
/* $Id$ */
|
||||
|
||||
#include "ia_db.h"
|
||||
|
||||
#include "ia_util.h"
|
||||
|
||||
#include <stddef.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <time.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <sqlite3.h>
|
||||
|
||||
sqlite3* sql;
|
||||
|
||||
extern char* database;
|
||||
|
||||
int ia_db_init(void) {
|
||||
int ret;
|
||||
ret = sqlite3_open(database, &sql);
|
||||
if(ret != SQLITE_OK) {
|
||||
return 1;
|
||||
}
|
||||
ret = sqlite3_exec(sql, "create table if not exists log(user text, channel text, message text, date number)", NULL, NULL, NULL);
|
||||
if(ret != SQLITE_OK) {
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
char* escape_sql(const char* stuff) {
|
||||
char* str = malloc(strlen(stuff) * 2 + 1);
|
||||
int incr = 0;
|
||||
int i;
|
||||
for(i = 0; stuff[i] != 0; i++) {
|
||||
if(stuff[i] == '\'') {
|
||||
str[incr++] = '\'';
|
||||
str[incr++] = '\'';
|
||||
} else {
|
||||
str[incr++] = stuff[i];
|
||||
}
|
||||
}
|
||||
str[incr] = 0;
|
||||
return str;
|
||||
}
|
||||
|
||||
int ia_db_put(const char* user, const char* channel, const char* message) {
|
||||
char* eusr = escape_sql(user);
|
||||
char* echn = escape_sql(channel);
|
||||
char* emsg = escape_sql(message);
|
||||
|
||||
char* date = malloc(512);
|
||||
sprintf(date, "%llu", (unsigned long long)time(NULL));
|
||||
|
||||
char* tmp;
|
||||
char* str;
|
||||
tmp = ia_strcat("insert into log values('", eusr);
|
||||
str = ia_strcat(tmp, "', '");
|
||||
free(tmp);
|
||||
|
||||
tmp = str;
|
||||
str = ia_strcat(tmp, echn);
|
||||
free(tmp);
|
||||
|
||||
tmp = str;
|
||||
str = ia_strcat(tmp, "', '");
|
||||
free(tmp);
|
||||
|
||||
tmp = str;
|
||||
str = ia_strcat(tmp, emsg);
|
||||
free(tmp);
|
||||
|
||||
tmp = str;
|
||||
str = ia_strcat(tmp, "', ");
|
||||
free(tmp);
|
||||
|
||||
tmp = str;
|
||||
str = ia_strcat(tmp, date);
|
||||
free(tmp);
|
||||
|
||||
tmp = str;
|
||||
str = ia_strcat(tmp, ")");
|
||||
free(tmp);
|
||||
|
||||
free(date);
|
||||
free(eusr);
|
||||
free(echn);
|
||||
free(emsg);
|
||||
|
||||
int ret = sqlite3_exec(sql, str, NULL, NULL, NULL);
|
||||
|
||||
return ret == SQLITE_OK ? 0 : 1;
|
||||
}
|
9
Bot/ia_db.h
Normal file
9
Bot/ia_db.h
Normal file
|
@ -0,0 +1,9 @@
|
|||
/* $Id$ */
|
||||
|
||||
#ifndef __IA_DB_H__
|
||||
#define __IA_DB_H__
|
||||
|
||||
int ia_db_init(void);
|
||||
int ia_db_put(const char* user, const char* channel, const char* message);
|
||||
|
||||
#endif
|
22
Bot/main.c
22
Bot/main.c
|
@ -9,15 +9,18 @@
|
|||
|
||||
#include "ia_util.h"
|
||||
#include "ia_bot.h"
|
||||
#include "ia_db.h"
|
||||
|
||||
extern bool ia_do_log;
|
||||
|
||||
char* host = NULL;
|
||||
int port = 0;
|
||||
char* nickname = NULL;
|
||||
char* webroot = NULL;
|
||||
char* database = NULL;
|
||||
char* username = NULL;
|
||||
char* realname = NULL;
|
||||
char* nickserv = NULL;
|
||||
char* password = NULL;
|
||||
char* admin = NULL;
|
||||
char* channels[128];
|
||||
|
@ -94,6 +97,12 @@ int main(int argc, char** argv) {
|
|||
} else if(strcmp(key, "realname") == 0) {
|
||||
if(realname != NULL) free(realname);
|
||||
realname = ia_strdup(value);
|
||||
} else if(strcmp(key, "webroot") == 0) {
|
||||
if(webroot != NULL) free(webroot);
|
||||
webroot = ia_strdup(value);
|
||||
} else if(strcmp(key, "nickserv") == 0) {
|
||||
if(nickserv != NULL) free(nickserv);
|
||||
nickserv = ia_strdup(value);
|
||||
} else if(strcmp(key, "channel") == 0) {
|
||||
channels[chanincr++] = ia_strdup(value);
|
||||
channels[chanincr] = NULL;
|
||||
|
@ -136,6 +145,10 @@ int main(int argc, char** argv) {
|
|||
fprintf(stderr, "Specify admin\n");
|
||||
st = 1;
|
||||
}
|
||||
if(webroot == NULL) {
|
||||
fprintf(stderr, "Specify webroot\n");
|
||||
st = 1;
|
||||
}
|
||||
if(realname == NULL) {
|
||||
fprintf(stderr, "Specify realname\n");
|
||||
st = 1;
|
||||
|
@ -144,6 +157,11 @@ int main(int argc, char** argv) {
|
|||
|
||||
printf("Initializing the database\n");
|
||||
|
||||
if(ia_db_init() != 0) {
|
||||
fprintf(stderr, "Failed to open database\n");
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
pid_t pid = 0;
|
||||
if(daemon) {
|
||||
printf("Bot spawning a daemon\n");
|
||||
|
@ -156,7 +174,10 @@ int main(int argc, char** argv) {
|
|||
printf("Spawned daemon, I am exiting\n");
|
||||
}
|
||||
|
||||
cleanup:
|
||||
if(host != NULL) free(host);
|
||||
if(nickserv != NULL) free(nickserv);
|
||||
if(webroot != NULL) free(webroot);
|
||||
if(realname != NULL) free(realname);
|
||||
if(database != NULL) free(database);
|
||||
if(username != NULL) free(username);
|
||||
|
@ -166,4 +187,5 @@ int main(int argc, char** argv) {
|
|||
for(i = 0; channels[i] != NULL; i++) {
|
||||
free(channels[i]);
|
||||
}
|
||||
return st;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user