ha-frp-rn 1.0.1 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,212 @@
1
+ package io.github.acedroidx.frp
2
+
3
+ import android.content.Context
4
+ import android.util.Log
5
+ import java.io.*
6
+ import java.util.concurrent.Executors
7
+ import java.util.concurrent.TimeUnit
8
+
9
+ class ShellService(private val context: Context) {
10
+
11
+ enum class Status {
12
+ STOPPED,
13
+ STARTING,
14
+ RUNNING,
15
+ STOPPING,
16
+ ERROR
17
+ }
18
+
19
+ private var process: Process? = null
20
+ private var status = Status.STOPPED
21
+ private var lastMessage = ""
22
+ private var executorService = Executors.newSingleThreadExecutor()
23
+ private var onStatusChangeListener: ((Status, String) -> Unit)? = null
24
+ private val TAG = "ShellService"
25
+
26
+ fun setOnStatusChangeListener(listener: (Status, String) -> Unit) {
27
+ this.onStatusChangeListener = listener
28
+ }
29
+
30
+ /**
31
+ * 使用配置路径启动FRP访问者模式
32
+ *
33
+ * @param configPath - 配置文件路径
34
+ */
35
+ fun startVisitor(configPath: String) {
36
+ startFrp("frpc", configPath)
37
+ }
38
+
39
+ /**
40
+ * 使用配置路径启动FRP服务器模式
41
+ *
42
+ * @param configPath - 配置文件路径
43
+ */
44
+ fun startServer(configPath: String) {
45
+ startFrp("frps", configPath)
46
+ }
47
+
48
+ /**
49
+ * 使用FrpConfig对象启动FRP
50
+ *
51
+ * @param frpConfig - FRP配置对象
52
+ */
53
+ fun start(frpConfig: FrpConfig) {
54
+ val binaryName = when (frpConfig.type) {
55
+ FrpType.FRPC -> "frpc"
56
+ FrpType.FRPS -> "frps"
57
+ }
58
+ val configPath = frpConfig.getFile(context).absolutePath
59
+ startFrp(binaryName, configPath)
60
+ }
61
+
62
+ private fun startFrp(binaryName: String, configPath: String) {
63
+ if (status == Status.RUNNING) {
64
+ Log.w(TAG, "FRP is already running")
65
+ return
66
+ }
67
+
68
+ setStatus(Status.STARTING, "Starting $binaryName...")
69
+
70
+ executorService.submit {
71
+ try {
72
+ val binaryPath = extractBinary(binaryName)
73
+ if (binaryPath.isNullOrEmpty()) {
74
+ setStatus(Status.ERROR, "Failed to extract $binaryName")
75
+ return@submit
76
+ }
77
+
78
+ val command = arrayOf(
79
+ binaryPath,
80
+ "-c",
81
+ configPath
82
+ )
83
+
84
+ Log.i(TAG, "Executing: ${command.joinToString(" ")}")
85
+
86
+ val pb = ProcessBuilder(*command)
87
+ .redirectErrorStream(true)
88
+ .directory(File(context.cacheDir, "frp"))
89
+
90
+ process = pb.start()
91
+ setStatus(Status.RUNNING, "$binaryName started successfully")
92
+
93
+ // Read output
94
+ BufferedReader(InputStreamReader(process?.inputStream)).use { reader ->
95
+ var line: String?
96
+ while (reader.readLine().also { line = it } != null) {
97
+ Log.d(TAG, "FRP output: $line")
98
+ lastMessage = line ?: ""
99
+ onStatusChangeListener?.invoke(status, lastMessage)
100
+ }
101
+ }
102
+
103
+ // Wait for process to exit
104
+ val exitCode = process?.waitFor(100, TimeUnit.MILLISECONDS)
105
+ if (exitCode != null && !exitCode) {
106
+ // Process is still running, continue monitoring
107
+ monitorProcess()
108
+ } else {
109
+ val actualExitCode = process?.exitValue() ?: -1
110
+ setStatus(Status.STOPPED, "$binaryName stopped with exit code $actualExitCode")
111
+ }
112
+ } catch (e: Exception) {
113
+ Log.e(TAG, "Error running FRP: ${e.message}", e)
114
+ setStatus(Status.ERROR, "Failed to run $binaryName: ${e.message}")
115
+ }
116
+ }
117
+ }
118
+
119
+ private fun monitorProcess() {
120
+ executorService.submit {
121
+ try {
122
+ process?.waitFor()
123
+ val exitCode = process?.exitValue() ?: -1
124
+ setStatus(Status.STOPPED, "FRP stopped with exit code $exitCode")
125
+ } catch (e: Exception) {
126
+ Log.e(TAG, "Error monitoring FRP process: ${e.message}", e)
127
+ setStatus(Status.ERROR, "Error monitoring FRP: ${e.message}")
128
+ }
129
+ }
130
+ }
131
+
132
+ fun stop() {
133
+ if (status != Status.RUNNING && status != Status.STARTING) {
134
+ Log.w(TAG, "FRP is not running")
135
+ return
136
+ }
137
+
138
+ setStatus(Status.STOPPING, "Stopping FRP...")
139
+
140
+ try {
141
+ process?.destroy()
142
+ process?.waitFor(5, TimeUnit.SECONDS)
143
+ if (process?.isAlive == true) {
144
+ process?.destroyForcibly()
145
+ process?.waitFor(2, TimeUnit.SECONDS)
146
+ }
147
+ setStatus(Status.STOPPED, "FRP stopped")
148
+ } catch (e: Exception) {
149
+ Log.e(TAG, "Error stopping FRP: ${e.message}", e)
150
+ setStatus(Status.ERROR, "Failed to stop FRP: ${e.message}")
151
+ } finally {
152
+ process = null
153
+ }
154
+ }
155
+
156
+ private fun extractBinary(binaryName: String): String? {
157
+ val outputDir = File(context.cacheDir, "frp")
158
+ if (!outputDir.exists()) {
159
+ outputDir.mkdirs()
160
+ }
161
+
162
+ val outputFile = File(outputDir, binaryName)
163
+ if (outputFile.exists() && outputFile.canExecute()) {
164
+ return outputFile.absolutePath
165
+ }
166
+
167
+ try {
168
+ val assetPath = "$binaryName"
169
+ val inputStream = context.assets.open(assetPath)
170
+ val outputStream = FileOutputStream(outputFile)
171
+ inputStream.copyTo(outputStream)
172
+ inputStream.close()
173
+ outputStream.close()
174
+
175
+ // Make file executable
176
+ outputFile.setExecutable(true)
177
+ return outputFile.absolutePath
178
+ } catch (e: Exception) {
179
+ Log.e(TAG, "Failed to extract $binaryName: ${e.message}", e)
180
+ return null
181
+ }
182
+ }
183
+
184
+ private fun setStatus(newStatus: Status, message: String) {
185
+ status = newStatus
186
+ lastMessage = message
187
+ Log.i(TAG, "Status: $status, Message: $message")
188
+ onStatusChangeListener?.invoke(newStatus, message)
189
+ }
190
+
191
+ fun getStatus(): Status {
192
+ return status
193
+ }
194
+
195
+ fun getLastMessage(): String {
196
+ return lastMessage
197
+ }
198
+
199
+ companion object {
200
+ // Properties for external access
201
+ val Status.status: Status
202
+ get() = this
203
+ val Status.message: String
204
+ get() = when (this) {
205
+ Status.STOPPED -> "Stopped"
206
+ Status.STARTING -> "Starting"
207
+ Status.RUNNING -> "Running"
208
+ Status.STOPPING -> "Stopping"
209
+ Status.ERROR -> "Error"
210
+ }
211
+ }
212
+ }
@@ -0,0 +1,104 @@
1
+ package io.github.acedroidx.frp
2
+
3
+ import android.content.Context
4
+ import androidx.test.platform.app.InstrumentationRegistry
5
+ import org.junit.Assert.assertEquals
6
+ import org.junit.Before
7
+ import org.junit.Test
8
+ import java.io.File
9
+
10
+ /**
11
+ * FrpConfig类的单元测试
12
+ *
13
+ * 测试内容:
14
+ * 1. 构造函数测试
15
+ * 2. toString()方法测试
16
+ * 3. getDir()方法测试
17
+ * 4. getFile()方法测试
18
+ * 5. getLogDir()方法测试
19
+ * 6. getLogFile()方法测试
20
+ */
21
+ class FrpConfigTest {
22
+ private lateinit var context: Context
23
+ private lateinit var frpcConfig: FrpConfig
24
+ private lateinit var frpsConfig: FrpConfig
25
+
26
+ @Before
27
+ fun setUp() {
28
+ // 获取测试上下文
29
+ context = InstrumentationRegistry.getInstrumentation().targetContext
30
+
31
+ // 创建测试配置对象
32
+ frpcConfig = FrpConfig(FrpType.FRPC, "test-config.toml")
33
+ frpsConfig = FrpConfig(FrpType.FRPS, "server-config.toml")
34
+ }
35
+
36
+ /**
37
+ * 测试构造函数是否正确初始化对象
38
+ */
39
+ @Test
40
+ fun testConstructor() {
41
+ assertEquals(FrpType.FRPC, frpcConfig.type)
42
+ assertEquals("test-config.toml", frpcConfig.fileName)
43
+
44
+ assertEquals(FrpType.FRPS, frpsConfig.type)
45
+ assertEquals("server-config.toml", frpsConfig.fileName)
46
+ }
47
+
48
+ /**
49
+ * 测试toString()方法是否返回预期的字符串
50
+ */
51
+ @Test
52
+ fun testToString() {
53
+ assertEquals("[FRPC]test-config.toml", frpcConfig.toString())
54
+ assertEquals("[FRPS]server-config.toml", frpsConfig.toString())
55
+ }
56
+
57
+ /**
58
+ * 测试getDir()方法是否返回正确的目录
59
+ */
60
+ @Test
61
+ fun testGetDir() {
62
+ val expectedFrpcDir = File(context.filesDir, "frpc")
63
+ val expectedFrpsDir = File(context.filesDir, "frps")
64
+
65
+ assertEquals(expectedFrpcDir, frpcConfig.getDir(context))
66
+ assertEquals(expectedFrpsDir, frpsConfig.getDir(context))
67
+ }
68
+
69
+ /**
70
+ * 测试getFile()方法是否返回正确的文件路径
71
+ */
72
+ @Test
73
+ fun testGetFile() {
74
+ val expectedFrpcFile = File(File(context.filesDir, "frpc"), "test-config.toml")
75
+ val expectedFrpsFile = File(File(context.filesDir, "frps"), "server-config.toml")
76
+
77
+ assertEquals(expectedFrpcFile, frpcConfig.getFile(context))
78
+ assertEquals(expectedFrpsFile, frpsConfig.getFile(context))
79
+ }
80
+
81
+ /**
82
+ * 测试getLogDir()方法是否返回正确的日志目录
83
+ */
84
+ @Test
85
+ fun testGetLogDir() {
86
+ val expectedFrpcLogDir = File(context.cacheDir, "logs/frpc")
87
+ val expectedFrpsLogDir = File(context.cacheDir, "logs/frps")
88
+
89
+ assertEquals(expectedFrpcLogDir, frpcConfig.getLogDir(context))
90
+ assertEquals(expectedFrpsLogDir, frpsConfig.getLogDir(context))
91
+ }
92
+
93
+ /**
94
+ * 测试getLogFile()方法是否返回正确的日志文件路径
95
+ */
96
+ @Test
97
+ fun testGetLogFile() {
98
+ val expectedFrpcLogFile = File(File(context.cacheDir, "logs/frpc"), "test-config.log")
99
+ val expectedFrpsLogFile = File(File(context.cacheDir, "logs/frps"), "server-config.log")
100
+
101
+ assertEquals(expectedFrpcLogFile, frpcConfig.getLogFile(context))
102
+ assertEquals(expectedFrpsLogFile, frpsConfig.getLogFile(context))
103
+ }
104
+ }
package/dist/index.d.ts CHANGED
@@ -6,7 +6,7 @@
6
6
  * @FilePath: \ha-frp-rn\src\index.ts
