diff --git a/main.cpp b/main.cpp index be0c8d1..76cd912 100755 --- a/main.cpp +++ b/main.cpp @@ -1131,7 +1131,7 @@ int client_on_timer(conn_info_t &conn_info) //for client. called when a timer is send_handshake(raw_info,conn_info.my_id,0,const_id); - send_info.seq+=raw_info.last_send_len; + send_info.seq+=raw_info.send_info.data_len; } else { @@ -1165,13 +1165,13 @@ int client_on_timer(conn_info_t &conn_info) //for client. called when a timer is { if(conn_info.last_hb_sent_time==0) { - send_info.ack_seq=recv_info.seq+raw_info.last_recv_len; + send_info.ack_seq=recv_info.seq+raw_info.recv_info.data_len; send_info.ts_ack=recv_info.ts; raw_info.reserved_seq=send_info.seq; } send_info.seq=raw_info.reserved_seq; send_handshake(raw_info,conn_info.my_id,conn_info.oppsite_id,const_id); - send_info.seq+=raw_info.last_send_len; + send_info.seq+=raw_info.send_info.data_len; } else @@ -1705,7 +1705,7 @@ int server_on_raw_recv_handshake1(conn_info_t &conn_info,char * ip_port,char * d if(raw_mode==mode_faketcp) { send_info.seq=recv_info.ack_seq; - send_info.ack_seq=recv_info.seq+raw_info.last_recv_len; + send_info.ack_seq=recv_info.seq+raw_info.recv_info.data_len; send_info.ts_ack=recv_info.ts; } if(raw_mode==mode_icmp) @@ -1729,7 +1729,7 @@ int server_on_raw_recv_handshake1(conn_info_t &conn_info,char * ip_port,char * d if(raw_mode==mode_faketcp) { send_info.seq=recv_info.ack_seq; - send_info.ack_seq=recv_info.seq+raw_info.last_recv_len; + send_info.ack_seq=recv_info.seq+raw_info.recv_info.data_len; send_info.ts_ack=recv_info.ts; } @@ -3063,7 +3063,7 @@ void process_arg(int argc, char *argv[]) //process all options else if(strcmp(long_options[option_index].name,"seq-mode")==0) { sscanf(optarg,"%d",&seq_mode); - if(0<=seq_mode&&seq_mode<=2) + if(0<=seq_mode&&seq_mode<=3) { } else diff --git a/network.cpp b/network.cpp index 2413dce..ce85a39 100644 --- a/network.cpp +++ b/network.cpp @@ -981,7 +981,7 @@ int send_raw_tcp(raw_info_t &raw_info,const char * payload, int payloadlen) { } - raw_info.last_send_len=payloadlen; + raw_info.send_info.data_len=payloadlen; return 0; } /* @@ -1434,7 +1434,7 @@ int recv_raw_tcp(raw_info_t &raw_info,char * &payload,int &payloadlen) { send_info.ack_seq=recv_info.seq; }*/ - raw_info.last_recv_len=payloadlen; + raw_info.recv_info.data_len=payloadlen; return 0; } /* @@ -1636,18 +1636,18 @@ int after_send_raw0(raw_info_t &raw_info) if(raw_mode==mode_faketcp) { - if (send_info.syn == 0 && send_info.ack == 1&& raw_info.last_send_len != 0) //only modify send_info when the packet is not part of handshake + if (send_info.syn == 0 && send_info.ack == 1&& raw_info.send_info.data_len != 0) //only modify send_info when the packet is not part of handshake { if (seq_mode == 0) { } else if (seq_mode == 1) { - send_info.seq += raw_info.last_send_len; //////////////////modify + send_info.seq += raw_info.send_info.data_len; //////////////////modify } else if (seq_mode == 2) { if (random() % 5 == 3) - send_info.seq += raw_info.last_send_len; //////////////////modify + send_info.seq += raw_info.send_info.data_len; //////////////////modify } } } @@ -1669,10 +1669,17 @@ int after_recv_raw0(raw_info_t &raw_info) { if(recv_info.has_ts) send_info.ts_ack=recv_info.ts; - if (recv_info.syn == 0 && recv_info.ack == 1 && raw_info.last_recv_len != 0) //only modify send_info when the packet is not part of handshake + if (recv_info.syn == 0 && recv_info.ack == 1 && raw_info.recv_info.data_len != 0) //only modify send_info when the packet is not part of handshake { - if(larger_than_u32(recv_info.seq+raw_info.last_recv_len,send_info.ack_seq)) - send_info.ack_seq = recv_info.seq+raw_info.last_recv_len;//TODO only update if its larger + if(seq_mode==0||seq_mode==1||seq_mode==2) + { + if(larger_than_u32(recv_info.seq+raw_info.recv_info.data_len,send_info.ack_seq)) + send_info.ack_seq = recv_info.seq+raw_info.recv_info.data_len;//TODO only update if its larger + } + else if(seq_mode==3) + { + + } } } if(raw_mode==mode_icmp) diff --git a/network.h b/network.h index 85b3b32..5472571 100644 --- a/network.h +++ b/network.h @@ -64,6 +64,8 @@ struct packet_info_t //todo change this to union sockaddr_ll addr_ll; + i32_t data_len; + packet_info_t(); }; @@ -72,8 +74,8 @@ struct raw_info_t packet_info_t send_info; packet_info_t recv_info; - int last_send_len; - int last_recv_len; + //int last_send_len; + //int last_recv_len; u32_t reserved_seq; //uint32_t first_seq,first_ack_seq;