mirror of
				https://github.com/GayPizzaSpecifications/foundation.git
				synced 2025-11-04 11:39:39 +00:00 
			
		
		
		
	Tailscale Proxy Fix
This commit is contained in:
		@ -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() {
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user