mirror of
https://github.com/hufrea/byedpi.git
synced 2024-12-22 14:25:44 +00:00
add asserts
This commit is contained in:
parent
4c99442199
commit
47aad58e7c
21
conev.c
21
conev.c
@ -4,6 +4,7 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
|
#include <assert.h>
|
||||||
|
|
||||||
|
|
||||||
struct poolhd *init_pool(int count)
|
struct poolhd *init_pool(int count)
|
||||||
@ -43,6 +44,7 @@ struct poolhd *init_pool(int count)
|
|||||||
struct eval *add_event(struct poolhd *pool, enum eid type,
|
struct eval *add_event(struct poolhd *pool, enum eid type,
|
||||||
int fd, int e)
|
int fd, int e)
|
||||||
{
|
{
|
||||||
|
assert(fd > 0);
|
||||||
if (pool->count >= pool->max) {
|
if (pool->count >= pool->max) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -74,15 +76,19 @@ struct eval *add_event(struct poolhd *pool, enum eid type,
|
|||||||
|
|
||||||
void del_event(struct poolhd *pool, struct eval *val)
|
void del_event(struct poolhd *pool, struct eval *val)
|
||||||
{
|
{
|
||||||
if (!val->fd) {
|
assert(val && ((val->fd > 0 && val->mod_iter < pool->iters) ||
|
||||||
|
val->mod_iter == pool->iters));
|
||||||
|
if (val->fd == -1) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (val->buff.data) {
|
if (val->buff.data) {
|
||||||
|
assert(val->buff.size);
|
||||||
free(val->buff.data);
|
free(val->buff.data);
|
||||||
val->buff.data = 0;
|
val->buff.data = 0;
|
||||||
}
|
}
|
||||||
close(val->fd);
|
close(val->fd);
|
||||||
val->fd = 0;
|
val->fd = -1;
|
||||||
val->mod_iter = pool->iters;
|
val->mod_iter = pool->iters;
|
||||||
pool->count--;
|
pool->count--;
|
||||||
|
|
||||||
@ -98,12 +104,14 @@ void del_event(struct poolhd *pool, struct eval *val)
|
|||||||
ev->index = index;
|
ev->index = index;
|
||||||
}
|
}
|
||||||
if (val->pair) {
|
if (val->pair) {
|
||||||
if (val->pair == val) {
|
if (val->pair->pair == val) {
|
||||||
val->pair->pair = 0;
|
val->pair->pair = 0;
|
||||||
}
|
}
|
||||||
del_event(pool, val->pair);
|
struct eval *e = val->pair;
|
||||||
val->pair = 0;
|
val->pair = 0;
|
||||||
|
del_event(pool, e);
|
||||||
}
|
}
|
||||||
|
assert(pool->count > 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -137,6 +145,7 @@ struct eval *next_event(struct poolhd *pool, int *offs, int *type)
|
|||||||
{
|
{
|
||||||
while (1) {
|
while (1) {
|
||||||
int i = *offs;
|
int i = *offs;
|
||||||
|
assert(i >= -1 && i < pool->count);
|
||||||
if (i < 0) {
|
if (i < 0) {
|
||||||
i = (epoll_wait(pool->efd, pool->pevents, pool->max, -1) - 1);
|
i = (epoll_wait(pool->efd, pool->pevents, pool->max, -1) - 1);
|
||||||
if (i < 0) {
|
if (i < 0) {
|
||||||
@ -160,6 +169,7 @@ struct eval *next_event(struct poolhd *pool, int *offs, int *type)
|
|||||||
|
|
||||||
int mod_etype(struct poolhd *pool, struct eval *val, int type)
|
int mod_etype(struct poolhd *pool, struct eval *val, int type)
|
||||||
{
|
{
|
||||||
|
assert(val->fd > 0);
|
||||||
struct epoll_event ev = {
|
struct epoll_event ev = {
|
||||||
.events = EPOLLRDHUP | type, .data = {val}
|
.events = EPOLLRDHUP | type, .data = {val}
|
||||||
};
|
};
|
||||||
@ -170,6 +180,7 @@ int mod_etype(struct poolhd *pool, struct eval *val, int type)
|
|||||||
struct eval *next_event(struct poolhd *pool, int *offs, int *typel)
|
struct eval *next_event(struct poolhd *pool, int *offs, int *typel)
|
||||||
{
|
{
|
||||||
for (int i = *offs; ; i--) {
|
for (int i = *offs; ; i--) {
|
||||||
|
assert(i >= -1 && i < pool->max);
|
||||||
if (i < 0) {
|
if (i < 0) {
|
||||||
if (poll(pool->pevents, pool->count, -1) <= 0) {
|
if (poll(pool->pevents, pool->count, -1) <= 0) {
|
||||||
return 0;
|
return 0;
|
||||||
@ -185,6 +196,7 @@ struct eval *next_event(struct poolhd *pool, int *offs, int *typel)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
struct eval *val = pool->links[i];
|
struct eval *val = pool->links[i];
|
||||||
|
assert((i < pool->count) || (val->mod_iter == pool->iters));
|
||||||
if (val->mod_iter == pool->iters) {
|
if (val->mod_iter == pool->iters) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -198,6 +210,7 @@ struct eval *next_event(struct poolhd *pool, int *offs, int *typel)
|
|||||||
|
|
||||||
int mod_etype(struct poolhd *pool, struct eval *val, int type)
|
int mod_etype(struct poolhd *pool, struct eval *val, int type)
|
||||||
{
|
{
|
||||||
|
assert(val->index >= 0 && val->index < pool->count);
|
||||||
pool->pevents[val->index].events = type;
|
pool->pevents[val->index].events = type;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
21
extend.c
21
extend.c
@ -12,6 +12,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <assert.h>
|
||||||
|
|
||||||
#include "proxy.h"
|
#include "proxy.h"
|
||||||
#include "error.h"
|
#include "error.h"
|
||||||
@ -45,10 +46,12 @@ int set_timeout(int fd, unsigned int s)
|
|||||||
int mode_add_get(struct sockaddr_ina *dst, int m)
|
int mode_add_get(struct sockaddr_ina *dst, int m)
|
||||||
{
|
{
|
||||||
// m < 0: get, m > 0: set, m == 0: delete
|
// m < 0: get, m > 0: set, m == 0: delete
|
||||||
time_t t;
|
assert(m >= -1 && m < params.dp_count);
|
||||||
struct elem *val;
|
|
||||||
|
time_t t = 0;
|
||||||
|
struct elem *val = 0;
|
||||||
char *str = (char *)&dst->in;
|
char *str = (char *)&dst->in;
|
||||||
int len = sizeof(dst->sa.sa_family);
|
int len = 0;
|
||||||
|
|
||||||
if (dst->sa.sa_family == AF_INET) {
|
if (dst->sa.sa_family == AF_INET) {
|
||||||
len = sizeof(dst->in);
|
len = sizeof(dst->in);
|
||||||
@ -57,6 +60,7 @@ int mode_add_get(struct sockaddr_ina *dst, int m)
|
|||||||
len = sizeof(dst->in6) - sizeof(dst->in6.sin6_scope_id);
|
len = sizeof(dst->in6) - sizeof(dst->in6.sin6_scope_id);
|
||||||
}
|
}
|
||||||
len -= sizeof(dst->sa.sa_family);
|
len -= sizeof(dst->sa.sa_family);
|
||||||
|
assert(len > 0);
|
||||||
|
|
||||||
if (m == 0) {
|
if (m == 0) {
|
||||||
mem_delete(params.mempool, str, len);
|
mem_delete(params.mempool, str, len);
|
||||||
@ -89,6 +93,8 @@ int mode_add_get(struct sockaddr_ina *dst, int m)
|
|||||||
int ext_connect(struct poolhd *pool, struct eval *val,
|
int ext_connect(struct poolhd *pool, struct eval *val,
|
||||||
struct sockaddr_ina *dst, int next, int m)
|
struct sockaddr_ina *dst, int next, int m)
|
||||||
{
|
{
|
||||||
|
assert(m >= 0 && m < params.dp_count && dst && val);
|
||||||
|
|
||||||
struct desync_params *dp = ¶ms.dp[m];
|
struct desync_params *dp = ¶ms.dp[m];
|
||||||
if (dp->to_ip) {
|
if (dp->to_ip) {
|
||||||
struct sockaddr_ina addr = { .in6 = dp->addr };
|
struct sockaddr_ina addr = { .in6 = dp->addr };
|
||||||
@ -147,6 +153,7 @@ bool check_host(struct mphdr *hosts, struct eval *val)
|
|||||||
if (!(len = parse_tls(val->buff.data, val->buff.size, &host))) {
|
if (!(len = parse_tls(val->buff.data, val->buff.size, &host))) {
|
||||||
len = parse_http(val->buff.data, val->buff.size, &host, 0);
|
len = parse_http(val->buff.data, val->buff.size, &host, 0);
|
||||||
}
|
}
|
||||||
|
assert(len == 0 || host != 0);
|
||||||
return (len > 0) && mem_get(hosts, host, len) != 0;
|
return (len > 0) && mem_get(hosts, host, len) != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -241,7 +248,7 @@ int on_tunnel_check(struct poolhd *pool, struct eval *val,
|
|||||||
}
|
}
|
||||||
ssize_t n = recv(val->fd, buffer, bfsize, 0);
|
ssize_t n = recv(val->fd, buffer, bfsize, 0);
|
||||||
if (n < 1) {
|
if (n < 1) {
|
||||||
uniperror("recv");
|
if (n) uniperror("recv");
|
||||||
switch (get_e()) {
|
switch (get_e()) {
|
||||||
case ECONNRESET:
|
case ECONNRESET:
|
||||||
case ECONNREFUSED:
|
case ECONNREFUSED:
|
||||||
@ -255,6 +262,7 @@ int on_tunnel_check(struct poolhd *pool, struct eval *val,
|
|||||||
if (on_response(pool, val, buffer, n) == 0) {
|
if (on_response(pool, val, buffer, n) == 0) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
val->recv_count += n;
|
||||||
struct eval *pair = val->pair;
|
struct eval *pair = val->pair;
|
||||||
|
|
||||||
ssize_t sn = send(pair->fd, buffer, n, 0);
|
ssize_t sn = send(pair->fd, buffer, n, 0);
|
||||||
@ -265,6 +273,7 @@ int on_tunnel_check(struct poolhd *pool, struct eval *val,
|
|||||||
val->type = EV_TUNNEL;
|
val->type = EV_TUNNEL;
|
||||||
pair->type = EV_TUNNEL;
|
pair->type = EV_TUNNEL;
|
||||||
|
|
||||||
|
assert(pair->buff.data);
|
||||||
free(pair->buff.data);
|
free(pair->buff.data);
|
||||||
pair->buff.data = 0;
|
pair->buff.data = 0;
|
||||||
pair->buff.size = 0;
|
pair->buff.size = 0;
|
||||||
@ -298,7 +307,7 @@ int on_desync(struct poolhd *pool, struct eval *val,
|
|||||||
}
|
}
|
||||||
val = val->pair;
|
val = val->pair;
|
||||||
}
|
}
|
||||||
ssize_t n;
|
ssize_t n = 0;
|
||||||
int m = val->attempt;
|
int m = val->attempt;
|
||||||
LOG((m ? LOG_S : LOG_L), "desync params index: %d\n", m);
|
LOG((m ? LOG_S : LOG_L), "desync params index: %d\n", m);
|
||||||
|
|
||||||
@ -310,6 +319,7 @@ int on_desync(struct poolhd *pool, struct eval *val,
|
|||||||
}
|
}
|
||||||
val->buff.size = n;
|
val->buff.size = n;
|
||||||
val->recv_count += n;
|
val->recv_count += n;
|
||||||
|
assert(val->buff.offset == 0);
|
||||||
|
|
||||||
if (!(val->buff.data = malloc(n))) {
|
if (!(val->buff.data = malloc(n))) {
|
||||||
uniperror("malloc");
|
uniperror("malloc");
|
||||||
@ -337,6 +347,7 @@ int on_desync(struct poolhd *pool, struct eval *val,
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
n = val->buff.size;
|
n = val->buff.size;
|
||||||
|
assert(n > 0 && n <= params.bfsize);
|
||||||
memcpy(buffer, val->buff.data, n);
|
memcpy(buffer, val->buff.data, n);
|
||||||
}
|
}
|
||||||
if (params.timeout &&
|
if (params.timeout &&
|
||||||
|
3
mpool.c
3
mpool.c
@ -1,5 +1,6 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#include "mpool.h"
|
#include "mpool.h"
|
||||||
|
|
||||||
|
|
||||||
@ -37,7 +38,7 @@ struct elem *mem_get(struct mphdr *hdr, char *str, int len)
|
|||||||
|
|
||||||
struct elem *mem_add(struct mphdr *hdr, char *str, int len)
|
struct elem *mem_add(struct mphdr *hdr, char *str, int len)
|
||||||
{
|
{
|
||||||
struct elem *v, *e = malloc(sizeof(struct elem));
|
struct elem *v, *e = calloc(sizeof(struct elem), 1);
|
||||||
if (!e) {
|
if (!e) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user