diff --git a/Makefile b/Makefile index 27a1d63..59a9166 100644 --- a/Makefile +++ b/Makefile @@ -15,7 +15,7 @@ REMOVE = rm -f #Objects -OBJS = bridge.o mysql.o main.o socket.o +OBJS = mysql.o main.o socket.o LIBRARIES = -lthr -L/usr/local/lib/mysql -lmysqlclient CFLAGS = -Wall -W -ggdb diff --git a/bridge.c b/bridge.c deleted file mode 100644 index 02c20e6..0000000 --- a/bridge.c +++ /dev/null @@ -1,365 +0,0 @@ -/* - TUve Bridge Thread Commands - bridge.c (C) 2009 Christopher Olsen - - $Id$ -*/ - -#include -#include "tuvebridge.h" - -botChanList_t *chans = 0x0; - -pthread_mutex_t chanMutex = PTHREAD_MUTEX_INITIALIZER; - -botChanList_t *botFindChan(char *channel) { - botChanList_t *tmpChan = 0x0; - - pthread_mutex_lock(&chanMutex); - - for (tmpChan = chans;tmpChan != 0x0;tmpChan = tmpChan->next) { - if (!strcasecmp(tmpChan->channel,channel)) { - pthread_mutex_unlock(&chanMutex); - return(tmpChan); - } - } - - pthread_mutex_unlock(&chanMutex); - return(0x0); - } - -botChanList_t *botAddChan(char *channel) { - botChanList_t *tmpChan = 0x0; - - tmpChan = botFindChan(channel); - - if (tmpChan != 0x0) - return(tmpChan); - - writeLog(2,"ADDING CHANNEL: %s\n",channel); - - tmpChan = (botChanList_t *)malloc(sizeof(botChanList_t)); - - strcpy(tmpChan->channel,channel); - tmpChan->next = 0x0; - tmpChan->prev = 0x0; - tmpChan->updated = 0x0; - bzero(tmpChan->modes,CHAN_MODES); - - pthread_mutex_lock(&chanMutex); - - if (chans == 0x0) - chans = tmpChan; - else { - tmpChan->next = chans; - chans->prev = tmpChan; - chans = tmpChan; - } - - pthread_mutex_unlock(&chanMutex); - - return(tmpChan); - } - -int botJoinChans() { - MYSQL_RES *res = 0x0; - MYSQL_RES *res2 = 0x0; - MYSQL_ROW row; - unsigned int i = 0x0; - unsigned int x = 0x0; - int tmpVal = 0; - botChanList_t *tmpChan = 0x0; - char qryStr[256]; - - res = dbQuery("SELECT channel,rating,classification,random,queue,exclusive,time,noads,topic,cid FROM channels",1); - - joinChan = 2; - - if (mysql_num_rows(res) > 0) { - for (i = 0;i < mysql_num_rows(res);i++) { - - row = mysql_fetch_row(res); - tmpChan = botAddChan(row[0]); - - if (tmpChan == 0x0) - return(-1); - - sWriteSocket("JOIN %s",row[0]); - sleep(2); - - pthread_mutex_lock(&chanMutex); - - /* Op Myself */ - sWriteSocket("MSG %s:.tv MODE +O TUveBOT",row[0]); - - /* Set Access Level */ - tmpVal = atoi(row[1]); - if (tmpVal > 0) - sWriteSocket("MSG %s:.tv mode +A %i",row[0],tmpVal); - else - sWriteSocket("MSG %s:.tv mode -A",row[0]); - tmpChan->modes[CHAN_RATING] = tmpVal; - - /* Set Classification */ - tmpVal = atoi(row[2]); - if (tmpVal > 0) - sWriteSocket("MSG %s:.tv mode +C %i",row[0],tmpVal); - else - sWriteSocket("MSG %s:.tv mode -C",row[0]); - tmpChan->modes[CHAN_CLASS] = tmpVal; - - /* Set Random */ - tmpVal = atoi(row[3]); - if (tmpVal == 1) - sWriteSocket("MSG %s:.tv mode +R",row[0]); - else - sWriteSocket("MSG %s:.tv mode -R",row[0]); - tmpChan->modes[CHAN_RANDOM] = tmpVal; - - /* Set Queue */ - tmpVal = atoi(row[4]); - if (tmpVal == 1) - sWriteSocket("MSG %s:.tv mode +Q",row[0]); - else - sWriteSocket("MSG %s:.tv mode -Q",row[0]); - tmpChan->modes[CHAN_QUEUE] = tmpVal; - - /* Set Exclusive */ - tmpVal = atoi(row[5]); - if (tmpVal == 1) - sWriteSocket("MSG %s:.tv mode +E",row[0]); - else - sWriteSocket("MSG %s:.tv mode -E",row[0]); - tmpChan->modes[CHAN_EXCLUSIVE] = tmpVal; - - /* Set Time */ - tmpVal = atoi(row[6]); - if (tmpVal > 0) - sWriteSocket("MSG %s:.tv mode +T %i",row[0],tmpVal); - else - sWriteSocket("MSG %s:.tv mode -T",row[0]); - tmpChan->modes[CHAN_TIME] = tmpVal; - - /* Set NoAds */ - tmpVal = atoi(row[7]); - if (tmpVal == 1) - sWriteSocket("MSG %s:.tv mode +X",row[0]); - else - sWriteSocket("MSG %s:.tv mode -X",row[0]); - tmpChan->modes[CHAN_NOADS] = tmpVal; - - if (row[8] != 0x0) { - sWriteSocket("TOPIC %s:%s",row[0],row[8]); - strcpy(tmpChan->topic,row[8]); - } - tmpChan->cid = atoi(row[9]); -sprintf(qryStr,"SELECT s.vid,time,length FROM schedule s INNER JOIN videos v ON s.vid = v.vid WHERE cid = %i AND time > %i ORDER BY time LIMIT 0,9",tmpChan->cid,time(NULL)); - res2 = dbQuery(qryStr,1); - tmpChan->sCount = mysql_num_rows(res2); - tmpChan->sCur = 0; - for (x = 0;x < tmpChan->sCount;x++) { - row = mysql_fetch_row(res2); - tmpChan->schedule[x][0] = atoi(row[1]); - tmpChan->schedule[x][1] = atoi(row[0]); - tmpChan->schedule[x][2] = atoi(row[2]); - } - if (res2) - mysql_free_result(res2); - - - tmpChan->updated = 1; - pthread_mutex_unlock(&chanMutex); - } - mysql_free_result(res); - } - joinChan = 0; - return(0x0); - } - -int botSetMode(char *data) { - botChanList_t *tmpChan = 0x0; - char *chan = 0x0; - char *mode = 0x0; - char *md_tok = 0x0; - int tmpVal = 0x0; - char qryStr[512]; - - chan = strtok_r(data,":",&md_tok); - - tmpChan = botFindChan(chan); - - if (tmpChan == 0x0) - return(-1); - - if (tmpChan->updated == 0x0) - return(0x0); - - mode = strtok_r(NULL,":",&md_tok); - - switch (mode[0]) { - case 'A': - tmpVal = atoi(strtok_r(NULL,"\n",&md_tok)); - if (tmpChan->modes[CHAN_RATING] != tmpVal) { - tmpChan->modes[CHAN_RATING] = tmpVal; - sprintf(qryStr,"UPDATE channels SET rating = %i WHERE channel = '%s'",tmpVal,tmpChan->channel); - dbQuery(qryStr,0); - } - break; - case 'C': - tmpVal = atoi(strtok_r(NULL,"\n",&md_tok)); - if (tmpChan->modes[CHAN_CLASS] != tmpVal) { - tmpChan->modes[CHAN_CLASS] = tmpVal; - sprintf(qryStr,"UPDATE channels SET classification = %i WHERE channel = '%s'",tmpVal,tmpChan->channel); - dbQuery(qryStr,0); - } - break; - case 'R': - tmpVal = atoi(strtok_r(NULL,"\n",&md_tok)); - if (tmpChan->modes[CHAN_RANDOM] != tmpVal) { - tmpChan->modes[CHAN_RANDOM] = tmpVal; - sprintf(qryStr,"UPDATE channels SET random = %i WHERE channel = '%s'",tmpVal,tmpChan->channel); - dbQuery(qryStr,0); - } - break; - case 'Q': - tmpVal = atoi(strtok_r(NULL,"\n",&md_tok)); - if (tmpChan->modes[CHAN_QUEUE] != tmpVal) { - tmpChan->modes[CHAN_QUEUE] = tmpVal; - sprintf(qryStr,"UPDATE channels SET queue = %i WHERE channel = '%s'",tmpVal,tmpChan->channel); - dbQuery(qryStr,0); - } - break; - case 'X': - tmpVal = atoi(strtok_r(NULL,"\n",&md_tok)); - if (tmpChan->modes[CHAN_NOADS] != tmpVal) { - tmpChan->modes[CHAN_NOADS] = tmpVal; - sprintf(qryStr,"UPDATE channels SET noads = %i WHERE channel = '%s'",tmpVal,tmpChan->channel); - dbQuery(qryStr,0); - } - break; - case 'E': - tmpVal = atoi(strtok_r(NULL,"\n",&md_tok)); - if (tmpVal != 0x0) - tmpVal = 1; - if (tmpChan->modes[CHAN_EXCLUSIVE] != tmpVal) { - tmpChan->modes[CHAN_EXCLUSIVE] = tmpVal; - sprintf(qryStr,"UPDATE channels SET exclusive = %i WHERE channel = '%s'",tmpVal,tmpChan->channel); - dbQuery(qryStr,0); - } - break; - case 'T': - tmpVal = atoi(strtok_r(NULL,":",&md_tok)); - if (tmpVal != 0x0) - tmpVal = atoi(strtok_r(NULL,"\n",&md_tok)); - if (tmpChan->modes[CHAN_TIME] != tmpVal) { - tmpChan->modes[CHAN_TIME] = tmpVal; - sprintf(qryStr,"UPDATE channels SET time = %i WHERE channel = '%s'",tmpVal,tmpChan->channel); - dbQuery(qryStr,0); - } - break; - default: - writeLog(0,"Invalid Mode: %c\n",mode[0]); - } - return(0x0); - } - -int botSetCurSong(char *data) { - char output[128]; - char *chan = 0x0; - char *song = 0x0; - - if (data == 0x0) - return(-1); - - chan = strtok(data,":"); - strtok(NULL,":"); - strtok(NULL,":"); - strtok(NULL,":"); - strtok(NULL,":"); - song = strtok(NULL,":"); - - if (song == 0x0) - return(-1); - - sprintf(output,"UPDATE channels SET nowplaying = %s WHERE channel = '%s'",song,chan); - dbQuery(output,0); - - writeLog(0,"Test: %s %s\n",chan,song); - return(0x0); - } - -int botStoreTopic(char *data) { - char *chan = 0x0; - char *topic = 0x0; - char qStr[512]; - - if (data == 0x0) - return(0x1); - - chan = strtok(data,":"); - topic = strtok(NULL,"\n"); - - if (chan == 0x0) - return(0x1); - - sprintf(qStr,"UPDATE channels SET topic = \"%s\" WHERE channel = '%s'",topic,chan); - dbQuery(qStr,0); - - return(0x0); - } - -int botDoLogin(char *cmdData) { - char *nick = 0x0; - char *ident = 0x0; - char *str_tok = 0x0; - char qryStr[256]; - MYSQL_RES *res = 0x0; - MYSQL_ROW row; - unsigned int i = 0x0; - - nick = strtok_r(cmdData,":",&str_tok); - ident = strtok_r(NULL,"\n",&str_tok); - - sprintf(qryStr,"SELECT channel FROM active a INNER JOIN channels c ON a.uid = c.oid WHERE a.userid = %s",ident); - res = dbQuery(qryStr,1); - - for (i = 0x0;i < mysql_num_rows(res);i++) { - row = mysql_fetch_row(res); - sWriteSocket("MSG %s:.tv mode +O %s",row[0],nick); - } - - if (res != 0x0) - mysql_free_result(res); - - return(0x0); - } - -int botDoJoin(char *cmdData) { - char *chan = 0x0; - char *nick = 0x0; - char *ident = 0x0; - char *str_tok = 0x0; - char qryStr[256]; - MYSQL_RES *res = 0x0; - - if (cmdData == 0x0) - return(-1); - - chan = strtok_r(cmdData,":",&str_tok); - nick = strtok_r(NULL,":",&str_tok); - ident = strtok_r(NULL,":",&str_tok); - - while (ident != 0x0) { - sprintf(qryStr,"SELECT cid FROM active a INNER JOIN channels c ON a.uid = c.oid WHERE userid = %s AND channel like '%s'",ident,chan); - res = dbQuery(qryStr,1); - if (res != 0x0) { - if (mysql_num_rows(res) > 0) - sWriteSocket("MSG %s:.tv mode +O %s",chan,nick); - mysql_free_result(res); - } - nick = strtok_r(NULL,":",&str_tok); - ident = strtok_r(NULL,":",&str_tok); - } - return(0x0); - } - diff --git a/main.c b/main.c index fd02887..a9fba5f 100644 --- a/main.c +++ b/main.c @@ -149,22 +149,23 @@ char IRCnick[32]; int i = 0x0; - //printf("[%s]\n",dataFresh); + writeLog(0,"[%s]\n",dataFresh); + if (net == 1) { writeLog(0,"TUve Network\n"); - if (strstr(dataFresh,"PING ")) { + if (strstr(dataFresh,"PING ") != 0x0) { strtok(dataFresh," "); sWriteSocket(tuveSocket,"PONG %s\n",strtok(NULL,"\n")); } else { cmd = strtok_r(dataFresh,":",&data_tok); if (!strcmp(cmd,"IDENT")) - sWriteSocket(tuveSocket,"JOIN #TUvé\n"); + sWriteSocket(tuveSocket,"JOIN %s\n",TUVE_CHANNEL); if (!strcmp(cmd,"MSG") && (onIRC == 1)) { nick = strtok_r(NULL,":",&data_tok); strtok_r(NULL,":",&data_tok); if (strcmp(nick,"TUveD")) - sWriteSocket(ircSocket,"PRIVMSG #UbixOS :<%s> %s\n",nick,strtok_r(NULL,"\n",&data_tok)); + sWriteSocket(ircSocket,"PRIVMSG %s :<%s> %s\n",IRC_CHANNEL,nick,strtok_r(NULL,"\n",&data_tok)); } } } @@ -176,22 +177,23 @@ //printf("CMD1: [%s]\n",cmd); if (cmd[0] == ':') { - if (strstr(cmd,"!")) { + if (strstr(cmd,"!") != 0x0) { for (i=1;cmd[i] != '!';i++) IRCnick[i-1] = cmd[i]; IRCnick[i] = '\0'; + writeLog(0,"IRC NICK: [%s]\n",IRCnick); } - //printf("IRC NICK: [%s]\n",IRCnick); cmd = strtok_r(NULL," ",&data_tok); } //printf("CMD2: [%s]\n",cmd); - - if (!strcmp(cmd,"PING")) + if (cmd == 0x0) + writeLog(0,"NULL CMD\n"); + else if (!strcmp(cmd,"PING")) sWriteSocket(ircSocket,"PONG %s\n",strtok_r(NULL,"\n",&data_tok)); else if (!strcmp(cmd,"376")) { - sWriteSocket(ircSocket,"JOIN #UbixOS\n"); - sWriteSocket(ircSocket,"PRIVMSG #UbixOS :Welcome\n"); + sWriteSocket(ircSocket,"JOIN %s\n",IRC_CHANNEL); + sWriteSocket(ircSocket,"PRIVMSG %s :Welcome\n",IRC_CHANNEL); onIRC = 1; } else if (!strcmp(cmd,"PRIVMSG")) { @@ -199,7 +201,7 @@ nick = strtok_r(NULL,"\n",&data_tok); nick[0] = ' '; - sWriteSocket(tuveSocket,"MSG #TUvé:%s:%s\n",IRCnick,nick); + sWriteSocket(tuveSocket,"MSG %s:%s:%s\n",TUVE_CHANNEL,IRCnick,nick); } } } diff --git a/socket.c b/socket.c index 8bb656d..8c4f25b 100644 --- a/socket.c +++ b/socket.c @@ -64,7 +64,7 @@ if (net == 1) { writeLog(2,"TUve Socket: [%i]\n",mySocket); tuveSocket = mySocket; - sWriteSocket(tuveSocket,"IDENT TB:91234567\n"); + sWriteSocket(tuveSocket,"IDENT TB:912345\n"); } else { writeLog(2,"IRC Socket: [%i]\n",mySocket); diff --git a/tuvebridge.h b/tuvebridge.h index 0d80e31..00b17da 100644 --- a/tuvebridge.h +++ b/tuvebridge.h @@ -14,8 +14,10 @@ #include +#define TUVE_CHANNEL "#TUvé" #define TUVE_SERVER_HOST "Ivorytower.UbixOnline.com" #define TUVE_SERVER_PORT 9999 +#define IRC_CHANNEL "#UbixOS" #define IRC_SERVER_HOST "us.undernet.org" #define IRC_SERVER_PORT 6667