mirror of
https://github.com/shadowsocks/shadowsocks-libev.git
synced 2026-10-23 16:13:46 +00:00
Update udprelay.c
This commit is contained in:
+29
-29
@@ -161,7 +161,7 @@ static int parse_udprealy_header(const char * buf, const int buf_len,
|
||||
}
|
||||
|
||||
if (offset == 1) {
|
||||
LOGE("invalid header with addr type %d", atyp);
|
||||
LOGE("[udp] invalid header with addr type %d", atyp);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -223,11 +223,11 @@ int create_remote_socket(int ipv6)
|
||||
addr.sin6_port = 0;
|
||||
remote_sock = socket(AF_INET6, SOCK_DGRAM, 0);
|
||||
if (remote_sock == -1) {
|
||||
ERROR("Cannot create socket.");
|
||||
ERROR("[udp] cannot create socket.");
|
||||
return -1;
|
||||
}
|
||||
if (bind(remote_sock, (struct sockaddr *)&addr, sizeof(addr)) != 0) {
|
||||
FATAL("Cannot bind remote.");
|
||||
FATAL("[udp] cannot bind remote.");
|
||||
return -1;
|
||||
}
|
||||
} else {
|
||||
@@ -239,12 +239,12 @@ int create_remote_socket(int ipv6)
|
||||
addr.sin_port = 0;
|
||||
remote_sock = socket(AF_INET, SOCK_DGRAM, 0);
|
||||
if (remote_sock == -1) {
|
||||
ERROR("Cannot create socket.");
|
||||
ERROR("[udp] cannot create socket.");
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (bind(remote_sock, (struct sockaddr *)&addr, sizeof(addr)) != 0) {
|
||||
FATAL("Cannot bind remote.");
|
||||
FATAL("[udp] cannot bind remote.");
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
@@ -263,7 +263,7 @@ int create_server_socket(const char *host, const char *port)
|
||||
|
||||
s = getaddrinfo(host, port, &hints, &result);
|
||||
if (s != 0) {
|
||||
LOGE("getaddrinfo: %s", gai_strerror(s));
|
||||
LOGE("[udp] getaddrinfo: %s", gai_strerror(s));
|
||||
return -1;
|
||||
}
|
||||
|
||||
@@ -284,14 +284,14 @@ int create_server_socket(const char *host, const char *port)
|
||||
/* We managed to bind successfully! */
|
||||
break;
|
||||
} else {
|
||||
ERROR("bind");
|
||||
ERROR("[udp] bind");
|
||||
}
|
||||
|
||||
close(server_sock);
|
||||
}
|
||||
|
||||
if (rp == NULL) {
|
||||
LOGE("Could not bind");
|
||||
LOGE("[udp] cannot bind");
|
||||
return -1;
|
||||
}
|
||||
|
||||
@@ -362,7 +362,7 @@ static void remote_timeout_cb(EV_P_ ev_timer *watcher, int revents)
|
||||
- sizeof(ev_io));
|
||||
|
||||
if (verbose) {
|
||||
LOGD("UDP connection timeout");
|
||||
LOGD("[udp] connection timeout");
|
||||
}
|
||||
|
||||
char *key = hash_key(remote_ctx->addr_header,
|
||||
@@ -384,7 +384,7 @@ static void query_resolve_cb(EV_P_ ev_io *w, int revents)
|
||||
return;
|
||||
} else if (err == ASYNCNS_HANDLE_ERROR) {
|
||||
// asyncns error
|
||||
FATAL("asyncns exit unexpectedly.");
|
||||
FATAL("[udp] asyncns exit unexpectedly.");
|
||||
}
|
||||
|
||||
asyncns_query_t *query = asyncns_getnext(asyncns);
|
||||
@@ -405,7 +405,7 @@ static void query_resolve_cb(EV_P_ ev_io *w, int revents)
|
||||
err = asyncns_getaddrinfo_done(asyncns, query, &result);
|
||||
|
||||
if (err) {
|
||||
ERROR("getaddrinfo");
|
||||
ERROR("[udp] getaddrinfo");
|
||||
} else {
|
||||
// Use IPV4 address if possible
|
||||
for (rp = result; rp != NULL; rp = rp->ai_next) {
|
||||
@@ -449,7 +449,7 @@ static void query_resolve_cb(EV_P_ ev_io *w, int revents)
|
||||
addr_len);
|
||||
|
||||
if (s == -1) {
|
||||
ERROR("udprelay_sendto_remote");
|
||||
ERROR("[udp] sendto_remote");
|
||||
close_and_free_remote(EV_A_ remote_ctx);
|
||||
} else {
|
||||
// Add to conn cache
|
||||
@@ -463,7 +463,7 @@ static void query_resolve_cb(EV_P_ ev_io *w, int revents)
|
||||
}
|
||||
|
||||
} else {
|
||||
ERROR("udprelay bind() error..");
|
||||
ERROR("[udp] bind() error..");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -480,7 +480,7 @@ static void remote_recv_cb(EV_P_ ev_io *w, int revents)
|
||||
|
||||
// server has been closed
|
||||
if (server_ctx == NULL) {
|
||||
LOGE("invalid server.");
|
||||
LOGE("[udp] invalid server.");
|
||||
close_and_free_remote(EV_A_ remote_ctx);
|
||||
return;
|
||||
}
|
||||
@@ -504,7 +504,7 @@ static void remote_recv_cb(EV_P_ ev_io *w, int revents)
|
||||
// error on recv
|
||||
// simply drop that packet
|
||||
if (verbose) {
|
||||
ERROR("udprelay_server_recvfrom");
|
||||
ERROR("[udp] server_recvfrom");
|
||||
}
|
||||
goto CLEAN_UP;
|
||||
}
|
||||
@@ -513,14 +513,14 @@ static void remote_recv_cb(EV_P_ ev_io *w, int revents)
|
||||
buf = ss_decrypt_all(BUF_SIZE, buf, &buf_len, server_ctx->method);
|
||||
if (buf == NULL) {
|
||||
if (verbose) {
|
||||
ERROR("udprelay_server_ss_decrypt_all");
|
||||
ERROR("[udp] server_ss_decrypt_all");
|
||||
}
|
||||
goto CLEAN_UP;
|
||||
}
|
||||
|
||||
int len = parse_udprealy_header(buf, buf_len, NULL, NULL);
|
||||
if (len == 0) {
|
||||
LOGD("[udp] Error in parse header");
|
||||
LOGD("[udp] error in parse header");
|
||||
// error in parse header
|
||||
goto CLEAN_UP;
|
||||
}
|
||||
@@ -565,7 +565,7 @@ static void remote_recv_cb(EV_P_ ev_io *w, int revents)
|
||||
(struct sockaddr *)&remote_ctx->src_addr, addr_len);
|
||||
|
||||
if (s == -1) {
|
||||
ERROR("udprelay_sendto_local");
|
||||
ERROR("[udp] sendto_local");
|
||||
}
|
||||
|
||||
CLEAN_UP:
|
||||
@@ -590,7 +590,7 @@ static void server_recv_cb(EV_P_ ev_io *w, int revents)
|
||||
// error on recv
|
||||
// simply drop that packet
|
||||
if (verbose) {
|
||||
ERROR("udprelay_server_recvfrom");
|
||||
ERROR("[udp] server_recvfrom");
|
||||
}
|
||||
goto CLEAN_UP;
|
||||
}
|
||||
@@ -603,7 +603,7 @@ static void server_recv_cb(EV_P_ ev_io *w, int revents)
|
||||
buf = ss_decrypt_all(BUF_SIZE, buf, &buf_len, server_ctx->method);
|
||||
if (buf == NULL) {
|
||||
if (verbose) {
|
||||
ERROR("udprelay_server_ss_decrypt_all");
|
||||
ERROR("[udp] server_ss_decrypt_all");
|
||||
}
|
||||
goto CLEAN_UP;
|
||||
}
|
||||
@@ -720,7 +720,7 @@ static void server_recv_cb(EV_P_ ev_io *w, int revents)
|
||||
|
||||
#ifndef UDPRELAY_TUNNEL
|
||||
if (frag) {
|
||||
LOGE("drop a message since frag is not 0, but %d", frag);
|
||||
LOGE("[udp] drop a message since frag is not 0, but %d", frag);
|
||||
goto CLEAN_UP;
|
||||
}
|
||||
#endif
|
||||
@@ -736,14 +736,14 @@ static void server_recv_cb(EV_P_ ev_io *w, int revents)
|
||||
int s = getaddrinfo(server_ctx->remote_host, server_ctx->remote_port,
|
||||
&hints, &result);
|
||||
if (s != 0 || result == NULL) {
|
||||
LOGE("getaddrinfo: %s", gai_strerror(s));
|
||||
LOGE("[udp] getaddrinfo: %s", gai_strerror(s));
|
||||
goto CLEAN_UP;
|
||||
}
|
||||
|
||||
// Bind to any port
|
||||
int remotefd = create_remote_socket(result->ai_family == AF_INET6);
|
||||
if (remotefd < 0) {
|
||||
ERROR("udprelay bind() error..");
|
||||
ERROR("[udp] udprelay bind() error..");
|
||||
// remember to free addrinfo
|
||||
freeaddrinfo(result);
|
||||
goto CLEAN_UP;
|
||||
@@ -792,7 +792,7 @@ static void server_recv_cb(EV_P_ ev_io *w, int revents)
|
||||
(struct sockaddr *)&remote_ctx->dst_addr, addr_len);
|
||||
|
||||
if (s == -1) {
|
||||
ERROR("udprelay_sendto_remote");
|
||||
ERROR("[udp] sendto_remote");
|
||||
}
|
||||
|
||||
#else
|
||||
@@ -808,7 +808,7 @@ static void server_recv_cb(EV_P_ ev_io *w, int revents)
|
||||
host, port, &hints);
|
||||
|
||||
if (query == NULL) {
|
||||
ERROR("udp_asyncns_getaddrinfo");
|
||||
ERROR("[udp] asyncns_getaddrinfo");
|
||||
goto CLEAN_UP;
|
||||
}
|
||||
|
||||
@@ -830,7 +830,7 @@ static void server_recv_cb(EV_P_ ev_io *w, int revents)
|
||||
(struct sockaddr *)&remote_ctx->dst_addr, addr_len);
|
||||
|
||||
if (s == -1) {
|
||||
ERROR("udprelay_sendto_remote");
|
||||
ERROR("[udp] sendto_remote");
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@@ -845,7 +845,7 @@ void free_cb(void *element)
|
||||
struct remote_ctx *remote_ctx = (struct remote_ctx *)element;
|
||||
|
||||
if (verbose) {
|
||||
LOGD("free a remote ctx");
|
||||
LOGD("[udp] free a remote context");
|
||||
}
|
||||
|
||||
close_and_free_remote(EV_DEFAULT, remote_ctx);
|
||||
@@ -877,7 +877,7 @@ int init_udprelay(const char *server_host, const char *server_port,
|
||||
// setup asyncns
|
||||
asyncns_t *asyncns;
|
||||
if (!(asyncns = asyncns_new(dns_thread_num))) {
|
||||
FATAL("asyncns failed");
|
||||
FATAL("[udp] asyncns failed");
|
||||
}
|
||||
resolve_ctx = malloc(sizeof(struct resolve_ctx));
|
||||
|
||||
@@ -892,7 +892,7 @@ int init_udprelay(const char *server_host, const char *server_port,
|
||||
// Bind to port
|
||||
int serverfd = create_server_socket(server_host, server_port);
|
||||
if (serverfd < 0) {
|
||||
FATAL("udprelay bind() error..");
|
||||
FATAL("[udp] bind() error..");
|
||||
}
|
||||
setnonblocking(serverfd);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user