Add custom union for handling both sockaddr_in/sockaddr_in6 structures

pull/791/head
Donatas Abraitis 10 years ago committed by René Cannaò
parent 0e8a99c303
commit ff8366a54b

@ -10,8 +10,6 @@
#define EXPMARIA
#define BUFLEN 256
extern const CHARSET_INFO * proxysql_find_charset_name(const char * const name);
extern MySQL_Authentication *GloMyAuth;
@ -1778,16 +1776,16 @@ __get_pkts_from_client:
default:
proxy_debug(PROXY_DEBUG_MYSQL_CONNECTION, 5, "Statuses: WAITING_CLIENT_DATA - STATE_UNKNOWN\n");
{
char buf[BUFLEN];
char buf[INET6_ADDRSTRLEN];
switch (client_myds->client_addr->sa_family) {
case AF_INET: {
struct sockaddr_in *ipv4 = (struct sockaddr_in *)client_myds->client_addr;
inet_ntop(client_myds->client_addr->sa_family, &ipv4->sin_addr, buf, BUFLEN);
inet_ntop(client_myds->client_addr->sa_family, &ipv4->sin_addr, buf, INET_ADDRSTRLEN);
break;
}
case AF_INET6: {
struct sockaddr_in6 *ipv6 = (struct sockaddr_in6 *)client_myds->client_addr;
inet_ntop(client_myds->client_addr->sa_family, &ipv6->sin6_addr, buf, BUFLEN);
inet_ntop(client_myds->client_addr->sa_family, &ipv6->sin6_addr, buf, INET6_ADDRSTRLEN);
break;
}
default:

@ -10,7 +10,6 @@ MySQL_Session *sess_stopat;
#define PROXYSQL_LISTEN_LEN 1024
#define MIN_THREADS_FOR_MAINTENANCE 8
#define BUFLEN 256
extern Query_Processor *GloQPro;
extern MySQL_Authentication *GloMyAuth;
@ -2868,9 +2867,13 @@ void MySQL_Thread::unregister_session_connection_handler(int idx, bool _new) {
void MySQL_Thread::listener_handle_new_connection(MySQL_Data_Stream *myds, unsigned int n) {
int c;
struct sockaddr *addr=(struct sockaddr *)malloc(sizeof(struct sockaddr));
socklen_t addrlen=sizeof(struct sockaddr);
memset(addr, 0, sizeof(struct sockaddr));
union {
struct sockaddr_in in;
struct sockaddr_in6 in6;
} custom_sockaddr;
struct sockaddr *addr=(struct sockaddr *)malloc(sizeof(custom_sockaddr));
socklen_t addrlen=sizeof(custom_sockaddr);
memset(addr, 0, sizeof(custom_sockaddr));
if (GloMTH->num_threads > 1) {
// there are more than 1 thread . We pause for a little bit to avoid all connections to be handled by the same thread
#ifdef SO_REUSEPORT
@ -2898,18 +2901,18 @@ void MySQL_Thread::listener_handle_new_connection(MySQL_Data_Stream *myds, unsig
switch (sess->client_myds->client_addr->sa_family) {
case AF_INET: {
struct sockaddr_in *ipv4 = (struct sockaddr_in *)sess->client_myds->client_addr;
char buf[BUFLEN];
inet_ntop(sess->client_myds->client_addr->sa_family, &ipv4->sin_addr, buf, BUFLEN);
sess->client_myds->addr.addr = strdup(buf);
sess->client_myds->addr.port = htons(ipv4->sin_port);
char buf[INET_ADDRSTRLEN];
inet_ntop(sess->client_myds->client_addr->sa_family, &ipv4->sin_addr, buf, INET_ADDRSTRLEN);
sess->client_myds->addr.addr = strdup(buf);
sess->client_myds->addr.port = htons(ipv4->sin_port);
break;
}
case AF_INET6: {
struct sockaddr_in6 *ipv6 = (struct sockaddr_in6 *)sess->client_myds->client_addr;
char buf[BUFLEN];
inet_ntop(sess->client_myds->client_addr->sa_family, &ipv6->sin6_addr, buf, BUFLEN);
sess->client_myds->addr.addr = strdup(buf);
sess->client_myds->addr.port = htons(ipv6->sin6_port);
char buf[INET6_ADDRSTRLEN];
inet_ntop(sess->client_myds->client_addr->sa_family, &ipv6->sin6_addr, buf, INET6_ADDRSTRLEN);
sess->client_myds->addr.addr = strdup(buf);
sess->client_myds->addr.port = htons(ipv6->sin6_port);
break;
}
default:
@ -3243,7 +3246,7 @@ SQLite3_result * MySQL_Threads_Handler::SQL3_Processlist() {
switch (sess->client_myds->client_addr->sa_family) {
case AF_INET: {
struct sockaddr_in *ipv4 = (struct sockaddr_in *)sess->client_myds->client_addr;
inet_ntop(sess->client_myds->client_addr->sa_family, &ipv4->sin_addr, buf, BUFLEN);
inet_ntop(sess->client_myds->client_addr->sa_family, &ipv4->sin_addr, buf, INET_ADDRSTRLEN);
pta[4] = strdup(buf);
sprintf(port, "%d", ntohs(ipv4->sin_port));
pta[5] = strdup(port);
@ -3251,7 +3254,7 @@ SQLite3_result * MySQL_Threads_Handler::SQL3_Processlist() {
}
case AF_INET6: {
struct sockaddr_in6 *ipv6 = (struct sockaddr_in6 *)sess->client_myds->client_addr;
inet_ntop(sess->client_myds->client_addr->sa_family, &ipv6->sin6_addr, buf, BUFLEN);
inet_ntop(sess->client_myds->client_addr->sa_family, &ipv6->sin6_addr, buf, INET6_ADDRSTRLEN);
pta[4] = strdup(buf);
sprintf(port, "%d", ntohs(ipv6->sin6_port));
pta[5] = strdup(port);
@ -3278,7 +3281,7 @@ SQLite3_result * MySQL_Threads_Handler::SQL3_Processlist() {
switch (addr.sa_family) {
case AF_INET: {
struct sockaddr_in *ipv4 = (struct sockaddr_in *)&addr;
inet_ntop(addr.sa_family, &ipv4->sin_addr, buf, BUFLEN);
inet_ntop(addr.sa_family, &ipv4->sin_addr, buf, INET_ADDRSTRLEN);
pta[7] = strdup(buf);
sprintf(port, "%d", ntohs(ipv4->sin_port));
pta[8] = strdup(port);
@ -3286,7 +3289,7 @@ SQLite3_result * MySQL_Threads_Handler::SQL3_Processlist() {
}
case AF_INET6: {
struct sockaddr_in6 *ipv6 = (struct sockaddr_in6 *)&addr;
inet_ntop(addr.sa_family, &ipv6->sin6_addr, buf, BUFLEN);
inet_ntop(addr.sa_family, &ipv6->sin6_addr, buf, INET6_ADDRSTRLEN);
pta[7] = strdup(buf);
sprintf(port, "%d", ntohs(ipv6->sin6_port));
pta[8] = strdup(port);

Loading…
Cancel
Save