Example #1
0
boolean_t
wireless_bind(const char * if_name, wireless_t * wref_p)
{
    Apple80211Err	error;
    boolean_t		found = FALSE;
    CFStringRef		if_name_cf;
    Apple80211Ref	wref;
	
	EAPLOG(LOG_ERR, "######## DEBUG ####### - FAIL - wireless_bind");

    error = Apple80211Open(&wref);
    if (error != kA11NoErr) {
		EAPLOG(LOG_ERR, "Apple80211Open failed, %x\n", error);
		return (FALSE);
    }
    if_name_cf = CFStringCreateWithCString(NULL, if_name,
										   kCFStringEncodingASCII);
    error = Apple80211BindToInterface(wref, if_name_cf);
    CFRelease(if_name_cf);
    if (error == kA11NoErr) {
		*wref_p = (wireless_t)wref;
		found = TRUE;
    }
    else {
#ifdef TEST_WIRELESS
		EAPLOG(LOG_ERR, "Apple80211BindToInterface %s failed, %x\n",
				if_name, error);
#endif /* TEST_WIRELESS */
		Apple80211Close(wref);
		*wref_p = NULL;
    }
    return (found);
}
Example #2
0
void
wireless_free(wireless_t wref)
{
	EAPLOG(LOG_ERR, "######## DEBUG ####### - wireless_free");

    wireless_scan_cancel(wref);
    Apple80211Close((Apple80211Ref)wref);
    return;
}
Example #3
0
void
clearVPNLocation (struct service *serv)
{
	if (serv->connection_nap_monitor) {
		Apple80211Close((Apple80211Ref)serv->connection_nap_monitor);
		serv->connection_nap_monitor = NULL;
	}
	if (serv->type == TYPE_PPP) {
		serv->u.ppp.lower_interface[0] = 0;
	}
	my_CFRelease(&serv->connection_nid);
	my_CFRelease(&serv->connection_nap);
}
Example #4
0
static char *
wireless_first(wireless_t * wref_p)
{
    int			count;
    Apple80211Err	error;
    int			i;
    CFArrayRef		if_name_list;
    char *		ret_name = NULL;
    Apple80211Ref	wref;
	
	EAPLOG(LOG_ERR, "######## DEBUG ####### - FAIL - wireless_first");
	
    error = Apple80211Open(&wref);
    if (error != kA11NoErr) {
		EAPLOG(LOG_ERR, "Apple80211Open failed, %x\n", error);
		return (NULL);
    }
    error = Apple80211GetIfListCopy(wref, &if_name_list);
    if (error != kA11NoErr) {
		EAPLOG(LOG_ERR, "Apple80211GetIfListCopy failed, %x\n", error);
		goto done;
    }
    count = CFArrayGetCount(if_name_list);
    if (count > 0) {
		CFStringRef	if_name;
		
		if_name = CFArrayGetValueAtIndex(if_name_list, 0);
		error = Apple80211BindToInterface(wref, if_name);
		if (error != kA11NoErr) {
			EAPLOG(LOG_ERR, "Apple80211BindToInterface failed, %x\n",
					error);
		}
		else {
			ret_name = my_CFStringToCString(if_name, kCFStringEncodingASCII);
		}
    }
    CFRelease(if_name_list);
	
done:
    if (ret_name == NULL) {
		Apple80211Close(wref);
		*wref_p = NULL;
    }
    else {
		*wref_p = (wireless_t)wref;
    }
    return (ret_name);
}
Example #5
0
static CFStringRef
pollCurrentNAP (struct service *serv, Boolean *wifiErr)
{
	CFDataRef        napDataRef = NULL;
	CFStringRef      nap = NULL;
	char            *interface_buf;
	CFStringRef      interfName = NULL;
	Apple80211Err    err = kA11NoErr;
	int              state;
	
	SCLog(TRUE, LOG_INFO, CFSTR("%s:"), __FUNCTION__);

	// get interface info
	interface_buf = getVPNInterfaceBuf(serv);
	
	// setup update notification (if not already)
	if (!serv->connection_nap_monitor) {
		interfName = copyVPNInterfaceName(serv);
		if (!interfName) {
			SCLog(TRUE, LOG_INFO, CFSTR("%s: failed to get CF interface name for %s"), __FUNCTION__,  interface_buf? interface_buf : "null");
			goto init_failed;
		}

		err = Apple80211Open((Apple80211Ref *)&serv->connection_nap_monitor);
		if (err != kA11NoErr) {
			SCLog(TRUE, LOG_INFO, CFSTR("%s: Apple80211Open failed"), __FUNCTION__);
			*wifiErr = true;
			goto init_failed;
		}
		
		err = Apple80211BindToInterface((Apple80211Ref)serv->connection_nap_monitor, interfName);
		if (err != kA11NoErr) {
			SCLog(TRUE, LOG_INFO, CFSTR("%s: Apple80211BindToInterface(%@) failed"),
				  __FUNCTION__, interfName);
			*wifiErr = true;
			goto init_failed;
		}
		
		err = Apple80211EventMonitoringInit((Apple80211Ref)serv->connection_nap_monitor, monitorApple80211Callback, (void*)serv, CFRunLoopGetCurrent());
		if (err != kA11NoErr) {
			SCLog(TRUE, LOG_INFO, CFSTR("%s: Apple80211EventMonitoringInit(%@) failed, %d"),
				  __FUNCTION__, interfName, err);
			goto init_failed;
		}
		err = Apple80211StartMonitoringEvent((Apple80211Ref)serv->connection_nap_monitor, APPLE80211_M_SSID_CHANGED);
		if (err != kA11NoErr) {
			SCLog(TRUE, LOG_INFO, CFSTR("%s: Apple80211StartMonitoringEvent(%@) failed, %d"),
				  __FUNCTION__, interfName, err);
			goto init_failed;
		}
	}
	
	// get current state
	err = Apple80211Get((Apple80211Ref)serv->connection_nap_monitor, APPLE80211_IOC_STATE, 0, &state, sizeof(state));
	if (err != kA11NoErr) {
		SCLog(TRUE, LOG_INFO, CFSTR("%s: Apple80211GetState(%@) failed, err = %d"),
			  __FUNCTION__, interfName, err);
		*wifiErr = true;
		goto done;
	}
	if (state != APPLE80211_S_ASSOC && state != APPLE80211_S_RUN) {
		if (state > APPLE80211_S_INIT) {
			SCLog(TRUE, LOG_INFO, CFSTR("%s: Apple80211GetState(%@) got invalid state = %d."),
				  __FUNCTION__, interfName, state, WAIT_SSID_TIMEOUT);
		}

		goto done;
	} else {
		SCLog(TRUE, LOG_INFO, CFSTR("%s: Apple80211GetState(%@) got valid state = %d"),
			  __FUNCTION__, interfName, state);
	}

	err = Apple80211CopyValue((Apple80211Ref)serv->connection_nap_monitor, APPLE80211_IOC_SSID, NULL, &napDataRef);
	if (err != kA11NoErr) {
		SCLog(TRUE, LOG_INFO, CFSTR("%s: Apple80211CopyValue(%@, SSID) failed, err = %d"),
			  __FUNCTION__, interfName, err);
		*wifiErr = true;
		goto done;
	}

	nap = CFStringCreateWithBytes(kCFAllocatorDefault, CFDataGetBytePtr(napDataRef), CFDataGetLength(napDataRef), kCFStringEncodingUTF8, false);

	SCLog(TRUE, LOG_INFO, CFSTR("%s: Apple80211CopyValue(%@, SSID) got %@"),
		  __FUNCTION__, interfName, nap);

	if (napDataRef) {
		CFRelease(napDataRef);
	}

	if (interfName) {
		CFRelease(interfName);
	}

	return nap;

init_failed:
	if (serv->connection_nap_monitor) {
		Apple80211Close((Apple80211Ref)serv->connection_nap_monitor);
		serv->connection_nap_monitor = NULL;
	}
done:
	if (nap) {
		CFRelease(nap);
	}
	if (napDataRef) {
		CFRelease(napDataRef);
	}
	if (interfName) {
		CFRelease(interfName);
	}
	return NULL;
}
Example #6
0
static CFStringRef
copyCurrentNAPFromStore (struct service *serv)
{
	CFStringRef      nap;
	char            *interface_buf;
	CFStringRef      interfName = NULL;
	Apple80211Err    err = kA11NoErr;

	SCLog(TRUE, LOG_INFO, CFSTR("%s:"), __FUNCTION__);

	// get interface info
	interface_buf = getVPNInterfaceBuf(serv);
	nap = copyVPNInterfaceNAP(interface_buf);
	if (!nap) {
		return NULL;
	}

	// setup update notification (if not already)
	if (!serv->connection_nap_monitor) {
		interfName = copyVPNInterfaceName(serv);
		if (!interfName) {
			SCLog(TRUE, LOG_INFO, CFSTR("%s: failed to get CF interface name for %s"), __FUNCTION__, interface_buf? interface_buf : "null");
			goto init_failed;
		}

		err = Apple80211Open((Apple80211Ref *)&serv->connection_nap_monitor);
		if (err != kA11NoErr) {
			SCLog(TRUE, LOG_INFO, CFSTR("%s: Apple80211Open failed"), __FUNCTION__);
			goto init_failed;
		}

		err = Apple80211BindToInterface((Apple80211Ref)serv->connection_nap_monitor, interfName);
		if (err != kA11NoErr) {
			SCLog(TRUE, LOG_INFO, CFSTR("%s: Apple80211BindToInterface(%@) failed"),
				  __FUNCTION__, interfName);
			goto init_failed;
		}

		err = Apple80211EventMonitoringInit((Apple80211Ref)serv->connection_nap_monitor, monitorApple80211Callback, (void*)serv, CFRunLoopGetCurrent());
		if (err != kA11NoErr) {
			SCLog(TRUE, LOG_INFO, CFSTR("%s: Apple80211EventMonitoringInit(%@) failed, %d"),
				  __FUNCTION__, interfName, err);
			goto init_failed;
		}
		err = Apple80211StartMonitoringEvent((Apple80211Ref)serv->connection_nap_monitor, APPLE80211_M_SSID_CHANGED);
		if (err != kA11NoErr) {
			SCLog(TRUE, LOG_INFO, CFSTR("%s: Apple80211StartMonitoringEvent(%@) failed, %d"),
				  __FUNCTION__, interfName, err);
			goto init_failed;
		}
	}

	if (interfName) {
		CFRelease(interfName);
	}

	return nap;

init_failed:
	if (serv->connection_nap_monitor) {
		Apple80211Close((Apple80211Ref)serv->connection_nap_monitor);
		serv->connection_nap_monitor = NULL;
	}
	if (interfName) {
		CFRelease(interfName);
	}
	return nap;
}