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