📄 checksmtp.c
字号:
#include "checkSMTP.h"#include "reportToConsole.h"/*this file must all modifye TODO:*/int SMTPSockFd[MaxSMTPUrl];long long SMTPsendPacket[MaxSMTPUrl];long long SMTPrecvPacket[MaxSMTPUrl];char STMPprotocolPacket[MAX_PACKET];int SMTPaSendNum;int SMTPaRecvNum;time_t SMTPsTime,SMTPeTime;fd_set SMTPreadSet,SMTPtestSet;char SMTPtmpcheck[100];extern FILE *SMTPLogFd;void SMTPanalysis(){ int i; float rate; int downNum = 0; int notSmoothNum = 0; int wellNum = 0; for (i = 0;i < SMTPUrlNum;i++) { if (SMTPSockFd[i] != -1) { rate =(float) SMTPrecvPacket[i]/SMTPsendPacket[i];/* rate of pocket recv */ if (rate < RATE_LEVEL) { notSmoothNum++; sprintf(SMTPtmpcheck,"[WARNING] SMTP server:%s is not smooth;the rate is %f\n",SMTPUrl[i],rate); display(textSMTPBuff,SMTPtmpcheck,SMTPLogFd); } else { wellNum++; sprintf(SMTPtmpcheck,"[OK] SMTP server:%s is well,the rate is:%f\n",SMTPUrl[i],rate); display(textSMTPBuff,SMTPtmpcheck,SMTPLogFd); } } else wellNum++; } if (SMTPServFd != -1) reportToConsole("SMTP",SMTPServFd,downNum,notSmoothNum,wellNum);}int SMTPsearchFd(int fd){ int i; for (i = 0;i < SMTPUrlNum;i++) { if (fd == SMTPSockFd[i]) break; } return i;}void SMTPnewSockFd(){ int i; for (i = 0;i < SMTPUrlNum;i++) { close(SMTPSockFd[i]); servConnect(SMTPUrl[i],&(SMTPSockFd[i]),SMTPPort,textSMTPBuff,SMTPLogFd); }}void SMTPmkSendPacket(){ int i; bzero(&STMPprotocolPacket,sizeof(STMPprotocolPacket)); genSMTPPacket(SMTPUrl[0],STMPprotocolPacket);}void SMTPsendData(){ int i; SMTPaSendNum = 0; for (i = 0;i < SMTPUrlNum;i++) { if (SMTPSockFd[i] != -1) { int res; int sendBuffSize = strlen(STMPprotocolPacket); res = write(SMTPSockFd[i],STMPprotocolPacket,sendBuffSize); /* no block */ if (res == -1) { //perror("write"); close(SMTPSockFd[i]); FD_CLR(SMTPSockFd[i],&SMTPtestSet); FD_CLR(SMTPSockFd[i],&SMTPreadSet); continue; } else { SMTPaSendNum++; SMTPsendPacket[i]++; } } }}void SMTPselectHandle(){ char recvBuff[256]; int fd; for (fd = 0;fd < FD_SETSIZE;fd++) { if (FD_ISSET(fd,&SMTPtestSet)) { SMTPaRecvNum++; int nread; ioctl(fd,FIONREAD,&nread); if (nread == 0) { sprintf(SMTPtmpcheck,"[FAILURE] SMTP server connect close\n"); display(textSMTPBuff,SMTPtmpcheck,SMTPLogFd); } else { int recvBuffSize = strlen(recvBuff); read(fd,recvBuff,recvBuffSize); /* int res; res = analysPacket(recvBuff); if (res == 1) { int id; determine the id which socket fd is sockfd SMTPrecvPacket[id]++; }*/ int id; id = SMTPsearchFd(fd); SMTPrecvPacket[id]++; sprintf(SMTPtmpcheck,"[MESSAGE] SMTP server: %s send %lld packets,and receive %lld packets\n", SMTPUrl[id],SMTPsendPacket[id],SMTPrecvPacket[id]); display(textSMTPBuff,SMTPtmpcheck,SMTPLogFd); } close(fd); FD_CLR(fd,&SMTPreadSet); } }}void SMTPresetSet(){ int i; FD_ZERO(&SMTPreadSet); for (i = 0;i < SMTPUrlNum;i++) { if (SMTPSockFd[i] != -1) FD_SET(SMTPSockFd[i],&SMTPreadSet); }}void SMTPhandle(){ time_t s_t,e_t; int i; struct timeval timeOut; SMTPnewSockFd(); /*make the SMTP url connect*/ SMTPresetSet(); /*add the socket to the readset*/ SMTPaRecvNum = 0; SMTPsendData(); s_t = time((time_t*)0); while (1) { SMTPtestSet = SMTPreadSet; timeOut.tv_sec = SELECT_TIME_SEC; timeOut.tv_usec = SELECT_TIME_USEC; /* time out is 1 second */ int res; res = select(FD_SETSIZE,&SMTPtestSet,(fd_set*)NULL,(fd_set*)NULL,&timeOut); switch(res) { case 0 :// printf("time out\n"); break; case -1 :// printf("smtp select\n"); break;// exit(-1); default : SMTPselectHandle(); s_t = time((time_t*)0); break; } e_t = time((time_t*)0); double diff_t; diff_t = difftime(e_t,s_t); if (SMTPaRecvNum >= SMTPaSendNum || diff_t > RECV_TIME_OUT ) /*time controll*/ break; }}void checkSMTP(){ int i ; for (i = 0;i <SMTPUrlNum;i++) SMTPsendPacket[i] = SMTPrecvPacket[i] = 0; SMTPsTime = time((time_t*)0); SMTPmkSendPacket(); while (running) { SMTPhandle(); SMTPeTime = time((time_t*)0); double diffTime; diffTime = difftime(SMTPeTime,SMTPsTime); if (diffTime >= CHECK_TIME_VAL) /* check between CHECK_TIME_VAL*/ { SMTPsTime = SMTPeTime; SMTPanalysis(); /* analays the all socket */ } sleep(1); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -