mirror of
				https://github.com/wangyu-/UDPspeeder.git
				synced 2025-11-04 03:45:37 +08:00 
			
		
		
		
	added command line options,fixed segment fault
This commit is contained in:
		@@ -236,7 +236,7 @@ int fec_encode_manager_t::input(char *s,int len/*,int &is_first_packet*/)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    if(about_to_fec)
 | 
					    if(about_to_fec)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
    	char ** blob_output;
 | 
					    	char ** blob_output=0;
 | 
				
			||||||
    	int fec_len=-1;
 | 
					    	int fec_len=-1;
 | 
				
			||||||
    	mylog(log_trace,"counter=%d\n",counter);
 | 
					    	mylog(log_trace,"counter=%d\n",counter);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -270,7 +270,7 @@ int fec_encode_manager_t::input(char *s,int len/*,int &is_first_packet*/)
 | 
				
			|||||||
    			}
 | 
					    			}
 | 
				
			||||||
    			actual_data_num=best_data_num;
 | 
					    			actual_data_num=best_data_num;
 | 
				
			||||||
    			actual_redundant_num=fec_redundant_num;
 | 
					    			actual_redundant_num=fec_redundant_num;
 | 
				
			||||||
    			mylog(log_info,"actual_data_num=%d actual_redundant_num=%d\n",best_data_num,fec_redundant_num);
 | 
					    			mylog(log_trace,"actual_data_num=%d actual_redundant_num=%d\n",best_data_num,fec_redundant_num);
 | 
				
			||||||
    		}
 | 
					    		}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        	assert(blob_encode.output(actual_data_num,blob_output,fec_len)==0);
 | 
					        	assert(blob_encode.output(actual_data_num,blob_output,fec_len)==0);
 | 
				
			||||||
@@ -488,6 +488,7 @@ int fec_decode_manager_t::input(char *s,int len)
 | 
				
			|||||||
	len=len-tmp_idx;
 | 
						len=len-tmp_idx;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	mylog(log_trace,"input\n");
 | 
						mylog(log_trace,"input\n");
 | 
				
			||||||
 | 
						assert(len+100<buf_len);
 | 
				
			||||||
	if(len<0)
 | 
						if(len<0)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		mylog(log_warn,"len<0\n");
 | 
							mylog(log_warn,"len<0\n");
 | 
				
			||||||
@@ -591,6 +592,8 @@ int fec_decode_manager_t::input(char *s,int len)
 | 
				
			|||||||
	fec_data[index].redundant_num=redundant_num;
 | 
						fec_data[index].redundant_num=redundant_num;
 | 
				
			||||||
	fec_data[index].idx=inner_index;
 | 
						fec_data[index].idx=inner_index;
 | 
				
			||||||
	fec_data[index].len=len;
 | 
						fec_data[index].len=len;
 | 
				
			||||||
 | 
						assert(0<=index&&index<(int)fec_buff_num);
 | 
				
			||||||
 | 
						assert(len+100<buf_len);
 | 
				
			||||||
	memcpy(fec_data[index].buf,s+tmp_idx,len);
 | 
						memcpy(fec_data[index].buf,s+tmp_idx,len);
 | 
				
			||||||
	mp[seq].group_mp[inner_index]=index;
 | 
						mp[seq].group_mp[inner_index]=index;
 | 
				
			||||||
	//index++ at end of function
 | 
						//index++ at end of function
 | 
				
			||||||
@@ -774,7 +777,7 @@ int fec_decode_manager_t::input(char *s,int len)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	end:
 | 
						end:
 | 
				
			||||||
	index++;
 | 
						index++;
 | 
				
			||||||
	if(index==int(anti_replay_buff_size)) index=0;
 | 
						if(index==int(fec_buff_num)) index=0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -152,7 +152,7 @@ struct fec_group_t
 | 
				
			|||||||
