mirror of
https://github.com/wangyu-/UDPspeeder.git
synced 2025-11-26 22:55:37 +08:00
implemented commands
This commit is contained in:
@@ -14,9 +14,9 @@
|
||||
int g_fec_data_num=20;
|
||||
int g_fec_redundant_num=10;
|
||||
int g_fec_mtu=1250;
|
||||
int g_fec_pending_num=200;
|
||||
int g_fec_pending_time=8*1000; //8ms
|
||||
int g_fec_type=1;
|
||||
int g_fec_queue_len=200;
|
||||
int g_fec_timeout=8*1000; //8ms
|
||||
int g_fec_mode=1;
|
||||
|
||||
int dynamic_update_fec=1;
|
||||
|
||||
@@ -127,6 +127,15 @@ int blob_decode_t::output(int &n,char ** &s_arr,int *&len_arr)
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
fec_encode_manager_t::~fec_encode_manager_t()
|
||||
{
|
||||
fd_manager.fd64_close(timer_fd64);
|
||||
}
|
||||
u64_t fec_encode_manager_t::get_timer_fd64()
|
||||
{
|
||||
return timer_fd64;
|
||||
}
|
||||
fec_encode_manager_t::fec_encode_manager_t()
|
||||
{
|
||||
//int timer_fd;
|
||||
@@ -137,26 +146,18 @@ fec_encode_manager_t::fec_encode_manager_t()
|
||||
}
|
||||
timer_fd64=fd_manager.create(timer_fd);
|
||||
|
||||
re_init(fec_data_num,fec_redundant_num,fec_mtu,fec_pending_num,fec_pending_time,fec_type);
|
||||
re_init(fec_data_num,fec_redundant_num,fec_mtu,fec_queue_len,fec_timeout,fec_mode);
|
||||
|
||||
seq=(u32_t)get_true_random_number(); //TODO temp solution for a bug.
|
||||
}
|
||||
fec_encode_manager_t::~fec_encode_manager_t()
|
||||
{
|
||||
fd_manager.fd64_close(timer_fd64);
|
||||
}
|
||||
u64_t fec_encode_manager_t::get_timer_fd64()
|
||||
{
|
||||
return timer_fd64;
|
||||
}
|
||||
int fec_encode_manager_t::re_init(int data_num,int redundant_num,int mtu,int pending_num,int pending_time,int type)
|
||||
int fec_encode_manager_t::re_init(int data_num,int redundant_num,int mtu,int queue_len,int timeout,int mode)
|
||||
{
|
||||
fec_data_num=data_num;
|
||||
fec_redundant_num=redundant_num;
|
||||
fec_mtu=mtu;
|
||||
fec_pending_num=pending_num;
|
||||
fec_pending_time=pending_time;
|
||||
fec_type=type;
|
||||
fec_queue_len=queue_len;
|
||||
fec_timeout=timeout;
|
||||
fec_mode=mode;
|
||||
|
||||
assert(data_num+redundant_num<max_fec_packet_num);
|
||||
counter=0;
|
||||
@@ -178,16 +179,16 @@ int fec_encode_manager_t::append(char *s,int len/*,int &is_first_packet*/)
|
||||
itimerspec its;
|
||||
memset(&its.it_interval,0,sizeof(its.it_interval));
|
||||
first_packet_time=get_current_time_us();
|
||||
my_time_t tmp_time=fec_pending_time+first_packet_time;
|
||||
my_time_t tmp_time=fec_timeout+first_packet_time;
|
||||
its.it_value.tv_sec=tmp_time/1000000llu;
|
||||
its.it_value.tv_nsec=(tmp_time%1000000llu)*1000llu;
|
||||
timerfd_settime(timer_fd,TFD_TIMER_ABSTIME,&its,0);
|
||||
}
|
||||
if(fec_type==0)//for type 0 use blob
|
||||
if(fec_mode==0)//for type 0 use blob
|
||||
{
|
||||
assert(blob_encode.input(s,len)==0);
|
||||
}
|
||||
else if(fec_type==1)//for tpe 1 use input_buf and counter
|
||||
else if(fec_mode==1)//for tpe 1 use input_buf and counter
|
||||
{
|
||||
mylog(log_trace,"counter=%d\n",counter);
|
||||
assert(len<=65535&&len>=0);
|
||||
@@ -214,22 +215,22 @@ int fec_encode_manager_t::input(char *s,int len/*,int &is_first_packet*/)
|
||||
fec_data_num=g_fec_data_num;
|
||||
fec_redundant_num=g_fec_redundant_num;
|
||||
fec_mtu=g_fec_mtu;
|
||||
fec_pending_num=g_fec_pending_num;
|
||||
fec_pending_time=g_fec_pending_time;
|
||||
fec_type=g_fec_type;
|
||||
fec_queue_len=g_fec_queue_len;
|
||||
fec_timeout=g_fec_timeout;
|
||||
fec_mode=g_fec_mode;
|
||||
}
|
||||
|
||||
int about_to_fec=0;
|
||||
int delayed_append=0;
|
||||
//int counter_back=counter;
|
||||
assert(fec_type==0||fec_type==1);
|
||||
assert(fec_mode==0||fec_mode==1);
|
||||
|
||||
if(fec_type==0&& s!=0 &&counter==0&&blob_encode.get_shard_len(fec_data_num,len)>=fec_mtu)
|
||||
if(fec_mode==0&& s!=0 &&counter==0&&blob_encode.get_shard_len(fec_data_num,len)>=fec_mtu)
|
||||
{
|
||||
mylog(log_warn,"message too long len=%d,ignored\n",len);
|
||||
return -1;
|
||||
}
|
||||
if(fec_type==1&&s!=0&&len>=fec_mtu)
|
||||
if(fec_mode==1&&s!=0&&len>=fec_mtu)
|
||||
{
|
||||
mylog(log_warn,"message too long len=%d fec_mtu=%d,ignored\n",len,fec_mtu);
|
||||
return -1;
|
||||
@@ -241,10 +242,10 @@ int fec_encode_manager_t::input(char *s,int len/*,int &is_first_packet*/)
|
||||
}
|
||||
if(s==0) about_to_fec=1;//now
|
||||
|
||||
if(fec_type==0&& blob_encode.get_shard_len(fec_data_num,len)>=fec_mtu) {about_to_fec=1; delayed_append=1;}//fec then add packet
|
||||
if(fec_mode==0&& blob_encode.get_shard_len(fec_data_num,len)>=fec_mtu) {about_to_fec=1; delayed_append=1;}//fec then add packet
|
||||
|
||||
if(fec_type==0) assert(counter<fec_pending_num);//counter will never equal fec_pending_num,if that happens fec should already been done.
|
||||
if(fec_type==1) assert(counter<fec_data_num);
|
||||
if(fec_mode==0) assert(counter<fec_queue_len);//counter will never equal fec_pending_num,if that happens fec should already been done.
|
||||
if(fec_mode==1) assert(counter<fec_data_num);
|
||||
|
||||
|
||||
if(s!=0&&!delayed_append)
|
||||
@@ -252,9 +253,9 @@ int fec_encode_manager_t::input(char *s,int len/*,int &is_first_packet*/)
|
||||
append(s,len);
|
||||
}
|
||||
|
||||
if(fec_type==0&& counter==fec_pending_num) about_to_fec=1;
|
||||
if(fec_mode==0&& counter==fec_queue_len) about_to_fec=1;
|
||||
|
||||
if(fec_type==1&& counter==fec_data_num) about_to_fec=1;
|
||||
if(fec_mode==1&& counter==fec_data_num) about_to_fec=1;
|
||||
|
||||
|
||||
if(about_to_fec)
|
||||
@@ -272,7 +273,7 @@ int fec_encode_manager_t::input(char *s,int len/*,int &is_first_packet*/)
|
||||
int actual_data_num;
|
||||
int actual_redundant_num;
|
||||
|
||||
if(fec_type==0)
|
||||
if(fec_mode==0)
|
||||
{
|
||||
|
||||
actual_data_num=fec_data_num;
|
||||
@@ -319,8 +320,8 @@ int fec_encode_manager_t::input(char *s,int len/*,int &is_first_packet*/)
|
||||
|
||||
write_u32(input_buf[i] + tmp_idx, seq);
|
||||
tmp_idx += sizeof(u32_t);
|
||||
input_buf[i][tmp_idx++] = (unsigned char) fec_type;
|
||||
if (fec_type == 1 && i < actual_data_num)
|
||||
input_buf[i][tmp_idx++] = (unsigned char) fec_mode;
|
||||
if (fec_mode == 1 && i < actual_data_num)
|
||||
{
|
||||
input_buf[i][tmp_idx++] = (unsigned char) 0;
|
||||
input_buf[i][tmp_idx++] = (unsigned char) 0;
|
||||
@@ -333,7 +334,7 @@ int fec_encode_manager_t::input(char *s,int len/*,int &is_first_packet*/)
|
||||
|
||||
tmp_output_buf[i]=input_buf[i]+tmp_idx; //////caution ,trick here.
|
||||
|
||||
if(fec_type==0)
|
||||
if(fec_mode==0)
|
||||
{
|
||||
output_len[i]=tmp_idx+fec_len;
|
||||
if(i<actual_data_num)
|
||||
@@ -403,7 +404,7 @@ int fec_encode_manager_t::input(char *s,int len/*,int &is_first_packet*/)
|
||||
memset(&its,0,sizeof(its));
|
||||
timerfd_settime(timer_fd,TFD_TIMER_ABSTIME,&its,0);
|
||||
|
||||
if(encode_fast_send&&fec_type==1)
|
||||
if(encode_fast_send&&fec_mode==1)
|
||||
{
|
||||
int packet_to_send[max_fec_packet_num+5]={0};
|
||||
int packet_to_send_counter=0;
|
||||
@@ -427,7 +428,7 @@ int fec_encode_manager_t::input(char *s,int len/*,int &is_first_packet*/)
|
||||
}
|
||||
else
|
||||
{
|
||||
if(encode_fast_send&&s!=0&&fec_type==1)
|
||||
if(encode_fast_send&&s!=0&&fec_mode==1)
|
||||
{
|
||||
assert(counter>=1);
|
||||
assert(counter<=255);
|
||||
@@ -442,7 +443,7 @@ int fec_encode_manager_t::input(char *s,int len/*,int &is_first_packet*/)
|
||||
write_u32(input_buf[input_buf_idx]+tmp_idx,seq);
|
||||
tmp_idx+=sizeof(u32_t);
|
||||
|
||||
input_buf[input_buf_idx][tmp_idx++]=(unsigned char)fec_type;
|
||||
input_buf[input_buf_idx][tmp_idx++]=(unsigned char)fec_mode;
|
||||
input_buf[input_buf_idx][tmp_idx++]=(unsigned char)0;
|
||||
input_buf[input_buf_idx][tmp_idx++]=(unsigned char)0;
|
||||
input_buf[input_buf_idx][tmp_idx++]=(unsigned char)((u32_t)input_buf_idx);
|
||||
@@ -464,7 +465,7 @@ int fec_encode_manager_t::input(char *s,int len/*,int &is_first_packet*/)
|
||||
|
||||
if(s!=0&&delayed_append)
|
||||
{
|
||||
assert(fec_type!=1);
|
||||
assert(fec_mode!=1);
|
||||
append(s,len);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user