diff --git a/error.h b/error.h index 342a0d6..35ba011 100644 --- a/error.h +++ b/error.h @@ -67,7 +67,7 @@ static int unie(int e) #define LOG_E -1 #define LOG_S 1 #define LOG_L 2 - static void LOG(int s, char *str, ...) { + static void LOG(int s, const char *str, ...) { if (params.debug >= s) { va_list args; va_start(args, str); diff --git a/extend.c b/extend.c index 07a3a81..b47fb6e 100644 --- a/extend.c +++ b/extend.c @@ -218,11 +218,11 @@ static bool check_ip( struct mphdr *ipset, const union sockaddr_u *dst) { int len = sizeof(dst->in.sin_addr); - char *data = (char *)&dst->in.sin_addr; + const char *data = (const char *)&dst->in.sin_addr; if (dst->sa.sa_family == AF_INET6) { len = sizeof(dst->in6.sin6_addr); - data = (char *)&dst->in6.sin6_addr; + data = (const char *)&dst->in6.sin6_addr; } if (mem_get(ipset, data, len * 8)) { return 1; diff --git a/params.h b/params.h index bacb24f..2e7b3a4 100644 --- a/params.h +++ b/params.h @@ -47,7 +47,7 @@ enum demode { }; #ifdef STR_MODE -char *demode_str[] = { +static const char *demode_str[] = { "DESYNC_NONE", "DESYNC_SPLIT", "DESYNC_DISORDER", diff --git a/proxy.c b/proxy.c index 421f1c4..e3e0ba0 100644 --- a/proxy.c +++ b/proxy.c @@ -79,8 +79,8 @@ static inline char addr_equ( { if (a->sa.sa_family == AF_INET) { return - *((uint32_t *)(&a->in.sin_addr)) == - *((uint32_t *)(&b->in.sin_addr)); + *((const uint32_t *)(&a->in.sin_addr)) == + *((const uint32_t *)(&b->in.sin_addr)); } return memcmp(&a->in6.sin6_addr, &b->in6.sin6_addr, sizeof(b->in6.sin6_addr)) == 0; @@ -118,7 +118,7 @@ static inline int nb_socket(int domain, int type) } -static int resolve(char *host, int len, +static int resolve(const char *chost, int len, union sockaddr_u *addr, int type) { struct addrinfo hints = {0}, *res = 0; @@ -129,21 +129,18 @@ static int resolve(char *host, int len, hints.ai_flags |= AI_NUMERICHOST; hints.ai_family = params.ipv6 ? AF_UNSPEC : AF_INET; - char rchar = host[len]; - host[len] = '\0'; + char host[len + 1]; + host[len] = 0; + memcpy(host, chost, len); + LOG(LOG_S, "resolve: %s\n", host); if (getaddrinfo(host, 0, &hints, &res) || !res) { - host[len] = rchar; return -1; } - if (res->ai_addr->sa_family == AF_INET6) - addr->in6 = *(struct sockaddr_in6 *)res->ai_addr; - else - addr->in = *(struct sockaddr_in *)res->ai_addr; + memcpy(addr, res->ai_addr, SA_SIZE(res->ai_addr)); freeaddrinfo(res); - host[len] = rchar; return 0; } @@ -233,7 +230,7 @@ static int s4_get_addr(const char *buff, if (n < sizeof(struct s4_req) + 1) { return -1; } - struct s4_req *r = (struct s4_req *)buff; + const struct s4_req *r = (const struct s4_req *)buff; if (r->cmd != S_CMD_CONN) { return -1; @@ -271,7 +268,7 @@ static int s5_get_addr(const char *buffer, LOG(LOG_E, "ss: request too small\n"); return -S_ER_GEN; } - struct s5_req *r = (struct s5_req *)buffer; + const struct s5_req *r = (const struct s5_req *)buffer; size_t o = (r->atp == S_ATP_I4 ? S_SIZE_I4 : (r->atp == S_ATP_ID ? r->dst.id.len + S_SIZE_ID : diff --git a/proxy.h b/proxy.h index 66e98d7..d5ba47c 100644 --- a/proxy.h +++ b/proxy.h @@ -13,7 +13,7 @@ #include "conev.h" #define SA_SIZE(s) \ - (((struct sockaddr *)s)->sa_family == AF_INET6) ? \ + (((const struct sockaddr *)s)->sa_family == AF_INET6) ? \ sizeof(struct sockaddr_in6) : sizeof(struct sockaddr_in) #pragma pack(push, 1)