Add default p2p group if nothing is found

Fixes #61.
This commit is contained in:
Mygod
2019-01-18 11:22:59 +08:00
parent 3d9ec9121a
commit 6a8dbd7775
2 changed files with 25 additions and 3 deletions

View File

@@ -49,6 +49,7 @@ class RepeaterService : Service(), WifiP2pManager.ChannelListener, SharedPrefere
} }
} }
val supported get() = p2pManager != null val supported get() = p2pManager != null
var persistentSupported = false
} }
enum class Status { enum class Status {
@@ -192,7 +193,7 @@ class RepeaterService : Service(), WifiP2pManager.ChannelListener, SharedPrefere
val device = binder.thisDevice ?: return val device = binder.thisDevice ?: return
try { try {
p2pManager.requestPersistentGroupInfo(channel) { p2pManager.requestPersistentGroupInfo(channel) {
Timber.d(it.toString()) if (it.isNotEmpty()) persistentSupported = true
val ownedGroups = it.filter { it.isGroupOwner && it.owner.deviceAddress == device.deviceAddress } val ownedGroups = it.filter { it.isGroupOwner && it.owner.deviceAddress == device.deviceAddress }
val main = ownedGroups.minBy { it.netId } val main = ownedGroups.minBy { it.netId }
// do not replace current group if it's better // do not replace current group if it's better

View File

@@ -4,6 +4,7 @@ import android.net.wifi.p2p.WifiP2pGroup
import android.os.Build import android.os.Build
import be.mygod.vpnhotspot.App.Companion.app import be.mygod.vpnhotspot.App.Companion.app
import be.mygod.vpnhotspot.DebugHelper import be.mygod.vpnhotspot.DebugHelper
import be.mygod.vpnhotspot.RepeaterService
import be.mygod.vpnhotspot.util.RootSession import be.mygod.vpnhotspot.util.RootSession
import java.io.File import java.io.File
@@ -51,6 +52,7 @@ class P2pSupplicantConfiguration(private val group: WifiP2pGroup, ownerAddress:
it.checkOutput(command, shell, false, false) it.checkOutput(command, shell, false, false)
val parser = Parser(shell.out) val parser = Parser(shell.out)
try { try {
val bssid = group.owner.deviceAddress ?: ownerAddress
while (parser.next()) { while (parser.next()) {
if (parser.trimmed.startsWith("network={")) { if (parser.trimmed.startsWith("network={")) {
val block = NetworkBlock() val block = NetworkBlock()
@@ -65,8 +67,7 @@ class P2pSupplicantConfiguration(private val group: WifiP2pGroup, ownerAddress:
check(block.pskLine == null && block.psk == null) check(block.pskLine == null && block.psk == null)
block.psk = match.groupValues[5].apply { check(length in 8..63) } block.psk = match.groupValues[5].apply { check(length in 8..63) }
block.pskLine = block.size block.pskLine = block.size
} else if (match.groups[2] != null && } else if (match.groups[2] != null && match.groupValues[2].equals(bssid, true)) {
match.groupValues[2].equals(group.owner.deviceAddress ?: ownerAddress, true)) {
block.bssidMatches = true block.bssidMatches = true
} }
} }
@@ -80,6 +81,26 @@ class P2pSupplicantConfiguration(private val group: WifiP2pGroup, ownerAddress:
} }
} else result.add(parser.line) } else result.add(parser.line)
} }
if (target == null && !RepeaterService.persistentSupported) {
result.add("")
result.add(NetworkBlock().apply {
// generate a basic network block, it is likely that vendor is going to add more stuff here
add("network={")
ssidLine = size
add("")
add("\tbssid=$bssid")
pskLine = size
add("")
add("\tproto=RSN")
add("\tkey_mgmt=WPA-PSK")
add("\tpairwise=CCMP")
add("\tauth_alg=OPEN")
add("\tmode=3")
add("\tdisabled=2")
add("}")
target = this
})
}
Triple(result, target!!, shell.err.isNotEmpty()) Triple(result, target!!, shell.err.isNotEmpty())
} catch (e: RuntimeException) { } catch (e: RuntimeException) {
DebugHelper.setString(TAG, parser.lines.joinToString("\n")) DebugHelper.setString(TAG, parser.lines.joinToString("\n"))