mirror of
https://github.com/9001/copyparty.git
synced 2025-08-18 09:22:31 -06:00
mdns fixes
This commit is contained in:
parent
4500c04edf
commit
8b81e58205
|
@ -25,7 +25,7 @@ from .stolen.dnslib import (
|
||||||
DNSQuestion,
|
DNSQuestion,
|
||||||
DNSRecord,
|
DNSRecord,
|
||||||
)
|
)
|
||||||
from .util import CachedSet, Daemon, Netdev, min_ex
|
from .util import CachedSet, Daemon, Netdev, list_ips, min_ex
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from .svchub import SvcHub
|
from .svchub import SvcHub
|
||||||
|
@ -55,6 +55,7 @@ class MDNS_Sck(MC_Sck):
|
||||||
self.bp_bye = b""
|
self.bp_bye = b""
|
||||||
|
|
||||||
self.last_tx = 0.0
|
self.last_tx = 0.0
|
||||||
|
self.tx_ex = False
|
||||||
|
|
||||||
|
|
||||||
class MDNS(MCast):
|
class MDNS(MCast):
|
||||||
|
@ -374,6 +375,14 @@ class MDNS(MCast):
|
||||||
# avahi broadcasting 127.0.0.1-only packets
|
# avahi broadcasting 127.0.0.1-only packets
|
||||||
return
|
return
|
||||||
|
|
||||||
|
# check if we've been given additional IPs
|
||||||
|
for ip in list_ips():
|
||||||
|
if ip in cips:
|
||||||
|
self.sips.add(ip)
|
||||||
|
|
||||||
|
if not self.sips.isdisjoint(cips):
|
||||||
|
return
|
||||||
|
|
||||||
t = "mdns zeroconf: "
|
t = "mdns zeroconf: "
|
||||||
if self.probing:
|
if self.probing:
|
||||||
t += "Cannot start; hostname '{}' is occupied"
|
t += "Cannot start; hostname '{}' is occupied"
|
||||||
|
@ -507,6 +516,15 @@ class MDNS(MCast):
|
||||||
if now < srv.last_tx + cooldown:
|
if now < srv.last_tx + cooldown:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
try:
|
||||||
srv.sck.sendto(msg, (srv.grp, 5353))
|
srv.sck.sendto(msg, (srv.grp, 5353))
|
||||||
srv.last_tx = now
|
srv.last_tx = now
|
||||||
|
except Exception as ex:
|
||||||
|
if srv.tx_ex:
|
||||||
|
return True
|
||||||
|
|
||||||
|
srv.tx_ex = True
|
||||||
|
t = "tx({},|{}|,{}): {}"
|
||||||
|
self.log(t.format(srv.ip, len(msg), cooldown, ex), 3)
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
|
@ -2006,6 +2006,20 @@ def read_socket_chunked(
|
||||||
raise Pebkac(400, t.format(x))
|
raise Pebkac(400, t.format(x))
|
||||||
|
|
||||||
|
|
||||||
|
def list_ips() -> list[str]:
|
||||||
|
from .stolen.ifaddr import get_adapters
|
||||||
|
|
||||||
|
ret: set[str] = set()
|
||||||
|
for nic in get_adapters():
|
||||||
|
for ipo in nic.ips:
|
||||||
|
if len(ipo.ip) < 7:
|
||||||
|
ret.add(ipo.ip[0]) # ipv6 is (ip,0,0)
|
||||||
|
else:
|
||||||
|
ret.add(ipo.ip)
|
||||||
|
|
||||||
|
return list(ret)
|
||||||
|
|
||||||
|
|
||||||
def yieldfile(fn: str) -> Generator[bytes, None, None]:
|
def yieldfile(fn: str) -> Generator[bytes, None, None]:
|
||||||
with open(fsenc(fn), "rb", 512 * 1024) as f:
|
with open(fsenc(fn), "rb", 512 * 1024) as f:
|
||||||
while True:
|
while True:
|
||||||
|
|
Loading…
Reference in a new issue