<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><br class=""><div><blockquote type="cite" class=""><div class="">On 12 Jun 2015, at 13:22, Shane Kerr <<a href="mailto:shane@time-travellers.org" class="">shane@time-travellers.org</a>> wrote:</div><br class="Apple-interchange-newline"><div class="">Neel & all,<br class=""><br class="">On Thu, 11 Jun 2015 23:23:22 +0000<br class="">"Goyal, Neel" <<a href="mailto:ngoyal@verisign.com" class="">ngoyal@verisign.com</a>> wrote:<br class=""><br class=""><blockquote type="cite" class="">What about making it a new method to not break existing APIs /<br class="">bindings - set_dns_transports (note the plural) or<br class="">set_dns_transport_order?  Internally the old method can just call<br class="">this w/ a single element list, and the getter can return the head of<br class="">the list.<br class=""></blockquote><br class="">For the "set" operation, I like the idea of a new function, for the<br class="">compatibility reason you describe.<br class=""></div></blockquote><div><br class=""></div>Thanks both for the feedback. </div><div><br class=""></div><div>Firstly the official API spec doesn’t include TLS or STARTTLS, but we did add these to getdns v0.2 (see below), so at the very least we would need to carefully consider what new types to add to the old method to support this. But it could be just the simplest version of each option with no fallback. For users only interested in UDP they could then stick with the existing methods, but anyone wanting to anything with privacy would sensibly choose the new API, because it offers the ability to specify fallback options. <br class=""><div><br class=""></div>Also note that I am arguing that the underlying TCP connection handling should should change too. At the moment the TCP related options are …TCP_ONLY  or …XX_KEEP_CONNECTIONS_OPEN. The API doesn’t currently go into detail about the precise difference. </div><div><br class=""></div><div>In the current getdns implementation the TCP_ONLY version does a single message on a TCP connection (very wasteful and only really useful for TC=1 fallback) and in contrast the KEEP_CONNECTIONS_OPEN option has no timeout associated with it all - it keeps the connections open until the context is destroyed. The latter is IMHO unwise because DNS servers are today poorly equipped to handle may long-lived connections. </div><div><br class=""></div><div>I would like to see the TCP based connection handling driven by an idle timeout instead (until there is a signalling mechanism for exactly how to behave on persistent TCP connections). Of course we can map the existing types to something roughly equivalent and explain all this, but the new 'list + timeout’ concept will be much more aligned with the implementation. So I think users should be at least nudged, maybe pushed or even forced to use them….</div><div><br class=""></div><div><blockquote type="cite" class=""><div class=""><br class="">However, the "get" operation is a bit trickier. You probably do not<br class="">want a backward-compatible version to return the head of list if the<br class="">list has more than a single entry.<br class=""></div></blockquote><div><br class=""></div><div>Minor detail, but the more recent options added in getdns 0.2 but not documented in the API have 2 transports:</div><div><span style="color: rgb(51, 51, 51); font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; line-height: 16.7999992370605px; white-space: pre; widows: 1; background-color: rgb(255, 255, 255);" class="">GETDNS_TRANSPORT_TLS_FIRST_AND_FALL_BACK_TO_TCP_KEEP_CONNECTIONS_OPEN</span></div><div><span style="color: rgb(51, 51, 51); font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; line-height: 16.7999992370605px; white-space: pre; widows: 1; background-color: rgb(255, 255, 255);" class="">GETDNS_TRANSPORT_STARTTLS_FIRST_AND_FALL_BACK_TO_TCP_KEEP_CONNECTIONS_OPEN</span></div><div><br class=""></div><blockquote type="cite" class=""><div class=""><br class="">I still like the idea of having a backward-compatible version of "get",<br class="">but I think it should return an error if the list is not 1-entry long.<br class="">ETOOMANYDIMENSIONSTARDISEXTERMINATEEXTERMINATEEXTERMINATE or the like.<br class=""><br class="">Also, having set_dns_transport() and set_dns_transports() with only the<br class="">'s' at the end to tell them apart is the path to madness (by which I<br class="">mean 4-hour debugging sessions in the middle of the night). If this<br class="">approach is used, surely using a more radically different name is a<br class="">good idea, like set_dns_transport_order(), set_dns_transport_list(), or<br class="">the like.<br class=""></div></blockquote><div><br class=""></div>Yes to both these suggestions if we go down this route.</div><div><br class=""><blockquote type="cite" class=""><div class=""><br class="">A final question with the backward-compatible approach is whether you<br class="">want to recommend that developers switch to the new method or not. My<br class="">own take on it would be that there is no strong need, and if you do<br class="">make a recommendation then probably a process of deprecating the old<br class="">one needs to be undertaken (ick).<br class=""></div></blockquote></div><br class=""><div class="">As you can tell I am in favour of deprecating them :-)</div><div class=""><br class=""></div><div class="">Sara. </div></body></html>