7
7
  * @Description: React Native FRP模块入口文件
8
8
  */
9
- import { IFrpService, FrpConfig, FrpStatus, FrpStats, FrpLogEntry } from 'ha-shared-core';
9
+ import { IFrpService, FrpConfig, FrpStatus, FrpStats, FrpLogEntry } from './interfaces/frp';
10
10
  /**
11
11
  * FRP配置管理器
12
12
  *
@@ -87,5 +87,6 @@ export declare class ReactNativeFrpService implements IFrpService {
87
87
  * @returns {ReactNativeFrpService} FRP服务实例
88
88
  */
89
89
  export declare function createFrpService(): ReactNativeFrpService;
90
- export { FrpConfigType, FrpStatus, FrpLogLevel, type IFrpService, type FrpConfig, type FrpStats, type FrpLogEntry } from 'ha-shared-core';
90
+ export { FrpConfigType, FrpStatus, FrpLogLevel } from './interfaces/frp';
91
+ export type { FrpProxyConfig, FrpVisitorConfig, IFrpService, FrpConfig, FrpStats, FrpLogEntry, IFrpConfigManager } from './interfaces/frp';
91
92
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,EAA8B,QAAQ,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAEtH;;;;GAIG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,iBAAiB,CAAsC;IAC/D,OAAO,CAAC,iBAAiB,CAA0B;IACnD,OAAO,CAAC,iBAAiB,CAAqB;IAE9C;;;;;OAKG;IACG,SAAS,CAAC,WAAW,GAAE,OAAe,GAAG,OAAO,CAAC,SAAS,CAAC;IAmBjE;;;;OAIG;YACW,kBAAkB;IAMhC;;;;OAIG;IACH,OAAO,CAAC,iBAAiB;IAmBzB;;OAEG;IACH,UAAU,IAAI,IAAI;IAKlB;;;;OAIG;IACH,cAAc,IAAI,IAAI,GAAG,IAAI;CAG9B;AAED;;;;;GAKG;AACH,qBAAa,qBAAsB,YAAW,WAAW;IACvD,OAAO,CAAC,UAAU,CAAM;IACxB,OAAO,CAAC,YAAY,CAAM;IAC1B,OAAO,CAAC,aAAa,CAAmB;;IAaxC,OAAO,CAAC,iBAAiB;IAKnB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAK3B,KAAK,CAAC,MAAM,CAAC,EAAE,SAAS,GAAG,MAAM,EAAE,iBAAiB,GAAE,OAAe,GAAG,OAAO,CAAC,MAAM,CAAC;IAkBvF,IAAI,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKxC,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,iBAAiB,GAAE,OAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAO9E,SAAS,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAM9E,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAa/C,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;IAU1D,UAAU,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK9D,cAAc,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC;IAMnD,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAM1F,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,IAAI,GAAG,IAAI;IAKrE,cAAc,CAAC,QAAQ,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,KAAK,IAAI,GAAG,IAAI;IAK/E,OAAO,CAAC,QAAQ,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,IAAI;IAK7D,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;IAM7B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAK9B;;;;OAIG;IACH,gBAAgB,IAAI,gBAAgB;CAGrC;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,IAAI,qBAAqB,CAExD;AAGD,OAAO,EACL,aAAa,EACb,SAAS,EACT,WAAW,EACX,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,KAAK,QAAQ,EACb,KAAK,WAAW,EACjB,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,EAA8B,QAAQ,EAAE,WAAW,EAAqB,MAAM,kBAAkB,CAAC;AAE3I;;;;GAIG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,iBAAiB,CAAsC;IAC/D,OAAO,CAAC,iBAAiB,CAA0B;IACnD,OAAO,CAAC,iBAAiB,CAAqB;IAE9C;;;;;OAKG;IACG,SAAS,CAAC,WAAW,GAAE,OAAe,GAAG,OAAO,CAAC,SAAS,CAAC;IAmBjE;;;;OAIG;YACW,kBAAkB;IAMhC;;;;OAIG;IACH,OAAO,CAAC,iBAAiB;IAmBzB;;OAEG;IACH,UAAU,IAAI,IAAI;IAKlB;;;;OAIG;IACH,cAAc,IAAI,IAAI,GAAG,IAAI;CAG9B;AAED;;;;;GAKG;AACH,qBAAa,qBAAsB,YAAW,WAAW;IACvD,OAAO,CAAC,UAAU,CAAM;IACxB,OAAO,CAAC,YAAY,CAAM;IAC1B,OAAO,CAAC,aAAa,CAAmB;;IAaxC,OAAO,CAAC,iBAAiB;IAKnB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAK3B,KAAK,CAAC,MAAM,CAAC,EAAE,SAAS,GAAG,MAAM,EAAE,iBAAiB,GAAE,OAAe,GAAG,OAAO,CAAC,MAAM,CAAC;IAkBvF,IAAI,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKxC,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,iBAAiB,GAAE,OAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAO9E,SAAS,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAM9E,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAa/C,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;IAU1D,UAAU,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK9D,cAAc,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC;IAMnD,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAM1F,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,IAAI,GAAG,IAAI;IAKrE,cAAc,CAAC,QAAQ,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,KAAK,IAAI,GAAG,IAAI;IAK/E,OAAO,CAAC,QAAQ,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,IAAI;IAK7D,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;IAM7B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAK9B;;;;OAIG;IACH,gBAAgB,IAAI,gBAAgB;CAGrC;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,IAAI,qBAAqB,CAExD;AAGD,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACzE,YAAY,EAAE,cAAc,EAAE,gBAAgB,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC"}
package/dist/index.js CHANGED
@@ -7,7 +7,7 @@
7
7
  * @Description: React Native FRP模块入口文件
8
8
  */
9
9
  import { Platform } from 'react-native';
10
- import { FrpStatus, FrpConfigType } from 'ha-shared-core';
10
+ import { FrpStatus, FrpConfigType } from './interfaces/frp';
11
11
  /**
12
12
  * FRP配置管理器
13
13
  *
@@ -224,5 +224,5 @@ export function createFrpService() {
224
224
  return new ReactNativeFrpService();
225
225
  }
226
226
  // 导出FRP相关类型和枚举
227
- export { FrpConfigType, FrpStatus, FrpLogLevel } from 'ha-shared-core';
227
+ export { FrpConfigType, FrpStatus, FrpLogLevel } from './interfaces/frp';
228
228
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}