diff --git a/lib/autodiscover/pox_request.rb b/lib/autodiscover/pox_request.rb index fc661b3..7437d1c 100644 --- a/lib/autodiscover/pox_request.rb +++ b/lib/autodiscover/pox_request.rb @@ -16,21 +16,13 @@ def initialize(client, **options) # @return [Autodiscover::PoxResponse, nil] def autodiscover available_urls.each do |url| - begin - response = client.http.post(url, request_body, {'Content-Type' => 'text/xml; charset=utf-8'}) - return PoxResponse.new(response.body) if good_response?(response) - rescue Errno::ENETUNREACH, Errno::ECONNREFUSED, HTTPClient::ConnectTimeoutError - next - rescue OpenSSL::SSL::SSLError - options[:ignore_ssl_errors] ? next : raise - end + response = client.http.post(url, request_body, {'Content-Type' => 'text/xml; charset=utf-8'}) + return PoxResponse.new(response.body) if good_response?(response) end end - private - def good_response?(response) response.status == 200 end @@ -39,10 +31,14 @@ def available_urls(&block) return to_enum(__method__) unless block_given? formatted_https_urls.each {|url| logger.debug "Yielding HTTPS Url #{url}" - yield url + handle_allowed_errors do + yield url + end } - logger.debug "Yielding HTTP Redirected Url #{redirected_http_url}" - yield redirected_http_url + handle_allowed_errors do + logger.debug "Yielding HTTP Redirected Url #{redirected_http_url}" + yield redirected_http_url + end end def formatted_https_urls @@ -71,5 +67,11 @@ def request_body end.to_xml end + def handle_allowed_errors + yield + rescue SocketError, Errno::EHOSTUNREACH, Errno::ENETUNREACH, Errno::ECONNREFUSED, HTTPClient::ConnectTimeoutError + rescue OpenSSL::SSL::SSLError + raise if !options[:ignore_ssl_errors] + end end end