[Incomplete] Zeroconf feature
This commit is contained in:
64
librespot/zeroconf/Zeroconf.py
Normal file
64
librespot/zeroconf/Zeroconf.py
Normal file
@@ -0,0 +1,64 @@
|
||||
from __future__ import annotations
|
||||
from librespot.standard import Closeable
|
||||
import base64
|
||||
import random
|
||||
import socket
|
||||
|
||||
|
||||
class Zeroconf(Closeable):
|
||||
__DISCOVERY = "_services._dns-sd._udp.local"
|
||||
__BROADCAST4: socket.socket
|
||||
__BROADCAST6: socket.socket
|
||||
__use_ipv4: bool = True
|
||||
__use_ipv6: bool = True
|
||||
__hostname: str
|
||||
__domain: str
|
||||
|
||||
def __init__(self):
|
||||
try:
|
||||
self.__BROADCAST4 = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
||||
self.__BROADCAST4.connect(("224.0.0.251", 5353))
|
||||
self.__BROADCAST6 = socket.socket(socket.AF_INET6, socket.SOCK_DGRAM)
|
||||
self.__BROADCAST6.connect(("FF02::FB", 5353))
|
||||
except Exception as e:
|
||||
pass
|
||||
self.set_domain(".local")
|
||||
self.set_local_host_name(Zeroconf.get_or_create_local_host_name())
|
||||
|
||||
@staticmethod
|
||||
def get_or_create_local_host_name() -> str:
|
||||
host = socket.gethostname()
|
||||
if host == "localhost":
|
||||
host = base64.b64encode(random.randint(-9223372036854775808, 9223372036854775807)).decode() + ".local"
|
||||
return host
|
||||
|
||||
def set_use_ipv4(self, ipv4: bool) -> Zeroconf:
|
||||
self.__use_ipv4 = ipv4
|
||||
return self
|
||||
|
||||
def set_use_ipv6(self, ipv6: bool) -> Zeroconf:
|
||||
self.__use_ipv6 = ipv6
|
||||
return self
|
||||
|
||||
def close(self) -> None:
|
||||
super().close()
|
||||
|
||||
def get_domain(self) -> str:
|
||||
return self.__domain
|
||||
|
||||
def set_domain(self, domain: str) -> Zeroconf:
|
||||
self.__domain = domain
|
||||
return self
|
||||
|
||||
def get_local_host_name(self) -> str:
|
||||
return self.__hostname
|
||||
|
||||
def set_local_host_name(self, name: str) -> Zeroconf:
|
||||
self.__hostname = name
|
||||
return self
|
||||
|
||||
def handle_packet(self, packet):
|
||||
pass
|
||||
|
||||
def announce(self, service):
|
||||
pass
|
||||
Reference in New Issue
Block a user