<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>lib/active_shipping/lib/connection.rb</filename>
    </added>
    <added>
      <filename>lib/active_shipping/lib/post_data.rb</filename>
    </added>
    <added>
      <filename>lib/active_shipping/lib/utils.rb</filename>
    </added>
    <added>
      <filename>lib/active_shipping/lib/validateable.rb</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -1,3 +1,4 @@
+* Update connection code from ActiveMerchant [cody]
 * Fix space-ridden USPS usernames when validating credentials [james]
 * Remove extra slash from USPS URLs [james]
 * Update Shipwire endpoint hostname [cody]</diff>
      <filename>CHANGELOG</filename>
    </modified>
    <modified>
      <diff>@@ -37,6 +37,7 @@ require 'quantified/length'
 require 'net/https'
 require 'active_shipping/lib/error'
 require 'active_shipping/lib/requires_parameters'
+require 'active_shipping/lib/connection'
 require 'active_shipping/lib/posts_data'
 require 'active_shipping/lib/country'
 
@@ -49,4 +50,4 @@ require 'active_shipping/shipping/location'
 require 'active_shipping/shipping/rate_estimate'
 require 'active_shipping/shipping/shipment_event'
 require 'active_shipping/shipping/carrier'
-require 'active_shipping/shipping/carriers'
\ No newline at end of file
+require 'active_shipping/shipping/carriers'</diff>
      <filename>lib/active_shipping.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,3 +1,6 @@
+#!ruby19
+# encoding: utf-8
+
 module ActiveMerchant #:nodoc:
   class InvalidCountryCodeError &lt; StandardError
   end</diff>
      <filename>lib/active_shipping/lib/country.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,108 +1,46 @@
 module ActiveMerchant #:nodoc:
-  class ConnectionError &lt; ActiveMerchantError
-  end
-  
-  class RetriableConnectionError &lt; ConnectionError
-  end
-  
   module PostsData  #:nodoc:
-    MAX_RETRIES = 3
-    OPEN_TIMEOUT = 60
-    READ_TIMEOUT = 60
-    
+
     def self.included(base)
       base.superclass_delegating_accessor :ssl_strict
       base.ssl_strict = true
       
-      base.class_inheritable_accessor :pem_password
-      base.pem_password = false
-      
       base.class_inheritable_accessor :retry_safe
       base.retry_safe = false
 
       base.superclass_delegating_accessor :open_timeout
-      base.open_timeout = OPEN_TIMEOUT
+      base.open_timeout = 60
 
       base.superclass_delegating_accessor :read_timeout
-      base.read_timeout = READ_TIMEOUT
+      base.read_timeout = 60
+      
+      base.superclass_delegating_accessor :logger
+      base.superclass_delegating_accessor :wiredump_device
     end
     
-    def ssl_get(url, headers={})
-      ssl_request(:get, url, nil, headers)
+    def ssl_get(endpoint, headers={})
+      ssl_request(:get, endpoint, nil, headers)
     end
     
-    def ssl_post(url, data, headers = {})
-      ssl_request(:post, url, data, headers)
+    def ssl_post(endpoint, data, headers = {})
+      ssl_request(:post, endpoint, data, headers)
     end
     
     private
-    def retry_exceptions
-      retries = MAX_RETRIES
-      begin
-        yield
-      rescue RetriableConnectionError =&gt; e
-        retries -= 1
-        retry unless retries.zero?
-        raise ConnectionError, e.message
-      rescue ConnectionError
-        retries -= 1
-        retry if retry_safe &amp;&amp; !retries.zero?
-        raise
-      end
-    end
-    
-    def ssl_request(method, url, data, headers = {})
-      if method == :post
-        # Ruby 1.8.4 doesn't automatically set this header
-        headers['Content-Type'] ||= &quot;application/x-www-form-urlencoded&quot;
-      end
+    def ssl_request(method, endpoint, data, headers = {})
+      connection = Connection.new(endpoint)
+      connection.open_timeout = open_timeout
+      connection.read_timeout = read_timeout
+      connection.retry_safe   = retry_safe
+      connection.verify_peer  = ssl_strict
+      connection.logger       = logger
+      connection.tag          = self.class.name
+      connection.wiredump_device = wiredump_device
       
-      uri   = URI.parse(url)
-
-      http = Net::HTTP.new(uri.host, uri.port)
-      http.open_timeout = self.class.open_timeout
-      http.read_timeout = self.class.read_timeout
+      connection.pem          = @options[:pem] if @options
+      connection.pem_password = @options[:pem_password] if @options
       
-      if uri.scheme == &quot;https&quot;
-        http.use_ssl = true
-        
-        if ssl_strict
-          http.verify_mode    = OpenSSL::SSL::VERIFY_PEER
-          http.ca_file        = File.dirname(__FILE__) + '/../../certs/cacert.pem'
-        else
-          http.verify_mode    = OpenSSL::SSL::VERIFY_NONE
-        end
-      
-        if @options &amp;&amp; !@options[:pem].blank?
-          http.cert           = OpenSSL::X509::Certificate.new(@options[:pem])
-        
-          if pem_password
-            raise ArgumentError, &quot;The private key requires a password&quot; if @options[:pem_password].blank?
-            http.key            = OpenSSL::PKey::RSA.new(@options[:pem], @options[:pem_password])
-          else
-            http.key            = OpenSSL::PKey::RSA.new(@options[:pem])
-          end
-        end
-      end
-
-      retry_exceptions do 
-        begin
-          case method
-          when :get
-            http.get(uri.request_uri, headers).body
-          when :post
-            http.post(uri.request_uri, data, headers).body
-          end
-        rescue EOFError =&gt; e
-          raise ConnectionError, &quot;The remote server dropped the connection&quot;
-        rescue Errno::ECONNRESET =&gt; e
-          raise ConnectionError, &quot;The remote server reset the connection&quot;
-        rescue Errno::ECONNREFUSED =&gt; e
-          raise RetriableConnectionError, &quot;The remote server refused the connection&quot;
-        rescue Timeout::Error, Errno::ETIMEDOUT =&gt; e
-          raise ConnectionError, &quot;The connection to the remote server timed out&quot;
-        end
-      end
+      connection.request(method, data, headers)
     end
     
   end</diff>
      <filename>lib/active_shipping/lib/posts_data.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>c56579c934ed5b80d16339242ef264a24bdb3a21</id>
    </parent>
  </parents>
  <author>
    <name>Cody Fauser</name>
    <email>codyfauser@gmail.com</email>
  </author>
  <url>http://github.com/Shopify/active_shipping/commit/cbc633113acfbd9acca454a8d401bc970bd277e3</url>
  <id>cbc633113acfbd9acca454a8d401bc970bd277e3</id>
  <committed-date>2009-05-25T12:44:59-07:00</committed-date>
  <authored-date>2009-05-25T12:43:33-07:00</authored-date>
  <message>Update connection code from ActiveMerchant</message>
  <tree>4381afe25523f5d7f89534f800dfab764d482ddc</tree>
  <committer>
    <name>Cody Fauser</name>
    <email>codyfauser@gmail.com</email>
  </committer>
</commit>
