// Bot.C -*- C++ -*-
// Copyright (c) 1997, 1998 Etienne BERNARD
-// Copyright (C) 2002 Clinton Ebadi
+// Copyright (C) 2002,2003,2005 Clinton Ebadi
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
#include "Bot.H"
#include "DCCConnection.H"
+#include "DCCChatConnection.H"
#include "StringTokenizer.H"
#include "ServerConnection.H"
#include "Utils.H"
userHost(""),
localIP(""),
commandChar(DEFAULT_COMMANDCHAR),
- configFileName(filename),
userListFileName(DEFAULT_USERLISTFILENAME),
shitListFileName(DEFAULT_SHITLISTFILENAME),
- logFileName(DEFAULT_LOGFILENAME),
- logs_dir (DEFAULT_LOGDIR),
helpFileName(DEFAULT_HELPFILENAME),
initFileName(DEFAULT_INITFILENAME),
+ connected(false),
+ debug(debug_on),
+ stop(false),
+ sentPing(false),
+ startTime(time(NULL)),
+ currentTime(startTime),
+ lastNickNameChange(startTime),
+ lastChannelJoin(startTime),
+ serverConnection(0),
+ sentUserhostID(0),
+ receivedUserhostID(0),
+ logFileName(DEFAULT_LOGFILENAME),
+ logs_dir (DEFAULT_LOGDIR),
+ configFileName (filename),
#ifdef USESCRIPTS
scriptLogFileName(DEFAULT_SCRIPTLOGFILENAME),
- autoexecFileName(DEFAULT_AUTOEXECFILENAME),
+ autoexecFileName(DEFAULT_AUTOEXECFILENAME)
#endif
- connected(false),
- debug(debug_on), stop(false), sentPing(false),
- startTime(time(NULL)), currentTime(startTime),
- lastNickNameChange(startTime), lastChannelJoin(startTime),
- serverConnection(0), sentUserhostID(0), receivedUserhostID(0)
{
#ifdef HAVE_STL_CLEAR
wantedChannels.clear();
while (initFile >> temp, temp.length() != 0) {
line++;
StringTokenizer st(temp);
- temp = temp.trim();
- if (temp[0]=='#') continue;
- if (st.countTokens(' ') != 2) {
+ temp = Utils::trim_str (temp);
+ if (temp[(unsigned int)0]=='#') continue;
+ if (st.count_tokens (' ') != 2) {
std::cerr << "Error when reading alias file (" << initFileName
<< ") line " << line << "...\n";
continue;
}
- alias = st.nextToken().toUpper();
- command = st.nextToken().toUpper();
+ alias = Utils::to_upper (st.next_token());
+ command = Utils::to_upper (st.next_token());
// Does the function already exist ?
if (!userFunctions[alias])
file >> temp;
- if (temp.length() == 0 || temp[0] == '#') {
+ if (temp.length() == 0 || temp[(unsigned int)0] == '#') {
line++;
continue;
}
StringTokenizer st(temp);
- String command = st.nextToken('=').trim().toUpper();
- String parameters = st.nextToken('=').trim();
+ String command = Utils::to_upper (Utils::trim_str (st.next_token('=')));
+ String parameters = Utils::trim_str (st.next_token('='));
if (command == "NICK" || command == "NICKNAME")
nickName = wantedNickName = parameters;
else if (command == "IRCNAME" || command == "REALNAME")
ircName = parameters;
else if (command == "CMDCHAR" || command == "COMMAND")
- commandChar = parameters[0];
+ commandChar = parameters[(unsigned int)0];
else if (command == "USERLIST")
userListFileName = parameters;
else if (command == "SHITLIST")
<< " I will use compatibility mode, but you're really"
<< " missing something.\n";
StringTokenizer st2(parameters);
- String name = st2.nextToken().toLower();
- String key = st2.nextToken();
+ String name = Utils::to_lower (st2.next_token());
+ String key = st2.next_token();
wantedChannels[name] = new wantedChannel("", "", key);
} else {
StringTokenizer st2(parameters);
- String name = st2.nextToken(':').toLower();
- String mode = st2.nextToken(':');
- String keep = st2.nextToken(':');
- String key = st2.nextToken(':');
+ String name = Utils::to_lower (st2.next_token(':'));
+ String mode = st2.next_token(':');
+ String keep = st2.next_token(':');
+ String key = st2.next_token(':');
wantedChannels[name] = new wantedChannel(mode, keep, key);
}
}
{
if (parameters != logFileName)
{
- if (parameters[0] == '/')
+ if (parameters[(unsigned int)0] == '/')
{
set_log_dir ("/");
set_log_file (parameters.subString (1));
serverList->addServer(new Server(parameters));
else {
StringTokenizer st2(parameters);
- String name = st2.nextToken();
- int port = std::atoi(st2.nextToken());
+ String name = st2.next_token();
+ int port = std::atoi(st2.next_token().c_str());
serverList->addServer(new Server(name,
port,
- st2.nextToken()));
+ st2.next_token()));
}
}
else {
if (serverConnection->handleInput())
nextServer();
-// std::list<DCCConnection *>::iterator it = dccConnections.begin();
-// std::list<DCCConnection *>::iterator it2;
-
-// while (it != dccConnections.end()) {
-// it2 = it;
-// ++it;
-// #ifdef _HPUX_SOURCE
-// if (rd & (*it2)->getFileDescriptor()) {
-// #else
-// if (FD_ISSET((*it2)->getFileDescriptor(), &rd)) {
-// #endif
-// if ((*it2)->handleInput()) {
-// delete *it2;
-// dccConnections.erase(it2);
-// }
-// }
-// }
-// }
dccConnections->checkInput (rd);
}
{
char s[6];
std::sprintf(s, "%2d:%2d", thisTime->tm_hour, thisTime->tm_min);
+ // FIXME: uses gh_list
botInterp->RunHooks(Hook::TIMER, String(s),
- gh_list(Utils::string2SCM(String(s)),
+ gh_list(Utils::str2scm (std::string (s)),
SCM_UNDEFINED));
}
#endif
serverConnection->queue->sendJoin((*it).first, (*it).second->key);
}
-// std::list<DCCConnection *>::iterator it2;
-
-// for (std::list<DCCConnection *>::iterator it = dccConnections.begin();
-// it != dccConnections.end(); ) {
-// it2 = it;
-// ++it;
-// if ((*it2)->autoRemove && currentTime >= (std::time_t)((*it2)->lastSpoken + Bot::DCC_DELAY)) {
-// delete *it2;
-// dccConnections.erase(it2);
-// }
-// }
-
if (currentTime >= (std::time_t)(serverConnection->serverLastSpoken + Bot::PING_TIME) && !sentPing) {
serverConnection->queue->sendPing("Testing connection");
sentPing = true;
}
void
-Bot::addDCC(Person * from, unsigned long address, int port)
+Bot::addDCC(Person * from, unsigned long address, int port, int type)
{
- DCCConnection * d = new DCCConnection(this, from->getAddress (),
- address, port);
+ DCCConnection *d = 0;
+
+ if (type == CHAT)
+ d = new DCCChatConnection(this, from->getAddress (),
+ address, port);
+ else
+ return;
if (!d->connect())
{