⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 data.cpp

📁 D-ITG2.4源代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		msg.code = MSG_FT_ERR1;
		msg.flowId = paraThread->flowId;
		if (sendPipeMsg(paraThread->rPipe, &msg) < 0) {
			printf(" sending msg error");
		}
		sleep(INFINITE);
 	} else {
			
			GET_PORT((&(paraThread->destHost)), tmpPort);
			printf("Listening on port : %d\n",ntohs(tmpPort));

			
			struct pipeMsg msg;
			msg.code = MSG_FT_OK;
			msg.flowId = paraThread->flowId;
			if (sendPipeMsg(paraThread->rPipe, &msg) < 0) {
				printf("error sending msg to signal manager");
			}
		}

	
	paraThread->socketClose = sock;
	
	SrcAddress.ai_family = paraThread->destHost.ai_family;
	
	if (SrcAddress.ai_family == PF_INET) {
		
		SrcAddress.ai_addr = (struct sockaddr *) malloc(sizeof(struct sockaddr_in));
		
		SrcAddress.ai_addrlen = sizeof(struct sockaddr_in);
	
	} else if (SrcAddress.ai_family == PF_INET6) {
		
		SrcAddress.ai_addr = (struct sockaddr *) malloc(sizeof(struct sockaddr_in6));
		
		SrcAddress.ai_addrlen = sizeof(struct sockaddr_in6);
	}

	int firstpacket = 1;
	char HelpSrcAddress[INET6_ADDRSTRLEN];
	char HelpDstAddress[INET6_ADDRSTRLEN];
	int tmpPort_SrcPort;
	int tmpPort_DstPort;

	
	TSTART(_tstart, secs, msecs, first, 0, RECEIVER);
	
	while (1){
		
		size_r =
		    recvfrom(sock, (char *) payload, MAX_PAYLOAD_SIZE, 0, SrcAddress.ai_addr,
		    (socklen_t *) & SrcAddress.ai_addrlen);
#ifdef DEBUG
		printf("UDP Pkt Receiver : Received DATAGRAM packet\n");
#endif

		if (size_r < 0)
			reportErrorAndExit("udpSock","recvfrom","Cannot receive UDP packets");


		if (hComm != INVALID_HANDLE_VALUE){
			DTR_Disable(hComm);
			DTR_Enable(hComm);
       		}

		
		GET_TIME_OF_DAY(&RcvTime, _tend, _tstart, secs, msecs, 0, RECEIVER);
		

		
		if ((logCheck!=0) || (logRemote != 0)){  
			if (firstpacket == 1) {
				getInfo(&SrcAddress, tmpPort_SrcPort, HelpSrcAddress);
				getInfo(&paraThread->destHost, tmpPort_DstPort, HelpDstAddress);
				firstpacket = 0;
			}
			writeInBuffer(&infos[paraThread->count],*(unsigned int *) payload,*(unsigned int *) ptrSeqNum,
                               HelpSrcAddress, HelpDstAddress, tmpPort_SrcPort, tmpPort_DstPort, *(long int *) ptrTimeSec, RcvTime.tv_sec % 86400L,
                               *(long int *) ptrTimeUsec, RcvTime.tv_usec, size_r);
			
			paraThread->count++;

			
			if (paraThread->count == DIM) {
				
				if (logCheck !=0 )
					flushBuffer((ofstream *) paraThread->fileLog, infos , DIM);
					
				else if (logRemote != 0) {
					if ( sendto(paraThread->logSock, (char *) infos,
						DIM * sizeof(struct info), 0, paraThread->logHost->ai_addr,
						paraThread->logHost->ai_addrlen) < 0)
						reportErrorAndExit("udpSock","sendto","Cannot send log infos to LogServer");
#ifdef DEBUG
					printf("UDP Pkt Receiver : Sent Infos to LogServer\n");
#endif
			}
			
			paraThread->count = 0;
			}	
		}	
		
		if (paraThread->meter == METER_RTTM) {
			if ( sendto(sock, (char *) payload, size_r, 0, SrcAddress.ai_addr,
					SrcAddress.ai_addrlen) < 0)
						reportErrorAndExit("udpSock","sendto",
							"Cannot send back payload for rttm");
#ifdef DEBUG
			printf("UDP Pkt Receiver : Sent RTTM message\n");
#endif
			 }	
		}	
}	







