move more utils to sigar_format.[ch]
This commit is contained in:
parent
f037037b0a
commit
67275223f3
@ -469,15 +469,6 @@ typedef struct {
|
|||||||
} addr;
|
} addr;
|
||||||
} sigar_net_address_t;
|
} 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_INET6_ADDRSTRLEN 46
|
||||||
|
|
||||||
#define SIGAR_MAXDOMAINNAMELEN 256
|
#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(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_type_get(int type);
|
||||||
|
|
||||||
SIGAR_DECLARE(const char *)sigar_net_connection_state_get(int state);
|
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);
|
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,
|
struct hostent *sigar_gethostbyname(const char *name,
|
||||||
sigar_hostent_t *data);
|
sigar_hostent_t *data);
|
||||||
|
|
||||||
|
136
src/sigar.c
136
src/sigar.c
@ -29,6 +29,7 @@
|
|||||||
#include "sigar_private.h"
|
#include "sigar_private.h"
|
||||||
#include "sigar_util.h"
|
#include "sigar_util.h"
|
||||||
#include "sigar_os.h"
|
#include "sigar_os.h"
|
||||||
|
#include "sigar_format.h"
|
||||||
|
|
||||||
SIGAR_DECLARE(int) sigar_open(sigar_t **sigar)
|
SIGAR_DECLARE(int) sigar_open(sigar_t **sigar)
|
||||||
{
|
{
|
||||||
@ -1633,141 +1634,6 @@ int sigar_net_interface_list_get(sigar_t *sigar,
|
|||||||
|
|
||||||
#endif /* WIN32 */
|
#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_DECLARE(int)
|
||||||
sigar_net_interface_config_primary_get(sigar_t *sigar,
|
sigar_net_interface_config_primary_get(sigar_t *sigar,
|
||||||
sigar_net_interface_config_t *ifconfig)
|
sigar_net_interface_config_t *ifconfig)
|
||||||
|
@ -28,6 +28,10 @@
|
|||||||
#include <grp.h>
|
#include <grp.h>
|
||||||
#include <stdio.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)
|
int sigar_user_name_get(sigar_t *sigar, int uid, char *buf, int buflen)
|
||||||
{
|
{
|
||||||
struct passwd *pw = NULL;
|
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)
|
SIGAR_DECLARE(const char *)sigar_net_connection_type_get(int type)
|
||||||
{
|
{
|
||||||
switch (type) {
|
switch (type) {
|
||||||
|
Loading…
Reference in New Issue
Block a user