Esempio n. 1
0
static SCNetworkConnectionPPPStatus GetMinorStatus(
    SCNetworkConnectionRef connection
)
    // Gets the minor connection status from the extended status 
    // dictionary associated with the connection.  Returns -1 if 
    // it can't get the status, for whatever reason.
{
    SCNetworkConnectionPPPStatus    result;
    CFDictionaryRef                 statusDict;
    CFDictionaryRef                 pppDict;
    CFNumberRef                     minorStatusNum;
    
    result = -1;
    
    // Get the extended status dictionary.
    
    statusDict = SCNetworkConnectionCopyExtendedStatus(connection);
    if (statusDict != NULL) {
    
        // Extract the PPP sub-dictionary.
        
        pppDict = CFDictionaryGetValue(statusDict, kSCEntNetPPP);
        
        if (  (pppDict != NULL) 
           && (CFGetTypeID(pppDict) == CFDictionaryGetTypeID()) 
           ) {
           
            // Extract the minor status value.
            
            minorStatusNum = CFDictionaryGetValue(
                pppDict, 
                kSCPropNetPPPStatus
            );
            
            if (  (minorStatusNum != NULL) 
               && (CFGetTypeID(minorStatusNum) == CFNumberGetTypeID()) 
               ) {
                SInt32 tmp;
                
                if ( CFNumberGetValue(
                         minorStatusNum, 
                        kCFNumberSInt32Type, &tmp
                     ) 
                   ) {
                    result = tmp;
                }
            }
        }
        CFRelease(statusDict);
    }
    return result;
}
Esempio n. 2
0
static void
nc_callback(SCNetworkConnectionRef connection, SCNetworkConnectionStatus status, void *info)
{
	int		*n		= (int *)info;
	CFDictionaryRef	status_dict;

	// report status
	if (n != NULL) {
		if (*n == 0) {
			SCPrint(TRUE, stdout, CFSTR("Current status = "));
		} else {
			struct tm	tm_now;
			struct timeval	tv_now;

			(void)gettimeofday(&tv_now, NULL);
			(void)localtime_r(&tv_now.tv_sec, &tm_now);

			SCPrint(TRUE, stdout, CFSTR("\n*** %2d:%02d:%02d.%03d\n\n"),
				tm_now.tm_hour,
				tm_now.tm_min,
				tm_now.tm_sec,
				tv_now.tv_usec / 1000);
			SCPrint(TRUE, stdout, CFSTR("Callback (%d) status = "), *n);
		}
		*n = *n + 1;
	}
	SCPrint(TRUE, stdout, CFSTR("%s%s%s\n"),
		nc_status_string(status),
		(status == kSCNetworkConnectionInvalid) ? ": "                     : "",
		(status == kSCNetworkConnectionInvalid) ? SCErrorString(SCError()) : "");

	// report extended status
	status_dict = SCNetworkConnectionCopyExtendedStatus(connection);
	if (status_dict) {
		SCPrint(TRUE, stdout, CFSTR("Extended Status %@\n"), status_dict);
		CFRelease(status_dict);
	}

	return;
}