This is a bugfix release.
- 2829d8e tests: fix remove addr test (#258) (keepsimple1)
- 4f58e2f dns_parser: check against potential name compression loop (#257) (keepsimple1)
Bugfixes. Added checks for corrupted RR data to prevent unnecessary panics. Thanks for new contributor @rise0chen !
Sorry that this release has a few merged small commits as I didn't know how to properly
merge in a PR that targets a fetaure branch used in another PR, instead of main
branch.
- e54485e add --verbose in CI test run (#254) (keepsimple1)
- f0c4c27 remove fastrand dependency from dev-test (#252) (keepsimple1)
- dff1596 Merge pull request #250 from keepsimple1/rdata-check (keepsimple1)
- 659e684 fix cargo clippy warning (keepsimple1)
- 90a2f12 Merge pull request #251 from rise0chen/rdata-check (keepsimple1)
- 6d51f55 Merge branch 'rdata-check' into rdata-check (keepsimple1)
- 1b2cf40 add a check for rr data len (keepsimple1)
- a5de799 feat: test random data (rise0chen)
- 40698a3 add test case and simplify DnsTxt::new (keepsimple1)
- fc489bd refactoring error log (keepsimple1)
- a3fad8e add a check for rr data len (keepsimple1)
A release of bugfixes and refactorings.
- 3292110 DnsTxt debug print: make its text field human-readable (#247) (keepsimple1) (2024-08-21)
- 5567c1f Send SearchStarted events with addrs as
ip (intf-name)
(#245) (hrzlgnm) (2024-08-22) - 9a91a53 cache flush: add the missing timer for updated expires (#244) (keepsimple1) (2024-08-19)
- c1d7efa Change intf_socks to a map of (Interface, Socket) (#242) (keepsimple1) (2024-08-18)
- 404100d refactor out a common method for DnsRecordExt (#241) (keepsimple1) (2024-08-18)
- f055c78 Refresh A and AAAA records of active
.browse
queriers (#240) (hrzlgnm) (2024-08-17) - 0453030 Avoid redundant query, announcement and unregistration overhaul (#239) (hrzlgnm) (2024-08-16)
Mostly a bugfix and refactoring release, with limited support added for:
- Known Answer Suppression (RFC 6762 section 7.1 and 7.2):
- single packet for querier and responder,
- multi-packet for querier.
- 92eae74 add support for Known Answer Suppression part 2: multi-packet: querier side (#232) (keepsimple1)
- ada3486 fix test integration_success: respond count or known answer suppression count (#237) (keepsimple1)
- 8106d07 Skip link local addresses while checking for redundant announcements or query packets (#235) (hrzlgnm)
- b1a173a check data length in read_u16 (#234) (keepsimple1)
- d1c9157 Add sanity check for service type domain suffix in browse (#231) (keepsimple1)
- 736bec6 enable DEBUG logging for a failed test in CI (#229) (keepsimple1)
- fd00210 add logs in test to debug CI failure (#228) (keepsimple1)
- 5e0f1d3 add support for Known Answer Suppression part 1 (#227) (keepsimple1)
- 5ae18a6 refactoring: remove Send for DnsRecordBox (#226) (keepsimple1)
- d7d4867 fix integration_success test (#223) (keepsimple1)
- 6f34f1c move DnsCache into its own module (#221) (keepsimple1)
- bcdc2f9 add welcome to our new contributor (#220) (keepsimple1)
- Start to honor cache flush bit.
- Improved cache refresh logic.
- Code refactorings.
- And a few bugfixes.
- 098f2df move unit tests into integration test (#218)
- 80291ba refresh PTR records (#217)
- 5eb74b5 refactoring: extract details from exec_command into own functions (#215)
- 551ed4d Bugfix: AddressesRemoved missing actual addrs (#210)
- 3c924f4 Bugfix: cache flush properly (#211)
- ccdae2d Bugfix: logging feature cannot be disabled (#212)
- 626f9fa refresh SRV records and send out ServiceRemoved for expired SRV (#180)
- 06e2cf7 feat: merge match same arms (#209)
- bf5cea3 perf: in adding answers, use static dispatch instead of dynamic dispatch (#207)
- 19d2161 feat: extract match addr to type as a function (#205)
- 5bdcdd6 feat: remove clone derive from counter (#208)
- e7fc0e0 feat: replace box dns with declared type (#206)
- 5732665 feat: apply nursery lints (#202)
- 16cb5cd feat: honor cache flush (#201)
Welcome our new contributor: @lyager ! Thanks!
- Now
ServiceDaemon::register()
requireshostname
to end with ".local."
- Support resolving hostnames directly:
ServiceDaemon::resolve_hostname()
- example code: refactor the query output prints and the register hostname (#189)
- support multiple questions in send_query_vec (#194)
- CI: fix a test waiting for IPv6 addr (#195)
- Add support for resolving non-service hostnames (#192)
- zeroconf: use min heap for timers (#196)
- Fix flaky test (#198)
- enable logging for examples and add doc for logging (#199)
Welcome our new contributor: @oysteintveit-nordicsemi ! Thanks!
- Port 0 is now considered valid in ServiceInfo (#181)
- reduce SearchStopped notification send error to warn (#178)
- refactoring: extract handle_poller_events() (#177)
- Do not consider port 0 as a missing info (#181)
- query TYPE_A and TYPE_AAAA via Command::Resolve (#185)
- bump socket2 version (#174)
- add NSEC record to debug resolve issue (#183)
Welcome our new contributors: @hrzlgnm and @irvingoujAtDevolution ! Thanks!
This is a bug fix release.
- Add sanity checks in DNS message decoding (#169)
- fine-tune MAX_MSG_ABSOLUTE (#170)
This is a bug fix release.
- netmask -> subnet (#164)
Welcome our new contributor @amfaber ! Thanks!
This is a bug fix release.
- use human-readable address in error log of send_packet (#155)
- query for unresolved instances only when needed (#157)
- Fix panic due to range out of bounds in txt record parsing (#159)
- Sanity check for empty service type name (#160)
- Added comment for updating service info by re-registering.
Welcome our new contributor @Raphiiko ! Thanks!
Happy new year 2024!
This is a bug fix release.
- update flume to 0.11 (#152)
- bugfix: signal event key is possible to overlap with socket poll ids (#153)
ServiceDaemon::shutdown()
return type changed fromResult<()>
toResult<Receiver<DaemonStatus>>
(#149)
- Related to the breaking change, a client can receive
DaemonStatus
to be sure the daemon is shutdown. - A new enum
DaemonStatus
and a new APIServiceDaemon::status()
are introduced. - Updated CI in GitHub Actions: replace
actions-rs
withdtolnay/rust-toolchain
.
This is a bugfix release.
- apply interface selections when IP addresses change (#142)
- Remove un-necessary panic (#144)
- Always include subtype info if exists (#146)
p.s. Happy Halloween!
The release includes a bugfix, thanks to @Mornix !
- fix PTR expiration from preventing later service resolution (#140)
- updated doc comments for
DnsCache::add_or_update
.
There are no breaking changes.
- support interface selection (#137)
Added two new methods for ServiceDaemon
: enable_interface
and disable_interface
, and some refactoring.
- Ssupports IPv6 (#130) (Thanks to @izissise)
- ServiceInfo: support get_addresses_v4 (#132)
- bugfix: set address type correctly (#134)
This is a breaking change, including:
- Trait
AsIpv4Addrs
changes toAsIpAddrs
to support both IPv4 and IPv6. ServiceInfo::new()
uses the newAsIpAddrs
trait.ServiceInfo::get_addresses()
returns both IPv4 and IPv6 addresses, while a new convenience methodget_addresses_v4
returns IPv4 only.
But in general, because the trait hides away details, the user code is likely keeping working without code changes.
Improvements:
- avoid redundant annoucement or query packets (#135)
- Remove env_logger in dev-dependencies and lower MSRV to 1.60.0. (#128)
No breaking changes in API. This release brings two potential user-visible changes:
- use UDP socket to signal the daemon for commands. (#125)
This change reduces CPU utilization of the daemon thread as well as its latency to the user commands. Internally it uses local UDP sockets to signal the daemon.
- Added the link-local feature to if_addrs in Cargo.toml to enable link-local interfaces in Windows. (#126)
This change makes link-local interfaces visible to users in Windows where they didn't show up previously.
- Revert the changes in v0.7.4 and support link-local addrs alongside routable addrs. (#122)
- Not to use link-local addrs if routable addrs exist (#117)
-
Internal refactoring: always use DnsCache to resolve Servive Instances. When processing incoming packets, we used to update the cache one record at a time and also build separate service info structs to resolve. Now we finish the cache updates first, and then resolve instances from the cache.
-
Added env_logger for the examples code and enhanced the examples as well.
- Support updating instances after they are resolved by @keepsimple1 in #104
- add optional "unregister" in example code by @keepsimple1 in #107
- Returns an error with logging for read_name invalid offset by @keepsimple1 in #109
- register example should keep running by @keepsimple1 in #110
- Refactoring DnsCache and how to resolve Service Instance by @keepsimple1 in #108
- add sanity check in reading a record data RDATA by @keepsimple1 in #111
- Enable logging for the examples by @keepsimple1 in #112
- register example: a simpler input for the service type by @keepsimple1 in #113
Highlights:
-
Implemented
Display
trait forTxtProperty
: print usingkey=value
format, wherevalue
is same as.get_property_val_str()
. -
Implemented
Debug
trait forTxtProperty
: print using a struct format, wherevalue
prints as a string if it is UTF-8, or prints as hex if it is not UTF-8.
Highlights:
- A bug fix: remove duplicated keys in TXT records received.
Breaking Changes:
-
Allow non-standard max length for a service name. The check for the length of a service name is moved to the daemon. If a service name is too long, there will be an error log and an error event sent to the monitors.
-
ServiceInfo.get_property_val()
returnsOption<Option<&[u8]>>
instead ofOption<&str>
. Now a newServiceInfo.get_property_val_str()
returnsOption<&str>
.
In other words, migrate to get_property_val_str()
if you don't
want to worry about non-UTF8 values.
Highlights:
- Allow non-standard max length for a service name: A new method
ServiceDaemon.set_service_name_len_max()
is added to support that. Only use it when you really need to. - Support non-UTF-8 value for TXT properties.
- Support
no value
for a TXT property, i.e. boolean keys. - Added checks for ASCII keys in a TXT property.
Highlights:
- Fixs a bug: missing TXT records in received responses.
Breaking Changes:
ServiceInfo::new()
takesIntoTxtProperties
trait instead of aHashMap
of properties. It is also backward-compatiable: the trait is implemented forHashMap
andOption<HashMap>
.ServiceInfo::get_properties()
returns&TxtProperties
instead of aHashMap
of properties. It is also mostly backward-compatiable: supportiter()
,get()
methods.
Highlights:
- TXT properties' names are now case insensitive. And the original user input order is kept.
- A new method
ServiceInfo::enable_addr_auto()
: automatically fill in IP addresses for published services. - Detect IP changes.
- A new
ServiceDaemon::monitor()
method to return aReceiver
handle to monitor the daemon events, such as IP changes.
- skip interfaces that failed to bind (#79) (re-apply fix in v0.5.6)
- Ignore duplicate keys (#74)
- update error msg for send_packet (#69)
- call check_service_name before sending the cmd to the daemon. (#60)
- Changed dependency on 'log' crate to be optional (#64)
- configure mDNS daemon thread a name (#66)
- log an error if socket read returns 0 and reset the socket (#67)
- Allow service names with trailing '.' (#56)
- query unresolved instances (#58)
- handle join_multicast_v4 error gracefully (#53)
- track IPv4 interfaces with sockets to support multiple LANs (#48)
- Fix a bug in resolving multiple IPs for a host.
- Code reorg: separate modules out of lib.rs.
- Listening socket joins multicast on all interfaces.
- Support subtypes.
- Bind every valid IPv4 interface for outgoing sockets.
- Include Windows and macOS in GitHub Actions.
- Add support for Windows platform.
- Fix missing info in the license files.
- Add docs.rs badge.
- Make Error implement std::error::Error.
- Allow multiple formats for host_ipv4 to create ServiceInfo.
- A breaking change: change
ServiceInfo::new()
to return aResult<>
. - Update
nix
dependency to version 0.24.1.
- Fix a bug in stop-browse
- New feature: support meta-query
_services._dns-sd._udp
per RFC 6763.
- Update docs.
- Replace
crossbeam-channel
withflume
.
- Add "get_metrics" in API.
- Fixed a bug in cache refresh.
- Fixed a bug in retransmission.
- Add the first example code. Thanks @lu-zero! (#5)
- mDNS daemon respond socket to be blocking for simpler send.
- Public API internally to use the unblocking try_send() to replace send().
- Add
Again
in Error type to support retry.
- Initial version