Improved network function
This commit is contained in:
parent
fc30c7d54b
commit
79cb575548
@ -736,31 +736,31 @@ int capwap_ipv4_mapped_ipv6(struct sockaddr_storage* source, struct sockaddr_sto
|
||||
|
||||
/* Convert string into address */
|
||||
int capwap_address_from_string(const char* ip, struct sockaddr_storage* address) {
|
||||
char* pos;
|
||||
char* buffer;
|
||||
struct addrinfo hints;
|
||||
struct addrinfo* info = NULL;
|
||||
char* service = NULL;
|
||||
char buffer[256];
|
||||
char* pos;
|
||||
int length;
|
||||
|
||||
ASSERT(ip != NULL);
|
||||
ASSERT(address != NULL);
|
||||
|
||||
/* Init */
|
||||
memset(address, 0, sizeof(struct sockaddr_storage));
|
||||
length = strlen(ip);
|
||||
if ((length == 0) || (length >= sizeof(buffer))) {
|
||||
if (!*ip) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* */
|
||||
buffer = capwap_duplicate_string(ip);
|
||||
|
||||
/* */
|
||||
memset(&hints, 0, sizeof(struct addrinfo));
|
||||
hints.ai_family = AF_UNSPEC;
|
||||
hints.ai_flags = 0;
|
||||
|
||||
/* Parsing ipv6 address */
|
||||
strcpy(buffer, ip);
|
||||
pos = &buffer[0];
|
||||
/* Parsing address */
|
||||
pos = buffer;
|
||||
if (*pos == '[') {
|
||||
char* temp = pos + 1;
|
||||
|
||||
@ -770,6 +770,7 @@ int capwap_address_from_string(const char* ip, struct sockaddr_storage* address)
|
||||
|
||||
temp = strchr(temp, ']');
|
||||
if (!temp) {
|
||||
capwap_free(buffer);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -778,6 +779,7 @@ int capwap_address_from_string(const char* ip, struct sockaddr_storage* address)
|
||||
service = temp + 2;
|
||||
hints.ai_flags |= AI_NUMERICSERV;
|
||||
} else if (*(temp + 1)) {
|
||||
capwap_free(buffer);
|
||||
return 0;
|
||||
}
|
||||
} else {
|
||||
@ -791,12 +793,15 @@ int capwap_address_from_string(const char* ip, struct sockaddr_storage* address)
|
||||
|
||||
/* Parsing address */
|
||||
if (getaddrinfo(pos, service, &hints, &info)) {
|
||||
capwap_free(buffer);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Copy address */
|
||||
memcpy(address, info->ai_addr, info->ai_addrlen);
|
||||
|
||||
freeaddrinfo(info);
|
||||
capwap_free(buffer);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user