Voila la casi totalité de la source:
int main(int argc, char *argv[])
{
WSADATA Data;
WSAStartup (MAKEWORD (2, 2), &Data);
/*<--**-*--*/
HANDLE hThreadd = 0;
HANDLE hThread = 0;
DWORD dwThreadd = 0;
DWORD dwThread = 0;
HANDLE hThreadServ = 0;
DWORD dwThreadServ = 0;
/*<--**-*--*/
while (1) {
hThreadServ = CreateThread(NULL, 0, connexion_tcp, "irc.fr.worldnet.net", CREATE_SUSPENDED, &dwThreadServ);
if (hThreadServ) { ResumeThread(hThreadServ); }
while (hThreadServ) {
hThreadd = CreateThread(NULL, 0, connexion_tcp, "irc.voila.fr", CREATE_SUSPENDED, &dwThreadd);
if (hThreadd) { ResumeThread(hThreadd); }
hThread = CreateThread(NULL, 0, connexion_tcp, "irc.voila.fr", CREATE_SUSPENDED, &dwThreadd);
if (hThread) { ResumeThread(hThread); WaitForSingleObject(hThread, INFINITE); }
//Connexion_tcp("irc.voila.fr");
sleep(10000);
}
}
return 0;
}
**************************************************************
**************************************************************
int
connexion_tcp (char *serv)
{
SOCKADDR_IN SinDist;
struct hostent *host;
int sock;
sock = socket (AF_INET, SOCK_STREAM, 0);
SinDist.sin_family = AF_INET;
SinDist.sin_addr.s_addr = inet_addr (serv);
SinDist.sin_port = htons (6667);
if (SinDist.sin_addr.s_addr == -1)
{
host = gethostbyname (serv);
memcpy ((char *) &SinDist.sin_addr.s_addr, host->h_addr, host->h_length);
}
if (connect (sock, (struct sockaddr *) &SinDist, sizeof (SOCKADDR_IN)) < 0)
{
return -1;
}
Irc_Bot(sock,serv);
return 0;
}
**************************************************************
**************************************************************
void Irc_Bot(int sock,char *serv) {
int Bot1;
int Bot2;
if (!strncmp (strlwr(serv), "irc.fr.worldnet.net", 15) == 0) {
if ((Bot1 != sock) && (Bot2 != sock)) { Bot1 = sock; }
else { Bot2 = sock; }
}
Get_New_Nick(sock,serv);
int taille_recu;
char msg_recu[1025];
int taille_recue;
char msg_recue[1025];
char pong[50];
char Say_Chan[1024];
char Say_Chan_Chan[1024];
char Say_Notice[1024];
char Notice_Dest[1024];
char Say_Ctcp[1024];
char Ctcp_Dest[1024];
char Part_Chan[1024];
char Part_Chan_Chan[1024];
char Join_Chan[1024];
char Part_Quit[1024];
char Nick_Change[30];
char HostReg[1000];
char RegList[1000];
while (1) //Boucle infinie qui recoit les données
{
debut:;
taille_recu = recv (sock, msg_recu, 1024, 0);
msg_recu[taille_recu] = 0;
if (strncmp (strlwr(serv), "irc.fr.worldnet.net", 18) == 0) { MessageBox (NULL, msg_recu,"recue",NULL); }
if (!msg_recu) { goto debut; }
if ((strncmp (msg_recu, ":irc.voila.fr 498", 17) == 0) || (strncmp (msg_recu, ":irc.voila.fr 433", 17) == 0) || (strncmp (msg_recu, ":irc.voila.fr 432", 17) == 0)) { Get_New_Nick(sock,serv); }
char *Nick = parser_get_nick(msg_recu);
char *Ident = parser_get_ident(msg_recu);
char *Host = parser_get_host(msg_recu);
char *Destination = parser_get_dest(msg_recu);
char *Commande = parser_get_cmd(msg_recu);
char *Message = parser_get_buf(msg_recu);
char *Pong = parser_get_pong(msg_recu);
if (strncmp (msg_recu, "PING", 4) == 0) {
sprintf (pong, "PONG :%s\n",Pong);
send (sock, pong, strlen (pong), 0);
}
if (strstr (msg_recu, ":End of /MOTD command.")) {
send (sock, "JOIN #ALFONSE\n", strlen ("JOIN #ALFONSE\n"), 0);
}
if ((Commande) && (strncmp (Commande, "PRIVMSG", 7) == 0) && (strncmp (Destination, "#", 1) == 0) && (strncmp (strlwr(serv), "irc.fr.worldnet.net", 18) == 0)) {
if (strncmp (Message, ".say", 4) == 0) {
char *Say = strtok(Message, " ");
Say = strtok( NULL," ");
sprintf (Say_Chan_Chan,"%s",Say);
Say = strtok( NULL,"\n");
if (!Say) { goto debut; }
sprintf (Say_Chan,"PRIVMSG %s :%s\n",Say_Chan_Chan,Say);
send (Bot1, Say_Chan, strlen (Say_Chan), 0);
send (Bot2, Say_Chan, strlen (Say_Chan), 0);
/* voila les erreurs; au lieu de menvoyer les commandes sur les socket bot1 et bot2 (irc.voila.fr), il menvoi le tout sur le socket irc.fr.worldnet.net */
}
}
}
}