123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189 |
- #include "includes.h"
- #include <dlfcn.h>
- #include "common.h"
- #include <CoreFoundation/CoreFoundation.h>
- #include "MobileApple80211.h"
- /*
- * Code for dynamically loading Apple80211 functions from Aeropuerto to avoid
- * having to link with full Preferences.framework.
- */
- static void *aeropuerto = NULL;
- int _Apple80211Initialized(void)
- {
- return aeropuerto ? 1 : 0;
- }
- static int (*__Apple80211Open)(Apple80211Ref *ctx) = NULL;
- int Apple80211Open(Apple80211Ref *ctx)
- {
- return __Apple80211Open(ctx);
- }
- static int (*__Apple80211Close)(Apple80211Ref ctx) = NULL;
- int Apple80211Close(Apple80211Ref ctx)
- {
- return __Apple80211Close(ctx);
- }
- static int (*__Apple80211GetIfListCopy)(Apple80211Ref handle, CFArrayRef *list)
- = NULL;
- int Apple80211GetIfListCopy(Apple80211Ref handle, CFArrayRef *list)
- {
- return __Apple80211GetIfListCopy(handle, list);
- }
- static int (*__Apple80211BindToInterface)(Apple80211Ref handle,
- CFStringRef interface) = NULL;
- int Apple80211BindToInterface(Apple80211Ref handle,
- CFStringRef interface)
- {
- return __Apple80211BindToInterface(handle, interface);
- }
- static int (*__Apple80211GetInterfaceNameCopy)(Apple80211Ref handle,
- CFStringRef *name) = NULL;
- int Apple80211GetInterfaceNameCopy(Apple80211Ref handle,
- CFStringRef *name)
- {
- return __Apple80211GetInterfaceNameCopy(handle, name);
- }
- static int (*__Apple80211GetInfoCopy)(Apple80211Ref handle,
- CFDictionaryRef *info) = NULL;
- int Apple80211GetInfoCopy(Apple80211Ref handle,
- CFDictionaryRef *info)
- {
- return __Apple80211GetInfoCopy(handle, info);
- }
- static int (*__Apple80211GetPower)(Apple80211Ref handle, char *pwr) = NULL;
- int Apple80211GetPower(Apple80211Ref handle, char *pwr)
- {
- return __Apple80211GetPower(handle, pwr);
- }
- static int (*__Apple80211SetPower)(Apple80211Ref handle, char pwr) = NULL;
- int Apple80211SetPower(Apple80211Ref handle, char pwr)
- {
- return __Apple80211SetPower(handle, pwr);
- }
- static int (*__Apple80211Scan)(Apple80211Ref handle, CFArrayRef *list,
- CFDictionaryRef parameters) = NULL;
- int Apple80211Scan(Apple80211Ref handle, CFArrayRef *list,
- CFDictionaryRef parameters)
- {
- return __Apple80211Scan(handle, list, parameters);
- }
- static int (*__Apple80211Associate)(Apple80211Ref handle, CFDictionaryRef bss,
- CFStringRef password) = NULL;
- int Apple80211Associate(Apple80211Ref handle, CFDictionaryRef bss,
- CFStringRef password)
- {
- return __Apple80211Associate(handle, bss, password);
- }
- static int (*__Apple80211AssociateAndCopyInfo)(Apple80211Ref handle,
- CFDictionaryRef bss,
- CFStringRef password,
- CFDictionaryRef *info) =
- NULL;
- int Apple80211AssociateAndCopyInfo(Apple80211Ref handle, CFDictionaryRef bss,
- CFStringRef password, CFDictionaryRef *info)
- {
- return __Apple80211AssociateAndCopyInfo(handle, bss, password, info);
- }
- static int (*__Apple80211CopyValue)(Apple80211Ref handle, int field,
- CFDictionaryRef arg2, void *value) = NULL;
- int Apple80211CopyValue(Apple80211Ref handle, int field, CFDictionaryRef arg2,
- void *value)
- {
- return __Apple80211CopyValue(handle, field, arg2, value);
- }
- #define DLSYM(s) \
- do { \
- __ ## s = dlsym(aeropuerto, #s); \
- if (__ ## s == NULL) { \
- wpa_printf(MSG_ERROR, "MobileApple80211: Could not resolve " \
- "symbol '" #s "' (%s)", dlerror()); \
- err = 1; \
- } \
- } while (0)
- __attribute__ ((constructor))
- void _Apple80211_constructor(void)
- {
- const char *fname = "/System/Library/SystemConfiguration/"
- "Aeropuerto.bundle/Aeropuerto";
- int err = 0;
- aeropuerto = dlopen(fname, RTLD_LAZY);
- if (!aeropuerto) {
- wpa_printf(MSG_ERROR, "MobileApple80211: Failed to open %s "
- "for symbols", fname);
- return;
- }
- DLSYM(Apple80211Open);
- DLSYM(Apple80211Close);
- DLSYM(Apple80211GetIfListCopy);
- DLSYM(Apple80211BindToInterface);
- DLSYM(Apple80211GetInterfaceNameCopy);
- DLSYM(Apple80211GetInfoCopy);
- DLSYM(Apple80211GetPower);
- DLSYM(Apple80211SetPower);
- DLSYM(Apple80211Scan);
- DLSYM(Apple80211Associate);
- DLSYM(Apple80211AssociateAndCopyInfo);
- DLSYM(Apple80211CopyValue);
- if (err) {
- dlclose(aeropuerto);
- aeropuerto = NULL;
- }
- }
- __attribute__ ((destructor))
- void _Apple80211_destructor(void)
- {
- if (aeropuerto) {
- dlclose(aeropuerto);
- aeropuerto = NULL;
- }
- }
|