#include<stdio.h>
#include<string.h>
#include<windows.h>
#include<winreg.h>
#include<winsock.h>
#define INVIO 0x0D
int i;
//int myID;
char myNick[50];
int LoggaConv;
int MAX_CLIENT;
int Connect=0;
int send_nick=0;
int Rmenu;
char bufferrecv[500];
char buffersend[500];
char Clear_line[500];
char SERVER_ADDR[50];
char logfile[1000];
SYSTEMTIME LocalTime;
HANDLE Hinvio;
HANDLE Hricezione;
int Protocol_Gst(char buffer[500],int l_buffrecv);
int GetText(char *szBuffer, int nMaxLenght);
int Config(int IDconf,char Param[50]);
int ListNick(char Nick,int ID);
int Title();
int menu(int IDmenu);
DWORD ricezione (LPDWORD lpdwParam)
{
int n;
while(Connect == 0){
n = 0;
bufferrecv[0] = 0;
n= recv(server,bufferrecv,500,0);
bufferrecv[n] = 0;
if(send_nick != 1){
if((strcmp(bufferrecv,"110 NICK OK\r"))==0){
send_nick = 1;
char temp[100];
sprintf(temp,"Connessione Avvenuta Nick: \"%s\"",myNick);
if(LoggaConv == 0){
Logga(temp);
}
}
}
if(i > 0){
int b=i;
Clear_line[b]=0;
for(b = i;b >= 0;b --){
Clear_line[b] = ' ';
}
Protocol_Gst(bufferrecv,n);
char buffer[500];
int c = i;
strcpy(buffer,buffersend);
buffer[c] = 0;
}
else{
Protocol_Gst(bufferrecv,n);
}
}
}
DWORD invio (LPDWORD lpdwParam)
{
int z;
char temp[500];
while(Connect == 0){
z = 0;
buffersend[0] = 0;
fflush(stdin);
GetText(buffersend,500);
z=strlen(buffersend);
if(send_nick == 0){
buffersend[z --] = 0;
if(z > 50){
}
else{
send(server,buffersend,z,0);
strcpy(myNick,buffersend);
myNick[z] = 0;
}
}
else{
if(buffersend[0] == '/'){
sprintf(temp,"165 %s",buffersend);
}
else{
sprintf(temp,"105 %s",buffersend);
}
z=strlen(temp);
send(server,temp,z,0);
if(LoggaConv == 0){
if(send_nick == 1){
Logga(buffersend);
}
}
}
}
}
int main(int argc,char **argv){
SOCKADDR_IN server_addr;
WSADATA data;
WORD p;
int len(char *);
int lun, err = 0;
LPHOSTENT host;
SetConsoleTitle("Scorpion Messenger 1.0");
Config(0,0);
Rmenu=menu(0);
if(Rmenu != 1){
p = MAKEWORD(2,0);
err = WSAStartup(p,&data);
server=socket(PF_INET,SOCK_STREAM,0);
server_addr.sin_family=PF_INET;
server_addr.sin_port=htons(65);
host = gethostbyname (SERVER_ADDR);
if (host == NULL){
err = WSAGetLastError();
printf ("Impossibile risolvere l'indirizzo del server\t%d",err
);
}
server_addr.sin_addr = *((LPIN_ADDR)*host->h_addr_list);
err = connect(server,(struct sockaddr*)&server_addr,lun);
if (err != 0){
err = WSAGetLastError();
printf("Impossibile Connettersi al Server\t%d",err
);
}
DWORD dwThreadRicezioneId,dwThreadInvioId, dwThrdParam = 1;
Hricezione = CreateThread(NULL, 0,(LPTHREAD_START_ROUTINE) ricezione, &dwThrdParam, 0, &dwThreadRicezioneId);
Hinvio = CreateThread(NULL, 0,(LPTHREAD_START_ROUTINE) invio, &dwThrdParam, 0, &dwThreadInvioId);
while(1) sleep(10);
}
closesocket (server);
closesocket(miosock);
WSACleanup();
return 0;
}
int Protocol_Gst(char buffer[500],int l_buffrecv){
char Com_Mess[3]="000";
Com_Mess[0] = buffer[0];
Com_Mess[1] = buffer[1];
Com_Mess[2] = buffer[2];
Com_Mess[3] = 0;
if ((strcmp(Com_Mess,"105"))==0){
char temp[500];
int i = 0;
int c;
for(c = 4;c <= l_buffrecv;c ++){
temp[i] = buffer[c];
i ++;
}
temp[i] = 0;
if(LoggaConv == 0){
if(send_nick == 1){
Logga(temp);
}
}
}
else if ((strcmp(Com_Mess,"120"))==0){
int c=l_buffrecv;
c=-3;
char ID[c];
int i=0;
for(c=4;c<=l_buffrecv;c++){
ID[i]=buffer[c];
i++;
}
ID[i]=0;
MAX_CLIENT=atoi(ID);
}
/* else if ((strcmp(Com_Mess,"140"))==0){
int c=l_buffrecv;
c=-3;
char ID[c];
int i=0;
for(c=4;c<=l_buffrecv;c++){
ID[i]=buffer[c];
i++;
}
ID[i]=0;
myID=atoi(ID);
}*/
else if ((strcmp(Com_Mess,"192"))==0){
closesocket(server);
closesocket(miosock);
WSACleanup();
Connect=1;
TerminateThread(Hinvio,0);
printf("\n\nIl Server si %c disconnesso",-118
);
}
return 0;
}
int GetText(char *szBuffer, int nMaxLenght) {
i=0;
char ch;
nMaxLenght-2;
while(ch!=INVIO){
ch = getch();
if (i < 0) i = 0;
if (i > (nMaxLenght)) i = nMaxLenght;
else{
if (ch == '\b') {
if(ch != 0) if (i > 0) putch('\b'); putch(' '); putch('\b');
i--;
}
else {
szBuffer[i++] = ch;
putch(ch);
}
}
}
if(i==0){
szBuffer[0] = '\n';
szBuffer[1] = '\0';
}
else{
i--;
szBuffer[i] = '\n';
i++;
szBuffer[i] = '\0';
}
i=0;
return 0;
}
int Logga(char buffer[500]){
GetLocalTime(&LocalTime);
FILE *log;
log=fopen(logfile,"a");
fprintf(log,"<p><font face=\"Comic Sans MS\" size=\"2\"><%i:%i>%s</font></p>\n",LocalTime.wHour,LocalTime.wMinute,buffer);
fclose(log);
return 0;
}
int Config(int IDconf,char Param[50]){
HKEY chiave;
DWORD KeyExsist;
char path[]="SOFTWARE\\Scorpion Software\\Scorpion Messenger\\Client";
if(IDconf==0){
DWORD ipsize;
char Logging[1];
RegCreateKeyEx(HKEY_LOCAL_MACHINE,
path,0,NULL,
REG_OPTION_NON_VOLATILE,
KEY_ALL_ACCESS,NULL,
&chiave,&KeyExsist);
if(KeyExsist==REG_CREATED_NEW_KEY){
system("cls");
Title();
printf("\n*** Prima Configurazione del Programma ***\n\n");
printf("\nInserisci L'indirizzo del server: ");
GetText(SERVER_ADDR,50);
SERVER_ADDR[strlen(SERVER_ADDR)-1]=0;
RegSetValueEx(chiave, "IP Server", 0, REG_SZ, SERVER_ADDR, strlen(SERVER_ADDR));
printf("\nVuoi abilitare il logging della chat?(S/N): ");
int ci=0;
while(ci==0){
char sc;
sc=getch();
if(tolower(sc)=='s'){
LoggaConv=0;
RegSetValueEx(chiave, "Logging", 0, REG_SZ, "0",1);
ci=1;
}
else if(tolower(sc)=='n'){
LoggaConv=0;
RegSetValueEx(chiave, "Logging", 0, REG_SZ, "1",1);
ci=1;
}
}
}
else{
RegQueryValueEx(chiave,"IP Server",NULL,NULL,SERVER_ADDR,&ipsize);
RegQueryValueEx(chiave,"Logging",NULL,NULL,Logging,&ipsize);
LoggaConv=atoi(Logging);
}
RegCloseKey(chiave);
}
else if(IDconf==1){
RegOpenKeyEx(HKEY_LOCAL_MACHINE,path,0,KEY_SET_VALUE,&chiave);
RegSetValueEx(chiave, "IP Server", 0, REG_SZ, Param, strlen(Param));
RegCloseKey(chiave);
}
else if(IDconf==2){
RegOpenKeyEx(HKEY_LOCAL_MACHINE,path,0,KEY_SET_VALUE,&chiave);
RegSetValueEx(chiave, "Logging", 0, REG_SZ, Param, strlen(Param));
RegCloseKey(chiave);
}
if(LoggaConv==0){
ExpandEnvironmentStrings("%USERPROFILE%\\Documenti\\",logfile,sizeof(logfile));
strcat(logfile,"Scorpion Messenger");
CreateDirectory(logfile,NULL);
GetLocalTime(&LocalTime);
char temp[500];
sprintf(temp,"\\Log_%i_%i_%i.htm",LocalTime.wDay,LocalTime.wMonth,LocalTime.wYear);
strcat(logfile,temp);
}
return 0;
}
int menu(int IDmenu){
int scelta;
int CicloMenu;
int cm;
while(1){
if(IDmenu==0){
scelta=0;
char ScelteMenu0[3][20];
strcpy(ScelteMenu0[0],"Connetti");
strcpy(ScelteMenu0[1],"Impostazioni");
strcpy(ScelteMenu0[2],"Credits & Info");
strcpy(ScelteMenu0[3],"Esci");
CicloMenu=0;
while(CicloMenu==0){
if (GetAsyncKeyState(38)== -32767){
if(scelta==0){
scelta=3;
}
else{
scelta--;
}
}
else if (GetAsyncKeyState(40)== -32767){
if(scelta==3){
scelta=0;
}
else{
scelta++;
}
}
else if (GetAsyncKeyState(13)== -32767){
if(scelta==0){
system("cls");
Title();
return 0;
}
else if(scelta==1){
IDmenu=1;
break;
}
else if(scelta==2){
system("cls");
Title();
printf("\nScorpion Messenger 1.0");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),12);
printf("\n\n-> Indietro <-\n");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),10);
while(GetAsyncKeyState(13)!= -32767);
}
else if(scelta==3){
system("cls");
Title();
return 1;
}
}
system("cls");
Title();
printf("\t*** Main Men%c ***\n\n",-105
);
for(cm=0;cm<=3;cm++){
if(cm==scelta){
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),12);
printf("\t-> %s <-\n",ScelteMenu0
[cm
]);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),10);
}
else{
printf("\t %s\n",ScelteMenu0
[cm
]);
}
}
sleep(5);
getch();
}
}
if(IDmenu==1){
scelta=0;
char ScelteMenu1[3][50];
strcpy(ScelteMenu1[0],"Cambia Indirizzo Server");
if(LoggaConv!=0){
strcpy(ScelteMenu1[1],"Abilita il Logging della Chat");
}
else{
strcpy(ScelteMenu1[1],"Disabilita il Logging della Chat");
}
strcpy(ScelteMenu1[2],"Indietro");
CicloMenu=0;
while(CicloMenu==0){
if (GetAsyncKeyState(38)== -32767){
if(scelta==0){
scelta=2;
}
else{
scelta--;
}
}
else if (GetAsyncKeyState(40)== -32767){
if(scelta==2){
scelta=0;
}
else{
scelta++;
}
}
else if (GetAsyncKeyState(13)== -32767){
if(scelta==0){
fflush(stdin);
system("cls");
Title();
printf("\nIndirizzo Corrente: \"%s\"",SERVER_ADDR
);
printf("\nVuoi Cambiare l'indirizzo?(S/N): ");
int ci=0;
while(ci==0){
char sc;
sc=getch();
if(tolower(sc)=='s'){
putch(sc);
printf("\n\nInserisci il nuovo indirizzo: ");
GetText(SERVER_ADDR,50);
SERVER_ADDR[strlen(SERVER_ADDR)-1]=0;
Config(1,SERVER_ADDR);
ci=1;
}
else if(tolower(sc)=='n'){
putch(sc);
ci=1;
}
}
}
else if(scelta==1){
if(LoggaConv==0){
LoggaConv=1;
Config(2,"1");
strcpy(ScelteMenu1[1],"Abilita il Logging della Chat");
}
else{
LoggaConv=0;
Config(2,"0");
strcpy(ScelteMenu1[1],"Disabilita il Logging della Chat");
}
}
else if(scelta==2){
IDmenu=0;
break;
}
}
system("cls");
Title();
printf("\t*** Impostazioni ***\n\n");
for(cm=0;cm<=2;cm++){
if(cm==scelta){
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),12);
printf("\t-> %s <-\n",ScelteMenu1
[cm
]);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),10);
}
else{
printf("\t %s\n",ScelteMenu1
[cm
]);
}
}
sleep(5);
getch();
}
}
}
return 0;
}
int Title(){
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),12);
printf(" _____ _____ _____ _____ _____ _ _____ __ _ \n");
printf("/ ___/ / ___| / _ \\ | _ \\ | _ \\ | | / _ \\ | \\ | |\n");
printf("| |___ | | | | | | | |_| | | |_| | | | | | | | | \\| |\n");
printf("\\___ \\ | | | | | | | _ / | ___/ | | | | | | | |\\ |\n");
printf(" ___| | | |___ | |_| | | | \\ \\ | | | | | |_| | | | \\ |\n");
printf("/_____/ \\_____| \\_____/ |_| \\_\\ |_| |_| \\_____/ |_| \\_|\n");
printf(" ___ ___ _____ _____ _____ _____ __ _ _____ _____ _____\n");
printf(" / |/ | | ____| / ___/ / ___/ | ____| | \\ | | / ___| | ____| | _ \\\n");
printf(" / /| /| | | |__ | |___ | |___ | |__ | \\| | | | | |__ | |_| |\n");
printf(" / / |__/ | | | __| \\___ \\ \\___ \\ | __| | |\\ | | | _ | __| | _ /\n");
printf(" / / | | | |___ ___| | ___| | | |___ | | \\ | | |_| | | |___ | | \\ \\\n");
printf("/_/ |_| |_____| /_____/ /_____/ |_____| |_| \\_| \\_____/ |_____| |_| \\_\n\n\n");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),10);
return 0;
}