From 649b69cd8553400d703397dcf013c32d3413f259 Mon Sep 17 00:00:00 2001 From: wangyu Date: Wed, 2 Aug 2017 19:10:38 +0800 Subject: [PATCH] fixed tcp mode syn ack flag error --- main.cpp | 31 +++++++++++-------------------- network.cpp | 2 ++ 2 files changed, 13 insertions(+), 20 deletions(-) diff --git a/main.cpp b/main.cpp index 33ad64c..38d03ad 100755 --- a/main.cpp +++ b/main.cpp @@ -528,7 +528,7 @@ int TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT int server_on_raw_pre_ready(conn_info_t &conn_info,uint32_t tmp_oppsite_const_id); -int server_on_raw_ready(conn_info_t &conn_info); +int server_on_raw_recv_ready(conn_info_t &conn_info); int DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD; ////////////////=======================declear divider============================= /* @@ -701,11 +701,7 @@ int send_bare(raw_info_t &raw_info,const char* data,int len) char send_data_buf[buf_len]; //buf for send data and send hb char send_data_buf2[buf_len]; - if(len==0) //dont encrpyt zero length packet; - { - send_raw(raw_info,data,len); - return 0; - } + //static send_bare[buf_len]; iv_t iv=get_true_random_number_64(); padding_t padding=get_true_random_number_64(); @@ -727,10 +723,6 @@ int send_bare(raw_info_t &raw_info,const char* data,int len) int parse_bare(const char *input,int input_len,char* & data,int & len) //allow overlap { static char recv_data_buf[buf_len]; - if(len==0) //dont decrpyt zero length packet; - { - return 0; - } if(my_decrypt(input,recv_data_buf,input_len,key)!=0) { @@ -757,6 +749,11 @@ int recv_bare(raw_info_t &raw_info,char* & data,int & len) //printf("recv_raw_fail in recv bare\n"); return -1; } + if ((raw_mode == mode_faketcp && (recv_info.syn == 1 || recv_info.ack != 1))) + { + mylog(log_debug,"unexpect packet type recv_info.syn=%d recv_info.ack=%d \n",recv_info.syn,recv_info.ack); + return -1; + } parse_bare(data,len,data,len); return 0; } @@ -1483,14 +1480,12 @@ int server_on_raw_recv_multi() id_t tmp_oppsite_id= ntohl(* ((uint32_t *)&data[0])); mylog(log_info,"handshake received %x\n",conn_info.oppsite_id); - - - conn_info.my_id=get_true_random_number_nz(); send_handshake(raw_info,conn_info.my_id,tmp_oppsite_id,const_id); //////////////send mylog(log_info,"[%s]changed state to server_handshake1,my_id is %x\n",ip_port,conn_info.my_id); + conn_info.state.server_current_state = server_handshake1; conn_info.last_state_time = get_current_time(); return 0; @@ -1535,13 +1530,13 @@ int server_on_raw_recv_multi() } if(conn_info.state.server_current_state==server_ready) { - return server_on_raw_ready(conn_info); + return server_on_raw_recv_ready(conn_info); } return 0; } -int server_on_raw_ready(conn_info_t &conn_info) +int server_on_raw_recv_ready(conn_info_t &conn_info) { int data_len; char *data; @@ -1555,11 +1550,7 @@ int server_on_raw_ready(conn_info_t &conn_info) return -1; } - if ((raw_mode == mode_faketcp && (recv_info.syn == 1 || recv_info.ack != 1))|| data_len == 0) - { - //recv(raw_recv_fd, 0,0, 0 );// - return 0; - } + if (recv_info.src_ip != send_info.dst_ip || recv_info.src_port != send_info.dst_port) { diff --git a/network.cpp b/network.cpp index 89d92d7..a1efa3b 100644 --- a/network.cpp +++ b/network.cpp @@ -134,6 +134,8 @@ packet_info_t::packet_info_t() ack_seq = get_true_random_number(); seq = get_true_random_number(); has_ts=0; + syn=0; + ack=1; } else if (raw_mode == mode_udp) {