it works well,though the upd close bug is still there

This commit is contained in:
wangyu 2017-07-13 18:57:47 +08:00 committed by wangyu
parent fa00adcf37
commit a25b9db3e8

@ -822,7 +822,7 @@ int server_raw_recv(iphdr * iph,tcphdr *tcph,char * data,int data_len)
ev.events = EPOLLIN;
ev.data.fd = udp_fd;
int ret = epoll_ctl(epollfd, EPOLL_CTL_DEL, udp_fd, &ev);
close(udp_fd);
//close(udp_fd);
udp_fd=-1;
}
received_session_id=session_id;
@ -916,7 +916,7 @@ int server_raw_recv(iphdr * iph,tcphdr *tcph,char * data,int data_len)
ev.events = EPOLLIN;
ev.data.fd = old_fd;
ret = epoll_ctl(epollfd, EPOLL_CTL_DEL, old_fd, &ev);
close(old_fd);
//close(old_fd);
}
}
@ -926,14 +926,14 @@ int server_raw_recv(iphdr * iph,tcphdr *tcph,char * data,int data_len)
received_session_id=tmp_received_session_id;
printf("created new udp_fd");
}
printf("received a data from fake tcp,len:%d\n",data_len);
int ret=send(udp_fd,data+1+sizeof(session_id)*2,data_len -(1+sizeof(session_id)*2),0);
printf("%d byte sent\n",ret);
}
}
}
char raw_recv_buf[buf_len];
char raw_recv_buf2[buf_len];
int on_raw_recv()
{
@ -981,6 +981,47 @@ int on_raw_recv()
}
/////ip
uint32_t ip_chk=csum ((unsigned short *) ip_data, iphdrlen);
int psize = sizeof(struct pseudo_header) + ip_len-iphdrlen;
/////ip end
///tcp
struct pseudo_header psh;
psh.source_address = iph->saddr;
psh.dest_address = iph->daddr;
psh.placeholder = 0;
psh.protocol = IPPROTO_TCP;
psh.tcp_length = htons(ip_len-iphdrlen);
memcpy(raw_recv_buf2 , (char*) &psh , sizeof (struct pseudo_header));
memcpy(raw_recv_buf2 + sizeof(struct pseudo_header) , ip_data+ iphdrlen , ip_len-iphdrlen);
uint16_t tcp_chk = csum( (unsigned short*) raw_recv_buf2, psize);
if(ip_chk!=0)
{
printf("ip header error %d\n",ip_chk);
return 0;
}
if(tcp_chk!=0)
{
printf("tcp_chk:%x\n",tcp_chk);
printf("tcp header error\n");
return 0;
}
////tcp end
// char pseudo_tcp_buffer[MTU];
int data_len = ip_len-tcphdrlen-iphdrlen;
@ -1237,7 +1278,6 @@ int server()
{
if (events[n].data.fd == udp_fd)
{
int recv_len=recv(udp_fd,buf,buf_len,0);
printf("received a packet from udp_fd,len:%d\n",recv_len);
perror("wtf?");