class fec_decode_manager_t
 | 
					class fec_decode_manager_t
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	anti_replay_t anti_replay;
 | 
						anti_replay_t anti_replay;
 | 
				
			||||||
	fec_data_t fec_data[fec_buff_num];
 | 
						fec_data_t fec_data[fec_buff_num+10];
 | 
				
			||||||
	int index;
 | 
						int index;
 | 
				
			||||||
	unordered_map<u32_t, fec_group_t> mp;
 | 
						unordered_map<u32_t, fec_group_t> mp;
 | 
				
			||||||
	blob_decode_t blob_decode;
 | 
						blob_decode_t blob_decode;
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										77
									
								
								main.cpp
									
									
									
									
									
								
							
							
						
						
									
										77
									
								
								main.cpp
									
									
									
									
									
								
							@@ -32,10 +32,10 @@ int disable_fec=0;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
int debug_force_flush_fec=0;
 | 
					int debug_force_flush_fec=0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int fec_data_num=160;
 | 
					int fec_data_num=20;
 | 
				
			||||||
int fec_redundant_num=80;
 | 
					int fec_redundant_num=10;
 | 
				
			||||||
int fec_mtu=1250;
 | 
					int fec_mtu=1250;
 | 
				
			||||||
int fec_pending_num=50;
 | 
					int fec_pending_num=200;
 | 
				
			||||||
int fec_pending_time=10000; //10ms
 | 
					int fec_pending_time=10000; //10ms
 | 
				
			||||||
int fec_type=0;
 | 
					int fec_type=0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1193,15 +1193,12 @@ void process_arg(int argc, char *argv[])
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	int no_l = 1, no_r = 1;
 | 
						int no_l = 1, no_r = 1;
 | 
				
			||||||
	while ((opt = getopt_long(argc, argv, "l:r:d:t:hcspk:j:m:",long_options,&option_index)) != -1)
 | 
						while ((opt = getopt_long(argc, argv, "l:r:d:t:hcsk:j:m:f:p:n:",long_options,&option_index)) != -1)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		//string opt_key;
 | 
							//string opt_key;
 | 
				
			||||||
		//opt_key+=opt;
 | 
							//opt_key+=opt;
 | 
				
			||||||
		switch (opt)
 | 
							switch (opt)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
		case 'p':
 | 
					 | 
				
			||||||
			//multi_process_mode=1;
 | 
					 | 
				
			||||||
			break;
 | 
					 | 
				
			||||||
		case 'k':
 | 
							case 'k':
 | 
				
			||||||
			sscanf(optarg,"%s\n",key_string);
 | 
								sscanf(optarg,"%s\n",key_string);
 | 
				
			||||||
			mylog(log_debug,"key=%s\n",key_string);
 | 
								mylog(log_debug,"key=%s\n",key_string);
 | 
				
			||||||
@@ -1211,7 +1208,7 @@ void process_arg(int argc, char *argv[])
 | 
				
			|||||||
				myexit(-1);
 | 
									myexit(-1);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
		case 'm':
 | 
							case 'm':
 | 
				
			||||||
			sscanf(optarg,"%d\n",&max_pending_packet);
 | 
								sscanf(optarg,"%d\n",&max_pending_packet);
 | 
				
			||||||
			if(max_pending_packet<1000)
 | 
								if(max_pending_packet<1000)
 | 
				
			||||||
@@ -1220,7 +1217,7 @@ void process_arg(int argc, char *argv[])
 | 
				
			|||||||
				myexit(-1);
 | 
									myexit(-1);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
		case 'j':
 | 
							case 'j':
 | 
				
			||||||
			if (strchr(optarg, ':') == 0)
 | 
								if (strchr(optarg, ':') == 0)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
