mirror of
https://github.com/hufrea/byedpi.git
synced 2025-07-05 05:24:08 +00:00
Count range
This commit is contained in:
parent
6633a41868
commit
d6767985d1
36
desync.c
36
desync.c
@ -531,7 +531,7 @@ ssize_t desync(struct poolhd *pool,
|
|||||||
size_t bfsize = buff->size;
|
size_t bfsize = buff->size;
|
||||||
ssize_t offset = buff->offset;
|
ssize_t offset = buff->offset;
|
||||||
ssize_t skip = val->pair->round_sent;
|
ssize_t skip = val->pair->round_sent;
|
||||||
unsigned int part_skip = val->pair->part_sent;
|
int part_skip = val->pair->part_sent;
|
||||||
|
|
||||||
if (!skip && params.debug) {
|
if (!skip && params.debug) {
|
||||||
init_proto_info(buffer, *np, &info);
|
init_proto_info(buffer, *np, &info);
|
||||||
@ -552,40 +552,28 @@ ssize_t desync(struct poolhd *pool,
|
|||||||
long lp = offset;
|
long lp = offset;
|
||||||
struct part part;
|
struct part part;
|
||||||
int i = 0, r = 0;
|
int i = 0, r = 0;
|
||||||
unsigned int curr_part = 0;
|
int curr_part = -1;
|
||||||
int prev_part_delay = 0;
|
|
||||||
|
|
||||||
for (; r > 0 || i < dp.parts_n; r--) {
|
for (; r > 0 || i < dp.parts_n; r--) {
|
||||||
if (r <= 0) {
|
if (r <= 0) {
|
||||||
part = dp.parts[i];
|
part = dp.parts[i];
|
||||||
r = part.r; i++;
|
r = part.r; i++;
|
||||||
curr_part++;
|
|
||||||
if (curr_part <= part_skip) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
curr_part++;
|
||||||
long pos = gen_offset(part.pos, part.flag, buffer, n, lp, &info);
|
long pos = gen_offset(part.pos, part.flag, buffer, n, lp, &info);
|
||||||
pos += (long )part.s * (part.r - r);
|
pos += (long )part.s * (part.r - r);
|
||||||
|
|
||||||
if (skip && (pos < skip || (pos == skip && curr_part == 1)) && !(part.flag & OFFSET_START)) {
|
if ((skip && pos <= skip)
|
||||||
|
&& curr_part < part_skip && !(part.flag & OFFSET_START)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (offset && (pos < offset || (pos == offset && curr_part == 1))) {
|
if (offset && pos < offset) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (pos < 0 || pos > n || pos < lp) {
|
if (pos < 0 || pos > n || pos < lp) {
|
||||||
LOG(LOG_E, "split cancel: pos=%ld-%ld, n=%zd\n", lp, pos, n);
|
LOG(LOG_E, "split cancel: pos=%ld-%ld, n=%zd\n", lp, pos, n);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// add delay after the previous part if there is a next one
|
|
||||||
// (this is for zero-length parts after the last byte)
|
|
||||||
if (prev_part_delay > 0) {
|
|
||||||
LOG(LOG_S, "delay: %d ms\n", prev_part_delay);
|
|
||||||
set_timer(pool, val, prev_part_delay);
|
|
||||||
return lp - offset;
|
|
||||||
}
|
|
||||||
|
|
||||||
ssize_t s = 0;
|
ssize_t s = 0;
|
||||||
|
|
||||||
if (sock_has_notsent(sfd)) {
|
if (sock_has_notsent(sfd)) {
|
||||||
@ -621,11 +609,13 @@ ssize_t desync(struct poolhd *pool,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
LOG(LOG_S, "split: pos=%ld-%ld (%zd), m: %s\n", lp, pos, s, demode_str[part.m]);
|
LOG(LOG_S, "split: pos=%ld-%ld (%zd), m: %s\n", lp, pos, s, demode_str[part.m]);
|
||||||
|
val->pair->part_sent = curr_part + 1;
|
||||||
|
|
||||||
if (s == ERR_WAIT) {
|
if (s == ERR_WAIT) {
|
||||||
set_timer(pool, val, params.await_int);
|
set_timer(pool, val, params.await_int);
|
||||||
return lp - offset;
|
return lp - offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (s < 0) {
|
if (s < 0) {
|
||||||
if (get_e() == EAGAIN) {
|
if (get_e() == EAGAIN) {
|
||||||
return lp - offset;
|
return lp - offset;
|
||||||
@ -636,17 +626,13 @@ ssize_t desync(struct poolhd *pool,
|
|||||||
LOG(LOG_E, "%zd != %ld\n", s, pos - lp);
|
LOG(LOG_E, "%zd != %ld\n", s, pos - lp);
|
||||||
return lp + s - offset;
|
return lp + s - offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
lp = pos;
|
lp = pos;
|
||||||
val->pair->part_sent = curr_part;
|
|
||||||
|
if (part.delay > 0 && lp < n) {
|
||||||
// add delay if there is more data to send
|
|
||||||
if (part.delay > 0 && lp < n) {
|
|
||||||
LOG(LOG_S, "delay: %d ms\n", part.delay);
|
LOG(LOG_S, "delay: %d ms\n", part.delay);
|
||||||
set_timer(pool, val, part.delay);
|
set_timer(pool, val, part.delay);
|
||||||
return lp - offset;
|
return lp - offset;
|
||||||
}
|
}
|
||||||
prev_part_delay = part.delay;
|
|
||||||
}
|
}
|
||||||
// send all/rest
|
// send all/rest
|
||||||
if (lp < n) {
|
if (lp < n) {
|
||||||
|
Loading…
Reference in New Issue
Block a user