📄 checkpop3.c
字号:
#include "checkPOP3.h"#include "reportToConsole.h"/*this file must all modifye TODO:*/int POP3SockFd[MaxPOP3Url];long long POP3sendPacket[MaxPOP3Url];long long POP3recvPacket[MaxPOP3Url];char STMPprotocolPacket[MAX_PACKET];int POP3aSendNum;int POP3aRecvNum;time_t POP3sTime,SMTPeTime;fd_set POP3readSet,POP3testSet;char POP3tmpcheck[100];extern FILE *POP3LogFd;void POP3analysis(){ int i; float rate; int downNum = 0; int notSmoothNum = 0; int wellNum = 0; for (i = 0;i < POP3UrlNum;i++) { if (POP3SockFd[i] != -1) { rate =(float) POP3recvPacket[i]/POP3sendPacket[i];/* rate of pocket recv */ if (rate < RATE_LEVEL) { notSmoothNum++; sprintf(POP3tmpcheck,"[WARNING] POP3 server:%s is not smooth;the rate is %f\n",POP3Url[i],rate); display(textPOP3Buff,POP3tmpcheck,POP3LogFd); } else { wellNum++; sprintf(POP3tmpcheck,"[OK] POP3 server:%s is well,the rate is:%f\n",POP3Url[i],rate); display(textPOP3Buff,POP3tmpcheck,POP3LogFd); } } else downNum++; } if (POP3ServFd != -1) reportToConsole("POP3",POP3ServFd,downNum,notSmoothNum,wellNum);}int POP3searchFd(int fd){ int i; for (i = 0;i < POP3UrlNum;i++) { if (fd == POP3SockFd[i]) break; } return i;}void POP3newSockFd(){ int i; for (i = 0;i < POP3UrlNum;i++) { close(POP3SockFd[i]); servConnect(POP3Url[i],&(POP3SockFd[i]),POP3Port,textPOP3Buff,POP3LogFd); }}void POP3mkSendPacket(){ int i; bzero(&STMPprotocolPacket,sizeof(STMPprotocolPacket)); genPOP3Packet(POP3Url[0],STMPprotocolPacket);}void POP3sendData(){ int i; POP3aSendNum = 0; for (i = 0;i < POP3UrlNum;i++) { if (POP3SockFd[i] != -1) { int res; int sendBuffSize = strlen(STMPprotocolPacket); res = write(POP3SockFd[i],STMPprotocolPacket,sendBuffSize); /* no block */ if (res == -1) { //perror("write"); close(POP3SockFd[i]); FD_CLR(POP3SockFd[i],&POP3testSet); FD_CLR(POP3SockFd[i],&POP3readSet); continue; } else { POP3aSendNum++; POP3sendPacket[i]++; } } }}void POP3selectHandle(){ char recvBuff[256]; int fd; for (fd = 0;fd < FD_SETSIZE;fd++) { if (FD_ISSET(fd,&POP3testSet)) { POP3aRecvNum++; int nread; ioctl(fd,FIONREAD,&nread); if (nread == 0) { sprintf(POP3tmpcheck,"[FIALURE] POP3 server disconnect\n"); display(textPOP3Buff,POP3tmpcheck,POP3LogFd); } 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 POP3recvPacket[id]++; }*/ int id; id = POP3searchFd(fd); POP3recvPacket[id]++; sprintf(POP3tmpcheck,"[MESSAGE] POP3 server: %s send %lld packets,and receive %lld packets\n", POP3Url[id],POP3sendPacket[id],POP3recvPacket[id]); display(textPOP3Buff,POP3tmpcheck,POP3LogFd); } close(fd); FD_CLR(fd,&POP3readSet); } }}void POP3resetSet(){ int i; FD_ZERO(&POP3readSet); for (i = 0;i < POP3UrlNum;i++) { if (POP3SockFd[i] != -1) FD_SET(POP3SockFd[i],&POP3readSet); }}void POP3handle(){ time_t s_t,e_t; int i; struct timeval timeOut; POP3newSockFd(); /*make the POP3 url connect*/ POP3resetSet(); /*add the socket to the readset*/ POP3aRecvNum = 0; POP3sendData(); s_t = time((time_t*)0); while (1) { POP3testSet = POP3readSet; timeOut.tv_sec = SELECT_TIME_SEC; timeOut.tv_usec = SELECT_TIME_USEC; /* time out is 1 second */ int res; res = select(FD_SETSIZE,&POP3testSet,(fd_set*)NULL,(fd_set*)NULL,&timeOut); switch(res) { case 0 :// printf("time out\n"); break; case -1 :// printf("pop3 select\n"); break;// exit(-1); default : POP3selectHandle(); s_t = time((time_t*)0); break; } e_t = time((time_t*)0); double diff_t; diff_t = difftime(e_t,s_t); if (POP3aRecvNum >= POP3aSendNum || diff_t > RECV_TIME_OUT ) /*time controll*/ break; }}void checkPOP3(){ int i ; for (i = 0;i <POP3UrlNum;i++) POP3sendPacket[i] = POP3recvPacket[i] = 0; POP3sTime = time((time_t*)0); POP3mkSendPacket(); while (running) { POP3handle(); SMTPeTime = time((time_t*)0); double diffTime; diffTime = difftime(SMTPeTime,POP3sTime); if (diffTime >= CHECK_TIME_VAL) /* check between CHECK_TIME_VAL*/ { POP3sTime = SMTPeTime; POP3analysis(); /* analays the all socket */ } sleep(1); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -