static jboolean android_net_wifi_startPacketFiltering(JNIEnv* env, jobject clazz) { return doBooleanCommand("DRIVER RXFILTER-ADD 0", "OK") && doBooleanCommand("DRIVER RXFILTER-ADD 1", "OK") && doBooleanCommand("DRIVER RXFILTER-ADD 3", "OK") && doBooleanCommand("DRIVER RXFILTER-START", "OK"); }
static void android_net_wifi_enableBackgroundScanCommand(JNIEnv* env, jobject, jboolean enable) { //Note: BGSCAN-START and BGSCAN-STOP are documented in core/res/res/values/config.xml //and will need an update if the names are changed if (enable) { doBooleanCommand("OK", "DRIVER BGSCAN-START"); } else { doBooleanCommand("OK", "DRIVER BGSCAN-STOP"); } }
static jboolean android_net_wifi_stopPacketFiltering(JNIEnv* env, jobject clazz) { jboolean result = doBooleanCommand("DRIVER RXFILTER-STOP", "OK"); if (result) { (void)doBooleanCommand("DRIVER RXFILTER-REMOVE 3", "OK"); (void)doBooleanCommand("DRIVER RXFILTER-REMOVE 1", "OK"); (void)doBooleanCommand("DRIVER RXFILTER-REMOVE 0", "OK"); } return result; }
static jboolean android_net_wifi_enableNetworkCommand(JNIEnv* env, jobject, jint netId, jboolean disableOthers) { return doBooleanCommand("OK", "%s_NETWORK %d", disableOthers ? "SELECT" : "ENABLE", netId); }
static jboolean android_net_wifi_setSuspendOptimizationsCommand(JNIEnv* env, jobject clazz, jboolean enabled) { char cmdstr[25]; snprintf(cmdstr, sizeof(cmdstr), "DRIVER SETSUSPENDOPT %d", enabled ? 0 : 1); return doBooleanCommand(cmdstr, "OK"); }
static jboolean android_net_wifi_doBooleanCommand(JNIEnv* env, jobject, jstring javaCommand) { ScopedUtfChars command(env, javaCommand); if (command.c_str() == NULL) { return JNI_FALSE; } return doBooleanCommand("OK", "%s", command.c_str()); }
static jboolean android_net_wifi_addToBlacklistCommand(JNIEnv* env, jobject, jstring javaBssid) { ScopedUtfChars bssid(env, javaBssid); if (bssid.c_str() == NULL) { return JNI_FALSE; } return doBooleanCommand("OK", "BLACKLIST %s", bssid.c_str()); }
static jboolean android_net_wifi_setCountryCodeCommand(JNIEnv* env, jobject, jstring javaCountry) { ScopedUtfChars country(env, javaCountry); if (country.c_str() == NULL) { return JNI_FALSE; } return doBooleanCommand("OK", "DRIVER COUNTRY %s", country.c_str()); }
static jboolean android_net_wifi_wpsPbcCommand(JNIEnv* env, jobject, jstring javaBssid) { ScopedUtfChars bssid(env, javaBssid); if (bssid.c_str() == NULL) { return JNI_FALSE; } return doBooleanCommand("OK", "WPS_PBC %s", bssid.c_str()); }
static jboolean android_net_wifi_setBluetoothCoexistenceModeCommand(JNIEnv* env, jobject clazz, jint mode) { char cmdstr[256]; int numWritten = snprintf(cmdstr, sizeof(cmdstr), "DRIVER BTCOEXMODE %d", mode); int cmdTooLong = numWritten >= (int)sizeof(cmdstr); return (jboolean)!cmdTooLong && doBooleanCommand(cmdstr, "OK"); }
static jboolean android_net_wifi_setBluetoothCoexistenceScanModeCommand(JNIEnv* env, jobject clazz, jboolean setCoexScanMode) { char cmdstr[256]; int numWritten = snprintf(cmdstr, sizeof(cmdstr), "DRIVER BTCOEXSCAN-%s", setCoexScanMode ? "START" : "STOP"); int cmdTooLong = numWritten >= (int)sizeof(cmdstr); return (jboolean)!cmdTooLong && doBooleanCommand(cmdstr, "OK"); }
static jboolean android_net_wifi_setScanResultHandlingCommand(JNIEnv* env, jobject clazz, jint mode) { char cmdstr[256]; int numWritten = snprintf(cmdstr, sizeof(cmdstr), "AP_SCAN %d", mode); int cmdTooLong = numWritten >= (int)sizeof(cmdstr); return (jboolean)!cmdTooLong && doBooleanCommand(cmdstr, "OK"); }
static jboolean android_net_wifi_disableNetworkCommand(JNIEnv* env, jobject clazz, jint netId) { char cmdstr[256]; int numWritten = snprintf(cmdstr, sizeof(cmdstr), "DISABLE_NETWORK %d", netId); int cmdTooLong = numWritten >= (int)sizeof(cmdstr); return (jboolean)!cmdTooLong && doBooleanCommand(cmdstr, "OK"); }
static jboolean android_net_wifi_setNumAllowedChannelsCommand(JNIEnv* env, jobject clazz, jint numChannels) { char cmdstr[256]; int numWritten = snprintf(cmdstr, sizeof(cmdstr), "DRIVER SCAN-CHANNELS %u", numChannels); int cmdTooLong = numWritten >= (int)sizeof(cmdstr); return (jboolean)!cmdTooLong && doBooleanCommand(cmdstr, "OK"); }
static jboolean android_net_wifi_doBooleanCommand(JNIEnv* env, jobject, jstring jIface, jstring jCommand) { ScopedUtfChars ifname(env, jIface); ScopedUtfChars command(env, jCommand); if (command.c_str() == NULL) { return JNI_FALSE; } if (DBG) ALOGD("doBoolean: %s", command.c_str()); return doBooleanCommand(ifname.c_str(), "OK", "%s", command.c_str()); }
static jboolean android_net_wifi_scanCommand(JNIEnv* env, jobject clazz, jboolean forceActive) { jboolean result; // Ignore any error from setting the scan mode. // The scan will still work. if (forceActive && !sScanModeActive) doSetScanMode(true); result = doBooleanCommand("SCAN", "OK"); if (forceActive && !sScanModeActive) doSetScanMode(sScanModeActive); return result; }
static jboolean android_net_wifi_wpsPinFromAccessPointCommand(JNIEnv* env, jobject, jstring javaBssid, jstring javaApPin) { ScopedUtfChars bssid(env, javaBssid); if (bssid.c_str() == NULL) { return JNI_FALSE; } ScopedUtfChars apPin(env, javaApPin); if (apPin.c_str() == NULL) { return JNI_FALSE; } return doBooleanCommand("OK", "WPS_REG %s %s", bssid.c_str(), apPin.c_str()); }
static jboolean android_net_wifi_enableNetworkCommand(JNIEnv* env, jobject clazz, jint netId, jboolean disableOthers) { char cmdstr[256]; const char *cmd = disableOthers ? "SELECT_NETWORK" : "ENABLE_NETWORK"; int numWritten = snprintf(cmdstr, sizeof(cmdstr), "%s %d", cmd, netId); int cmdTooLong = numWritten >= (int)sizeof(cmdstr); return (jboolean)!cmdTooLong && doBooleanCommand(cmdstr, "OK"); }
static jboolean android_net_wifi_addToBlacklistCommand(JNIEnv* env, jobject clazz, jstring bssid) { char cmdstr[256]; jboolean isCopy; const char *bssidStr = env->GetStringUTFChars(bssid, &isCopy); int cmdTooLong = snprintf(cmdstr, sizeof(cmdstr), "BLACKLIST %s", bssidStr) >= (int)sizeof(cmdstr); env->ReleaseStringUTFChars(bssid, bssidStr); return (jboolean)!cmdTooLong && doBooleanCommand(cmdstr, "OK"); }
static jboolean android_net_wifi_setNetworkVariableCommand(JNIEnv* env, jobject, jint netId, jstring javaName, jstring javaValue) { ScopedUtfChars name(env, javaName); if (name.c_str() == NULL) { return JNI_FALSE; } ScopedUtfChars value(env, javaValue); if (value.c_str() == NULL) { return JNI_FALSE; } return doBooleanCommand("OK", "SET_NETWORK %d %s %s", netId, name.c_str(), value.c_str()); }
static jboolean android_net_wifi_setNetworkVariableCommand(JNIEnv* env, jobject clazz, jint netId, jstring name, jstring value) { char cmdstr[256]; jboolean isCopy; const char *nameStr = env->GetStringUTFChars(name, &isCopy); const char *valueStr = env->GetStringUTFChars(value, &isCopy); if (nameStr == NULL || valueStr == NULL) return JNI_FALSE; int cmdTooLong = snprintf(cmdstr, sizeof(cmdstr), "SET_NETWORK %d %s %s", netId, nameStr, valueStr) >= (int)sizeof(cmdstr); env->ReleaseStringUTFChars(name, nameStr); env->ReleaseStringUTFChars(value, valueStr); return (jboolean)!cmdTooLong && doBooleanCommand(cmdstr, "OK"); }
static jboolean android_net_wifi_stopDriverCommand(JNIEnv* env, jobject clazz) { return doBooleanCommand("DRIVER STOP", "OK"); }
static jboolean android_net_wifi_pingCommand(JNIEnv* env, jobject clazz) { return doBooleanCommand("PING", "PONG"); }
static jboolean android_net_wifi_reloadConfigCommand(JNIEnv* env, jobject clazz) { return doBooleanCommand("RECONFIGURE", "OK"); }
static jboolean android_net_wifi_saveConfigCommand(JNIEnv* env, jobject clazz) { // Make sure we never write out a value for AP_SCAN other than 1 (void)doBooleanCommand("AP_SCAN 1", "OK"); return doBooleanCommand("SAVE_CONFIG", "OK"); }
static jboolean android_net_wifi_reconnectCommand(JNIEnv* env, jobject clazz) { return doBooleanCommand("RECONNECT", "OK"); }
static jboolean doSetScanMode(jboolean setActive) { return doBooleanCommand((setActive ? "DRIVER SCAN-ACTIVE" : "DRIVER SCAN-PASSIVE"), "OK"); }
static jboolean android_net_wifi_clearBlacklistCommand(JNIEnv* env, jobject clazz) { return doBooleanCommand("BLACKLIST clear", "OK"); }
static jboolean android_net_wifi_reassociateCommand(JNIEnv* env, jobject clazz) { return doBooleanCommand("REASSOCIATE", "OK"); }
static jboolean android_net_wifi_doBooleanCommand(JNIEnv* env, jobject, jstring javaCommand) { return doBooleanCommand(env, javaCommand); }