Bläddra i källkod

conn_info_t::recover() ,reuse last_hb_sent_time

wangyu 8 år sedan
förälder
incheckning
1fba601d9c
2 ändrade filer med 32 tillägg och 22 borttagningar
  1. 1 1
      common.h
  2. 31 21
      main.cpp

+ 1 - 1
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;
 

+ 31 - 21
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
 				{