📄 data.cpp
字号:
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(¶Thread->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(¶Thread->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 + -