summaryrefslogtreecommitdiff
path: root/libs/samba/src/main/java/org/the_jk
diff options
context:
space:
mode:
authorJoel Klinghed <the_jk@spawned.biz>2024-07-25 19:09:41 +0200
committerJoel Klinghed <the_jk@spawned.biz>2024-07-25 19:09:41 +0200
commitb0d90f32974f6473552d8b1bf5387f9fc4995970 (patch)
tree8908d0271fadd125f97243c1e1f1ff908d08376a /libs/samba/src/main/java/org/the_jk
parentc857f1cd645ba379573e4266fb185b5432e66404 (diff)
samba: Add credentials object
Ask for enough permissions to be able to create sockets.
Diffstat (limited to 'libs/samba/src/main/java/org/the_jk')
-rw-r--r--libs/samba/src/main/java/org/the_jk/cleversync/io/samba/NativeSamba.kt15
-rw-r--r--libs/samba/src/main/java/org/the_jk/cleversync/io/samba/SambaConnection.kt4
-rw-r--r--libs/samba/src/main/java/org/the_jk/cleversync/io/samba/SambaCredentials.kt3
-rw-r--r--libs/samba/src/main/java/org/the_jk/cleversync/samba/SambaTreeFactory.kt7
4 files changed, 18 insertions, 11 deletions
diff --git a/libs/samba/src/main/java/org/the_jk/cleversync/io/samba/NativeSamba.kt b/libs/samba/src/main/java/org/the_jk/cleversync/io/samba/NativeSamba.kt
index 360aaa9..e48268d 100644
--- a/libs/samba/src/main/java/org/the_jk/cleversync/io/samba/NativeSamba.kt
+++ b/libs/samba/src/main/java/org/the_jk/cleversync/io/samba/NativeSamba.kt
@@ -4,10 +4,13 @@
package org.the_jk.cleversync.io.samba
import androidx.annotation.Keep
+import kotlin.time.Duration
+import kotlin.time.Duration.Companion.seconds
@Keep
internal object NativeSamba {
- fun newContext(): Context = NativeContext(nativeContextNew())
+ fun newContext(timeout: Duration = 30.seconds): Context =
+ NativeContext(nativeContextNew(timeout.inWholeSeconds.toInt()))
interface Object {
fun destroy()
@@ -15,7 +18,7 @@ internal object NativeSamba {
interface Context : Object {
fun parseUrl(url: String): Url?
- fun connect(url: Url): Boolean
+ fun connect(url: Url, credentials: SambaCredentials): Boolean
fun lastError(): String
fun openDir(path: String): Dir?
}
@@ -40,8 +43,8 @@ internal object NativeSamba {
return if (ptr != 0L) NativeUrl(ptr) else null
}
- override fun connect(url: Url): Boolean {
- return nativeContextConnect(ptr, (url as NativeUrl).get())
+ override fun connect(url: Url, credentials: SambaCredentials): Boolean {
+ return nativeContextConnect(ptr, (url as NativeUrl).get(), credentials.username, credentials.password)
}
override fun lastError(): String {
@@ -78,10 +81,10 @@ internal object NativeSamba {
System.loadLibrary("samba")
}
- private external fun nativeContextNew(): Long
+ private external fun nativeContextNew(timeoutSeconds: Int): Long
private external fun nativeContextDestroy(ptr: Long)
private external fun nativeContextParseUrl(ptr: Long, url: String): Long
- private external fun nativeContextConnect(ptr: Long, url: Long): Boolean
+ private external fun nativeContextConnect(ptr: Long, url: Long, username: String?, password: String?): Boolean
private external fun nativeContextGetError(ptr: Long): String
private external fun nativeContextOpenDir(ptr: Long, path: String): Long
diff --git a/libs/samba/src/main/java/org/the_jk/cleversync/io/samba/SambaConnection.kt b/libs/samba/src/main/java/org/the_jk/cleversync/io/samba/SambaConnection.kt
index 03d3a9e..05cc831 100644
--- a/libs/samba/src/main/java/org/the_jk/cleversync/io/samba/SambaConnection.kt
+++ b/libs/samba/src/main/java/org/the_jk/cleversync/io/samba/SambaConnection.kt
@@ -1,10 +1,10 @@
package org.the_jk.cleversync.io.samba
-internal class SambaConnection(uri: String) {
+internal class SambaConnection(uri: String, credentials: SambaCredentials) {
private val context = NativeSamba.newContext()
private val url = context.parseUrl(uri)
- val connected = if (url != null) { context.connect(url) } else false
+ val connected = if (url != null) { context.connect(url, credentials) } else false
val error: String
get() = context.lastError()
diff --git a/libs/samba/src/main/java/org/the_jk/cleversync/io/samba/SambaCredentials.kt b/libs/samba/src/main/java/org/the_jk/cleversync/io/samba/SambaCredentials.kt
new file mode 100644
index 0000000..4b1518b
--- /dev/null
+++ b/libs/samba/src/main/java/org/the_jk/cleversync/io/samba/SambaCredentials.kt
@@ -0,0 +1,3 @@
+package org.the_jk.cleversync.io.samba
+
+data class SambaCredentials(val username: String?, val password: String?)
diff --git a/libs/samba/src/main/java/org/the_jk/cleversync/samba/SambaTreeFactory.kt b/libs/samba/src/main/java/org/the_jk/cleversync/samba/SambaTreeFactory.kt
index 3455de8..5c9bc4f 100644
--- a/libs/samba/src/main/java/org/the_jk/cleversync/samba/SambaTreeFactory.kt
+++ b/libs/samba/src/main/java/org/the_jk/cleversync/samba/SambaTreeFactory.kt
@@ -3,13 +3,14 @@ package org.the_jk.cleversync.samba
import org.the_jk.cleversync.io.ModifiableTree
import org.the_jk.cleversync.io.Tree
import org.the_jk.cleversync.io.samba.SambaConnection
+import org.the_jk.cleversync.io.samba.SambaCredentials
import org.the_jk.cleversync.io.samba.SambaTree
object SambaTreeFactory {
- fun tree(uri: String): Result<Tree> = modifiableTree(uri)
+ fun tree(uri: String, credentials: SambaCredentials): Result<Tree> = modifiableTree(uri, credentials)
- fun modifiableTree(uri: String): Result<ModifiableTree> {
- val connection = SambaConnection(uri)
+ fun modifiableTree(uri: String, credentials: SambaCredentials): Result<ModifiableTree> {
+ val connection = SambaConnection(uri, credentials)
if (!connection.connected) return Result.failure(Exception(connection.error))
val root = connection.openDir("") ?: return Result.failure(Exception(connection.error))
return Result.success(SambaTree(connection, root))