mirror of
https://github.com/hufrea/byedpi.git
synced 2024-12-22 06:15:14 +00:00
Subdomain, logs
This commit is contained in:
parent
c732673c76
commit
4d965ebff3
9
error.h
9
error.h
@ -64,4 +64,11 @@ static inline const int unie(int e)
|
||||
#define LOG(s, str, ...) \
|
||||
if (params.debug >= s) \
|
||||
fprintf(stderr, str, ##__VA_ARGS__)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#define INIT_ADDR_STR(dst) \
|
||||
char ADDR_STR[INET_ADDRSTRLEN + 1]; \
|
||||
if (dst.sa.sa_family == AF_INET) \
|
||||
inet_ntop(AF_INET, &dst.in.sin_addr, ADDR_STR, sizeof(ADDR_STR)); \
|
||||
else \
|
||||
inet_ntop(AF_INET6, &dst.in6.sin6_addr, ADDR_STR, sizeof(ADDR_STR));
|
||||
|
22
extend.c
22
extend.c
@ -128,7 +128,19 @@ bool check_host(struct mphdr *hosts, struct eval *val)
|
||||
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;
|
||||
if (len <= 0) {
|
||||
return 0;
|
||||
}
|
||||
char *e = host + len;
|
||||
for (; host < e; host++) {
|
||||
if (mem_get(hosts, host, e - host)) {
|
||||
return 1;
|
||||
}
|
||||
if (!(host = memchr(host, '.', e - host))) {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@ -259,13 +271,15 @@ int on_tunnel_check(struct poolhd *pool, struct eval *val,
|
||||
if (!pair->cache) {
|
||||
return 0;
|
||||
}
|
||||
struct sockaddr_ina *addr = (struct sockaddr_ina *)&val->in6;
|
||||
|
||||
if (m == 0) {
|
||||
LOG(LOG_S, "delete ip: m=%d\n", m);
|
||||
} else {
|
||||
LOG(LOG_S, "save ip: m=%d\n", m);
|
||||
INIT_ADDR_STR((*addr));
|
||||
LOG(LOG_S, "save ip: %s, m=%d\n", ADDR_STR, m);
|
||||
}
|
||||
return mode_add_get(
|
||||
(struct sockaddr_ina *)&val->in6, m);
|
||||
return mode_add_get(addr, m);
|
||||
}
|
||||
|
||||
|
||||
|
28
proxy.c
28
proxy.c
@ -505,6 +505,7 @@ static inline int on_accept(struct poolhd *pool, struct eval *val)
|
||||
uniperror("accept");
|
||||
return -1;
|
||||
}
|
||||
LOG(LOG_L, "accept: fd=%d\n", c);
|
||||
#ifndef __linux__
|
||||
#ifdef _WIN32
|
||||
unsigned long mode = 1;
|
||||
@ -753,8 +754,14 @@ static inline int on_request(struct poolhd *pool, struct eval *val,
|
||||
int en = get_e();
|
||||
if (resp_error(val->fd, en ? en : error, val->flag) < 0)
|
||||
uniperror("send");
|
||||
LOG(LOG_S, "ss error: %d\n", en);
|
||||
return -1;
|
||||
}
|
||||
if (params.debug) {
|
||||
INIT_ADDR_STR(dst);
|
||||
LOG(LOG_L, "new conn: fd=%d, addr=%s:%d\n",
|
||||
val->pair->fd, ADDR_STR, ntohs(dst.in.sin_port));
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -787,6 +794,13 @@ static inline int on_connect(struct poolhd *pool, struct eval *val, int e)
|
||||
}
|
||||
|
||||
|
||||
void close_conn(struct poolhd *pool, struct eval *val)
|
||||
{
|
||||
LOG(LOG_L, "close: fds=%d,%d\n", val->fd, val->pair ? val->pair->fd : -1);
|
||||
del_event(pool, val);
|
||||
}
|
||||
|
||||
|
||||
int event_loop(int srvfd)
|
||||
{
|
||||
size_t bfsize = params.bfsize;
|
||||
@ -835,39 +849,39 @@ int event_loop(int srvfd)
|
||||
case EV_REQUEST:
|
||||
if ((etype & POLLHUP) ||
|
||||
on_request(pool, val, buffer, bfsize))
|
||||
del_event(pool, val);
|
||||
close_conn(pool, val);
|
||||
continue;
|
||||
|
||||
case EV_PRE_TUNNEL:
|
||||
if (on_tunnel_check(pool, val,
|
||||
buffer, bfsize, etype & POLLOUT))
|
||||
del_event(pool, val);
|
||||
close_conn(pool, val);
|
||||
continue;
|
||||
|
||||
case EV_TUNNEL:
|
||||
if (on_tunnel(pool, val, buffer, bfsize, etype))
|
||||
del_event(pool, val);
|
||||
close_conn(pool, val);
|
||||
continue;
|
||||
|
||||
case EV_UDP_TUNNEL:
|
||||
if (on_udp_tunnel(val, buffer, bfsize))
|
||||
del_event(pool, val);
|
||||
close_conn(pool, val);
|
||||
continue;
|
||||
|
||||
case EV_CONNECT:
|
||||
if (on_connect(pool, val, etype & POLLERR))
|
||||
del_event(pool, val);
|
||||
close_conn(pool, val);
|
||||
continue;
|
||||
|
||||
case EV_DESYNC:
|
||||
if (on_desync(pool, val,
|
||||
buffer, bfsize, etype & POLLOUT))
|
||||
del_event(pool, val);
|
||||
close_conn(pool, val);
|
||||
continue;
|
||||
|
||||
case EV_IGNORE:
|
||||
if (etype & (POLLHUP | POLLERR | POLLRDHUP))
|
||||
del_event(pool, val);
|
||||
close_conn(pool, val);
|
||||
continue;
|
||||
|
||||
default:
|
||||
|
Loading…
Reference in New Issue
Block a user