mirror of
https://github.com/Waujito/youtubeUnblock.git
synced 2025-12-06 11:36:45 +03:00
fix: safety defenders for delay_packet_send
This commit is contained in:
26
src/mangle.c
26
src/mangle.c
@@ -502,18 +502,11 @@ drop:
|
||||
|
||||
int send_ip4_frags(const struct section_config_t *section, const uint8_t *packet, size_t pktlen, const size_t *poses, size_t poses_sz, size_t dvs) {
|
||||
if (poses_sz == 0) {
|
||||
lgtrace_addp("raw send packet of %zu bytes with %zu dvs", pktlen, dvs);
|
||||
if (section->seg2_delay && ((dvs > 0) ^ section->frag_sni_reverse)) {
|
||||
if (!instance_config.send_delayed_packet) {
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
lgtrace_addp("Sent %zu delayed for %d", pktlen, section->seg2_delay);
|
||||
instance_config.send_delayed_packet(
|
||||
return instance_config.send_delayed_packet(
|
||||
packet, pktlen, section->seg2_delay);
|
||||
|
||||
return 0;
|
||||
} else {
|
||||
lgtrace_addp("Sent %zu bytes", pktlen);
|
||||
return instance_config.send_raw_packet(
|
||||
packet, pktlen);
|
||||
}
|
||||
@@ -588,18 +581,11 @@ out:
|
||||
|
||||
int send_tcp_frags(const struct section_config_t *section, const uint8_t *packet, size_t pktlen, const size_t *poses, size_t poses_sz, size_t dvs) {
|
||||
if (poses_sz == 0) {
|
||||
if (section->seg2_delay && ((dvs > 0) ^ section->frag_sni_reverse)) {
|
||||
if (!instance_config.send_delayed_packet) {
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
instance_config.send_delayed_packet(
|
||||
packet, pktlen, section->seg2_delay);
|
||||
|
||||
return 0;
|
||||
} else {
|
||||
lgtrace_addp("raw send packet of %zu bytes with %zu dvs", pktlen, dvs);
|
||||
|
||||
if (section->seg2_delay && ((dvs > 0) ^ section->frag_sni_reverse)) {
|
||||
return instance_config.send_delayed_packet(
|
||||
packet, pktlen, section->seg2_delay);
|
||||
} else {
|
||||
return instance_config.send_raw_packet(
|
||||
packet, pktlen);
|
||||
}
|
||||
|
||||
@@ -614,14 +614,33 @@ void *delay_packet_send_fn(void *data) {
|
||||
}
|
||||
|
||||
int delay_packet_send(const unsigned char *data, size_t data_len, unsigned int delay_ms) {
|
||||
int ret;
|
||||
|
||||
struct dps_t *dpdt = malloc(sizeof(struct dps_t));
|
||||
if (dpdt == NULL) {
|
||||
return -ENOMEM;
|
||||
}
|
||||
*dpdt = (struct dps_t){0};
|
||||
|
||||
dpdt->pkt = malloc(data_len);
|
||||
if (dpdt->pkt == NULL) {
|
||||
free(dpdt);
|
||||
return -ENOMEM;
|
||||
}
|
||||
memcpy(dpdt->pkt, data, data_len);
|
||||
|
||||
dpdt->pktlen = data_len;
|
||||
dpdt->timer = delay_ms;
|
||||
pthread_t thr;
|
||||
pthread_create(&thr, NULL, delay_packet_send_fn, dpdt);
|
||||
pthread_detach(thr);
|
||||
pthread_t thr = {0};
|
||||
ret = pthread_create(&thr, NULL, delay_packet_send_fn, dpdt);
|
||||
if (ret != 0) {
|
||||
free(dpdt->pkt);
|
||||
free(dpdt);
|
||||
return -ret;
|
||||
}
|
||||
|
||||
ret = pthread_detach(thr);
|
||||
|
||||
lgtrace_addp("Scheduled packet send after %d ms", delay_ms);
|
||||
|
||||
return 0;
|
||||
|
||||
Reference in New Issue
Block a user