#include <vector>
#include <deque>
#include <sched.h>
+#include <pthread.h>
#include "users.h"
#include "ctables.h"
#include "globals.h"
#include "hashcomp.h"
#include "socketengine.h"
#include "socket.h"
+#include "dns.h"
int LogLevel = DEFAULT;
char ServerName[MAXBUF];
}
else
{
- WriteOpers("There were errors in the configuration file:",user->nick);
+ WriteOpers("There were errors in the configuration file:");
while (!errstr.eof())
{
errstr.getline(dataline,1024);
user->FlushWriteBuf();
if (user->registered == 7) {
- FOREACH_MOD OnUserQuit(user);
+ FOREACH_MOD OnUserQuit(user,reason);
WriteCommonExcept(user,"QUIT :%s",reason);
}
}
+/*void *task(void *arg)
+{
+ for (;;) {
+ cout << (char *)arg;
+ cout.flush();
+ }
+ return NULL;
+}*/
+
int main(int argc, char** argv)
{
Start();
}
}
}
+
strlcpy(MyExecutable,argv[0],MAXBUF);
// initialize the lowercase mapping table
}
}
+void* dns_task(void* arg)
+{
+ userrec* u = (userrec*)arg;
+ log(DEBUG,"DNS thread for user %s",u->nick);
+ DNS dns1;
+ DNS dns2;
+ std::string host;
+ std::string ip;
+ if (dns1.ReverseLookup(u->ip))
+ {
+ log(DEBUG,"DNS Step 1");
+ while (!dns1.HasResult())
+ {
+ usleep(100);
+ }
+ host = dns1.GetResult();
+ if (host != "")
+ {
+ log(DEBUG,"DNS Step 2: '%s'",host.c_str());
+ if (dns2.ForwardLookup(host))
+ {
+ while (!dns2.HasResult())
+ {
+ usleep(100);
+ }
+ ip = dns2.GetResultIP();
+ log(DEBUG,"DNS Step 3 '%s'(%d) '%s'(%d)",ip.c_str(),ip.length(),u->ip,strlen(u->ip));
+ if (ip == std::string(u->ip))
+ {
+ log(DEBUG,"DNS Step 4");
+ if (host.length() < 160)
+ {
+ log(DEBUG,"DNS Step 5");
+ strcpy(u->host,host.c_str());
+ }
+ }
+ }
+ }
+ }
+ u->dns_done = true;
+ return NULL;
+}
/* add a client connection to the sockets list */
void AddClient(int socket, char* host, int port, bool iscached, char* ip)
}
fd_ref_table[socket] = clientlist[tempnick];
engine_add_fd;
+
+ // initialize their dns lookup thread
+ //if (pthread_create(&clientlist[tempnick]->dnsthread, NULL, dns_task, (void *)clientlist[tempnick]) != 0)
+ //{
+ // log(DEBUG,"Failed to create DNS lookup thread for user %s",clientlist[tempnick]->nick);
+ //}
}
/* shows the message of the day, and any other on-logon stuff */
}
+bool is_valid_cmd(const char* commandname, int pcnt, userrec * user)
+{
+ for (unsigned int i = 0; i < cmdlist.size(); i++)
+ {
+ if (!strcasecmp(cmdlist[i].command,commandname))
+ {
+ if (cmdlist[i].handler_function)
+ {
+ if ((pcnt>=cmdlist[i].min_params) && (strcasecmp(cmdlist[i].source,"<core>")))
+ {
+ if (strchr(user->modes,cmdlist[i].flags_needed))
+ {
+ return true;
+ }
+ }
+ }
+ }
+ }
+ return false;
+}
+
// calls a handler function for a command
void call_handler(const char* commandname,char **parameters, int pcnt, userrec *user)