Mad_Flute перестает получать после 65535 блоков
Я играю с приложением протокола флейты под названием mad_flute. http://mad.cs.tut.fi/
Все работает хорошо, за исключением случаев, когда я пытаюсь отправить файл размером более 30 ГБ. (Или более 65536) блоков. Приложение имеет 1 отправляющую часть и 1 получающую. Работающая сторона швов работает, и вы можете видеть, что она отправляет все блоки "88462/88462 Исходные блоки отправлены (TOI=1 SBN=88461)" Сторона получателя всегда останавливается на "65536/88462 декодированных исходных блоках (TOI=1 SBN=65535))"
Я нашел одну переменную INT16 в источнике, но настройка, которая не разрешила проблему.
Затем я нашел логическое "Delta2 = 65535 - Delat1;" часть в mad_rlc.c и повысила это значение, но приемник остановился на "65536/88462 декодированных исходных блоках (TOI=1 SBN=65535)"
Исходный код можно скачать здесь: http://mad.cs.tut.fi/download/mad_fcl_v1.7_src.zip
Любые указатели от короля / королевы C были бы удивительными.
int mad_rlc_check_sequence(alc_session_t *s, int layer, int seqid) {
unsigned short Delta1;
unsigned short Delta2;
int i;
int late_limit;
if(s->rlc->rx_wait_for[layer] == seqid) {
/* This is the packet we're waiting for, let's go on! */
s->rlc->rx_wait_for[layer]++;
return 0;
}
/* This is not the one we're waiting for... */
if(s->rlc->rx_wait_for[layer] < seqid) {
Delta1 = seqid - s->rlc->rx_wait_for[layer];
Delta2 = 65535 - Delta1;
if(Delta1 < Delta2) {
late_limit = RLC_MAX_LATES;
for(i = s->rlc->rx_wait_for[layer]; i < seqid; i++) {
mad_rlc_add_late(s, layer, i);
late_limit--;
if(late_limit <= 0 ) {
printf("RLC Warning*** Max number of LATE packets reached\n");
fflush(stdout);
break;
}
}
/* EOFIX */
s->rlc->rx_wait_for[layer] = seqid + 1;
}
else {
/* Late arrival packet (uint16 overflow) */
/* eg. we're waiting seq 4 and we get seq 65532 */
mad_rlc_remove_late(s, layer, seqid);
}
}
else { /* rx_wait_for > rlc_seqid */
Delta1 = s->rlc->rx_wait_for[layer] - seqid;
Delta2 = 65535 - Delta1;
if (Delta1 < Delta2) { /* Late arrival packet */
/* ie: we're waiting seq 501 and we get seq 498 */
mad_rlc_remove_late(s, layer, seqid);
}
else {
/* Some packet(s) are missing (uint16 overflow) */
/* ie: waiting seq 65531 and get seq 3 */
/* FIX 14/12/01 */
late_limit = RLC_MAX_LATES;
for(i = s->rlc->rx_wait_for[layer]; i != (seqid-1); i++) {
mad_rlc_add_late(s, layer, i);
late_limit--;
if(late_limit <= 0 ) {
printf("RLC Warning*** Max number of LATE packets reached\n");
fflush(stdout);
break;
}
}
/* EOFIX */
s->rlc->rx_wait_for[layer] = seqid + 1;
}
}
return 0;
}