10.96 2010-03-25
2
3+ DRD/SIDN & associated modules : .NL EPP full support (work sponsored by SIDN)
4+ DRD/CIRA & associated modules : .CA EPP full support (work sponsored by CIRA)
5+ .IT EPP extensions contributed by Alessandro Zummo, with some changes
6+ Logging/Syslog : contributed by J�rgen Thomsen
7+ .GL EPP support contributed by J�rgen Thomsen
8+ Protocol/EPP/Util : some utility functions previously in Protocol/EPP/Message Protocol/EPP Protocol/EPP/Core/{Contact,Domain}, but needed in other places (various EPP extensions that has been modified to use this new module)
9+ XML::LibXML version 1.61 is needed for getChildrenByTagName('*') (reported by Cipriano Groenendal)
10= Data/Contact/AFNIC : relax test on country, as TLD is opening to French abroad
11= Protocol/EPP/Extensions/AFNIC/Domain : during create make sure to test contacts validity
12= .NO updates by UNINETT Norid ( http://www.norid.no ), consisting of the following
13= .NO : Adaptions to XML-schema for host:  All 'ownerID/ownerid/Owner ID' replaced by 'sponsoringClientID/sponsoringclientid/Sponsor ID'
14= .NO : Added facets support, facets are available for all EPP-commands/operations, including poll/ack.
15= .NO : Updated the test client eg/epp_client_no.pl to support setting of facets for all operations. The client has been used for testing and verification of the implementation.
16= .NO : Added some tests to t/633norid_epp.t to verify some operations without and with facets. Added module test for domain_withdraw.
17= .NO : Improved parsing of various service messages.
18= .SE various updates (contributed by J�rgen Thomsen, with some changes)
19= Protocol/ResultStatus::get_extended_results() : change of output API, now gets back an array of ref hashes (previously: array of scalars)
20= Protocol/EPP/Message : new add_to_extra_info() internal method
21= Protocol/EPP/Message : changing the API of data parsed out of value/extValue nodes + better parse of extValue nodes in EPP
22= Protocol/RRI/Message,Protocol/EPP/Extensions/VeriSign/NameStore,Protocol/EPP/Extensions/{PL,NO}/Message : update to new API for registry extra_info, and use of add_to_extra_info()
23= Protocol/EPP/Extensions/Nominet : various update per instructions from http://www.nominet.org.uk/registrars/systems/nominetepp/changestoepp/
24= Protocol/Whois/Domain/EU : detection of registry rate limiting (after report from Denise Clampitt)
25= Transport/HTTP : better error message if remote_url not correctly defined (suggested by Andreas Wittkemper)
26= Protocol/EPP/Extensions/SE : added SecDNS as default extension (from Andreas Wittkemper)
27= Protocol/IRIS/LWZ : removing fallback to RFC1950 as Denic server should be fixed by now (to use RFC1951 as mandatory by the LWZ RFC)
28= Protocol/ResultStatus::as_string() : changed the output format
29= DRD/{SE,SIDN} : various updates regarding durations (contributed by J�rgen Thomsen)
30= DRD/BE : add proper methods for transfer_quarantine,trade,reactivate,undelete (reported by Andreas Wittkemper)
31= DRD/ICANN : add .CAT for allowed 1 and 2 characters domain names
32= Protocol/EPP/Extensions/SWITCH : add the SecDNS extension
33= DRD + DRD/* : check_name() verify_name_{host,domain}() enforce_{domain,host}_name_constraints() _verify_name_rules() : return error string instead of error code for better error tracking
34= DRD/NO : remove verify_name_host() the superclass version is the same
35= DRD/{AT,IENUMAT} : verify_name_domain() converted to new framework
36= Logging framework : internal changes for simplicity and less context passing, only external change: key "driver" used in header format is now named "transport" (prompted by bugreport from J�rgen Thomse regarding Transport->ping() missing logging context)
37= Transport : login/logout exchanges use the same "namespace" for the TRID than the relevant profil, instead of the transport name
38= Transport : added some more transport logging in all subclasses (besides Socket & HTTP that had it already)
39= Transport/Socket : remove use of eof() in _get as introduced in previous version as it seems to only create problems
40= Protocol/EPP/Extensions/PL/Connection : now renamed to Protocol/EPP/Extensions/HTTP as it is also used by .IT
41- DRD domain_create : bugfix for domain_check when pure_create!=1 (reported by Gerben Versluis)
42- Protocol/EPP/Extensions/Nominet/Host : update() bugfix (contributed by Marc Winoto)
43- Protocol/EPP/Extensions/{AFNIC,ARNES,DNSBE,EURid,PL}/Domain,Protocol/EPP/Extensions/{FCCN,Nominet}/Contact,Protocol/EPP/Extensions/Nominet/Account,Protocol/EPP/Extensions,CAT/DefensiveRegistration : correct test of contact class
44- Protocol/EPP/Connection find_code : correct (and better) regex when some extension is present (bugfix by Michael Braunoeder from NIC.AT, applied with changes)
45- Contact, Contact/AT : correct validation tests
46- Shell : correct domain_update for registrant change (from bugreport by Jonathan Eshel)
47
480.95 2009-08-15
49
50If you are upgrading your Net::DRI installation, from version 0.92 or older
51we advise you to first upgrade to 0.92_01, test everything, adapt your program to use
52the new API (see below), and then upgrade to 0.95 which introduce some incompatibilities
53with prior versions. If you test first with version 0.92_01 you will be able to make
54sure your programs work the same way from old to new API, without changing versions
55and you will be warned if you are using deprecated features.
56
57+ DRD/IT & associated modules : only core EPP features, no extensions, no tests
58+ DRD/IRegistry & associated modules : registry driver and extensions for .CO.CZ, contributed by Vitezslav Novy, not tested
59+ Protocol/Whois/Domain/PT : see eg/whois.pl
60+ Protocol/DAS/AU : see eg/das.pl
61+ Protocol/DAS/AdamsNames : see eg/das.pl
62+ Protocol/DAS/SIDN : see eg/das.pl
63+ Protocol/AdamsNames/WS : only domain_info (see t/705adamsnames_ws_live.t)
64+ Contact/OpenSRS : contributed by Richard Siddall
65+ eg/das.pl : new file, testing various DAS server, superset of previous eurid_das.pl which is now removed
66+ Protocol/EPP/Extensions/EURid/{Domain,Notifications,Registrar} : updates for release 5.6 (registry notifications, domain overwrite date delete, registrar info, domain transfer/trade reminders)
67+ DRI::installed_registries() : new method to list all installed registries drivers
68+ DRI::add_current_registry() : new method, same API as add_registry() which is called and a target is done after to switch to the newly added registry
69+ Contact::clone() new method
70+ Util : new functions xml_traverse() xml_list_children() xml_child_content() deepcopy() decode_latin1() normalize_name()
71+ Protocol : new utility functions parse_iso8601() build_parser_strptime()
72+ Protocol/ResultStatus::last() new method to go directly to the lowest object in case of chains
73= Started to put "use warnings" in some modules
74= Shell new commands (see module documentation) : show types, domain_update, host_update, contact_update
75= Shell : various additions in autocompletion, after a domain_info command, nameservers and contacts are also stored for future completions requests
76= Shell : tries to fallback on default domain commands for all extensions
77= Logging/Files : change in filenames used, the PID is always added, and only one dot
78= DRD/* : removed transport_protocol_compatible() + updates to transport_protocol_default() + add profile_types()
79= DRD,DRD/* : added enforce_{domain,host}_name_constraints() replacing err_invalid_domain_name()+verify_name_domain() and similar for hostnames (so that we have better error messages);
80   all DRD methods needed are updated to take into account this new framework
81= DRD : domain_create() domain_delete() do not return an array anymore, always a single object with a chain of siblings as needed through the next()/last() methods;
82        the object returned is always the top one not the last one, so ->last() may be used to retrieve the last one and test its success
83= DRD : removed the %PROTOCOL_DEFAULT_* hashes, defaults are now properly handled in each registry driver class, each protocol subclass and protocol subclass connection class, with the transport_default() method
84= DRD::verify_name_host() : by default does not check TLD against registry TLDs anymore
85= DRD/BookMyName : DAS service
86= DRD/AFNIC::tlds() : added asso.fr com.fr tm.fr gouv.fr
87= DRD/AFNIC : EPP in full production + bugfix in domain_create + added domain_trade_stop()
88= DRD/EURid : added profile types das-registrar and whois-registrar for the specific das and whois services restricted to current .EU registrars
89= DRD/EURid : new methods registrar_info() domain_remind()
90= DRD/ICANN : one and two characters .BIZ .PRO domain names are now allowed
91= DRD/Nominet : added domain_unrenew() account_list_domains()
92= Contact::validate() : better error messages, more specific
93= Contact,Contact/{SWITCH,NO,AT}::validate() : not testing roid anymore as useless, testing srid instead
94= Contact/AFNIC : not using pragma encoding anymore, as it is advised in Perl documentation to avoid it in modules, due to its global scope
95= Contact/AFNIC : new attribues vat and id_status + new method validate_registrant(), replacing validate_is_french() + new method init() to automatically set default srid
96= Contact/AFNIC::validate() : calls SUPER::validate + added test on srid() vat(), better validation of contact data and standardization of API after addition of EPP at registry (per discussion with Jim Driscoll)
97= ContactSet::get_all() new method
98= Registry : add_profile() now completely replaces add_current_test_profile(), new_current_profile() and new_profile(); see files in eg/ and t/ for examples
99= Registry : better logging in profile creation and process()/process_back() methods
100= Transport : change of defaults, retry=2 (this means 2 tries totally) and timeout=60 now, instead of 1 and 0 (no timeout) + better default try_again()
101= Transport subclasses : the new() input API is normalized with only a context and a ref hash in all cases
102= Transport,Transport/HTTP,Transport/Socket,Protocol connection classes read_data() : better information in error messages
103= Transport/Socket : you can use ssl_passwd_cb if you need to decrypt the SSL key before using it
104= Transport/Socket : the ssl_verify_callback called gets the transport object as first parameter, before IO::Socket::SSL parameters
105= Transport/Socket : more logging + better handling of connection closing/sensing EOF
106= Protocol : add many default factories + new methods parse_iso8601() build_parser_strptime() to simplify subclasses work + new method has_module()
107= Protocol connection classes : added transport_default() methods where needed
108= Protocol classes : new() API expects a ref hash
109= Protocol/ResultStatus : for get_data methods, the previous "command" attribute is now "raw_command", and "reply" is "raw_reply", "action" is "object_action", "type" is "object_type", and added "object_name" "registry" "profile" "protocol" "transport" "trid"
110= Protocol/ResultStatus : in get_data() get_data_collection() keys are normalized so that domain and host names can be used in lower or upper case (same as for DRD::get_info), see examples at bottom of t/601vnds_epp.t
111= Protocol/ResultStatus : new last() method
112= Protocol/OpenSRS/XCP/Domain : added operations check create delete renew transfer_request transfer_query transfer_cancel (contributed by Richard Siddall)
113= Protocol/BookMyName/WS : implemented domain_check
114= Protocol/Gandi/WS : implemented domain_check
115= Protocol/OVH/WS : implemented domain_check + using now Transport::HTTP::SOAPLite instead of SOAPWSDL (API change of SOAP::WSDL and/or of OVH ?) and related changes
116= Protocol/Whois/Connection::read_data() : we now suppose the data is in iso-latin-1 encoding instead of ascii
117= Protocol/Whois/Domain/* : use of $po->build_parser_strptime() instead of directly using DateTime::Format::Strptime
118= Protocol/Whois/Domain/SE : parse registrar name
119= Protocol/Whois/Domain/EU : adapt to new format
120= Protocol/DAS : better handling of registries with more than one TLDs (adhoc, no universal specifications of DAS protocol), and those wanting a domain without a TLD in query (what a great idea ... not !), like BE/EU
121= Protocol/DAS/Message : handle slightly different format for .EU
122= Protocol/AFNIC/Email/Domain : PM activated now only with legal_id defined, line 3a is always name() not org(), srids must be provided instead of roids hence without -FRNIC
123= Protocol/{EPP,RRI}/Connection : better handling & more debug information in error messages while attempting to read the first 4 bytes
124= Protocol/{EPP,Whois} : use of $drd->set_factories() if possible (factorization of contact factories)
125= Protocol/EPP : better handling of modules to load through 2 new methods, core_modules() and default_extensions() + add a setup() method for subclasses
126= Protocol/EPP/Message : various simplifications/rewrites and changes for performances and readability
127= Protocol/EPP/Extensions/* : huge simplification of instantiation with setup() + default_extensions() instead of new()
128= Protocol/EPP/Extensions/SecDNS::format_validation() : better error message
129= Protocol/EPP/Extensions/SE,Contact/SE,DRD/SE : various updates by Ulrich Wisser from NIC.SE
130= Protocol/EPP/Extensions/AFNIC/{Domain,Contact} : various updates to latest production specifications (trade cancel, PM activated now only with legal_id defined)
131= Protocol/EPP/Extensions/AFNIC/Notifications : added parsing of all messages related to contact identification
132= Protocol/EPP/Extensions/EURid/Domain::transferq_request() : use key duration instead of key period
133= Protocol/EPP/Extensions/Nominet/Domain : unrenew operation
134= Protocol/EPP/Extensions/Nominet/Account : list_domains operation
135= Protocol,Protocol/*/* : cleanup in the use of factories()/create_local_object()
136= Protocol/EPP/Core/*,some EPP/Extensions/*,Protocol/Whois/Domain/* : no more hardcoding of Data modules, using Protocol->create_local_object() instead
137= Protocol/EPP/Core/*,some EPP/Extensions/*,Protocol/Whois/Domain/* : use of Protocol->parse_iso8601 instead of calling directly DateTime::Format::ISO8601
138= Protocol/EPP/Core/*,some EPP/Extensions/* : use of textContent() instead of getFirstChild()->getData()
139= Protocol/EPP/Core/*,some EPP/Extensions/* : use of Util::xml_list_children() Util::xml_child_content()
140= Protocol/EPP/Core/RegistryMessage::parse_poll() : better handling of non recursion barrier
141= Protocol/EPP/Extensions/Nominet/Domain : unrenew operation
142- Protocol/EPP/Extensions/Nominet/Account : correctly handle empty account:contact nodes (bugreport by Jim Driscoll)
143- Protocol/Gandi/WS/Domain : correct parsing of contacts
144- DRD::domain_create() : various bugfixes in case of pure_delete=0
145- Transport/HTTP/XMLRPCLite : various bugfixes
146- Protocol/Whois/Domain : removed as not used
147- Shell : crash for some tab completion conditions (add_current_profile,contact_create)
148- Contact::loc2int() : make sure not to create an undef instead of an empty ref array in street structure, when empty street
149- Contact/AFNIC::validate() : correct test for name() legal_form_other() birth()
150- Protocol/EPP/Extensions/Nominet : we handle the namespaces versions mix and mess locally
151- Registry::get_info_all() : make a copy of the hash before starting to delete keys
152
1530.92_01 2009-01-31 DEVELOPMENT RELEASE (not to be used in production without extensive testing if upgrading from some previous version)
154
155UPGRADE instructions from previous versions:
156- use add_profile/add_current_profile instead of new_profile/new_current_profile (warning: you may hit different APIs, depending on how you used new_profile/new_current_profile !)
157- remove use of log_fh attribute during transport setup, and use instead the new Logging framework (see Net::DRI and Net::DRI::Logging modules documentation)
158
159Detailed changes:
160
161+ Registry add_profile()/add_current_profile() : new methods that will replace in the future new_profile()/new_current_profile() with a better API; this will also make it possible to have DRD protocol agnostic again the future (when old API completely removed) ; all scripts in eg/ and test files in t/ have been updated
162+ Logging : a new framework has been put in place, for better extensibility ; fix of encoding bug ; various logging has been added, at debug level, to facilitate debugging (such as methods called, cache handling, transport loops/timeouts/retries) ; see document of modules Net::DRI, Net::DRI::Logging and Net::DRI::Logging::{Stderr,Files,Null}
163+ Protocol/ResultStatus : $rc objects returned from most operations do also contain now all data retrieved with the operation (including the raw messages exchange), which can be accessed by get_data()/get_data_collection() method on the the $rc object, see module documentation
164+ Shell autocompletion support for commands and parameters (domain names, contacts, hostnames, local filenames), see Net::DRI::Shell documentation
165+ Shell new commands: add, record, set, show config, !cmd, help and add_current_profile (replacing new_current_profile) + backticks for batch operations ; see Net::DRI::Shell documentation
166+ .IM support (EPP) : interoperability not tested
167+ .SI support (EPP) : interoperability not tested
168+ Data/Contact (and all subclasses) : a new method attributes() allows to know what attributes exist for this specific class of contact data
169+ Data/Contact as_string() : better handling of subclasses attributes, now also automatically included in output, as well as class name (to know the contact type)
170+ DRD/EURid : add registrar DAS (type=das-registrar) & registrar Whois (type=whois-registrar) profile types
171+ DRD/CoCCA : .NA and .NG added
172+ DRD/DENIC : add 9.4.e164.arpa in list of tlds, as they can be queried with IRIS DCHK
173+ DRD/ICANN : .MOBI and .COOP can have one character domain name
174+ DRD/WS : domain transfer operations are now possible
175+ DRI del_registry() : to properly close all profiles in a given registry name (or the current one if no parameter given)
176+ Registry del_profile() : deletes the current profile (or the name specified as input), which will also close transport connections associated with the profile as needed
177+ Protocol/IRIS/XCP (RFC4992) : prototype implementation (no publicly known server uses this for now), only SASL PLAIN is supported
178+ Protocol/IRIS/Core parse_authentication() : to support SASL in IRIS (RFC4991 authentication messages)
179+ Shell : if we detect the server has closed connection, we try to reopen it at next command
180+ DRI : cache() method to return the current underlying cache object
181+ Cache : ttl() accessor/mutator to query or change the current time to live for cached data
182+ DRD registry_can() : returns 1 or 0 if the operation given as input parameter (ex: domain_create) is available for the currently selected registry
183+ Protocol/ResultStatus : new method is_closing() returns 1 if the server has closed connection (after successful operation or not)
184+ Protocol/ResultStatus : new method is() to check symbolic return codes, see module documentation
185+ Protocol/IRIS/LWZ : now supports compressed responses (with some help by Felix Antonius Wilhelm Ostmann) ; nicely handling of current mismatch between RFC LWZ compression method (RFC1951) and DENIC IRIS DCHK server (RFC1950)
186+ Protocol/EPP/Extensions/Neulevel/IDNLanguage (contributed by Jouanne Mickael)
187+ Protocol/EPP/Message : added a message/info/checked_on key always there with a DateTime object to know when we got information on number of messages waiting
188= Protocol/EPP/Message : we always set message/info/count attribute, including to 0 if nothing pending
189= Protocol/.../Connection classes : we use EPP code 2500 instead of 2400 (through ResultStatus new COMMAND_FAILED_CLOSING symbolic name) to warn where we were not able to get registry response, probably due to a closed connection
190= Protocol/.../Message classes : as_string() is now mandatory to be implemented (for logging purposes), so add it where needed
191= Protocol/EPP/Extensions/DNSBE/Domain : trade operation now needs op=>'request' (bugfix by Roger Heykoop)
192= Protocol/IRIS/Message : add xml preambule to outgoing messages
193= Registry available_profiles() : returns list of fullnames (profile name + protocol name + transport name) if passed a true value
194= Protocol/ResultStatus info() has been renamed to get_extended_results()
195= DRI trid_factory() accessor/mutator, this is a coderef used everywhere (including in Transport classes) to generate transaction identificators such as clTRID in EPP (all Transport classed have been modified to use that)
196= Caching changes (see Registry::try_restore_from_cache, DRD and various DRD subclasses): Registry::set_info_from_cache() disappears and its features are subsumed by try_restore_from_cache() ; two major changes (that will make the cache less often used) : we use it only for the same action, and we use data from the same profile only ; logging is done (at debug level) to be able to track each cache miss or hit ; when results are given from the cache, the result_from_cache (in branch session/exchange) key has a value of 1, otherwise 0
197= Transport + DRD/Registry : total rework of sending/receiving messages, better handling of timeouts and retries ; this is specially needed for servers difficult to reach, like public Whois/IRIS/DAS ones
198= Registry : after exchange with registry, add in ResultStatus data a session+exchange branch with keys: duration_seconds (the duration in seconds of the exchange), command (a string representation of what has been sent to the registry), reply (a string representation of what has been received from registry), result_from_cache (=0), action (name of action that has been done) and type (type of object on which this operation has been done)
199= DRD {domain,host,contact}_check_multi() : if the currently selected protocol does not support check_multi, we emulate by doing multiple check calls, as needed
200= DRD domain_create() : if not pure_create, we start by doing a domain_check and stop there if domain exists already (so that we do not trigger an hitpoint at registry like EURid)
201= DRD/NO : verify_name_domain() updates
202= DRD/DENIC : better parameters for IRIS DCHK timeouts and retries
203= Util : fulltime() and xml_indent() methods added, used by Logging framework
204= Util : encode() encode_utf8() encode_ascii() decode() decode_utf8() decode_ascii() methods added, as wrapper around Encode
205= When using Encode::{encode,decode}(), use check=1 (die on malformed data)
206= Protocol : the name key is only set for domain and host object types, not in all cases
207= Connection classes for EPP,RRI,IRIS : using sysread() instead of read(), since we do not want any buffering
208= Connection classes for EPP/Extensions/PL,OpenSRS/XCP : using HTTP::Response::decoded_content() method instead of just content()
209= Connection classes read_data method : make sure to translate what we received into perl native strings (Encode::decode & similar stuff)
210= EPP/Extensions/PL/Connection write_message() : encode perl string in utf8 before putting in HTTP::Message::content
211= DRD : add a default verify_name_domain() and domain_operation_needs_is_mine() for all subclasses, this make many DRD subclasses simpler and shorter
212= DRD classes : various simplifications and removals (verify_duration_transfer, is_my_tld, domain_operation_needs_is_mine), plus use of BaseClass::make_exception_for_unavailable_operations
213= DRD classes : sanitization of the internal API for verify_name_domain, and rewrite in the new framework (using DRD::_verify_name_rules)
214= Protocol/EPP/Extensions/AFNIC : various updates following registry new prototype
215= Protocol/AFNIC/Email : various updates for form version 2.5.0 (notably: authinfo mandatory, nameservers not mandatory)
216- DRD contact_check_multi() : make sure to allow a ref hash for optional parameters, as with all other contact methods
217- Protocol/IRIS/LWZ : make sure to start with a clean empty DNS resolver
218- DRD/DENIC : make sure to use "de." and not "de" for DNS queries (finding NAPTR servers)
219- Protocol/EPP/Core/RegistryMessage pollack() : message ids are not necessarily numbers, but XML token (RT#41032 reported by Joaquim Carandell)
220- Protocol/EPP/Core/{Contact,Domain,Host} : for registry notifications (poll messages), we do not set the exist key anymore as the operation may be related to a creation or something else ; this would need to be handled by extensions
221- Shell : properly take into account quit commands in script files (reported by Eberhard Lisse)
222- DRD domain_{delete,create}_only() : deprecated methods, now removed (see previous version)
223- Protocol/{EPP,RRI,IRIS}/Connection : use strict utf8 ("UTF-8") and not Perl lax utf8 ("utf8") when encoding before sending to server (through Util::encode_utf8 function)
224- Protocol Connection classes login() logout() keepalive() methods : now they return the message, and do not call write_message themselves, this is done by Transport class (for homogeneity and logging reasons)
225- Protocol/IRIS/Core parse_error() : correct parsing of messages/languages (they were swapped)
226- Protocol/EPP/Extensions/BR/Contact : allow update of pure contacts (no orgid)
227
2280.92 2008-10-08
229
230+ IRIS support (RFC3981) with LWZ transport (RFC4993) for DCHK (RFC5144): currently only DENIC registry (.DE) provide this service,
231  but this new set of protocols have been created to replace the current sad state of whois (a change that will probably take years)
232  See eg/iris_dchk.pl
233+ Net::DRI::Shell : a new version of the earlier prototype, now revamped, extended, documented, with support for all Net::DRI operations, and batch feature for domain name operations with logging and time statistics. See its documentation for all details ; it can very easily be used to leverage all power of Net::DRI without writing any line of code!
234+ .UK EPP support : added new registry operations (account fork and merge, registry notifications), upgraded to version 1.1 of their local schema and correctly handle login
235+ .PT EPP support, with domain and contact extensions (see t/640pt_epp.t)
236+ Preliminary CoCCA support (.CX .GS .TL .KI .MS .MU .NF .HT) : interoperability tested with registry ; in the future the general CoCCA DRD should be replaced by multiple DRDs, one for each TLD, implementing each the specific country policy on its ccTLD
237+ Full CentralNic EPP support, interoperability tested with registry (see t/621centralnic_epp.t)
238+ .BR various updates and interoperability tested with registry
239+ .NO various updates: improved contact validation and more refined service message parse for delayed domain transfer responses (submitted by Trond Haugen)
240+ Transport/Defer : preliminary prototype for debugging ; can also be used in production to simulate operations without sending anything to the registries
241= DRD::domain_create_only() is now deprecated (and will be removed in later versions), you should use domain_create with a pure_create key and value of 1 ; examples and tests have been updated
242= DRD::domain_delete_only() is now deprecated (and will be removed in later versions), you should use domain_delete with a pure_delete key and value of 1 ; examples and tests have been updated
243= DRD/ME : 1 year registrations allowed since October 1st
244= Transport/Socket : UDP support (for LWZ needed by IRIS.DCHK)
245= Transport/Socket : dynamic remote_host/remote_port possible (needed for IRIS.DCHK)
246= Data/Changes : add() del() set() returns the object itself now
247= Protocol/EPP/Core/RegistryMessage : handle notifications completely and only inside the <msg> node ; add error message if no ID given for message to delete
248= Protocol/ResultStatus : changed as_string() output format and better handling of no message case
249= EPP/Core/Message & RRI/Core/Message : factorization of _toxml and transplantation into Net::DRI::Util
250= Protocol : do no set result_status if already set inside parse functions (like in IRIS DCHK)
251= Registry : allow to use local_object() for a DateTime or DateTime::Duration instance/has_object
252= Data/Contact : little change in as_string() format output
253= DRD : domain_create() will create contacts if needed, passed and not pure_create
254= DRD/US : contact internationalized data, either INT+LOC or INT only
255= DRD/VNDS : do not use RRP any more
256= DRD/COOP : use ICANN policies for reserved names, and allow 2 characters domain names
257= Data/Contact/AFNIC : new firstname method, the name() method should store only the lastname (this impacts both email and EPP operations)
258= EPP/Extensions/AFNIC : various updates for next iteration of .FR EPP beta server
259- DRD/*::object_types various fixes (removal of 'ns' when hosts are only attributes at registry)
260- Transport : bugfix for encoding during logging (submitted by Trond Haugen) ; should probably be only temporary before a better logging system
261- DRD : bugfix for host_update_name_set and has_object
262- DRD/US : correct contact I18N (bugfix by Marc Winoto)
263- EPP/Connection : handle newlines before closing node (bugfix by Marc Winoto)
264- EPP/Connection : handle empty line(s) at end of message
265
2660.91 2008-07-30
267
268+ .BR EPP support, with Domain and Organization extensions (see t/635br_epp.t)
269+ OpenSRS XCP protocol (resellers interface): preliminary implementation, only domain_info and account_list_domains (see t/639opensrs_xcp.t and t/704opensrs_xcp_live.t)
270+ .US whois support
271+ Experimental Net::DRI shell limited to domain check operations for now, see Net::DRI::Shell for details
272+ Net::DRI::TrapExceptions, for easier tests/debugging (not considered to be part of official API, to use only inside t/*)
273+ EPP/Core/RegistryMessage : for poll responses (all registries), info is now also available through keys related to the object queried,
274  and not only just through the message retrieved. See tests around message_retrieve in t/635br_epp.t for examples
275+ .JOBS Contact support and NameStore domain extension for contacts (contributed by Tonnerre Lombard)
276+ .PRO support, with domain activations (contributed by Tonnerre Lombard)
277+ .AT Domain keydate extension support (contributed by Tonnerre Lombard)
278+ .NO updates (submitted by Trond Haugen)
279+ Transport/HTTP : new transport needed for pure HTTP/HTTPS registries (OpenSRS, .PL, .ES, etc.)
280+ EPP/Extensions/PL/Connection : needed to be able to use HTTPS transport for .PL EPP
281+ .FR EPP extensions (currently not in production at the registry) and related needed updates in DRD/AFNIC and Data/Contact/AFNIC
282= */Connection Transport/Socket : get_data is now read_data, and write_message is mandatory (done previously somehow in corresponding Message classes) ; other methods expect the transport object as first parameter
283= */Connection : EPP error code COMMAND_FAILED instead of COMMAND_SYNTAX_ERROR in most places
284= DRD/PL : use EPP over HTTPS not over TLS
285= EPP/Extensions/PL : updated to latest registry specifications (contributed by Tonnerre Lombard)
286= Protocol : new API for factories() and capabilities()
287= DRD : extra parameters allowed in input API for all contact_* methods (needed by some registries)
288= EPP/Message : internal API (for EPP extensions) changes, removal of get_content(), addition of nsattrs()
289                all EPP modules were modified to fit this new API ; extensions developers should sync their work and always use current EPP/Core/* modules as guidelines
290= EPP/Core/Domain : no need to provide IPs of nameservers during update in the rem section
291= EPP/Connection : fix message retrieval for broken registries that send carriage returns (contributed by Tonnerre Lombard)
292= Contact/AFNIC : take into account various ways to have a date (needed for new EPP extensions)
293= Data/StatusList : new rem() method to remove a status from the list when really needed
294- EPP/Message : correct parse of trID blocks in case of multiple occurences (from original bug report by Trond Haugen) ;
295                this prompted a review of various EPP XML parse methods (Core and Extensions), where getElementsByTagNameNS have been changed to getChildrenByTagNameNS,
296                which should improve correctness and speed.
297- EPP/Core/Domain : domain:null variant should only be used during update and not in other case (from original bug report by Trond Haugen)
298- EPP/Extensions/{DNSBE,EURid} : correctly handle version 1.0 (from original bug report on .BE by Andreas Wittkemper)
299
3000.90 2008-06-12
301
302+ .EU EPP support: updates for Registration guidelines version 1.1B (changes in contact info/update) + release 5.5 (13 May 2008)
303      Added proper methods in DRD/EURid so that remote_object is not needed for .EU operations like transfer from quarantine, trade, undelete, etc.
304      See t/606eurid_epp.t especially for trade operations because of change in API
305+ .UK full support (except registry notifications, not available at registry), including domain creations, domain updates and account updates
306+ .NO ccTLD EPP support added, see t/633norid_epp. Also added a command line EPP client for .NO with some POD documentation, see eg/epp_client_no.pl and also a filter utility eg/xmlfilter.pl to present the xml-sequences (submitted by Trond Haugen)
307+ .DE support (contributed by Tonnerre Lombard)
308+ .CH/.LI support (contributed by Tonnerre Lombard)
309+ .HN/.SC/.VC/.AG/.BZ/.LC/.MN support with Afilias extensions IDNLanguage & Restore (from original work by Tonnerre Lombard)
310+ .ME and .CZ support (contributed by Tonnerre Lombard)
311+ .TRAVEL UIN support (contributed by Tonnerre Lombard)
312+ .TRAVEL whois support (see eg/whois.pl)
313= Protocol/EPP/Extensions/PIR* renamed to Protocol/EPP/Extensions/Afilias
314= Remove use of remote_object by creating appropriate extra methods in DRD/LU (the same should be done for extensions defining new actions/subjects)
315= EPP/Message : better handling of pure extension messages (no command)
316= EPP/Core/{Domain,Contact} : better handling of authinfo (2 variants during built when empty, and only parsing RFC defined version during info)
317= EPP/Core/{Domain,Contact} : for update() do not bother checking pending changes, this has to be done earlier, in DRD, to make sure all extension cases are taken into account
318= EPP/Core/Contact : handling registries not following EPP RFC by omitting the type parameter for postalinfo data (like .CZ)
319= EPP/Message : better handling of pure extension messages (without a command node)
320= DRD/ICANN : some gTLD registries are now allowed to create one or two characters domain names
321= DRD/VNDS : add .bz/.jobs (contributed by Tonnerre Lombard)
322= DRD/*::verify_name_domain() : homogenize error codes (if your code depends on them, please update it based on new values)
323= EPP/Extensions/{DNSBE,EURid}/Domain::transferq_request() : use key 'duration' instead of 'period'
324= EPP/Extensions/AT/Domain : use of Message cltrid, no need to create a new one
325= Transport/Socket : handle registries without greeting, like DENIC
326= Data/Changes : added method is_empty()
327= Data/Hosts : removal of the roid() accesor, added extra parameters for each nameserver, as a ref hash, which can have, for example, a roid key
328= DRD::is_my_tld() is more strict in default case
329= DRD::check_name() allow to check multiple cases of number of dots in name being checked
330= DRD::*_update() : better take into account all capabilities to check the content of the changes being done (from original bugreport by Tonnerre Lombard)
331= DRD::message_count(): we try to use information already gathered (as EPP registries can give information with msgQ during any command response) before attempting a new message retrieve; same for message_waiting which calls message_count ; see end of t/601vnds_epp for example
332= DRD::err_invalid_* are now proper class methods
333= EPP/Core/RegistryMessage various optimizations
334- Updated examples in eg/ for correct use of local_object() : no need to call new() on it
335- DRD : fix host_create not to check TLD of hostname being created (from original bugreport by Magnus Lind)
336- DRD/NAME : contact internationalization (reported by Tonnerre Lombard)
337- DRD::is_thick() removed
338- DRD, DRD/NAME : fix test of domain names in registries with multiple zones (number of dots)
339- EPP/Extensions/{AT,ASIA} various bugfixes (contributed by Tonnerre Lombard)
340- .FR various bugfixes on domain operations
341- Removal of all Protocol/*/Message::get_name_from_message() ugly hack for something less ugly but still kind of an hack.
342- Factorization of various verify_rd() methods into Net::DRI::Util::has_key,has_contactset,has_ns,has_auth,has_duration,isa_contactset,isa_contact,isa_hosts,isa_changes ; this simplifies of lot of code under Protocol/*
343
3440.85 2008-02-12
345
346+ .UK EPP support: only some operations for now, see t/626nominet_epp.t (not implemented for now: domain & account updates, domain creations, registry notifications)
347+ .AU EPP support (submitted by Rony Meyer)
348+ OVH : implemented resellers Web Services API (2 functions only for now: account_list_domains and domain_info), see t/623ovh_ws_live.t
349+ BookMyName (aka Free/ProXad/Online/Dedibox/Iliad) : implemented resellers Web Services API (2 functions only for now: account_list_domains and domain_info), see t/624bookmyname_ws_live.t
350+ Gandi : implemented resellers Web Services API (2 functions only for now: account_list_domains and domain_info), see t/625gandi_ws_live.t
351+ Registry : yet another API for new_profile/new_current_profile ! This should have been the only one since the beginning. See files in eg/*
352                      Previous API may be deprecated in the future to keep only two: full one (profile name, transport name, transport params, protocol name, protocol params)
353                      and the new one (profile name, profile type, transport params, protocol params)
354+ Added Whois support for: .LU .WS .SE .CAT .AT
355+ Implemented RFC5076 (ENUM Validation Information) in Net::DRI::Protocol::EPP::Extensions::E164Validation and Net::DRI::Protocol::EPP::Extensions::E164Validation::RFC5076
356   (the RFC allows numerous ways to encode validation information,hence the example inside the RFC is handled in a separate module. Other examples from registries are welcome)
357+ PIR IDNLanguage extension (work submitted by Tonnerre Lombard, added with modifications)
358+ .NAME EmailFwd operations (work submitted by Tonnerre Lombard, added with modifications)
359+ .US DRD module (work submitted by Tonnerre Lombard, added with modifications)
360+ Added Data/Hosts::as_string() for debugging, and Data/Hosts::roid()
361+ Additional API for domain_renew in line with other parts with just a domain name and an optional extension as ref hash; see example in t/622vnds_epp_e164validation.t
362= Better handling of EPP contacts internationalization : each DRD module can specify what the registry expects for contacts data.
363   By default, all 3 cases allowed, except for : .BE .EU .LU (localized only), .AT (internationalized only) and .BIZ (internationalized only or internationalized and localized together).
364   When needed the data is contructed with Contact::int2loc() and Contact::loc2int()
365   Contact::_intfirst() is thus removed as useless now
366= DRD/NAME : 1 year possible in periods() (reported by Alexander Biehl)
367= Protocol/EPP/Extensions/VeriSign/NameStore : taking into account .CC and .TV (reported by Tonnerre Lombard, added with modifications)
368= Protocol/EPP/Extensions/US/Contact : update to currently deployed version (work submitted by Tonnerre Lombard)
369= Protocol/EPP/Extensions/ASIA/CED : remove extraneous ced hash level in domain_create and fix retrieval of maintainerUrl information (work submitted by Tonnerre Lombard)
370= Protocol/EPP/Extensions/ASIA/IPR : add support for parsing domainRoid in domain:create, replace obsolete ipr:phase with ipr:type (work submitted by Tonnerre Lombard)
371= Protocol/EPP/Extensions/LU : fix fetching of DNSLU type parameter in certain cases (work submitted by Tonnerre Lombard)
372= Protocol/EPP/Extensions/AT : parse more information from .AT messages (work submitted by Tonnerre Lombard)
373= Protocol/EPP/Core/Contact : support registries violating EPP with an empty contact:clID (from original bugreport by Alexander Biehl)
374= Protocol/EPP : we correctly parse multiple results (in case of errors), and return them if asked for ;
375		this had consequences for result_extra_info, see comments in Message (Core+DNSBE+EURid), and NameStore
376= Protocol/EPP various parses : better use of date parsing
377= Protocol/EPP object can be instanciated with overriding core methods (needed for Nominet)
378= Protocol/EPP hosts parsing : we keep all IPs even private ones
379= ResultStatus : can handle more than one status, as a linked list (next() method)
380= Data/Hosts : we remove the final dot from names if present
381= Protocol::reaction : we create the result_status subkey for all elements in cache created by this action, not only the main element
382   (this is especially useful for registries giving back a lot of information, like Nominet during a domain:info call giving back information useful for a contact:info or host:info)
383= Registry::result_status() gives back the whole ResultStatus object
384= Added Registry::get_info_all() and Registry::get_info_keys()
385= Modules SOAP::Lite, Net::SMTP, MIME::Entity previously required are now optional because used only by some registries not EPP. t/004load_optional will test their presence,
386   warn which are needed for which Net::DRI use, and test their dependencies inside Net::DRI
387   Same for new modules: SOAP::WSDL (needs SOAP::Lite) and XMLRPC::Lite (provided by SOAP::Lite)
388   Later on, a Bundle::NetDRI could be created to install also all optional modules
389   This means for now less hard dependencies for default case, that is EPP registries
390= DRD->info() can be called through DRI (from initial report by Tonnerre Lombard)
391= Cache::get & Cache::set : we do not force the key in lowercase anymore, as contact IDs may be case sensitive
392= No more eval { require }, using UNIVERSAL::require instead
393- EPP contacts : use of EPP::Message::core_contact_types() to correctly handle case of .EU/.BE
394- Protocol/EPP/Extensions/ASIA/IPR : removing use of Date::Parse::str2time()
395- Protocol/EPP/Extensions/LU/Status : allow to use status 'inactive' (registry specific, not in EPP) (from original bugreport by Alexander Biehl), see last test in t/620lu_epp.t
396- Protocol/EPP/Extensions/LU/Poll : correctly retrieve the type attribute (from original bugreport by Alexander Biehl)
397- DRD/AT : bugfix for is_my_tld() (reported by Tonnerre Lombard)
398- README : typos (there is no Net::DRI::Data::Host module) (reported by Trond Haugen)
399- t/003critic : better loading of module Test::Perl::Critic which is optional (only needed for tests)
400- Gandi Web scraping : totally removed as it was deprecated since a long time, and thus Transport/Web and its WWW::Mechanize dependency (this can be added back later if needed)
401- DRD::is_thick : will carp if still used, deprecated
402- DRD::root_servers() removed, not used (was only in DRD/VNDS)
403
4040.81 2007-11-07
405
406= Updated all RFCs references related to EPP : RFCs 4930,4931,4932,4933,4934 are now obsoleting RFCs 3730,3731,3732,3733,3734
407  xsi:schemaLocation is not removed in messages created, but may be removed in future releases
408  we do not add an empty domain:chg any more for pure extension update commands
409= Conformity with Perl critic Best Practices (level 5)
410+ Added support for .ASIA extensions (work submitted by Tonnerre Lombard)
411+ Update for .EU : taking into account new version=2 for domain_info & domain_check (retrieving more data from registry)
412  Warning : this changes some registry reply codes, see registry documentation
413+ Contact : new method _intfirst() (from suggestion by Rony Meyer)
414+ Transport/Socket : new parameter protocol_data, see documentation (from idea by Rony Meyer)
415+ DRD/VNDS : also handle .CC & .TV
416+ DRD/NAME and DRD/NU : provided by Alexander Biehl
417+ 3 new EPP extensions for CentralNic : WebForwarding, TTL & Domain Release (see t/621centralnic_epp.t for examples of use)
418+ Whois support for .MOBI .NAME (see example in eg/whois.pl)
419+ Transport : new way to do logging (send/receive methods receive an extra parameter at beginning, the trid)
420= DRD : is_my_tld() correctly handles registries with more than one TLD (from initial bugreport by Rony Meyer)
421= Data/Hosts : new method clear() (patch by Tonnerre Lombard)
422= Protocol/EPP/Extensions/VeriSign/NameStore : extension not always provided by registry (bugfix from Rony Meyer)
423= Protocol/EPP/Extensions/VeriSign/IDNLanguage DRD/ICANN : allow use of xn-- domain names (from suggestion by Rony Meyer)
424  [ This may change in the future, depending on how Net::DRI implements IDN ]
425- DRD : bugfix in domain_can (bugfix from Tonnerre Lombard)
426- Protocol/EPP/* (various parses) : better handling of XML nodes/elements (from initial bugreport by Tonnerre Lombard for .LU)
427
4280.80 2007-04-19
429
430+ DAS support for .EU & .BE : quick lookup of domain availability ; see eg/eurid_das.pl for an example (same interface as domain_check)
431+ Whois support (RFC3912) for thick registries (full) and thin registries (only registry part) ; see eg/whois.pl for an example (same interface as domain_info) ;
432   parse provided for .COM .NET .ORG .BIZ .INFO .AERO .EU
433+ .LU support : all extensions (except startTLS & IDNs) ; we do not enforce policy of only one IPv4 and one IPv6 at most for hosts
434+ Transport/Socket : new parameter ssl_version (suggestion from Rony Meyer)
435+ Transport/Socket {RRP,EPP}/Protocol/Connection : allow changing password at connection (from initial patch by Rony Meyer)
436+ DRD/BIZ (provided by Rony Meyer)
437= DateTime::Format::ISO8601 : required version is now 0.06 (0.0403 is also ok, but 0.05 is absolutely not ok, hence we upgraded the required version)
438= .AT updates (contributed by Michael Braunoeder from NIC.AT)
439= Data/Contact : new as_string() method for quick display
440= Data/ContactSet : minor changes, rem as alias to del, add/del/set returns the object itself, as new() (with explicit return)
441= Protocol/EPP/Core/{Domain,Host} VeriSign/PollRGP: make sure to lowercase domain names given back by registry (from bugreport by Rony Meyer)
442      We advise passing to Net::DRI only domain names and hostnames in lowercase.
443- DRD : bugfix in contact_info for cached values (bugfix from Rony Meyer)
444- Protocol/EPP/Core/Host : bugfix in parsing IP addresses (bugreport from Rony Meyer)
445
4460.70 2007-03-12
447
448+ .COOP full support : all operations with EPP, see included example in eg/coop_epp.pl and t/619coop_epp.t (with help from registry staff member Dan Maharry)
449+ .AT full support : all operations with EPP, contributed by Michael Braunoeder from NIC.AT
450+ .EU (DRD/EURid) : added Bulgaria and Romania
451+ Transport/Socket : a new trid key whose value is a code ref can be provided to generate transaction ids (from Rony Meyer idea)
452+ Transport/Socket : we pass MultiHomed => 1 when opening socket (tcp and tls) in order to try all IPs (suggested by Michael Braunoeder)
453+ Transport/Socket : for TLS, a callback can be specified to verify server credentials
454+ DRD/INFO DRD/ORG : contributed by Rony Meyer
455+ Contact : int2loc() and loc2int() methods to create localized version from internationalized, or the opposite
456= .MOBI : maintainer url is not mandatory (bugfix from Rony Meyer)
457= Protocol/EPP/Extensions/SecDNS : during domain create, no secdns data is not a fatal error anymore
458= Protocol/EPP/Extensions/MOBI/Domain : maintainer_url is not mandatory (bugfix from Rony Meyer)
459= Protocol/EPP/Message : for poll replies, id of _current_ message is available, like count (see source)
460= DRD/ICANN : operations (except domain creation) on one-letter and two-letter domain names are now possible (not denied) ;
461              this should really be handled on a per-registry basis (from suggestion by Rony Meyer)
462= Protocol/EPP/Core/Domain : for some registries (like .AT) we send all nameservers' IP, even if nameserver is in domain
463= Protocol/EPP/Core/Status : delete/renew/update operations are allowed even if some pending status is set
464 		(per draft-hollenbeck-epp-rfc3731bis-05.txt draft-hollenbeck-epp-rfc3732bis-04.txt draft-hollenbeck-epp-rfc3733bis-06.txt)
465- Protocol/EPP/Core/RegistryMessage : correctly handle case of no message at all, or message without extra data (bugreport by Elias Sidenbladh) ; see end of t/601vnds_epp.t
466- .SE (Data/Contact/SE DRD/SE) : bugfixes by Elias Sidenbladh
467- Protocol/EPP/Core/Contact : minor bugfix in contact creation (parse_disclose) from Elias Sidenbladh
468- Transport/Socket : ssl_verify was not taken into account, bugfix by Rony Meyer
469- Protocol/EPP/Extensions/{DNSBE,Eurid}/Domain : add op="request" for transferq commands (bugreport and fix from Cedric Dubois)
470- Transport : use true loops in send() and receive() (bugreport from Elias Sidenbladh)
471
4720.40 2006-09-22
473
474+ .BE full support : all operations with EPP except agent update & info (with help from Roger Heykoop)
475+ EPP : better support for <poll> results, we parse all replies for which we already have a parse function registered
476+ EPP/Extensions : RGP Notification & Low Balance Notification for VeriSign (poll messages)
477+ DRD : new method message_count() to retrieve the number of messages available
478+ Transport/Socket : added ping(), with autoreconnection if wanted and necessary
479+ EPP & RRP : for all actions returning information, a key action is created whose value is the name of the action that has triggered this reply
480            (see 600vnds_rrp.t 601vnds_epp.t 605vnds_epp_nsgroup.t 613cat_epp.t)
481= EPP/Core/Contact : correctly handle case of contact:id being chosen by registry during contact:create (see 601vnds_epp.t)
482= EPP : uses <hello> instead of <poll> as keepalive message (explicitely allowed in draft-hollenbeck-epp-rfc3730bis-02.txt)
483= EPP/Extensions/CAT/DefensiveRegistration : better handling of XML namespace
484= Transport : creation time is available through time_creation() like time_open() and time_used()
485- Transport : correct month & minutes in logging (bugfix by Rony Meyer & Christian Kratzer)
486- DRD/VNDS : verify_domain_transfer does not need a full domain_info with hosts=all, none is enough (bugfix by Rony Meyer)
487- DRD : correct retrieval of result status from cache (bug report by Rony Meyer)
488- Protocol/EPP/Connection : take into account message language if given by registry (bug report by Rony Meyer)
489- Protocol/EPP/Extensions/VeriSign/WhoisInfo : handle default value for indirect domain_info calls (bug report by Rony Meyer)
490- Protocol/EPP/Extensions/GracePeriod : correctly takes into account VeriSign breaking its own RFC (bug report by Rony Meyer)
491
4920.30 2006-06-15
493
494+ .FR full support : all operations by email (form version 2.0.0 for both organizations & individuals)
495+ .COM .NET full support in EPP with multiple VeriSign extensions:
496           Sync (see t/610vnds_epp_sync.t)
497           IDN Language (see t/611vnds_epp_idnlang.t)
498           Whois Info (see t/612vnds_epp_whoisinfo.t)
499           NameStore from original patch by Rony Meyer (see t/616vnds_epp_namestore.t)
500     Use Protocol/EPP/Extensions/VeriSign as protocol class to have needed extensions loaded automatically
501+ .MOBI full support : Domain extension for maintainer url (see t/615mobi_epp.t)
502+ .US full support : Contact extension for NEXUS handling (see t/609vnds_epp_us.t)
503+ .AERO full support : Domain & Contact extensions for ENS (see t/614aero_epp.t)
504+ .CAT full support : Domain & Contact extensions, and all operations on Defensive Registrations (see t/613cat_epp.t and eg/cat_epp.pl)
505             thanks to Klaus Malorny & the .CAT registry
506+ Infrastructure ENUM.AT (contributed by Michael Braunoeder from ENUM.AT)
507+ Protocol/EPP/Extensions/SecDNS updated to RFC4310
508+ .PL updated to latest draft
509+ new_profile / new_current_profile : additional API with only 3 parameters (profile name + 2 ref arrays for parameters, both can be empty)
510                   using registry default transport & protocol classes (see transport_protocol_default)
511+ ResultStatus->trid() can also be called in list context to get back for EPP the svTRID along with the clTRID (suggestion by Elias Sidenbladh)
512= DRD : for transfers, like for creations, the duration is in the duration attribute not period
513= Protocol/EPP/Extensions/EURid/Domain : multiple nsgroup can be given (patch from Christian Kratzer)
514= DRD/ICANN : taking care of some lifted restrictions for newest gTLDs (starting with .TRAVEL)
515= Protocol/EPP/Core/Domain : for domain_info, hosts=all is the default, but you can pass another value (sub, del or none) in the hosts attribute (bugfix from Rony Meyer)
516= Protocol/EPP/Extensions/E164 : small update to work with IENUMAT relaxed rules from RFC4114
517= Util : update in list of country codes, add JE GG IM per http://www.iso.org/iso/en/prods-services/iso3166ma/03updates-on-iso-3166/nlv11-div.html
518= Transport/Socket : you can optionnally set the local hostname when connecting (suggestion from Brian Drysdale)
519= Protocol/Gandi : currently deactivated since change of website
520- Protocol/EPP/Core/Domain : domain:pw may be empty after domain:info for an object we do not own (bugfix from Rony Meyer)
521- Protocol/EPP : better handling of registries various XML namespaces
522
5230.22 2006-05-12
524
525+ EPP Poll from prototype by Elias Sidenbladh (Protocol/EPP/Core/RegistryMessage) : new methods message_retrieve() (=poll request)
526  message_delete() (=poll ack) and message_waiting() in Net::DRI
527  Please see examples at the end of t/601vnds_epp.t on how to retrieve info on a message, and info on all messages (count & first id).
528+ Preliminary support for .FR/.RE by email : only domain creation for now, without parsing of registry emails coming back
529  (Net::DRI::Data::Contact::AFNIC Net::DRI::Protocol::AFNIC::Email Net::DRI::Protocol::AFNIC::Email::Message
530  Net::DRI::Protocol::AFNIC::Email::Domain Net::DRI::Transport::SMTP)
531  For all asynchronous operations, the result status is command successful but pending.
532+ In all result status, new method trid() that stores the (local/client) transaction identifier of the operation
533  that generated this result status, and new method is_pending() to know if the operation has been done
534  or is pending review, which will be the case for all asynchronous registries (Protocol/ResultStatus)
535= EPP + RRP : we use the nameserver list provided in domain operations only if it is not empty
536= Data/Contact/EURid : lower limits for name/org length than in EPP
537- Transport/Socket : correctly shut down alarms in end() (thanks to Sten Spans)
538- Protocol/EPP/Extensions/EURid/Domain : bugfix for transfer/transferq/trade requests when specifying nameservers,
539                                         from bug report by Andreas Wittkemper
540- Protocol/EPP/Connection : bugfix when there is no svcExtension (found by Michael Braunoeder)
541- Protocol/EPP/Core/Contact : correctly handle all cases of empty fax (and tel for that matter),
542                              bug report from Brian
543
5440.21 2006-03-04
545
546+ Support for .SE (based on EPP) thanks to Elias Sidenbladh and the NIC SE team
547+ Support for .PL (based on EPP) except the Future object (interoperability with registry not tested)
548+ Data/Contact,Protocol/EPP/Core/Contact : we now handle both internationalized and localized data,
549  for registries handling both. Changes are backwards compatible with previous version, but make
550  sure to test on your systems before installing in production.
551+ Protocol/ResultStatus : new print_full() method to have all details from registry
552+ Data/Hosts : new set() method
553+ Transport : we keep time of last use (idea from Brian), with method time_used()
554= Transport/Socket : if sending fails, and retry > 1, we try to reconnect ; this is a crude way to handle registry timeouts
555= local_object() enables you to create any kind of local objects, including hosts, contacts, contactsets,
556  changes, etc... without having to load and directly call Net::DRI::Data::Hosts,Contact,ContactSet,Changes
557  Please see the modified t/606eurid_epp.t for examples
558= better error debugging in new_profile() when loading Transport and Protocol classes
559= Transport/Socket : do not use IO::Socket::SSL::context_init anymore, it is marked as deprecated in module
560- Protocol/EPP/Message : correct creation of <hello/> commands (bug found by Elias Sidenbladh)
561- Protocol/{EPP,RRP}/Message : correct encoding of outgoing messages with Encode::encode()
562- eg/eurid_epp.pl : the filehandle used for logging must be closed after $dri->end() not before
563
5640.20 2005-12-02
565
566+ EURid/Sunrise : we automatically reconnect after each apply command (successful or not), when needed,
567                  since the connection is dropped by registry (bug reported by Lucas Vossberg)
568+ Transport/Socket : a client certificate is no more mandatory, the default verification level is lowered,
569                     better error message for SSL problems (suggested by Peter van Dijk)
570- Protocol/EPP/Extensions/EURid/Sunrise : various bugfixes for documentaryevidence=thirdparty (found by Yves Cartenstadt)
571= EURid : the sample provided (eurid_epp.pl) dumps all exchanges to a file
572
5730.19 2005-11-14
574
575+ Updates for conformity with latest EURid specifications :
576   # extra information in result of apply during Sunrise (reference, code, crDate)
577   # new action apply_info during Sunrise to get back information on previously submitted applications
578   (reference, code, crDate, application_status, contact, ns, docsReceivedDate, adr)
579+ Protocol/Resultatus : extra information from registry (error messages) is available with info()
580+ EPP/Extensions/EURid : we parse eurid:msg for extra information, especially useful if errors
581- EPP/Extensions/EURid/Sunrise : invalid call for nsgroup (bug found & fixed by J�rgen Thomsen)
582= Data/Hosts has 2 significative changes : you can use get_details with a name and
583  you can add a nameserver already in the list, in which case the new IP addresses are added with existing
584  ones (without duplicates)
585
5860.18 2005-11-06
587
588+ Many improvements for .EU support : no need to specify empty useless values needed for EPP
589  but not used by EURid (domain/contact auth), no status handling for domains, example
590  for test systems (eg/eurid_epp.pl)
591- EPP/Message : use bytes is necessary for correct length calculation
592= Transport : if a server closes the connection on us (at protocol level, not socket one),
593  we note the fact and will try to reconnect later if needed
594= RRP : take into account PENDINGRESTORE PENDINGDELETE PENDINGTRANSFER status
595
5960.17 2005-10-24
597
598+ Full support for EURid (.EU) with Net::DRI::DRD::EURid, Net::DRI::Data::Contact::EURid,
599  Net::DRI::Protocol::EPP::Extensions::EURid and Net::DRI::Protocol::EPP::Extensions::EURid::*
600+ Query list of object types managed by registry (ex: domain, contact, etc...) with $dri->has_object()
601+ A copy of all exchanges can be sent to the filehandle of your choice
602  (see log_fh in Net::DRI::Transport)
603- BUGFIX in handling of dates in EPP : we switch to UTC before printing
604- BUGFIX in Net::DRI::Protocol::EPP::Connection : data may come in multiple chunks
605- BUGFIX in Net::DRI::Protocol::EPP::Core::Domain : handling of hosts as attributes
606= Net::DRI::Data::Hosts::add() returns the object itself (useful for chains)
607= Net::DRI::Data::Contact::validate() verifies the country code against the list in Util
608= No more hardcoding of various xml namespaces names in various modules, the list is
609  set during protocol object creation.
610= domain_create() : a duration is not mandatory
611
6120.16 2005-10-04
613
614+ Three new EPP extensions : SecDNS (for DNSSEC), E164 (for ENUM) and NSgroup (for .BE & .EU)
615+ New registry : .WS
616+ New API in addition to the existing one, with Net::DRI::Data::RegistryObject : needed for extensions
617  that handle new types of objects, such as NSgroup
618+ Take into account new error codes for AFNIC Web Services (technical note RP-20050913/DT-01)
619+ Add a name() and loid() accessor in Net::DRI::Data::Hosts
620- In EPP, we load host commands only if hosts are handled as an object by the registry
621- For domain_info(), host_info() and contact_info() we use data from cache, if we really
622  did an *_info() before.
623- Various bugfixes in DRD and RRP protocol.
624= Rework of Net:DRI::Protocol::ResultStatus & associated classes to handle more cases
625  by directly passing the EPP code
626= Simpler in-memory XML nodes representation in Net::DRI::Protocol::EPP::Message
627= Rework of Net::DRI::Protocol::{EPP,RRP}::Connection & Net::DRI::Transport::Socket (send_login)
628  to die with a Net::DRI::Protocol::ResultStatus in case of problems
629  + Changes in Net::DRI::Registry::new{,_current}_profile to return a ResultStatus object
630= Change in EPP domain_update as RFC3731 is ambigous (text & XML schema do not agree)
631  With this change, we now conform to the XML schema, which seems normative per
632  provreg mailing-list consensus. This will break with any server implementing the text part
633
6340.15 2005-07-20
635
636+ New protocol: EPP, with Grace Period extension (other can easily be added)
637+ Better way to create statuses (no() function in StatusList), see README for domain_update_status_add
638  and statuses name are not put in uppercase automatically
639+ Handling of contacts : modules Contact & ContactSet + new functions in DRD (contact_*)
640+ New functions: domain_check_multi, host_check_multi (if registry supports, check multiple objects at once)
641- BUGFIX in Net::DRI::Util::is_ipv6
642- BUGFIX : better checks of references with UNIVERSAL::isa instead of pure ref()
643= Rework of Net::DRI::Transport::Socket & associated connection classes
644
6450.12 2005-05-31
646
647+ New ``registries'':
648   1) AFNIC (through web services, domain check only)
649   2) Gandi (through web site, domain nameservers update only)
650+ New transport: SOAP (HTTP/HTTPS only)
651+ New transport: Web (Web Scraping)
652+ New protocol: Gandi Web Site (domain update only)
653+ New protocol: AFNIC web services (domain check only)
654+ New way of using profiles in Net::DRI::Registry : an auto switch functionnality is provided
655    so that the calling app does not have to call target() explicitely over and over
656    (see README for details)
657- BUGFIX for RRP : order of elements is now exactly as specified by standard
658- BUGFIX for Net::DRI::DRD in host_is_mine: parameters (warning not triggered in some perls)
659- BUGFIX for Net::DRI::DRD in err_invalid_domain_name/err_invalid_host_name: correct message
660                                               & really raise an exception if a problem is found !
661- BUGFIX for Net::DRI::DRD in check_name: correct count of dots
662+ Net::DRI::Transport::Socket : require on the protocol connection class to make sure it works
663- DOCFIX for Net::DRI::Data::Hosts (a ] was missing for the ref array of IPs)
664+ New tests for Net::DRI::Protocol::RRP::Connection, Net::DRI::Protocol::AFNIC::WS::Message,
665   Net::DRI::Protocol::Gandi::Web::Message, Net::DRI::Protocol::Gandi::Web::Connection
666- BUGFIX : no more warnings in tests, we use the TODO block of Test::More
667
6680.11 2005-04-25
669
670+ POD NAME section for each file with a short description
671- BUGFIX for VERSION (. missing)
672+ New files: Changes, TODO
673= No changes in code
674
6750.10 2005-04-24
676
677= First version on CPAN
678