|
@@ -5,12 +5,14 @@ import android.util.Log
|
|
|
import com.example.modifier.BuildConfig
|
|
import com.example.modifier.BuildConfig
|
|
|
import com.example.modifier.baseTag
|
|
import com.example.modifier.baseTag
|
|
|
import com.example.modifier.enums.ReqState
|
|
import com.example.modifier.enums.ReqState
|
|
|
|
|
+import com.example.modifier.model.CancelStoreNumberAction
|
|
|
import com.example.modifier.model.InstallApkAction
|
|
import com.example.modifier.model.InstallApkAction
|
|
|
|
|
+import com.example.modifier.model.ResumeAction
|
|
|
import com.example.modifier.model.RunScriptAction
|
|
import com.example.modifier.model.RunScriptAction
|
|
|
import com.example.modifier.model.RunScriptResult
|
|
import com.example.modifier.model.RunScriptResult
|
|
|
import com.example.modifier.model.SocketCallback
|
|
import com.example.modifier.model.SocketCallback
|
|
|
|
|
+import com.example.modifier.model.StoreNumberAction
|
|
|
import com.example.modifier.model.TaskAction
|
|
import com.example.modifier.model.TaskAction
|
|
|
-import com.example.modifier.model.TaskConfig
|
|
|
|
|
import com.example.modifier.model.TaskExecutionResult
|
|
import com.example.modifier.model.TaskExecutionResult
|
|
|
import com.example.modifier.model.UpdateDeviceAction
|
|
import com.example.modifier.model.UpdateDeviceAction
|
|
|
import com.example.modifier.repo.AppPrefsRepo
|
|
import com.example.modifier.repo.AppPrefsRepo
|
|
@@ -29,9 +31,7 @@ import kotlinx.serialization.encodeToString
|
|
|
import org.json.JSONException
|
|
import org.json.JSONException
|
|
|
import org.json.JSONObject
|
|
import org.json.JSONObject
|
|
|
import java.util.Timer
|
|
import java.util.Timer
|
|
|
-import java.util.TimerTask
|
|
|
|
|
import kotlin.concurrent.schedule
|
|
import kotlin.concurrent.schedule
|
|
|
-import kotlin.time.Duration.Companion.seconds
|
|
|
|
|
|
|
|
|
|
class SocketClient(
|
|
class SocketClient(
|
|
|
private val taskRunner: TaskRunner
|
|
private val taskRunner: TaskRunner
|
|
@@ -78,107 +78,158 @@ class SocketClient(
|
|
|
mSocket.disconnect()
|
|
mSocket.disconnect()
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ private fun throwIfBusy() {
|
|
|
|
|
+ if (AppStateRepo.instance.appState.value.busy) {
|
|
|
|
|
+ throw Exception("Device is busy")
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
override fun call(vararg args: Any?) {
|
|
override fun call(vararg args: Any?) {
|
|
|
- if (args.isNotEmpty()) {
|
|
|
|
|
- Log.i(TAG, "Received message: " + args[0])
|
|
|
|
|
- if (args[0] is JSONObject) {
|
|
|
|
|
- val json = args[0] as JSONObject
|
|
|
|
|
- val action = json.optString("action")
|
|
|
|
|
- val id = json.optString("id")
|
|
|
|
|
- if ("send" == action) {
|
|
|
|
|
- val data = json.optJSONObject("data")
|
|
|
|
|
- if (data != null) {
|
|
|
|
|
- val to = data.optString("to")
|
|
|
|
|
- val body = data.optString("body")
|
|
|
|
|
- CoroutineScope(Dispatchers.IO).launch {
|
|
|
|
|
- taskRunner.send(
|
|
|
|
|
- to, body, TaskConfig(
|
|
|
|
|
- rcsWait = 3000,
|
|
|
|
|
- rcsInterval = 1000,
|
|
|
|
|
- cleanCount = 10,
|
|
|
|
|
- requestNumberInterval = 50,
|
|
|
|
|
- checkConnection = true,
|
|
|
|
|
- useBackup = false,
|
|
|
|
|
- e2ee = 0
|
|
|
|
|
- )
|
|
|
|
|
|
|
+ if (args.isEmpty()) {
|
|
|
|
|
+ return
|
|
|
|
|
+ }
|
|
|
|
|
+ Log.i(TAG, "Received message: " + args[0])
|
|
|
|
|
+ if (args[0] !is JSONObject) return
|
|
|
|
|
+ val json = args[0] as JSONObject
|
|
|
|
|
+ val action = json.optString("action")
|
|
|
|
|
+ val id = json.optString("id")
|
|
|
|
|
+ val jsonStr = json.toString()
|
|
|
|
|
+ when (action) {
|
|
|
|
|
+ TaskAction.NAME -> {
|
|
|
|
|
+ try {
|
|
|
|
|
+ throwIfBusy()
|
|
|
|
|
+ val taskAction = Json.decodeFromString<TaskAction>(jsonStr)
|
|
|
|
|
+ CoroutineScope(Dispatchers.IO).launch {
|
|
|
|
|
+ taskRunner.runTask(taskAction, onSuccess = { res ->
|
|
|
|
|
+ socketCallback(taskAction.id, res)
|
|
|
|
|
+ }, onError = { error ->
|
|
|
|
|
+ socketCallback(
|
|
|
|
|
+ id = taskAction.id,
|
|
|
|
|
+ status = -1,
|
|
|
|
|
+ error = error.message
|
|
|
)
|
|
)
|
|
|
- }
|
|
|
|
|
|
|
+ })
|
|
|
}
|
|
}
|
|
|
- } else if ("task" == action) {
|
|
|
|
|
- try {
|
|
|
|
|
- val taskAction = Json.decodeFromString<TaskAction>(json.toString())
|
|
|
|
|
- CoroutineScope(Dispatchers.IO).launch {
|
|
|
|
|
- taskRunner.runTask(taskAction, onSuccess = { res ->
|
|
|
|
|
- socketCallback(taskAction.id, res)
|
|
|
|
|
- }, onError = { error ->
|
|
|
|
|
- socketCallback(
|
|
|
|
|
- id = taskAction.id,
|
|
|
|
|
- status = -1,
|
|
|
|
|
- error = error.message
|
|
|
|
|
- )
|
|
|
|
|
- })
|
|
|
|
|
- }
|
|
|
|
|
- } catch (e: Exception) {
|
|
|
|
|
- Log.e(TAG, "taskAction error", e)
|
|
|
|
|
- socketCallback(id = id, status = -1, error = e.message)
|
|
|
|
|
|
|
+ } catch (e: Exception) {
|
|
|
|
|
+ Log.e(TAG, "taskAction error", e)
|
|
|
|
|
+ socketCallback(id = id, status = -1, error = e.message)
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ InstallApkAction.NAME -> {
|
|
|
|
|
+ try {
|
|
|
|
|
+ val installApkAction = Json.decodeFromString<InstallApkAction>(jsonStr)
|
|
|
|
|
+ if (true != installApkAction.data.interrupt) {
|
|
|
|
|
+ throwIfBusy()
|
|
|
}
|
|
}
|
|
|
- } else if ("installApk" == action) {
|
|
|
|
|
- try {
|
|
|
|
|
- val installApkAction =
|
|
|
|
|
- Json.decodeFromString<InstallApkAction>(json.toString())
|
|
|
|
|
- CoroutineScope(Dispatchers.IO).launch {
|
|
|
|
|
- taskRunner.installApk(installApkAction, onSuccess = {
|
|
|
|
|
- socketCallback(id = installApkAction.id, status = 0, data = "OK")
|
|
|
|
|
- }, onError = { error ->
|
|
|
|
|
- socketCallback(
|
|
|
|
|
- id = installApkAction.id,
|
|
|
|
|
- status = -1,
|
|
|
|
|
- error = error.message
|
|
|
|
|
- )
|
|
|
|
|
- })
|
|
|
|
|
- }
|
|
|
|
|
- } catch (e: Exception) {
|
|
|
|
|
- Log.e(TAG, "installApk error", e)
|
|
|
|
|
- socketCallback(id = id, status = -1, error = e.message)
|
|
|
|
|
|
|
+ CoroutineScope(Dispatchers.IO).launch {
|
|
|
|
|
+ taskRunner.installApk(installApkAction, onSuccess = {
|
|
|
|
|
+ socketCallback(
|
|
|
|
|
+ id = installApkAction.id,
|
|
|
|
|
+ status = 0,
|
|
|
|
|
+ data = "OK"
|
|
|
|
|
+ )
|
|
|
|
|
+ }, onError = { error ->
|
|
|
|
|
+ socketCallback(
|
|
|
|
|
+ id = installApkAction.id,
|
|
|
|
|
+ status = -1,
|
|
|
|
|
+ error = error.message
|
|
|
|
|
+ )
|
|
|
|
|
+ })
|
|
|
}
|
|
}
|
|
|
- } else if ("runScript" == action) {
|
|
|
|
|
- try {
|
|
|
|
|
- val runScriptAction =
|
|
|
|
|
- Json.decodeFromString<RunScriptAction>(json.toString())
|
|
|
|
|
- CoroutineScope(Dispatchers.IO).launch {
|
|
|
|
|
- taskRunner.runScript(runScriptAction, onSuccess = { out, err ->
|
|
|
|
|
- socketCallback(runScriptAction.id, RunScriptResult(out, err))
|
|
|
|
|
- }, onError = { error ->
|
|
|
|
|
- socketCallback(
|
|
|
|
|
- id = runScriptAction.id,
|
|
|
|
|
- status = -1,
|
|
|
|
|
- error = error.message
|
|
|
|
|
- )
|
|
|
|
|
- })
|
|
|
|
|
- }
|
|
|
|
|
- } catch (e: Exception) {
|
|
|
|
|
- Log.e(TAG, "runScript error", e)
|
|
|
|
|
- socketCallback(id = id, status = -1, error = e.message)
|
|
|
|
|
|
|
+ } catch (e: Exception) {
|
|
|
|
|
+ Log.e(TAG, "installApk error", e)
|
|
|
|
|
+ socketCallback(id = id, status = -1, error = e.message)
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ RunScriptAction.NAME -> {
|
|
|
|
|
+ try {
|
|
|
|
|
+ val runScriptAction = Json.decodeFromString<RunScriptAction>(jsonStr)
|
|
|
|
|
+ CoroutineScope(Dispatchers.IO).launch {
|
|
|
|
|
+ taskRunner.runScript(runScriptAction, onSuccess = { out, err ->
|
|
|
|
|
+ socketCallback(runScriptAction.id, RunScriptResult(out, err))
|
|
|
|
|
+ }, onError = { error ->
|
|
|
|
|
+ socketCallback(
|
|
|
|
|
+ id = runScriptAction.id,
|
|
|
|
|
+ status = -1,
|
|
|
|
|
+ error = error.message
|
|
|
|
|
+ )
|
|
|
|
|
+ })
|
|
|
}
|
|
}
|
|
|
- } else if ("updateDevice" == action) {
|
|
|
|
|
- try {
|
|
|
|
|
- val updateDeviceAction =
|
|
|
|
|
- Json.decodeFromString<UpdateDeviceAction>(json.toString())
|
|
|
|
|
- CoroutineScope(Dispatchers.IO).launch {
|
|
|
|
|
- taskRunner.updateDevice(updateDeviceAction, onSuccess = {
|
|
|
|
|
- socketCallback(id = updateDeviceAction.id, status = 0, data = "OK")
|
|
|
|
|
- }, onError = { error ->
|
|
|
|
|
- socketCallback(
|
|
|
|
|
- id = updateDeviceAction.id,
|
|
|
|
|
- status = -1,
|
|
|
|
|
- error = error.message
|
|
|
|
|
- )
|
|
|
|
|
- })
|
|
|
|
|
|
|
+ } catch (e: Exception) {
|
|
|
|
|
+ Log.e(TAG, "runScript error", e)
|
|
|
|
|
+ socketCallback(id = id, status = -1, error = e.message)
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ UpdateDeviceAction.NAME -> {
|
|
|
|
|
+ try {
|
|
|
|
|
+ val updateDeviceAction = Json.decodeFromString<UpdateDeviceAction>(jsonStr)
|
|
|
|
|
+ CoroutineScope(Dispatchers.IO).launch {
|
|
|
|
|
+ taskRunner.updateDevice(updateDeviceAction, onSuccess = {
|
|
|
|
|
+ socketCallback(
|
|
|
|
|
+ id = updateDeviceAction.id,
|
|
|
|
|
+ status = 0,
|
|
|
|
|
+ data = "OK"
|
|
|
|
|
+ )
|
|
|
|
|
+ }, onError = { error ->
|
|
|
|
|
+ socketCallback(
|
|
|
|
|
+ id = updateDeviceAction.id,
|
|
|
|
|
+ status = -1,
|
|
|
|
|
+ error = error.message
|
|
|
|
|
+ )
|
|
|
|
|
+ })
|
|
|
|
|
+ }
|
|
|
|
|
+ } catch (e: Exception) {
|
|
|
|
|
+ Log.e(TAG, "updateDevice error", e)
|
|
|
|
|
+ socketCallback(id = id, status = -1, error = e.message)
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ StoreNumberAction.NAME -> {
|
|
|
|
|
+ try {
|
|
|
|
|
+ throwIfBusy()
|
|
|
|
|
+ val storeNumberAction = Json.decodeFromString<StoreNumberAction>(jsonStr)
|
|
|
|
|
+ CoroutineScope(Dispatchers.IO).launch {
|
|
|
|
|
+ taskRunner.storeNumbers(storeNumberAction.data?.num)
|
|
|
|
|
+ socketCallback(id = storeNumberAction.id, status = 0, data = "OK")
|
|
|
|
|
+ }
|
|
|
|
|
+ } catch (e: Exception) {
|
|
|
|
|
+ Log.e(TAG, "storeNumber error", e)
|
|
|
|
|
+ socketCallback(id = id, status = -1, error = e.message)
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ CancelStoreNumberAction.NAME -> {
|
|
|
|
|
+ try {
|
|
|
|
|
+ CoroutineScope(Dispatchers.IO).launch {
|
|
|
|
|
+ taskRunner.cancelStoreNumber()
|
|
|
|
|
+ socketCallback(id = id, status = 0, data = "OK")
|
|
|
|
|
+ }
|
|
|
|
|
+ } catch (e: Exception) {
|
|
|
|
|
+ Log.e(TAG, "cancelStoreNumber error", e)
|
|
|
|
|
+ socketCallback(id = id, status = -1, error = e.message)
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ ResumeAction.NAME -> {
|
|
|
|
|
+ try {
|
|
|
|
|
+ throwIfBusy()
|
|
|
|
|
+ val resumeAction = Json.decodeFromString<ResumeAction>(jsonStr)
|
|
|
|
|
+ CoroutineScope(Dispatchers.IO).launch {
|
|
|
|
|
+ AppStateRepo.instance.updateRuntimeFlags(suspended = false)
|
|
|
|
|
+ AppStateRepo.instance.updateSend(true)
|
|
|
|
|
+ if (resumeAction.data?.request == true) {
|
|
|
|
|
+ taskRunner.requestNumberOnTask(
|
|
|
|
|
+ reset = resumeAction.data.reset ?: false
|
|
|
|
|
+ )
|
|
|
}
|
|
}
|
|
|
- } catch (e: Exception) {
|
|
|
|
|
- Log.e(TAG, "updateDevice error", e)
|
|
|
|
|
- socketCallback(id = id, status = -1, error = e.message)
|
|
|
|
|
}
|
|
}
|
|
|
|
|
+ socketCallback(id = id, status = 0, data = "OK")
|
|
|
|
|
+ } catch (e: Exception) {
|
|
|
|
|
+ Log.e(TAG, "resume error", e)
|
|
|
|
|
+ socketCallback(id = id, status = -1, error = e.message)
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
@@ -206,8 +257,12 @@ class SocketClient(
|
|
|
dataObj.put("busy", AppStateRepo.instance.appState.value.busy)
|
|
dataObj.put("busy", AppStateRepo.instance.appState.value.busy)
|
|
|
dataObj.put("currentCountry", SpoofedSimInfoRepo.instance.spoofedSimInfo.value.country)
|
|
dataObj.put("currentCountry", SpoofedSimInfoRepo.instance.spoofedSimInfo.value.country)
|
|
|
dataObj.put("ip", getIPAddress().joinToString(","))
|
|
dataObj.put("ip", getIPAddress().joinToString(","))
|
|
|
- dataObj.put("requesting", AppStateRepo.instance.appState.value.reqState == ReqState.REQUEST)
|
|
|
|
|
|
|
+ dataObj.put(
|
|
|
|
|
+ "requesting",
|
|
|
|
|
+ AppStateRepo.instance.appState.value.reqState == ReqState.REQUEST
|
|
|
|
|
+ )
|
|
|
dataObj.put("suspended", AppStateRepo.instance.appState.value.suspended)
|
|
dataObj.put("suspended", AppStateRepo.instance.appState.value.suspended)
|
|
|
|
|
+ dataObj.put("storing", AppStateRepo.instance.appState.value.storing)
|
|
|
data.put("data", dataObj)
|
|
data.put("data", dataObj)
|
|
|
mSocket.emit("message", data)
|
|
mSocket.emit("message", data)
|
|
|
} catch (e: JSONException) {
|
|
} catch (e: JSONException) {
|