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); }
void wireless_free(wireless_t wref) { EAPLOG(LOG_ERR, "######## DEBUG ####### - wireless_free"); wireless_scan_cancel(wref); Apple80211Close((Apple80211Ref)wref); return; }
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); }
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); }
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; }
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; }