1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
| #include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[])
{
char *strIrc = ":rom!~rom@n0017-1-88-176-116-84.fbx.proxad.net PRIVMSG rom :salut. comment vas tu ?\n" ;
// char *strIrc = ":rom_!~rom@n0017-1-88-176-116-84.fbx.proxad.net PRIVMSG #romfox :salut. comment vas tu ?\n" ;
// char *strIrc = ":rom!~rom@n0017-1-88-176-116-84.fbx.proxad.net PRIVMSG +%@#romfox :salut. comment vas tu ?\n" ;
// char *strIrc = ":rom!~rom@n0017-1-88-176-116-84.fbx.proxad.net PRIVMSG $*.mynet.net :salut. comment vas tu ?\n" ;
int ret = 0 ;
char nickName[128] = "" ;
char name[128] = "" ;
char domaine[128] = "" ;
char commande[128] = "" ;
char parametres[128] = "" ;
char texte[128] = "" ;
// [{:}{prefix}{SP}]{COMMANDE}[{SP}{PARAMETRES}]{CRLF}
// {prefix} = {NICK}{!}{NOM DU CLIENT}{@}{DOMAINE DU CLIENT}
// {:}{{NICK}{!}{NOM DU CLIENT}{@}{DOMAINE DU CLIENT}}{SP}]{COMMANDE}[{SP}{PARAMETRES}]{CRLF}
ret = sscanf(strIrc, ":%[^!]!%[^@]@%s %s %[^\n]", nickName, name, domaine, commande, parametres) ;
if(ret==5) {
printf("{NICK} : %s\n", nickName) ;
printf("{NOM DU CLIENT} : %s\n", name) ;
printf("{DOMAINE DU CLIENT} : %s\n", domaine) ;
printf("{COMMANDE} : %s(%s)\n", commande, parametres) ;
// Analyse des commandes et de leurs paramètres
if(!strcmp(commande, "PRIVMSG")) {
/*
Il peu avoir 4 formats différent de la commande PRIVMSG
- 1. PRIVMSG <nick> :<text> Send a private message
- 2. PRIVMSG <#channel> :<text> Send a message to a channel
- 3. PRIVMSG <prefix><#channel> :<text> Send a message to users with <prefix> in <#channel> only
- 4. PRIVMSG $<mask> :<text> Send a message to all users on servers matching <mask>
*/
// Cas n°4
if(strstr(parametres, "$")==parametres) {
char mask[128] = "" ;
ret = sscanf(parametres, "$%s :%[^\n]\n", mask, texte) ;
printf("Cas n°4 ret = %d\n", ret) ;
if(ret==2) {
printf("mask : %s\n", mask) ;
printf("texte : %s\n", texte) ;
}
}
// Cas n°2 ou n°3
else if(strstr(parametres, "#")) {
char channel[128] = "" ;
// Cas n°2
if(parametres[0]=='#') {
ret = sscanf(parametres, "#%s :%[^\n]\n", channel, texte) ;
printf("Cas n°2 ret = %d\n", ret) ;
if(ret==2) {
printf("channel : %s\n", channel) ;
printf("texte : %s\n", texte) ;
}
}
// Cas n°3
else {
char prefix[128] = "" ;
ret = sscanf(parametres, "%[^#]#%s :%[^\n]\n", prefix, channel, texte) ;
printf("Cas n°3 ret = %d\n", ret) ;
if(ret==3) {
printf("prefix : %s\n", prefix) ;
printf("channel : %s\n", channel) ;
printf("texte : %s\n", texte) ;
}
}
}
// Cas n°1
else {
char nick[128] = "" ;
ret = sscanf(parametres, "%s :%[^\n]\n", nick, texte) ;
printf("Cas n°1 ret = %d\n", ret) ;
if(ret==2) {
printf("nick : %s\n", nick) ;
printf("texte : %s\n", texte) ;
}
}
}
}
return EXIT_SUCCESS ;
} |
Partager