mirror of
https://github.com/Drop-OSS/libtailscale-drop.git
synced 2026-02-04 06:51:18 +01:00
45 lines
1.1 KiB
Python
45 lines
1.1 KiB
Python
# Copyright (c) Tailscale Inc & AUTHORS
|
|
# SPDX-License-Identifier: BSD-3-Clause
|
|
|
|
import io
|
|
|
|
from . import _tailscale
|
|
|
|
class TSNetException(Exception): pass
|
|
|
|
|
|
class TSNet:
|
|
def __init__(self, ephemeral=False):
|
|
self.ts = _tailscale.new()
|
|
if ephemeral and _tailscale.set_ephemeral(self.ts, 1):
|
|
raise TSNetException("Error setting ephemeral")
|
|
|
|
def up(self):
|
|
if _tailscale.up(self.ts):
|
|
raise TSNetException("Error coming up")
|
|
|
|
def listen(self, proto, addr):
|
|
ln, err = _tailscale.listen(self.ts, proto, addr)
|
|
if err:
|
|
raise TSNetException("Error listening: %s on %s" % (proto, addr))
|
|
return TSNetListener(ln)
|
|
|
|
def close(self):
|
|
if _tailscale.close(self.ts):
|
|
raise TSNetException("Failed to close")
|
|
|
|
|
|
class TSNetListener:
|
|
def __init__(self, ln):
|
|
self.ln = ln
|
|
|
|
def accept(self):
|
|
fd, err = _tailscale.accept(self.ln)
|
|
if err:
|
|
raise TSNetException("Failed to accept conn")
|
|
return fd
|
|
|
|
def close(self):
|
|
if _tailscale.close_listener(self.ln):
|
|
raise TSNetException("Failed to close")
|