SCNetworkReachabilityLogging.h [plain text]
#ifndef _SCNETWORKREACHABILITYLOGGING_H
#define _SCNETWORKREACHABILITYLOGGING_H
#include <os/availability.h>
#include <TargetConditionals.h>
#include <assert.h>
#include <sys/cdefs.h>
#include <SystemConfiguration/SystemConfiguration.h>
__BEGIN_DECLS
static __inline__ void
__SCNetworkReachability_flags_string(SCNetworkReachabilityFlags flags, Boolean debug, char *str, size_t len)
{
size_t n;
size_t op; SCNetworkReachabilityFlags remaining;
assert((len >= sizeof("Not Reachable," )) && (len >= sizeof("0x01234567 (Not Reachable)")) &&
(len >= sizeof("0x01234567 (0x01234567)" )));
if (!debug) {
n = 0;
str[n] = '\0';
} else {
n = snprintf(str, len, "0x%08x (", flags);
len--; }
op = n;
remaining = flags;
if ((remaining == 0) &&
(n < len) && ((len - n) > sizeof("Not Reachable,"))) {
n = strlcat(str, "Not Reachable,", len);
}
if ((remaining & kSCNetworkReachabilityFlagsReachable) &&
(n < len) && ((len - n) > sizeof("Reachable,"))) {
n = strlcat(str, "Reachable,", len);
remaining &= ~kSCNetworkReachabilityFlagsReachable;
}
if ((remaining & kSCNetworkReachabilityFlagsTransientConnection) &&
(n < len) && ((len - n) > sizeof("Transient Connection,"))) {
n = strlcat(str, "Transient Connection,", len);
remaining &= ~kSCNetworkReachabilityFlagsTransientConnection;
}
if ((remaining & kSCNetworkReachabilityFlagsConnectionRequired) &&
(n < len) && ((len - n) > sizeof("Connection Required,"))) {
n = strlcat(str, "Connection Required,", len);
remaining &= ~kSCNetworkReachabilityFlagsConnectionRequired;
}
if ((remaining & kSCNetworkReachabilityFlagsConnectionOnTraffic) &&
(n < len) && ((len - n) > sizeof("Automatic Connection On Traffic,"))) {
n = strlcat(str, "Automatic Connection On Traffic,", len);
remaining &= ~kSCNetworkReachabilityFlagsConnectionOnTraffic;
}
if ((remaining & kSCNetworkReachabilityFlagsConnectionOnDemand) &&
(n < len) && ((len - n) > sizeof("Automatic Connection On Demand,"))) {
n = strlcat(str, "Automatic Connection On Demand,", len);
remaining &= ~kSCNetworkReachabilityFlagsConnectionOnDemand;
}
if ((remaining & kSCNetworkReachabilityFlagsInterventionRequired) &&
(n < len) && ((len - n) > sizeof("Intervention Required,"))) {
n = strlcat(str, "Intervention Required,", len);
remaining &= ~kSCNetworkReachabilityFlagsInterventionRequired;
}
if ((remaining & kSCNetworkReachabilityFlagsIsLocalAddress) &&
(n < len) && ((len - n) > sizeof("Local Address,"))) {
n = strlcat(str, "Local Address,", len);
remaining &= ~kSCNetworkReachabilityFlagsIsLocalAddress;
}
if ((remaining & kSCNetworkReachabilityFlagsIsDirect) &&
(n < len) && ((len - n) > sizeof("Directly Reachable Address,"))) {
n = strlcat(str, "Directly Reachable Address,", len);
remaining &= ~kSCNetworkReachabilityFlagsIsDirect;
}
#if TARGET_OS_IPHONE
if ((remaining & kSCNetworkReachabilityFlagsIsWWAN) &&
(n < len) && ((len - n) > sizeof("WWAN,"))) {
n = strlcat(str, "WWAN,", len);
remaining &= ~kSCNetworkReachabilityFlagsIsWWAN;
}
#endif // TARGET_OS_IPHONE
if (remaining != 0) {
if ((n >= len) ||
((len - n) <= sizeof("0x01234567,"))) {
str[op] = '\0';
n = op;
remaining = flags;
}
n += snprintf(str + n, len - n, "0x%08x,", remaining);
}
if (n-- > 0) {
if (!debug) {
str[n] = '\0'; } else {
str[n] = ')'; }
}
return;
}
__END_DECLS
#endif