From 1fba601d9cf2802f8050902be09d8b70c1480768 Mon Sep 17 00:00:00 2001 From: wangyu Date: Fri, 4 Aug 2017 05:27:47 +0800 Subject: [PATCH] conn_info_t::recover() ,reuse last_hb_sent_time --- common.h | 2 +- main.cpp | 52 +++++++++++++++++++++++++++++++--------------------- 2 files changed, 32 insertions(+), 22 deletions(-) diff --git a/common.h b/common.h index b9d17ce..d482880 100644 --- a/common.h +++ b/common.h @@ -77,7 +77,7 @@ const uint32_t heartbeat_interval=1000; const uint32_t timer_interval=400;//this should be smaller than heartbeat_interval and retry interval; //const uint32_t conv_timeout=120000; //120 second -const uint32_t conv_timeout=20000; //for test +const uint32_t conv_timeout=30000; //for test const uint32_t client_conn_timeout=10000; diff --git a/main.cpp b/main.cpp index 5cfd36c..c8e8e7e 100755 --- a/main.cpp +++ b/main.cpp @@ -280,7 +280,7 @@ struct conn_info_t long long last_state_time; long long last_hb_sent_time; //client re-use this for retry long long last_hb_recv_time; - long long last_resent_time; + //long long last_resent_time; id_t my_id; id_t oppsite_id; @@ -293,7 +293,18 @@ struct conn_info_t /* const uint32_t &ip=raw_info.recv_info.src_ip; const uint16_t &port=raw_info.recv_info.src_port; + */ + void recover(const conn_info_t &conn_info) + { + raw_info=conn_info.raw_info; + last_state_time=conn_info.last_state_time; + last_hb_recv_time=conn_info.last_hb_recv_time; + last_hb_sent_time=conn_info.last_hb_sent_time; + my_id=conn_info.my_id; + oppsite_id=conn_info.oppsite_id; + blob->anti_replay.re_init(); + } conn_info_t() { //send_packet_info.protocol=g_packet_info_send.protocol; @@ -1089,7 +1100,7 @@ int client_on_timer(conn_info_t &conn_info) //for client } conn_info.last_state_time=get_current_time(); - conn_info.last_resent_time=0; + conn_info.last_hb_sent_time=0; //dont return; } if(conn_info.state.client_current_state==client_tcp_handshake) //send and resend syn @@ -1102,12 +1113,12 @@ int client_on_timer(conn_info_t &conn_info) //for client return 0; } - else if (get_current_time() - conn_info.last_resent_time > client_retry_interval) + else if (get_current_time() - conn_info.last_hb_sent_time > client_retry_interval) { if (raw_mode == mode_faketcp) { - if (conn_info.last_resent_time == 0) + if (conn_info.last_hb_sent_time == 0) { send_info.psh = 0; send_info.syn = 1; @@ -1120,7 +1131,7 @@ int client_on_timer(conn_info_t &conn_info) //for client send_raw0(raw_info, 0, 0); - conn_info.last_resent_time = get_current_time(); + conn_info.last_hb_sent_time = get_current_time(); mylog(log_info, "(re)sent tcp syn\n"); return 0; } @@ -1139,12 +1150,12 @@ int client_on_timer(conn_info_t &conn_info) //for client return 0; } - else if(get_current_time()-conn_info.last_resent_time>client_retry_interval) + else if(get_current_time()-conn_info.last_hb_sent_time>client_retry_interval) { if(raw_mode==mode_faketcp) { - if(conn_info.last_resent_time==0) + if(conn_info.last_hb_sent_time==0) { send_info.seq++; send_info.ack_seq=recv_info.seq+1; @@ -1169,7 +1180,7 @@ int client_on_timer(conn_info_t &conn_info) //for client send_info.icmp_seq++; } - conn_info.last_resent_time=get_current_time(); + conn_info.last_hb_sent_time=get_current_time(); mylog(log_info,"(re)sent handshake1\n"); return 0; } @@ -1187,11 +1198,11 @@ int client_on_timer(conn_info_t &conn_info) //for client mylog(log_info,"state back to client_idle from client_handshake2\n"); return 0; } - else if(get_current_time()-conn_info.last_resent_time>client_retry_interval) + else if(get_current_time()-conn_info.last_hb_sent_time>client_retry_interval) { if(raw_mode==mode_faketcp) { - if(conn_info.last_resent_time==0) + if(conn_info.last_hb_sent_time==0) { send_info.ack_seq=recv_info.seq+raw_info.last_recv_len; send_info.ts_ack=recv_info.ts; @@ -1209,7 +1220,7 @@ int client_on_timer(conn_info_t &conn_info) //for client if(raw_mode==mode_icmp) send_info.icmp_seq++; } - conn_info.last_resent_time=get_current_time(); + conn_info.last_hb_sent_time=get_current_time(); mylog(log_info,"(re)sent handshake2\n"); return 0; @@ -1331,7 +1342,7 @@ int client_on_raw_recv(conn_info_t &conn_info) conn_info.state.client_current_state = client_handshake1; mylog(log_info,"state changed from client_tcp_handshake to client_handshake1\n"); conn_info.last_state_time = get_current_time(); - conn_info.last_resent_time=0; + conn_info.last_hb_sent_time=0; client_on_timer(conn_info); return 0; } @@ -1389,7 +1400,7 @@ int client_on_raw_recv(conn_info_t &conn_info) //send_handshake(raw_info,conn_info.my_id,conn_info.oppsite_id,const_id); //////////////send conn_info.state.client_current_state = client_handshake2; conn_info.last_state_time = get_current_time(); - conn_info.last_resent_time=0; + conn_info.last_hb_sent_time=0; client_on_timer(conn_info); return 0; @@ -1410,6 +1421,9 @@ int client_on_raw_recv(conn_info_t &conn_info) { mylog(log_info,"changed state from to client_handshake2 to client_ready\n"); conn_info.state.client_current_state=client_ready; + conn_info.last_hb_sent_time=0; + conn_info.last_hb_recv_time=get_current_time(); + client_on_timer(conn_info); } if(data_len==1&&data[0]=='h') { @@ -1879,14 +1893,10 @@ int server_on_raw_recv_pre_ready(conn_info_t &conn_info,uint32_t tmp_oppsite_con //ori_conn_info.state.server_current_state=server_ready; - ori_conn_info.raw_info=conn_info.raw_info; - ori_conn_info.last_state_time=conn_info.last_state_time; - ori_conn_info.last_hb_recv_time=conn_info.last_hb_recv_time; - ori_conn_info.last_hb_sent_time=conn_info.last_hb_sent_time; - ori_conn_info.my_id=conn_info.my_id; - ori_conn_info.oppsite_id=conn_info.oppsite_id; + ori_conn_info.recover(conn_info); + send_safer(ori_conn_info, (char *) "h", 1); - ori_conn_info.blob->anti_replay.re_init(); + //ori_conn_info.blob->anti_replay.re_init(); @@ -2117,7 +2127,7 @@ int client_event_loop() } conv=conn_info.blob->conv_manager.get_new_conv(); conn_info.blob->conv_manager.insert_conv(conv,u64); - mylog(log_info,"new connection from %s:%d,conv_id=%x\n",inet_ntoa(udp_new_addr_in.sin_addr),ntohs(udp_new_addr_in.sin_port),conv); + mylog(log_info,"new packet from %s:%d,conv_id=%x\n",inet_ntoa(udp_new_addr_in.sin_addr),ntohs(udp_new_addr_in.sin_port),conv); } else {