void *tcpSock(void *param)
{
#ifdef WIN32
	
	int first = 1;
#endif
    
    HANDLE hComm;

	
	paramThread *paraThread;
	
	paraThread = (paramThread *) param;


	
	int sock = 0;

	
	unsigned char payload[MAX_PAYLOAD_SIZE];
	
	struct info *infos = (struct info *) malloc(DIM * sizeof(info));
	
	struct addrinfo SrcAddress;
	
	in_port_t tmpPort = 0;
	
	int newSock = 0;
    
	int size = 0;
	
	unsigned char *ptrSeqNum = payload + sizeof(unsigned int);
	
	unsigned char *ptrTimeSec = ptrSeqNum + sizeof(unsigned int);
	
	unsigned char *ptrTimeUsec = ptrTimeSec + sizeof(long int);
	
	struct timeval RcvTime;
#ifdef WIN32
    

    
	LARGE_INTEGER _tstart, _tend;
	

	
	unsigned long secs = 0, msecs = 0;
#endif
#ifdef DEBUG
	
	int numRecvdPkt = 0;
#endif

	
	paraThread->addressInfos = infos;
	
	paraThread->count = 0;

	if (strcmp(paraThread->serial,"noSerial")!=0) {
		hComm = serialUp(paraThread->serial);
        if (hComm == INVALID_HANDLE_VALUE)
             printf("Error opening interface %s \n", paraThread->serial);
    }
    
	
	sock = socket(paraThread->destHost.ai_family, SOCK_STREAM, 0);
	if (sock < 0)
		reportErrorAndExit("tcpSock","socket","Cannot create a STREAM socket on port");
	
	if (bind(sock, paraThread->destHost.ai_addr, paraThread->destHost.ai_addrlen) < 0) {
		
		struct pipeMsg msg;

		msg.code = MSG_FT_ERR1;
		msg.flowId = paraThread->flowId;
		if (sendPipeMsg(paraThread->rPipe, &msg) < 0) {
			printf(" sending msg error");
		}
		sleep(INFINITE);
	}

	
	if (listen(sock, SOMAXCONN) < 0)
			reportErrorAndExit("tcpSock","listen","Cannot listen on a port");
	else {
		
		GET_PORT((&(paraThread->destHost)), tmpPort);
		printf("Listening on port : %d\n",ntohs(tmpPort));

		
		struct pipeMsg msg;
		msg.code = MSG_FT_OK;
		msg.flowId = paraThread->flowId;
		if (sendPipeMsg(paraThread->rPipe, &msg) < 0) {
			printf("error into sending msg to signal manager");
		}
	}

	
	SrcAddress.ai_family = paraThread->destHost.ai_family;
	
	if (SrcAddress.ai_family == PF_INET) {
		
		SrcAddress.ai_addr = (struct sockaddr *) malloc(sizeof(struct sockaddr_in));
		
		SrcAddress.ai_addrlen = sizeof(struct sockaddr_in);
	
	} else if (SrcAddress.ai_family == PF_INET6) {
		
		SrcAddress.ai_addr = (struct sockaddr *) malloc(sizeof(struct sockaddr_in6));
		
		SrcAddress.ai_addrlen = sizeof(struct sockaddr_in6);
	}

	

	if ((newSock =
		accept(sock, SrcAddress.ai_addr, (socklen_t *) & SrcAddress.ai_addrlen)) < 0)
			reportErrorAndExit("tcpSock","accept","Cannot accept connection");
	
	if ( closeSock(sock) == -1)
		reportErrorAndExit("tcpSock","closeSock","Cannot close socket sock");

	
	paraThread->socketClose = newSock;


    int firstpacket =1;
	char HelpSrcAddress[INET6_ADDRSTRLEN];
	char HelpDstAddress[INET6_ADDRSTRLEN];
    int tmpPort_SrcPort;
    int tmpPort_DstPort;

	
	TSTART(_tstart, secs, msecs, first, 0, RECEIVER);
	
	while (1) {
	  
       size=TCPrecvPacket((unsigned char*)payload,newSock);

       if (hComm != INVALID_HANDLE_VALUE){
              DTR_Disable(hComm);
              DTR_Enable(hComm);
       }

       
       GET_TIME_OF_DAY(&RcvTime, _tend, _tstart, secs, msecs, 0, RECEIVER);

		
		
		if ((logCheck!=0) || (logRemote != 0)){  
		

	         if (firstpacket == 1) {
				getInfo(&SrcAddress, tmpPort_SrcPort, HelpSrcAddress);

				getInfo(&paraThread->destHost, tmpPort_DstPort, HelpDstAddress);

				firstpacket = 0;
		}
			
		if (paraThread->l7Proto == L7_PROTO_TELNET)
					size = size - 20; 

                  writeInBuffer(&infos[paraThread->count],*(unsigned int *) payload,*(unsigned int *) ptrSeqNum,
                               HelpSrcAddress, HelpDstAddress, tmpPort_SrcPort, tmpPort_DstPort,
                               *(long int *)ptrTimeSec, RcvTime.tv_sec % 86400L,*(long int *) ptrTimeUsec, RcvTime.tv_usec, size);
                
                paraThread->count++;
                
                if (paraThread->count == DIM) {
                                                
						if (logCheck !=0 )
				                               flushBuffer((ofstream *) paraThread->fileLog, infos , DIM);
				                                
                                                else
						if (logRemote !=0 )
						{
                                                 if ( sendto(paraThread->logSock, (char *) infos,
                                                            DIM * sizeof(struct info), 0, paraThread->logHost->ai_addr,
                                          				    paraThread->logHost->ai_addrlen) < 0)
                                          				    reportErrorAndExit("tcpSock","sendto","Cannot send log infos to LogServer");
#ifdef DEBUG
						                         printf("TCP Pkt Receiver : Sent infos to LogServer\n");
#endif
                                                }
                                                
                                                paraThread->count = 0;
			}	
		}	
		
		if (paraThread->meter == METER_RTTM) {
			if (sendto(newSock, (char *) payload, size, 0, SrcAddress.ai_addr,
			    SrcAddress.ai_addrlen) < 0)
					reportErrorAndExit("tcpSock","sendto","Cannot send payload back for rttm");
#ifdef DEBUG
			printf("TCP Pkt Receiver : Sent RTTM infos\n");
#endif
			}	
	}	
}	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -