Commit Graph

267 Commits

Author SHA1 Message Date
Dirkjan Ochtman 7f9e991217 Minimize tokio features to what's actually needed 2023-02-03 11:21:06 +01:00
Dirkjan Ochtman 75f466c1ce Update to 2021 edition 2022-12-14 19:41:48 +01:00
Dirkjan Ochtman 8a6b49371b Remove authors from metadata (per RFC 3052) 2022-12-14 19:41:48 +01:00
Dirkjan Ochtman 6d555c166e Bump version for semver-incompatible API change 2022-12-14 19:41:48 +01:00
Dirkjan Ochtman eab64aa740 Look up server IP address on every connect 2022-12-14 19:41:48 +01:00
Rudi Floren ed3bfdbcfa add consts for common periods
This allows using common periods without checking the error at runtime.
2022-11-29 22:43:10 +08:00
Dirkjan Ochtman 0f052ea125 Bump quick-xml to 0.26 2022-11-29 22:43:10 +08:00
Dirkjan Ochtman a34dbdcf82 Apply clippy suggestions 2022-11-29 22:43:10 +08:00
Dirkjan Ochtman 698bab9b2b Reduce Error type size by boxing result state 2022-11-29 22:43:10 +08:00
Dirkjan Ochtman 406f63e02e Update to work around deprecated chrono API 2022-11-29 22:43:10 +08:00
Mari 71b6bac96a change doc tests 2022-09-07 06:03:16 +08:00
Mari e9cf8bc3f9 set `new-password` as argument 2022-09-07 06:03:16 +08:00
Mari 391df88509 rust fmt 2022-09-07 06:03:16 +08:00
Mari 63406ef308 Update basic tests to new syntax 2022-09-07 06:03:16 +08:00
Mari cc08819fdc Allow changing passwords 2022-09-07 06:03:16 +08:00
Dirkjan Ochtman 1395cd6235 Upgrade quick-xml to 0.23 2022-08-17 20:52:06 +02:00
Dirkjan Ochtman 14ffc8db01 Change MessageAck message_id to be a &str
While all the examples in RFC 5730 use numbers, there is nothing
normative in section 2.9.2.3 that constrains msgID to be a number.
And if we look at the XML Schema, we find that msgID is defined
to be of type `token`, which seems to be defined as a string
that does not contain line feeds, carriage returns, tabs, leading
or trailing spaces or multiple spaces.

While we might define a more specific token type in the future,
for now sticking with just &str seems reasonable and this also
matches the type for `MessageQueue::id`.
2022-08-05 02:22:54 +08:00
Ritesh Chitlangi 20ab056dcf update doc and release 0.4 2022-07-26 14:49:37 +08:00
Dirkjan Ochtman ca19e545fd Flatten XML abstraction 2022-03-22 16:47:12 +08:00
Dirkjan Ochtman 3f91647370 Move response deserialization into client 2022-03-22 16:47:12 +08:00
Dirkjan Ochtman dd5fbc60ce Simplify response tests with a helper 2022-03-22 16:47:12 +08:00
Dirkjan Ochtman 5dce8501d5 Let callers create CommandDocument directly 2022-03-22 16:47:12 +08:00
Dirkjan Ochtman dd07ecc4b8 Externalize handling of command serialization 2022-03-22 16:47:12 +08:00
Nicholas Rempel dd3c60f50e Move request/response debug logging to client 2022-03-14 23:41:41 +08:00
Dirkjan Ochtman ace791b521 Add test for dropping request future 2022-03-14 23:41:41 +08:00
Dirkjan Ochtman ae4c9869ab Improve robustness against dropping futures 2022-03-14 23:41:41 +08:00
Dirkjan Ochtman 478e686f24 Add more logging around reconnects 2022-03-14 23:41:41 +08:00
Dirkjan Ochtman aa589197a1 Track connection state and reconnect on invalid state
The external client/connection interface expects that to complete
full request/response cycles. However, at await points the stack
could simply be dropped, meaning the connection is left in an
inconsistent state. One relatively likely scenario is that a
transaction might be dropped while waiting for a response from the
server. For example, this might happen if the connection was
initiated by a HTTP request which was canceled/aborted.

There are different failure modes which can result from similar
scenarios depending on during what await point the future was
dropped. Since it's relatively difficult to protect against
these scenarios and some of them might manifest in indirect ways
(for example, a deserialization error might happen because the
incoming response was for a different kind of request), this PR
takes the approach of tracking in the connection whether we're
(supposedly) at a point where the connection is ready to send
another request. If transact() is called while the connection is
not in such a state, the connection will transparently attempt
to reconnect to clean up any erroneous state.
2022-03-07 21:51:00 +01:00
Dirkjan Ochtman 7e0a51bebb Use DateTime types where possible 2022-02-25 00:12:48 +08:00
Dirkjan Ochtman f7d76adef3 Implement AsRef<str> for StringValue 2022-02-25 00:12:48 +08:00
Dirkjan Ochtman cdbf0a2e65 Replace HostAddr with IpAddr in the public interface 2022-02-16 02:19:47 +08:00
Dirkjan Ochtman 1426312df0 Derive Debug for RequestData 2022-02-10 13:55:34 +08:00
Dirkjan Ochtman af69f511b5 Generate error events for deserialization failures 2022-02-10 13:55:34 +08:00
Dirkjan Ochtman 53c240be21 Derive Copy on RequestData 2022-02-10 13:55:34 +08:00
Dirkjan Ochtman 386638b6ca Offer API to reconnect an EppClient 2022-02-10 13:55:34 +08:00
Dirkjan Ochtman 36558c429c Allow the Connection to connect itself 2022-02-10 13:55:34 +08:00
Dirkjan Ochtman 95b62891c9 Fix rustdoc warning 2022-02-04 11:39:13 +08:00
Dirkjan Ochtman 88eb9b9cab Simplify/improve crate-level documentation 2022-02-04 11:39:13 +08:00
Dirkjan Ochtman e482cc152b Deduplicate client example code 2022-02-04 11:39:13 +08:00
Dirkjan Ochtman dc3f10cae3 Wrap timeouts around network operations 2022-02-04 11:39:13 +08:00
Dirkjan Ochtman f3aab578e7 Relax lifetime constraints on command + extension combinations
They should not be required to have the same lifetimes.
2022-01-31 14:05:52 +08:00
Dirkjan Ochtman 2639ec8c95 Make the Period type align with the standard 2022-01-31 14:05:16 +08:00
Dirkjan Ochtman 5fb32978bd Improve check request API types by redirecting serialization 2022-01-31 14:04:48 +08:00
Dirkjan Ochtman fdec3f29fc Redirect CheckResponse deserialization to improve interface 2022-01-31 14:04:48 +08:00
Dirkjan Ochtman a5d6643d6f Share CheckResponse type with contacts 2022-01-31 14:04:48 +08:00
Dirkjan Ochtman dd1c9c1e66 Share CheckResponse types for domain and host resources 2022-01-31 14:04:48 +08:00
Dirkjan Ochtman 999149ba31 Share the Available type across domain and host 2022-01-31 14:04:48 +08:00
Dirkjan Ochtman a6dfe70361 Use bool for availability for contact/host resources as well 2022-01-31 14:04:48 +08:00
Dirkjan Ochtman 0c36d8add3 Use an enum for result codes 2022-01-27 17:10:28 +08:00
Dirkjan Ochtman 630c6b06e4 Change DomainAvailable::available to be a bool
From RFC 5731:

    This element MUST contain an "avail" attribute whose value indicates
    object availability (can it be provisioned or not) at the moment the
    <check> command was completed.  A value of "1" or "true" means that
    the object can be provisioned.  A value of "0" or "false" means that
    the object can not be provisioned.
2022-01-24 16:34:33 +08:00