mirror of
https://github.com/GayPizzaSpecifications/foundation.git
synced 2025-08-02 21:20:55 +00:00
Tailscale Proxy Fix
This commit is contained in:
parent
2262ceb1d1
commit
b84da6d1eb
@ -1,13 +1,16 @@
|
|||||||
package gay.pizza.foundation.tailscale
|
package gay.pizza.foundation.tailscale
|
||||||
|
|
||||||
import gay.pizza.tailscale.channel.ChannelCopier
|
|
||||||
import gay.pizza.tailscale.core.Tailscale
|
import gay.pizza.tailscale.core.Tailscale
|
||||||
import gay.pizza.tailscale.core.TailscaleConn
|
import gay.pizza.tailscale.core.TailscaleConn
|
||||||
import gay.pizza.tailscale.core.TailscaleListener
|
import gay.pizza.tailscale.core.TailscaleListener
|
||||||
import org.bukkit.Server
|
import org.bukkit.Server
|
||||||
import java.net.InetSocketAddress
|
import java.net.InetSocketAddress
|
||||||
import java.net.StandardSocketOptions
|
import java.net.StandardSocketOptions
|
||||||
|
import java.nio.ByteBuffer
|
||||||
|
import java.nio.channels.ClosedChannelException
|
||||||
|
import java.nio.channels.ReadableByteChannel
|
||||||
import java.nio.channels.SocketChannel
|
import java.nio.channels.SocketChannel
|
||||||
|
import java.nio.channels.WritableByteChannel
|
||||||
|
|
||||||
class TailscaleProxyServer(val server: Server, val tailscale: Tailscale) {
|
class TailscaleProxyServer(val server: Server, val tailscale: Tailscale) {
|
||||||
private var minecraftServerListener: TailscaleListener? = null
|
private var minecraftServerListener: TailscaleListener? = null
|
||||||
@ -31,13 +34,38 @@ class TailscaleProxyServer(val server: Server, val tailscale: Tailscale) {
|
|||||||
val readChannel = conn.openReadChannel()
|
val readChannel = conn.openReadChannel()
|
||||||
val writeChannel = conn.openWriteChannel()
|
val writeChannel = conn.openWriteChannel()
|
||||||
|
|
||||||
val closeHandler = { socketChannel.close() }
|
fun closeAll() {
|
||||||
val tailscaleSocketCopier = ChannelCopier(readChannel, socketChannel)
|
socketChannel.close()
|
||||||
tailscaleSocketCopier.spawnCopyThread(
|
readChannel.close()
|
||||||
"Tailscale to Socket Copier", onClose = closeHandler)
|
writeChannel.close()
|
||||||
val socketTailscaleCopier = ChannelCopier(socketChannel, writeChannel)
|
}
|
||||||
socketTailscaleCopier.spawnCopyThread(
|
|
||||||
"Socket to Tailscale Copier", onClose = closeHandler)
|
fun startCopyThread(name: String, from: ReadableByteChannel, to: WritableByteChannel) {
|
||||||
|
val thread = Thread {
|
||||||
|
try {
|
||||||
|
while (true) {
|
||||||
|
val buffer = ByteBuffer.allocate(2048)
|
||||||
|
val size = from.read(buffer)
|
||||||
|
if (size < 0) {
|
||||||
|
break
|
||||||
|
} else {
|
||||||
|
buffer.flip()
|
||||||
|
to.write(buffer)
|
||||||
|
}
|
||||||
|
buffer.clear()
|
||||||
|
}
|
||||||
|
} catch (_: ClosedChannelException) {
|
||||||
|
} finally {
|
||||||
|
closeAll()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
thread.name = name
|
||||||
|
thread.start()
|
||||||
|
}
|
||||||
|
|
||||||
|
startCopyThread("Tailscale to Socket Pipe", readChannel, socketChannel)
|
||||||
|
startCopyThread("Socket to Tailscale Pipe", socketChannel, writeChannel)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun close() {
|
fun close() {
|
||||||
|
Loading…
Reference in New Issue
Block a user