prim-ctrl 0.8.3__tar.gz → 0.8.4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: prim-ctrl
3
- Version: 0.8.3
3
+ Version: 0.8.4
4
4
  Summary: Primitive Ctrl - Remote control of your phone's Primitive FTPd Android SFTP server and optionally Tailscale VPN.
5
5
  License-Expression: Apache-2.0
6
6
  License-File: LICENSE
@@ -727,8 +727,10 @@ class Funnel(Pingable):
727
727
  self.external_port = external_port
728
728
  self.external_url = f'https://{machine_name}.{tailscale.tailnet}:{external_port}{local_path}'
729
729
  self.local_tailscale = local_tailscale
730
+ self.external_public_dns_resolver_address = None
730
731
  self.external_public_dns_resolver = None
731
- self.external_tailscale_dns_resolvers = None
732
+ self.external_tailscale_dns_resolver_addresses = None
733
+ self.external_tailscale_dns_resolver = None
732
734
 
733
735
  async def wait_for(self, available: bool, timeout: float):
734
736
  self._sleepcounter = 0
@@ -737,25 +739,33 @@ class Funnel(Pingable):
737
739
  async def ping(self, availability_hint: bool | None = None):
738
740
  logger.debug("Resolving DNS for %s (%s:%s)", LazyStr(self.get_class_name), self.external_name, self.external_port)
739
741
  # first try at Tailscale's DNSs, if they don't know, we should not resolve at a public DNS and cache nxdomain for 5 minutes
740
- if self.external_tailscale_dns_resolvers is None:
742
+ if self.external_tailscale_dns_resolver_addresses is None:
741
743
  resolvers = [await self.local_tailscale.external_tailscale_dns_resolver()]
742
744
  resolvers.extend(await self._external_tailscale_dns_resolvers())
743
- self.external_tailscale_dns_resolvers = [ExternalDnsResolver(resolver) for resolver in resolvers]
745
+ self.external_tailscale_dns_resolver_addresses = resolvers
746
+ resolver = self.external_tailscale_dns_resolver
747
+ if resolver is None:
748
+ resolver = ExternalDnsResolver(self.external_tailscale_dns_resolver_addresses[0])
744
749
  try:
745
- _answer = await self.external_tailscale_dns_resolvers[0].resolve(self.external_name, self.external_port)
750
+ _answer = await resolver.resolve(self.external_name, self.external_port)
746
751
  except Exception as e:
747
- logger.debug("Resolving at Tailscale's external DNS %s has failed: %s", self.external_tailscale_dns_resolvers[0].where, LazyStr(exception_repr, e))
752
+ logger.debug("Resolving at Tailscale's external DNS %s has failed: %s", self.external_tailscale_dns_resolver_addresses[0], LazyStr(exception_repr, e))
748
753
  # move current resolver to the end of the list
749
- self.external_tailscale_dns_resolvers.append(self.external_tailscale_dns_resolvers.pop(0))
754
+ self.external_tailscale_dns_resolver_addresses.append(self.external_tailscale_dns_resolver_addresses.pop(0))
750
755
  return False
756
+ self.external_tailscale_dns_resolver = resolver
751
757
  # then try at a public DNS
752
- if self.external_public_dns_resolver is None:
753
- self.external_public_dns_resolver = ExternalDnsResolver(await self.local_tailscale.external_public_dns_resolver())
758
+ if self.external_public_dns_resolver_address is None:
759
+ self.external_public_dns_resolver_address = await self.local_tailscale.external_public_dns_resolver()
760
+ resolver = self.external_public_dns_resolver
761
+ if resolver is None:
762
+ resolver = ExternalDnsResolver(self.external_public_dns_resolver_address)
754
763
  try:
755
- _answer = await self.external_public_dns_resolver.resolve(self.external_name, self.external_port)
764
+ _answer = await resolver.resolve(self.external_name, self.external_port)
756
765
  except Exception as e:
757
766
  logger.debug("Resolving at public external DNS has failed: %s", LazyStr(exception_repr, e))
758
767
  return False
768
+ self.external_public_dns_resolver = resolver
759
769
  return True
760
770
 
761
771
  async def _sleep_while_wait(self, available: bool):
@@ -3,7 +3,7 @@ packages = [{include = "prim_ctrl"}]
3
3
 
4
4
  [project]
5
5
  name = "prim-ctrl"
6
- version = "0.8.3"
6
+ version = "0.8.4"
7
7
  description = "Primitive Ctrl - Remote control of your phone's Primitive FTPd Android SFTP server and optionally Tailscale VPN."
8
8
  license = "Apache-2.0"
9
9
  authors = [
File without changes
File without changes