diff --git a/_service b/_service
index e7f7cad..7727931 100644
--- a/_service
+++ b/_service
@@ -2,8 +2,8 @@
https://github.com/jstasiak/python-zeroconf
git
- 87ba2a3960576cfcf4207ea74a711b2c0cc584a7
- 0.31.0
+ 4281221b668123b770c6d6b0835dd876d1d2f22d
+ 0.35.1
diff --git a/disable-tests.patch b/disable-tests.patch
deleted file mode 100644
index f1f2a3e..0000000
--- a/disable-tests.patch
+++ /dev/null
@@ -1,20 +0,0 @@
-Index: python-zeroconf-0.31.0/zeroconf/test.py
-===================================================================
---- python-zeroconf-0.31.0.orig/zeroconf/test.py
-+++ python-zeroconf-0.31.0/zeroconf/test.py
-@@ -570,6 +570,7 @@ class Framework(unittest.TestCase):
- rv = r.Zeroconf(interfaces=r.InterfaceChoice.Default, unicast=True)
- rv.close()
-
-+ @unittest.skip('Fails in obs')
- def test_close_multiple_times(self):
- rv = r.Zeroconf(interfaces=r.InterfaceChoice.Default)
- rv.close()
-@@ -1886,6 +1887,7 @@ class TestServiceInfo(unittest.TestCase)
- zc.close()
-
-
-+@unittest.skip('Fails in obs')
- class TestServiceBrowserMultipleTypes(unittest.TestCase):
- def test_update_record(self):
-
diff --git a/python-zeroconf-0.31.0.tar.xz b/python-zeroconf-0.31.0.tar.xz
deleted file mode 100644
index 422b252..0000000
--- a/python-zeroconf-0.31.0.tar.xz
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:a7128b83f8f02fbecaca408d34c01a3ad55444ea7bbae3c02f0d4d87bec5f3ad
-size 54676
diff --git a/python-zeroconf-0.35.1.tar.xz b/python-zeroconf-0.35.1.tar.xz
new file mode 100644
index 0000000..dd2a67e
--- /dev/null
+++ b/python-zeroconf-0.35.1.tar.xz
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e9ba325464d40404d39b56db1853b96b3cfc98b06ce788119b14a7b9564d96b8
+size 98000
diff --git a/python-zeroconf.changes b/python-zeroconf.changes
index 5004221..20da9e8 100644
--- a/python-zeroconf.changes
+++ b/python-zeroconf.changes
@@ -1,3 +1,373 @@
+-------------------------------------------------------------------
+Mon Aug 16 01:39:16 UTC 2021 - Fusion Future
+
+- Update to 0.35.1:
+ * Only reschedule types if the send next time changes (#958)
+ @bdraco
+ * When the PTR response was seen again, the timer was being
+ canceled and rescheduled even if the timer was for the same
+ time. While this did not cause any breakage, it is quite
+ inefficient.
+ * Cache DNS record and question hashes (#960) @bdraco
+ * The hash was being recalculated every time the object was
+ being used in a set or dict. Since the hashes are effectively
+ immutable, we only calculate them once now.
+- Changes from 0.35.0:
+ * Reduced chance of accidental synchronization of ServiceInfo
+ requests (#955) @bdraco
+ * Sort aggregated responses to increase chance of name compression
+ (#954) @bdraco
+ Technically backwards incompatible:
+ * Send unicast replies on the same socket the query was received
+ (#952) @bdraco
+ * When replying to a QU question, we do not know if the sending
+ host is reachable from all of the sending sockets. We now
+ avoid this problem by replying via the receiving socket. This
+ was the existing behavior when InterfaceChoice.Default is set.
+ * This change extends the unicast relay behavior to used with
+ InterfaceChoice.Default to apply when InterfaceChoice.All
+ or interfaces are explicitly passed when instantiating a
+ Zeroconf instance.
+ * Fixes #951
+- Changes from 0.34.3:
+ * Fix sending immediate multicast responses (#949) @bdraco
+- Changes from 0.34.2:
+ * Coalesce aggregated multicast answers (#945) @bdraco
+ * When the random delay is shorter than the last scheduled
+ response, answers are now added to the same outgoing time group.
+ * This reduces traffic when we already know we will be sending
+ a group of answers inside the random delay window described
+ in datatracker.ietf.org/doc/html/rfc6762#section-6.3
+ * Ensure ServiceInfo requests can be answered inside the default
+ timeout with network protection (#946) @bdraco
+ * Adjust the time windows to ensure responses that have triggered
+ the protection against against excessive packet flooding due to
+ software bugs or malicious attack described in RFC6762 section
+ 6 can respond in under 1350ms to ensure ServiceInfo can ask
+ two questions within the default timeout of 3000ms
+- Changes from 0.34.1:
+ * Ensure multicast aggregation sends responses within 620ms
+ (#942) @bdraco
+ * Responses that trigger the protection against against
+ excessive packet flooding due to software bugs or malicious
+ attack described in RFC6762 section 6 could cause the multicast
+ aggregation response to be delayed longer than 620ms (The maximum
+ random delay of 120ms and 500ms additional for aggregation).
+ * Only responses that trigger the protection are delayed longer
+ than 620ms
+- Changes from 0.34.0:
+ * Implemented Multicast Response Aggregation (#940) @bdraco
+ * Responses are now aggregated when possible per rules in RFC6762
+ section 6.4
+ * Responses that trigger the protection against against
+ excessive packet flooding due to software bugs or malicious
+ attack described in RFC6762 section 6 are delayed instead of
+ discarding as it was causing responders that implement Passive
+ Observation Of Failures (POOF) to evict the records.
+ * Probe responses are now always sent immediately as there were
+ cases where they would fail to be answered in time to defend
+ a name.
+- Changes from 0.33.4:
+ * Ensure zeroconf can be loaded when the system disables IPv6
+ (#933) @che0
+- Changes from 0.33.3:
+ * Added support for forward dns compression pointers (#934) @bdraco
+ * Provide sockname when logging a protocol error (#935) @bdraco
+- Changes from 0.33.2:
+ * Handle duplicate goodbye answers in the same packet (#928)
+ @bdraco
+ * Solves an exception being thrown when we tried to remove the
+ known answer from the cache when the second goodbye answer in
+ the same packet was processed
+ * Fixed #926
+ * Skip ipv6 interfaces that return ENODEV (#930) @bdraco
+- Changes from 0.33.1:
+ * Version number change only with less restrictive directory
+ permissions
+ * Fixed #923
+- Changes from 0.33.0:
+ This release eliminates all threading locks as all non-threadsafe
+ operations now happen in the event loop.
+ * Let connection_lost close the underlying socket (#918) @bdraco
+ * The socket was closed during shutdown before asyncio's
+ connection_lost handler had a chance to close it which resulted
+ in a traceback on windows.
+ * Fixed #917
+ Technically backwards incompatible:
+ * Removed duplicate unregister_all_services code (#910) @bdraco
+ * Calling Zeroconf.close from same asyncio event loop zeroconf
+ is running in will now skip unregister_all_services and log
+ a warning as this a blocking operation and is not async safe
+ and never has been.
+ * Use AsyncZeroconf instead, or for legacy code call
+ async_unregister_all_services before Zeroconf.close
+- Changes from 0.32.1:
+ * Increased timeout in ServiceInfo.request to handle loaded systems
+ (#895) @bdraco
+ * It can take a few seconds for a loaded system to run the
+ async_request coroutine when the event loop is busy, or the
+ system is CPU bound (example being Home Assistant startup). We
+ now add an additional _LOADED_SYSTEM_TIMEOUT (10s) to the
+ run_coroutine_threadsafe calls to ensure the coroutine has
+ the total amount of time to run up to its internal timeout
+ (default of 3000ms).
+ * Ten seconds is a bit large of a timeout; however, it is only
+ used in cases where we wrap other timeouts. We now expect the
+ only instance the run_coroutine_threadsafe result timeout will
+ happen in a production circumstance is when someone is running
+ a ServiceInfo.request() in a thread and another thread calls
+ Zeroconf.close() at just the right moment that the future
+ is never completed unless the system is so loaded that it is
+ nearly unresponsive.
+ * The timeout for run_coroutine_threadsafe is the maximum time
+ a thread can cleanly shut down when zeroconf is closed out in
+ another thread, which should always be longer than the underlying
+ thread operation.
+- Changes from 0.32.0:
+ This release offers 100% line and branch coverage.
+ * Made ServiceInfo first question QU (#852) @bdraco
+ * We want an immediate response when requesting with ServiceInfo
+ by asking a QU question; most responders will not delay the
+ response and respond right away to our question. This also
+ improves compatibility with split networks as we may not have
+ been able to see the response otherwise. If the responder has
+ not multicast the record recently, it may still choose to do
+ so in addition to responding via unicast
+ * Reduces traffic when there are multiple zeroconf instances
+ running on the network running ServiceBrowsers
+ * If we don't get an answer on the first try, we ask a QM question
+ in the event, we can't receive a unicast response for some reason
+ * This change puts ServiceInfo inline with ServiceBrowser which
+ also asks the first question as QU since ServiceInfo is commonly
+ called from ServiceBrowser callbacks
+ * Limited duplicate packet suppression to 1s intervals (#841)
+ @bdraco
+ * Only suppress duplicate packets that happen within the same
+ second. Legitimate queriers will retry the question if they
+ are suppressed. The limit was reduced to one second to be in
+ line with rfc6762
+ * Made multipacket known answer suppression per interface (#836)
+ @bdraco
+ * The suppression was happening per instance of Zeroconf instead
+ of per interface. Since the same network can be seen on multiple
+ interfaces (usually and wifi and ethernet), this would confuse
+ the multi-packet known answer supression since it was not
+ expecting to get the same data more than once
+ * New ServiceBrowsers now request QU in the first outgoing when
+ unspecified (#812) @bdraco
+ * https://datatracker.ietf.org/doc/html/rfc6762#section-5.4 When
+ we start a ServiceBrowser and zeroconf has just started up,
+ the known answer list will be small. By asking a QU question
+ first, it is likely that we have a large known answer list
+ by the time we ask the QM question a second later (current
+ default which is likely too low but would be a breaking change
+ to increase). This reduces the amount of traffic on the network,
+ and has the secondary advantage that most responders will answer
+ a QU question without the typical delay answering QM questions.
+ * IPv6 link-local addresses are now qualified with scope_id
+ (#343) @ibygrave
+ * When a service is advertised on an IPv6 address where the scope
+ is link local, i.e. fe80::/64 (see RFC 4007) the resolved IPv6
+ address must be extended with the scope_id that identifies
+ through the "%" symbol the local interface to be used when
+ routing to that address. A new API parsed_scoped_addresses()
+ is provided to return qualified addresses to avoid breaking
+ compatibility on the existing parsed_addresses().
+ * Network adapters that are disconnected are now skipped (#327)
+ @ZLJasonG
+ * Fixed listeners missing initial packets if Engine starts too
+ quickly (#387) @bdraco
+ * When manually creating a zeroconf.Engine object, it is no longer
+ started automatically. It must manually be started by calling
+ .start() on the created object.
+ * The Engine thread is now started after all the listeners have
+ been added to avoid a race condition where packets could be
+ missed at startup.
+ * Fixed answering matching PTR queries with the ANY query (#618)
+ @bdraco
+ * Fixed lookup of uppercase names in the registry (#597) @bdraco
+ * If the ServiceInfo was registered with an uppercase name and
+ the query was for a lowercase name, it would not be found
+ and vice-versa.
+ * Fixed unicast responses from any source port (#598) @bdraco
+ * Unicast responses were only being sent if the source port was
+ 53, this prevented responses when testing with dig:
+ dig -p 5353 @224.0.0.251 media-12.local
+ The above query will now see a response
+ * Fixed queries for AAAA records not being answered (#616) @bdraco
+ * Removed second level caching from ServiceBrowsers (#737) @bdraco
+ * The ServiceBrowser had its own cache of the last time it saw
+ a service that was reimplementing the DNSCache and presenting
+ a source of truth problem that lead to unexpected queries when
+ the two disagreed.
+ * Fixed server cache not being case-insensitive (#731) @bdraco
+ * If the server name had uppercase chars and any of the matching
+ records were lowercase, and the server would not be found
+ * Fixed cache handling of records with different TTLs (#729)
+ @bdraco
+ * There should only be one unique record in the cache at a time as
+ having multiple unique records will different TTLs in the cache
+ can result in unexpected behavior since some functions returned
+ all matching records and some fetched from the right side of
+ the list to return the newest record. Instead we now store
+ the records in a dict to ensure that the newest record always
+ replaces the same unique record, and we never have a source of
+ truth problem determining the TTL of a record from the cache.
+ * Fixed ServiceInfo with multiple A records (#725) @bdraco
+ * If there were multiple A records for the host, ServiceInfo would
+ always return the last one that was in the incoming packet,
+ which was usually not the one that was wanted.
+ * Fixed stale unique records expiring too quickly (#706) @bdraco
+ * Records now expire 1s in the future instead of instant removal.
+ tools.ietf.org/html/rfc6762#section-10.2 Queriers receiving a
+ Multicast DNS response with a TTL of zero SHOULD NOT immediately
+ delete the record from the cache, but instead record a TTL of
+ 1 and then delete the record one second later. In the case of
+ multiple Multicast DNS responders on the network described in
+ Section 6.6 above, if one of the responders shuts down and
+ incorrectly sends goodbye packets for its records, it gives
+ the other cooperating responders one second to send out their
+ own response to "rescue" the records before they expire and
+ are deleted.
+ * Fixed exception when unregistering a service multiple times
+ (#679) @bdraco
+ * Added an AsyncZeroconfServiceTypes to mirror ZeroconfServiceTypes
+ to zeroconf.asyncio (#658) @bdraco
+ * Fixed interface_index_to_ip6_address not skiping ipv4 adapters
+ (#651) @bdraco
+ * Added async_unregister_all_services to AsyncZeroconf (#649)
+ @bdraco
+ * Fixed services not being removed from the registry when calling
+ unregister_all_services (#644) @bdraco
+ * There was a race condition where a query could be answered for
+ a service in the registry, while goodbye packets which could
+ result in a fresh record being broadcast after the goodbye if
+ a query came in at just the right time. To avoid this, we now
+ remove the services from the registry right after we generate
+ the goodbye packet
+ * Fixed zeroconf exception on load when the system disables IPv6
+ (#624) @bdraco
+ * Fixed the QU bit missing from for probe queries (#609) @bdraco
+ * The bit should be set per
+ datatracker.ietf.org/doc/html/rfc6762#section-8.1
+ * Fixed the TC bit missing for query packets where the known
+ answers span multiple packets (#494) @bdraco
+ * Fixed packets not being properly separated when exceeding
+ maximum size (#498) @bdraco
+ * Ensure that questions that exceed the max packet size
+ are moved to the next packet. This fixes DNSQuestions
+ being sent in multiple packets in violation of:
+ datatracker.ietf.org/doc/html/rfc6762#section-7.2
+ * Ensure only one resource record is sent when a record exceeds
+ _MAX_MSG_TYPICAL datatracker.ietf.org/doc/html/rfc6762#section-17
+ * Fixed PTR questions asked in uppercase not being answered
+ (#465) @bdraco
+ * Added Support for context managers in Zeroconf and AsyncZeroconf
+ (#284) @shenek
+ * Implemented an AsyncServiceBrowser to compliment the sync
+ ServiceBrowser (#429) @bdraco
+ * Added async_get_service_info to AsyncZeroconf and async_request
+ to AsyncServiceInfo (#408) @bdraco
+ * Implemented allowing passing in a sync Zeroconf instance to
+ AsyncZeroconf (#406) @bdraco
+ * Fixed IPv6 setup under MacOS when binding to "" (#392) @bdraco
+ * Fixed ZeroconfServiceTypes.find not always cancels the
+ ServiceBrowser (#389) @bdraco
+ * There was a short window where the ServiceBrowser thread could
+ be left running after Zeroconf is closed because the .join()
+ was never waited for when a new Zeroconf object was created
+ * Fixed duplicate packets triggering duplicate updates (#376)
+ @bdraco
+ * If TXT or SRV records update was already processed and then
+ received again, it was possible for a second update to be called
+ back in the ServiceBrowser
+ * Fixed ServiceStateChange.Updated event happening for IPs that
+ already existed (#375) @bdraco
+ * Fixed RFC6762 Section 10.2 paragraph 2 compliance (#374) @bdraco
+ * Reduced length of ServiceBrowser thread name with many types
+ (#373) @bdraco
+ * Fixed empty answers being added in ServiceInfo.request (#367)
+ @bdraco
+ * Fixed ServiceInfo not populating all AAAA records (#366) @bdraco
+ * Use get_all_by_details to ensure all records are loaded into
+ addresses.
+ * Only load A/AAAA records from the cache once in load_from_cache
+ if there is a SRV record present
+ * Move duplicate code that checked if the ServiceInfo was complete
+ into its own function
+ * Fixed a case where the cache list can change during iteration
+ (#363) @bdraco
+ * Return task objects created by AsyncZeroconf (#360) @nocarryr
+ Traffic Reduction:
+ * Added support for handling QU questions (#621) @bdraco
+ * Implements RFC 6762 sec 5.4: Questions Requesting Unicast
+ Responses datatracker.ietf.org/doc/html/rfc6762#section-5.4
+ * Implemented protect the network against excessive packet
+ flooding (#619) @bdraco
+ * Additionals are now suppressed when they are already in the
+ answers section (#617) @bdraco
+ * Additionals are no longer included when the answer is
+ suppressed by known-answer suppression (#614) @bdraco
+ * Implemented multi-packet known answer supression (#687) @bdraco
+ * Implements datatracker.ietf.org/doc/html/rfc6762#section-7.2
+ * Implemented efficient bucketing of queries with known answers
+ (#698) @bdraco
+ * Implemented duplicate question suppression (#770) @bdraco
+ http://datatracker.ietf.org/doc/html/rfc6762#section-7.3
+ Technically backwards incompatible:
+ * Update internal version check to match docs (3.6+) (#491)
+ @bdraco
+ * Python version earlier then 3.6 were likely broken with
+ zeroconf already, however, the version is now explicitly
+ checked.
+ * Update python compatibility as PyPy3 7.2 is required (#523)
+ @bdraco
+ Backwards incompatible:
+ * Drop oversize packets before processing them (#826) @bdraco
+ * Oversized packets can quickly overwhelm the system and deny
+ service to legitimate queriers. In practice, this is usually
+ due to broken mDNS implementations rather than malicious
+ actors.
+ * Guard against excessive ServiceBrowser queries from PTR
+ records significantly lowerthan recommended (#824) @bdraco
+ * We now enforce a minimum TTL for PTR records to avoid
+ ServiceBrowsers generating excessive queries refresh
+ queries. Apple uses a 15s minimum TTL, however, we do not
+ have the same level of rate limit and safeguards, so we use
+ 1/4 of the recommended value.
+ * RecordUpdateListener now uses async_update_records instead
+ of update_record (#419, #726) @bdraco
+ This allows the listener to receive all the records that
+ have been updated in a single transaction such as a packet
+ or cache expiry.
+ * update_record has been deprecated in favor of
+ async_update_records A compatibility shim exists to ensure
+ classes that use RecordUpdateListener as a base class continue
+ to have update_record called, however, they should be updated
+ as soon as possible.
+ * A new method async_update_records_complete is now called on
+ each listener when all listeners have completed processing
+ updates and the cache has been updated. This allows
+ ServiceBrowsers to delay calling handlers until they are sure
+ the cache has been updated as its a common pattern to call
+ for ServiceInfo when a ServiceBrowser handler fires.
+ * The async_ prefix was chosen to make it clear that these
+ functions run in the eventloop and should never do blocking
+ I/O. Before 0.32+ these functions ran in a select() loop and
+ should not have been doing any blocking I/O, but it was not
+ clear to implementors that I/O would block the loop.
+ * Pass both the new and old records to async_update_records
+ (#792) @bdraco
+ * Pass the old_record (cached) as the value and the new_record
+ (wire) to async_update_records instead of forcing each consumer
+ to check the cache since we will always have the old_record
+ when generating the async_update_records call. This avoids
+ the overhead of multiple cache lookups for each listener.
+- Remove fix version command as upstream has fixed the version number.
+- Move skipped tests to spec file, drop disable-tests.patch.
+- Relocate tests to tests directory. (gh#jstasiak/python-zeroconf#526)
+- Add test_close_multiple_times to skipped test list.
+
-------------------------------------------------------------------
Fri Jun 4 17:16:48 UTC 2021 - Antonio Larrosa
diff --git a/python-zeroconf.spec b/python-zeroconf.spec
index f72c856..75ce483 100644
--- a/python-zeroconf.spec
+++ b/python-zeroconf.spec
@@ -19,14 +19,13 @@
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
%define skip_python2 1
Name: python-zeroconf
-Version: 0.31.0
+Version: 0.35.1
Release: 0
Summary: Pure Python Multicast DNS Service Discovery Library (Bonjour/Avahi compatible)
License: LGPL-2.0-only
Group: Development/Languages/Python
URL: https://github.com/jstasiak/python-zeroconf
Source: %{name}-%{version}.tar.xz
-Patch0: disable-tests.patch
BuildRequires: %{python_module ifaddr >= 0.1.7}
BuildRequires: %{python_module pytest-asyncio}
BuildRequires: %{python_module pytest}
@@ -46,7 +45,6 @@ does not force you to use a particular event loop or python-twisted.
%prep
%autosetup -p1
-sed -i -e "s/__version__ = '0.29.0'/__version__ = '%{version}'/" zeroconf/__init__.py
%build
%python_build
@@ -57,7 +55,7 @@ sed -i -e "s/__version__ = '0.29.0'/__version__ = '%{version}'/" zeroconf/__init
%python_expand %fdupes %{buildroot}%{$python_sitelib}
%check
-%pytest zeroconf/test.py -k 'not (test_integration_with_listener_ipv6 or test_launch)'
+%pytest tests -k 'not (test_integration_with_listener_ipv6 or test_launch or test_close_multiple_times)'
%files %{python_files}
%doc README.rst