@@ -1244,31 +1241,59 @@ void process_arg(int argc, char *argv[])
 | 
				
			|||||||
				}
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
		case 't':
 | 
							case 'f':
 | 
				
			||||||
 | 
					 | 
				
			||||||
			sscanf(optarg,"%d",&fec_type);
 | 
					 | 
				
			||||||
			/*
 | 
					 | 
				
			||||||
			if (strchr(optarg, ':') == 0)
 | 
								if (strchr(optarg, ':') == 0)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				int dup_delay=-1;
 | 
									mylog(log_fatal,"invalid format for f");
 | 
				
			||||||
				sscanf(optarg,"%d\n",&dup_delay);
 | 
									myexit(-1);
 | 
				
			||||||
				if(dup_delay<1||dup_delay>1000*100)
 | 
					 | 
				
			||||||
				{
 | 
					 | 
				
			||||||
					mylog(log_fatal,"dup_delay must be between 1 and 100,000(10 second)\n");
 | 
					 | 
				
			||||||
					myexit(-1);
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
				dup_delay_min=dup_delay_max=dup_delay;
 | 
					 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			else
 | 
								else
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				sscanf(optarg,"%d:%d\n",&dup_delay_min,&dup_delay_max);
 | 
									sscanf(optarg,"%d:%d\n",&fec_data_num,&fec_redundant_num);
 | 
				
			||||||
				if(dup_delay_min<1 ||dup_delay_max<1||dup_delay_min>dup_delay_max)
 | 
									if(fec_data_num<1 ||fec_redundant_num<0||fec_data_num+fec_redundant_num>255)
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					mylog(log_fatal," must satisfy  1<=dmin<=dmax\n");
 | 
										mylog(log_fatal,"fec_data_num<1 ||fec_redundant_num<0||fec_data_num+fec_redundant_num>255\n");
 | 
				
			||||||
					myexit(-1);
 | 
										myexit(-1);
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			}*/
 | 
								}
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
 | 
							case 't':
 | 
				
			||||||
 | 
								sscanf(optarg,"%d",&fec_type);
 | 
				
			||||||
 | 
								if(fec_type!=0&&fec_type!=1)
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									mylog(log_fatal,"mode should be 0 or 1\n");
 | 
				
			||||||
 | 
									myexit(-1);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
 | 
							case 'm':
 | 
				
			||||||
 | 
								sscanf(optarg,"%d",&fec_mtu);
 | 
				
			||||||
 | 
								if(fec_mtu<500||fec_mtu>1600)
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									mylog(log_fatal,"fec_mtu should be between 500 and 1600\n");
 | 
				
			||||||
 | 
									myexit(-1);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
 | 
							case 'p':
 | 
				
			||||||
 | 
								sscanf(optarg,"%d",&fec_pending_time);
 | 
				
			||||||
 | 
								if(fec_pending_time<0||fec_pending_time>10000)
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
										mylog(log_fatal,"fec_pending_time should be between 0 and 10000\n");
 | 
				
			||||||
 | 
										myexit(-1);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								fec_pending_time*=100;
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							case 'n':
 | 
				
			||||||
 | 
								sscanf(optarg,"%d",&fec_pending_num);
 | 
				
			||||||
 | 
								if(fec_pending_num<1||fec_pending_num>1000)
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
										mylog(log_fatal,"fec_pending_num should be between 1 and 1000\n");
 | 
				
			||||||
 | 
										myexit(-1);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
 | 
								/*
 | 
				
			||||||
		case 'd':
 | 
							case 'd':
 | 
				
			||||||
			dup_num=-1;
 | 
								dup_num=-1;
 | 
				
			||||||
			sscanf(optarg,"%d\n",&dup_num);
 | 
								sscanf(optarg,"%d\n",&dup_num);
 | 
				
			||||||
@@ -1278,7 +1303,7 @@ void process_arg(int argc, char *argv[])
 | 
				
			|||||||
				myexit(-1);
 | 
									myexit(-1);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			dup_num+=1;
 | 
								dup_num+=1;
 | 
				
			||||||
			break;
 | 
								break;*/
 | 
				
			||||||
		case 'c':
 | 
							case 'c':
 | 
				
			||||||
			is_client = 1;
 | 
								is_client = 1;
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										8
									
								
								makefile
									
									
									
									
									
								
							
							
						
						
									
										8
									
								
								makefile
									
									
									
									
									
								
							@@ -28,16 +28,24 @@ debug2: git_version
 | 
				
			|||||||
