move more utils to sigar_format.[ch]
This commit is contained in:
parent
f037037b0a
commit
67275223f3
@ -469,15 +469,6 @@ typedef struct {
|
||||
} addr;
|
||||
} sigar_net_address_t;
|
||||
|
||||
SIGAR_DECLARE(int) sigar_net_address_equals(sigar_net_address_t *addr1,
|
||||
sigar_net_address_t *addr2);
|
||||
|
||||
SIGAR_DECLARE(int) sigar_net_address_to_string(sigar_t *sigar,
|
||||
sigar_net_address_t *address,
|
||||
char *addr_str);
|
||||
|
||||
SIGAR_DECLARE(sigar_uint32_t) sigar_net_address_hash(sigar_net_address_t *address);
|
||||
|
||||
#define SIGAR_INET6_ADDRSTRLEN 46
|
||||
|
||||
#define SIGAR_MAXDOMAINNAMELEN 256
|
||||
|
@ -26,6 +26,16 @@ SIGAR_DECLARE(int) sigar_uptime_string(sigar_t *sigar,
|
||||
|
||||
SIGAR_DECLARE(char *) sigar_format_size(sigar_uint64_t size, char *buf);
|
||||
|
||||
SIGAR_DECLARE(int) sigar_net_address_equals(sigar_net_address_t *addr1,
|
||||
sigar_net_address_t *addr2);
|
||||
|
||||
SIGAR_DECLARE(int) sigar_net_address_to_string(sigar_t *sigar,
|
||||
sigar_net_address_t *address,
|
||||
char *addr_str);
|
||||
|
||||
SIGAR_DECLARE(sigar_uint32_t) sigar_net_address_hash(sigar_net_address_t *address);
|
||||
|
||||
|
||||
SIGAR_DECLARE(const char *)sigar_net_connection_type_get(int type);
|
||||
|
||||
SIGAR_DECLARE(const char *)sigar_net_connection_state_get(int state);
|
||||
|
@ -54,6 +54,10 @@
|
||||
|
||||
char *sigar_uitoa(char *buf, unsigned int n, int *len);
|
||||
|
||||
int sigar_inet_ntoa(sigar_t *sigar,
|
||||
sigar_uint32_t address,
|
||||
char *addr_str);
|
||||
|
||||
struct hostent *sigar_gethostbyname(const char *name,
|
||||
sigar_hostent_t *data);
|
||||
|
||||
|
136
src/sigar.c
136
src/sigar.c
@ -29,6 +29,7 @@
|
||||
#include "sigar_private.h"
|
||||
#include "sigar_util.h"
|
||||
#include "sigar_os.h"
|
||||
#include "sigar_format.h"
|
||||
|
||||
SIGAR_DECLARE(int) sigar_open(sigar_t **sigar)
|
||||
{
|
||||
@ -1633,141 +1634,6 @@ int sigar_net_interface_list_get(sigar_t *sigar,
|
||||
|
||||
#endif /* WIN32 */
|
||||
|
||||
#ifndef WIN32
|
||||
#include <netinet/in.h>
|
||||
#endif
|
||||
|
||||
/* threadsafe alternative to inet_ntoa (inet_ntop4 from apr) */
|
||||
static int sigar_inet_ntoa(sigar_t *sigar,
|
||||
sigar_uint32_t address,
|
||||
char *addr_str)
|
||||
{
|
||||
char *next=addr_str;
|
||||
int n=0;
|
||||
const unsigned char *src =
|
||||
(const unsigned char *)&address;
|
||||
|
||||
do {
|
||||
unsigned char u = *src++;
|
||||
if (u > 99) {
|
||||
*next++ = '0' + u/100;
|
||||
u %= 100;
|
||||
*next++ = '0' + u/10;
|
||||
u %= 10;
|
||||
}
|
||||
else if (u > 9) {
|
||||
*next++ = '0' + u/10;
|
||||
u %= 10;
|
||||
}
|
||||
*next++ = '0' + u;
|
||||
*next++ = '.';
|
||||
n++;
|
||||
} while (n < 4);
|
||||
|
||||
*--next = 0;
|
||||
|
||||
return SIGAR_OK;
|
||||
}
|
||||
|
||||
static int sigar_ether_ntoa(char *buff, unsigned char *ptr)
|
||||
{
|
||||
sprintf(buff, "%02X:%02X:%02X:%02X:%02X:%02X",
|
||||
(ptr[0] & 0xff), (ptr[1] & 0xff), (ptr[2] & 0xff),
|
||||
(ptr[3] & 0xff), (ptr[4] & 0xff), (ptr[5] & 0xff));
|
||||
return SIGAR_OK;
|
||||
}
|
||||
|
||||
SIGAR_DECLARE(int) sigar_net_address_equals(sigar_net_address_t *addr1,
|
||||
sigar_net_address_t *addr2)
|
||||
|
||||
{
|
||||
if (addr1->family != addr2->family) {
|
||||
return EINVAL;
|
||||
}
|
||||
|
||||
switch (addr1->family) {
|
||||
case SIGAR_AF_INET:
|
||||
return memcmp(&addr1->addr.in, &addr2->addr.in, sizeof(addr1->addr.in));
|
||||
case SIGAR_AF_INET6:
|
||||
return memcmp(&addr1->addr.in6, &addr2->addr.in6, sizeof(addr1->addr.in6));
|
||||
case SIGAR_AF_LINK:
|
||||
return memcmp(&addr1->addr.mac, &addr2->addr.mac, sizeof(addr1->addr.mac));
|
||||
default:
|
||||
return EINVAL;
|
||||
}
|
||||
}
|
||||
|
||||
#if !defined(WIN32) && !defined(NETWARE) && !defined(__hpux)
|
||||
#define sigar_inet_ntop inet_ntop
|
||||
#define sigar_inet_ntop_errno errno
|
||||
#else
|
||||
#define sigar_inet_ntop(af, src, dst, size) NULL
|
||||
#define sigar_inet_ntop_errno EINVAL
|
||||
#endif
|
||||
|
||||
SIGAR_DECLARE(int) sigar_net_address_to_string(sigar_t *sigar,
|
||||
sigar_net_address_t *address,
|
||||
char *addr_str)
|
||||
{
|
||||
switch (address->family) {
|
||||
case SIGAR_AF_INET6:
|
||||
if (sigar_inet_ntop(AF_INET6, (const void *)&address->addr.in6,
|
||||
addr_str, SIGAR_INET6_ADDRSTRLEN))
|
||||
{
|
||||
return SIGAR_OK;
|
||||
}
|
||||
else {
|
||||
return sigar_inet_ntop_errno;
|
||||
}
|
||||
case SIGAR_AF_INET:
|
||||
return sigar_inet_ntoa(sigar, address->addr.in, addr_str);
|
||||
case SIGAR_AF_UNSPEC:
|
||||
return sigar_inet_ntoa(sigar, 0, addr_str); /*XXX*/
|
||||
case SIGAR_AF_LINK:
|
||||
return sigar_ether_ntoa(addr_str, &address->addr.mac[0]);
|
||||
default:
|
||||
return EINVAL;
|
||||
}
|
||||
}
|
||||
|
||||
SIGAR_DECLARE(sigar_uint32_t) sigar_net_address_hash(sigar_net_address_t *address)
|
||||
{
|
||||
sigar_uint32_t hash = 0;
|
||||
unsigned char *data;
|
||||
int i=0, size, elts;
|
||||
|
||||
switch (address->family) {
|
||||
case SIGAR_AF_UNSPEC:
|
||||
case SIGAR_AF_INET:
|
||||
return address->addr.in;
|
||||
case SIGAR_AF_INET6:
|
||||
data = (unsigned char *)&address->addr.in6;
|
||||
size = sizeof(address->addr.in6);
|
||||
elts = 4;
|
||||
break;
|
||||
case SIGAR_AF_LINK:
|
||||
data = (unsigned char *)&address->addr.mac;
|
||||
size = sizeof(address->addr.mac);
|
||||
elts = 2;
|
||||
break;
|
||||
default:
|
||||
return -1;
|
||||
}
|
||||
|
||||
while (i<size) {
|
||||
int j=0;
|
||||
int component=0;
|
||||
while (j<elts && i<size) {
|
||||
component = (component << 8) + data[i];
|
||||
j++;
|
||||
i++;
|
||||
}
|
||||
hash += component;
|
||||
}
|
||||
|
||||
return hash;
|
||||
}
|
||||
|
||||
SIGAR_DECLARE(int)
|
||||
sigar_net_interface_config_primary_get(sigar_t *sigar,
|
||||
sigar_net_interface_config_t *ifconfig)
|
||||
|
@ -28,6 +28,10 @@
|
||||
#include <grp.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#ifndef WIN32
|
||||
#include <arpa/inet.h>
|
||||
#endif
|
||||
|
||||
int sigar_user_name_get(sigar_t *sigar, int uid, char *buf, int buflen)
|
||||
{
|
||||
struct passwd *pw = NULL;
|
||||
@ -281,6 +285,141 @@ SIGAR_DECLARE(int) sigar_uptime_string(sigar_t *sigar,
|
||||
}
|
||||
|
||||
|
||||
#ifndef WIN32
|
||||
#include <netinet/in.h>
|
||||
#endif
|
||||
|
||||
/* threadsafe alternative to inet_ntoa (inet_ntop4 from apr) */
|
||||
int sigar_inet_ntoa(sigar_t *sigar,
|
||||
sigar_uint32_t address,
|
||||
char *addr_str)
|
||||
{
|
||||
char *next=addr_str;
|
||||
int n=0;
|
||||
const unsigned char *src =
|
||||
(const unsigned char *)&address;
|
||||
|
||||
do {
|
||||
unsigned char u = *src++;
|
||||
if (u > 99) {
|
||||
*next++ = '0' + u/100;
|
||||
u %= 100;
|
||||
*next++ = '0' + u/10;
|
||||
u %= 10;
|
||||
}
|
||||
else if (u > 9) {
|
||||
*next++ = '0' + u/10;
|
||||
u %= 10;
|
||||
}
|
||||
*next++ = '0' + u;
|
||||
*next++ = '.';
|
||||
n++;
|
||||
} while (n < 4);
|
||||
|
||||
*--next = 0;
|
||||
|
||||
return SIGAR_OK;
|
||||
}
|
||||
|
||||
static int sigar_ether_ntoa(char *buff, unsigned char *ptr)
|
||||
{
|
||||
sprintf(buff, "%02X:%02X:%02X:%02X:%02X:%02X",
|
||||
(ptr[0] & 0xff), (ptr[1] & 0xff), (ptr[2] & 0xff),
|
||||
(ptr[3] & 0xff), (ptr[4] & 0xff), (ptr[5] & 0xff));
|
||||
return SIGAR_OK;
|
||||
}
|
||||
|
||||
SIGAR_DECLARE(int) sigar_net_address_equals(sigar_net_address_t *addr1,
|
||||
sigar_net_address_t *addr2)
|
||||
|
||||
{
|
||||
if (addr1->family != addr2->family) {
|
||||
return EINVAL;
|
||||
}
|
||||
|
||||
switch (addr1->family) {
|
||||
case SIGAR_AF_INET:
|
||||
return memcmp(&addr1->addr.in, &addr2->addr.in, sizeof(addr1->addr.in));
|
||||
case SIGAR_AF_INET6:
|
||||
return memcmp(&addr1->addr.in6, &addr2->addr.in6, sizeof(addr1->addr.in6));
|
||||
case SIGAR_AF_LINK:
|
||||
return memcmp(&addr1->addr.mac, &addr2->addr.mac, sizeof(addr1->addr.mac));
|
||||
default:
|
||||
return EINVAL;
|
||||
}
|
||||
}
|
||||
|
||||
#if !defined(WIN32) && !defined(NETWARE) && !defined(__hpux)
|
||||
#define sigar_inet_ntop inet_ntop
|
||||
#define sigar_inet_ntop_errno errno
|
||||
#else
|
||||
#define sigar_inet_ntop(af, src, dst, size) NULL
|
||||
#define sigar_inet_ntop_errno EINVAL
|
||||
#endif
|
||||
|
||||
SIGAR_DECLARE(int) sigar_net_address_to_string(sigar_t *sigar,
|
||||
sigar_net_address_t *address,
|
||||
char *addr_str)
|
||||
{
|
||||
switch (address->family) {
|
||||
case SIGAR_AF_INET6:
|
||||
if (sigar_inet_ntop(AF_INET6, (const void *)&address->addr.in6,
|
||||
addr_str, SIGAR_INET6_ADDRSTRLEN))
|
||||
{
|
||||
return SIGAR_OK;
|
||||
}
|
||||
else {
|
||||
return sigar_inet_ntop_errno;
|
||||
}
|
||||
case SIGAR_AF_INET:
|
||||
return sigar_inet_ntoa(sigar, address->addr.in, addr_str);
|
||||
case SIGAR_AF_UNSPEC:
|
||||
return sigar_inet_ntoa(sigar, 0, addr_str); /*XXX*/
|
||||
case SIGAR_AF_LINK:
|
||||
return sigar_ether_ntoa(addr_str, &address->addr.mac[0]);
|
||||
default:
|
||||
return EINVAL;
|
||||
}
|
||||
}
|
||||
|
||||
SIGAR_DECLARE(sigar_uint32_t) sigar_net_address_hash(sigar_net_address_t *address)
|
||||
{
|
||||
sigar_uint32_t hash = 0;
|
||||
unsigned char *data;
|
||||
int i=0, size, elts;
|
||||
|
||||
switch (address->family) {
|
||||
case SIGAR_AF_UNSPEC:
|
||||
case SIGAR_AF_INET:
|
||||
return address->addr.in;
|
||||
case SIGAR_AF_INET6:
|
||||
data = (unsigned char *)&address->addr.in6;
|
||||
size = sizeof(address->addr.in6);
|
||||
elts = 4;
|
||||
break;
|
||||
case SIGAR_AF_LINK:
|
||||
data = (unsigned char *)&address->addr.mac;
|
||||
size = sizeof(address->addr.mac);
|
||||
elts = 2;
|
||||
break;
|
||||
default:
|
||||
return -1;
|
||||
}
|
||||
|
||||
while (i<size) {
|
||||
int j=0;
|
||||
int component=0;
|
||||
while (j<elts && i<size) {
|
||||
component = (component << 8) + data[i];
|
||||
j++;
|
||||
i++;
|
||||
}
|
||||
hash += component;
|
||||
}
|
||||
|
||||
return hash;
|
||||
}
|
||||
|
||||
SIGAR_DECLARE(const char *)sigar_net_connection_type_get(int type)
|
||||
{
|
||||
switch (type) {
|
||||
|
Loading…
Reference in New Issue
Block a user