@@ -1820,8 +1820,9 @@ cb_extract_option_bool(bool& field, VALUE options, const char* name)
18201820 }
18211821}
18221822
1823+ template <typename Integer>
18231824static void
1824- cb_extract_option_number (std:: size_t & field, VALUE options, const char * name)
1825+ cb_extract_option_number (Integer & field, VALUE options, const char * name)
18251826{
18261827 if (!NIL_P (options) && TYPE (options) == T_HASH) {
18271828 VALUE val = rb_hash_aref (options, rb_id2sym (rb_intern (name)));
@@ -1830,10 +1831,10 @@ cb_extract_option_number(std::size_t& field, VALUE options, const char* name)
18301831 }
18311832 switch (TYPE (val)) {
18321833 case T_FIXNUM:
1833- field = FIX2ULONG (val);
1834+ field = static_cast <Integer>( FIX2ULONG (val) );
18341835 break ;
18351836 case T_BIGNUM:
1836- field = NUM2ULL (val);
1837+ field = static_cast <Integer>( NUM2ULL (val) );
18371838 break ;
18381839 default :
18391840 throw ruby_exception (rb_eArgError, rb_sprintf (" %s must be a Integer, but given %+" PRIsVALUE, name, val));
@@ -1884,6 +1885,25 @@ cb_extract_option_string(std::string& target, VALUE options, const char* name);
18841885static void
18851886cb_extract_option_symbol (VALUE& val, VALUE options, const char * name);
18861887
1888+ static void
1889+ cb_extract_dns_config (couchbase::core::io::dns::dns_config& config, VALUE options)
1890+ {
1891+ if (!NIL_P (options) && TYPE (options) == T_HASH) {
1892+ return ;
1893+ }
1894+
1895+ auto timeout{ couchbase::core::timeout_defaults::dns_srv_timeout };
1896+ cb_extract_option_milliseconds (timeout, options, " dns_srv_timeout" );
1897+
1898+ std::string nameserver{ couchbase::core::io::dns::dns_config::default_nameserver };
1899+ cb_extract_option_string (nameserver, options, " dns_srv_nameserver" );
1900+
1901+ std::uint16_t port{ couchbase::core::io::dns::dns_config::default_port };
1902+ cb_extract_option_number (port, options, " dns_srv_port" );
1903+
1904+ config = couchbase::core::io::dns::dns_config (nameserver, port, timeout);
1905+ }
1906+
18871907static VALUE
18881908cb_Backend_open (VALUE self, VALUE connection_string, VALUE credentials, VALUE options)
18891909{
@@ -1983,13 +2003,14 @@ cb_Backend_open(VALUE self, VALUE connection_string, VALUE credentials, VALUE op
19832003 cb_extract_option_milliseconds (origin.options ().analytics_timeout , options, " analytics_timeout" );
19842004 cb_extract_option_milliseconds (origin.options ().search_timeout , options, " search_timeout" );
19852005 cb_extract_option_milliseconds (origin.options ().management_timeout , options, " management_timeout" );
1986- cb_extract_option_milliseconds (origin.options ().dns_srv_timeout , options, " dns_srv_timeout" );
19872006 cb_extract_option_milliseconds (origin.options ().tcp_keep_alive_interval , options, " tcp_keep_alive_interval" );
19882007 cb_extract_option_milliseconds (origin.options ().config_poll_interval , options, " config_poll_interval" );
19892008 cb_extract_option_milliseconds (origin.options ().config_poll_floor , options, " config_poll_floor" );
19902009 cb_extract_option_milliseconds (origin.options ().config_idle_redial_timeout , options, " config_idle_redial_timeout" );
19912010 cb_extract_option_milliseconds (origin.options ().idle_http_connection_timeout , options, " idle_http_connection_timeout" );
19922011
2012+ cb_extract_dns_config (origin.options ().dns_config , options);
2013+
19932014 cb_extract_option_number (origin.options ().max_http_connections , options, " max_http_connections" );
19942015
19952016 cb_extract_option_bool (origin.options ().enable_tls , options, " enable_tls" );
@@ -6819,12 +6840,12 @@ cb_Backend_dns_srv(VALUE self, VALUE hostname, VALUE service)
68196840 if (tls) {
68206841 service_name = " _couchbases" ;
68216842 }
6822- auto barrier = std::make_shared<std::promise<couchbase::core::io::dns::dns_client:: dns_srv_response>>();
6843+ auto barrier = std::make_shared<std::promise<couchbase::core::io::dns::dns_srv_response>>();
68236844 auto f = barrier->get_future ();
68246845 client.query_srv (host_name,
68256846 service_name,
68266847 couchbase::core::io::dns::dns_config::system_config (),
6827- [barrier](couchbase::core::io::dns::dns_client:: dns_srv_response&& resp) { barrier->set_value (std::move (resp)); });
6848+ [barrier](couchbase::core::io::dns::dns_srv_response&& resp) { barrier->set_value (std::move (resp)); });
68286849 ctx.run ();
68296850 auto resp = cb_wait_for_future (f);
68306851 if (resp.ec ) {
0 commit comments