mips24kc_be: git_version
 | 
					mips24kc_be: git_version
 | 
				
			||||||
	${cc_mips24kc_be}  -o ${NAME}_$@   -I. ${SOURCES} ${FLAGS} -lrt -lgcc_eh -static -O3
 | 
						${cc_mips24kc_be}  -o ${NAME}_$@   -I. ${SOURCES} ${FLAGS} -lrt -lgcc_eh -static -O3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					mips24kc_be_debug: git_version
 | 
				
			||||||
 | 
						${cc_mips24kc_be}  -o ${NAME}_$@   -I. ${SOURCES} ${FLAGS} -lrt -lgcc_eh -static -ggdb
 | 
				
			||||||
 | 
					
 | 
				
			||||||
mips24kc_le: git_version
 | 
					mips24kc_le: git_version
 | 
				
			||||||
	${cc_mips24kc_le}  -o ${NAME}_$@   -I. ${SOURCES} ${FLAGS} -lrt -lgcc_eh -static -O3
 | 
						${cc_mips24kc_le}  -o ${NAME}_$@   -I. ${SOURCES} ${FLAGS} -lrt -lgcc_eh -static -O3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
amd64:git_version
 | 
					amd64:git_version
 | 
				
			||||||
	${cc_local}   -o ${NAME}_$@    -I. ${SOURCES} ${FLAGS} -lrt -static -O3
 | 
						${cc_local}   -o ${NAME}_$@    -I. ${SOURCES} ${FLAGS} -lrt -static -O3
 | 
				
			||||||
 | 
					amd64_debug:git_version
 | 
				
			||||||
 | 
						${cc_local}   -o ${NAME}_$@    -I. ${SOURCES} ${FLAGS} -lrt -static -ggdb
 | 
				
			||||||
x86:git_version
 | 
					x86:git_version
 | 
				
			||||||
	${cc_local}   -o ${NAME}_$@      -I. ${SOURCES} ${FLAGS} -lrt -static -O3 -m32
 | 
						${cc_local}   -o ${NAME}_$@      -I. ${SOURCES} ${FLAGS} -lrt -static -O3 -m32
 | 
				
			||||||
arm:git_version
 | 
					arm:git_version
 | 
				
			||||||
	${cc_arm}   -o ${NAME}_$@      -I. ${SOURCES} ${FLAGS} -lrt -static -O3
 | 
						${cc_arm}   -o ${NAME}_$@      -I. ${SOURCES} ${FLAGS} -lrt -static -O3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					arm_debug:git_version
 | 
				
			||||||
 | 
						${cc_arm}   -o ${NAME}_$@      -I. ${SOURCES} ${FLAGS} -lrt -static -ggdb
 | 
				
			||||||
 | 
					
 | 
				
			||||||
cross:git_version
 | 
					cross:git_version
 | 
				
			||||||
	${cc_cross}   -o ${NAME}_cross    -I. ${SOURCES} ${FLAGS} -lrt -O3
 | 
						${cc_cross}   -o ${NAME}_cross    -I. ${SOURCES} ${FLAGS} -lrt -O3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -25,7 +25,7 @@ int disable_xor=0;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
int random_drop=0;
 | 
					int random_drop=0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
char key_string[1000]= "secret key";
 | 
					char key_string[1000]= "";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int local_listen_fd=-1;
 | 
					int local_listen_fd=-1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -43,7 +43,6 @@ void encrypt_0(char * input,int &len,char *key)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void decrypt_0(char * input,int &len,char *key)
 | 
					void decrypt_0(char * input,int &len,char *key)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					 | 
				
			||||||
	int i,j;
 | 
						int i,j;
 | 
				
			||||||
	if(key[0]==0) return;
 | 
						if(key[0]==0) return;
 | 
				
			||||||
	for(i=0,j=0;i<len;i++,j++)
 | 
						for(i=0,j=0;i<len;i++,j++)
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user