-(
void
)checkNetworkflow{
struct
ifaddrs
*ifa_list =
0
, *ifa;
if
(getifaddrs(&ifa;_list) == -
1
)
{
return
;
}
uint
3
2
_t iBytes =
0
;
uint
3
2
_t oBytes =
0
;
uint
3
2
_t allFlow =
0
;
uint
3
2
_t wifiIBytes =
0
;
uint
3
2
_t wifiOBytes =
0
;
uint
3
2
_t wifiFlow =
0
;
uint
3
2
_t wwanIBytes =
0
;
uint
3
2
_t wwanOBytes =
0
;
uint
3
2
_t wwanFlow =
0
;
struct timeval time ;
for
(ifa = ifa_list; ifa; ifa = ifa->ifa_next)
{
if
(
AF_LINK
!= ifa->ifa_addr->sa_family)
continue;
if
(!(ifa->ifa_flags & IFF_UP) && !(ifa->ifa_flags & IFF_RUNNING))
continue;
if
(ifa->ifa_data ==
0
)
continue;
// Not a loopback device.
// network flow
if
(strncmp(ifa->ifa_name, "lo",
2
))
{
struct
if_data
*if_data = (struct
if_data
*)ifa->ifa_data;
iBytes += if_data->ifi_ibytes;
oBytes += if_data->ifi_obytes;
allFlow = iBytes + oBytes;
time = if_data->ifi_lastchange;
}
//wifi flow
if
(!strcmp(ifa->ifa_name, "en
0
"))
{
struct
if_data
*if_data = (struct
if_data
*)ifa->ifa_data;
wifiIBytes += if_data->ifi_ibytes;
wifiOBytes += if_data->ifi_obytes;
wifiFlow = wifiIBytes + wifiOBytes;
}
//3G and gprs flow
if
(!strcmp(ifa->ifa_name, "pdp_ip
0
"))
{
struct
if_data
*if_data = (struct
if_data
*)ifa->ifa_data;
wwanIBytes += if_data->ifi_ibytes;
wwanOBytes += if_data->ifi_obytes;
wwanFlow = wwanIBytes + wwanOBytes;
}
}
freeifaddrs(ifa_list);
}
#include <arpa/inet.h>
#include <net/if.h>
#include <ifaddrs.h>
#include <net/if_dl.h>
+ (
NSArray
*)getDataCounters
{
BOOL
success;
struct
ifaddrs
*addrs;
const
struct
ifaddrs
*cursor;
const
struct
if_data
*networkStatisc;
int
WiFiSent
=
0
;
int
WiFiReceived
=
0
;
int
WWANSent
=
0
;
int
WWANReceived
=
0
;
NSString
*name=[[[
NSString
alloc
]init]autorelease];
success = getifaddrs(&addrs;) ==
0
;
if
(success)
{
cursor = addrs;
while
(cursor !=
NULL
)
{
name=[
NSString
stringWithFormat
:
@"%s"
,cursor->ifa_name];
NSLog(
@"ifa_name %s == %@\n"
, cursor->ifa_name,name);
// names of interfaces: en0 is WiFi ,pdp_ip0 is WWAN
if
(cursor->ifa_addr->sa_family == AF_LINK)
{
if
([name
hasPrefix
:
@"en"
])
{
networkStatisc = (
const
struct
if_data
*) cursor->ifa_data;
WiFiSent+=networkStatisc->ifi_obytes;
WiFiReceived+=networkStatisc->ifi_ibytes;
NSLog(
@"WiFiSent %d ==%d"
,
WiFiSent
,networkStatisc->ifi_obytes);
NSLog(
@"WiFiReceived %d ==%d"
,
WiFiReceived
,networkStatisc->ifi_ibytes);
}
if
([name
hasPrefix
:
@"pdp_ip"
])
{
networkStatisc = (
const
struct
if_data
*) cursor->ifa_data;
WWANSent+=networkStatisc->ifi_obytes;
WWANReceived+=networkStatisc->ifi_ibytes;
NSLog(
@"WWANSent %d ==%d"
,
WWANSent
,networkStatisc->ifi_obytes);
NSLog(
@"WWANReceived %d ==%d"
,
WWANReceived
,networkStatisc->ifi_ibytes);
}
}
cursor = cursor->ifa_next;
}
freeifaddrs(addrs);
}
return
[
NSArray
arrayWithObjects
:[
NSNumber
numberWithInt
:WiFiSent],
[
NSNumber
numberWithInt
:WiFiReceived],
[
NSNumber
numberWithInt
:WWANSent],
[
NSNumber
numberWithInt
:WWANReceived],
nil
];
}