Hello community,

here is the log from the commit of package rubygem-excon for openSUSE:Factory 
checked in at 2016-03-07 13:28:00
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/rubygem-excon (Old)
 and      /work/SRC/openSUSE:Factory/.rubygem-excon.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "rubygem-excon"

Changes:
--------
--- /work/SRC/openSUSE:Factory/rubygem-excon/rubygem-excon.changes      
2015-08-05 06:49:49.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.rubygem-excon.new/rubygem-excon.changes 
2016-03-07 13:29:20.000000000 +0100
@@ -1,0 +2,30 @@
+Wed Mar  2 05:31:23 UTC 2016 - co...@suse.com
+
+- updated to version 0.47.0
+ see installed changelog.txt
+
+  0.47.0 02/29/2016
+  =================
+  
+  fix bundled certs
+  fix instrumentors to allow recording timings
+
+-------------------------------------------------------------------
+Sat Feb 27 05:36:03 UTC 2016 - co...@suse.com
+
+- updated to version 0.46.0
+ see installed changelog.txt
+
+  0.46.0 02/26/2016
+  
+  empty host header for unix sockets
+  raise EOFError on unexpectedly read nil
+  add host/path/port to response
+  keep cookies through redirects
+  fix to skip decompressing empty bodies
+  fix escaping for query string
+  README improvements
+  fix SocketError initializer
+  fix incorrect error class usage
+
+-------------------------------------------------------------------

Old:
----
  excon-0.45.4.gem

New:
----
  excon-0.47.0.gem

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ rubygem-excon.spec ++++++
--- /var/tmp/diff_new_pack.hdvdPy/_old  2016-03-07 13:29:21.000000000 +0100
+++ /var/tmp/diff_new_pack.hdvdPy/_new  2016-03-07 13:29:21.000000000 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package rubygem-excon
 #
-# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2016 SUSE LINUX GmbH, Nuernberg, Germany.
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -24,7 +24,7 @@
 #
 
 Name:           rubygem-excon
-Version:        0.45.4
+Version:        0.47.0
 Release:        0
 %define mod_name excon
 %define mod_full_name %{mod_name}-%{version}

++++++ excon-0.45.4.gem -> excon-0.47.0.gem ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/CONTRIBUTORS.md new/CONTRIBUTORS.md
--- old/CONTRIBUTORS.md 2015-07-13 17:17:57.000000000 +0200
+++ new/CONTRIBUTORS.md 2016-02-29 17:40:18.000000000 +0100
@@ -12,6 +12,7 @@
 * Carl Hörberg <carl.hoerb...@gmail.com>
 * Carlos Sanchez <csanc...@maestrodev.com>
 * Claudio Poli <masterk...@gmail.com>
+* Colin Dean <colind...@us.ibm.com>
 * Damien Mathieu <dam...@heroku.com>
 * Dan Hensgen <d...@methodhead.com>
 * Dan Peterson <dpi...@gmail.com>
@@ -44,6 +45,7 @@
 * Joshua Mckinney <joshmc...@gmail.com>
 * Joshua Napoli <jnap...@swipely-napoli.home>
 * Joshua Napoli <jnapoli@swipely-napoli.local>
+* Joshua Smith <kogn...@gmail.com>
 * Kensuke Nagae <kya...@gmail.com>
 * Konstantin Shabanov <eteht...@gmail.com>
 * Kyle Rames <kyle.ra...@rackspace.com>
@@ -105,4 +107,4 @@
 * rkyrychuk <ruslan.kyryc...@gmail.com>
 * sshaw <skye.s...@gmail.com>
 * twrodriguez <tw.rodrig...@gmail.com>
-* zimbatm <zimb...@zimbatm.com>
\ No newline at end of file
+* zimbatm <zimb...@zimbatm.com>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Gemfile.lock new/Gemfile.lock
--- old/Gemfile.lock    2015-07-13 17:17:57.000000000 +0200
+++ new/Gemfile.lock    2016-02-29 17:40:18.000000000 +0100
@@ -1,7 +1,7 @@
 PATH
   remote: .
   specs:
-    excon (0.45.4)
+    excon (0.47.0)
 
 GEM
   remote: http://rubygems.org/
@@ -9,6 +9,7 @@
     activesupport (3.2.6)
       i18n (~> 0.6)
       multi_json (~> 1.0)
+    backports (3.6.4)
     bouncy-castle-java (1.5.0147)
     chronic (0.6.7)
     delorean (2.0.0)
@@ -29,6 +30,8 @@
     rack (1.6.0)
     rack-protection (1.2.0)
       rack
+    rack-test (0.6.3)
+      rack (>= 1.0)
     raindrops (0.13.0)
     rake (0.9.2.2)
     rdoc (3.12)
@@ -244,6 +247,13 @@
       rack (~> 1.3, >= 1.3.6)
       rack-protection (~> 1.2)
       tilt (~> 1.3, >= 1.3.3)
+    sinatra-contrib (1.3.2)
+      backports (>= 2.0)
+      eventmachine
+      rack-protection
+      rack-test
+      sinatra (~> 1.3.0)
+      tilt (~> 1.3)
     tilt (1.3.3)
     unicorn (4.8.3)
       kgio (~> 2.6)
@@ -268,4 +278,8 @@
   rubysl (~> 2.0)
   shindo
   sinatra
+  sinatra-contrib
   unicorn
+
+BUNDLED WITH
+   1.11.2
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/README.md new/README.md
--- old/README.md       2015-07-13 17:17:57.000000000 +0200
+++ new/README.md       2016-02-29 17:40:18.000000000 +0100
@@ -132,9 +132,6 @@
 #
 connection = Excon.new('http://geemus.com/', :tcp_nodelay => true)
 
-# opt-in to omitting port from http:80 and https:443
-connection = Excon.new('http://geemus.com/', :omit_default_port => true)
-
 # set longer connect_timeout (default is 60 seconds)
 connection = Excon.new('http://geemus.com/', :connect_timeout => 360)
 
@@ -151,6 +148,20 @@
 connection = Excon.new('http://geemus.com/', uri_parser: Addressable::URI)
 ```
 
+Compared to web browsers and other http client libraries, e.g. curl, Excon is 
a bit more low-level and doesn't assume much by default. If you are seeing 
different results compared to other clients, the following options might help:
+
+```ruby
+# opt-in to omitting port from http:80 and https:443
+connection = Excon.new('http://geemus.com/', :omit_default_port => true)
+
+# accept gzip encoding
+connection = Excon.new('http://geemus.com/', :headers => { "Accept" => "gzip" 
})
+
+# turn off peer verification (less secure)
+Excon.defaults[:ssl_verify_peer] = false
+connection = Excon.new('https://...')
+```
+
 ## Chunked Requests
 
 You can make `Transfer-Encoding: chunked` requests by passing a block that 
will deliver chunks, delivering an empty chunk to signal completion.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Rakefile new/Rakefile
--- old/Rakefile        2015-07-13 17:17:57.000000000 +0200
+++ new/Rakefile        2016-02-29 17:40:18.000000000 +0100
@@ -138,7 +138,7 @@
 task :update_certs do
   require File.join(File.dirname(__FILE__), 'lib', 'excon')
   File.open(File.join(File.dirname(__FILE__), 'data', 'cacert.pem'), 'w') do 
|file|
-    data = Excon.get("http://curl.haxx.se/ca/cacert.pem";).body
+    data = Excon.get("https://curl.haxx.se/ca/cacert.pem";).body
     file.write(data)
   end
 end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/changelog.txt new/changelog.txt
--- old/changelog.txt   2015-07-13 17:17:57.000000000 +0200
+++ new/changelog.txt   2016-02-29 17:40:18.000000000 +0100
@@ -1,3 +1,22 @@
+0.47.0 02/29/2016
+=================
+
+fix bundled certs
+fix instrumentors to allow recording timings
+
+0.46.0 02/26/2016
+=================
+
+empty host header for unix sockets
+raise EOFError on unexpectedly read nil
+add host/path/port to response
+keep cookies through redirects
+fix to skip decompressing empty bodies
+fix escaping for query string
+README improvements
+fix SocketError initializer
+fix incorrect error class usage
+
 0.45.4 07/13/2015
 =================
 
Files old/checksums.yaml.gz and new/checksums.yaml.gz differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/data/cacert.pem new/data/cacert.pem
--- old/data/cacert.pem 2015-07-13 17:17:57.000000000 +0200
+++ new/data/cacert.pem 2016-02-29 17:40:18.000000000 +0100
@@ -1,7 +1,7 @@
 ##
 ## Bundle of CA Root Certificates
 ##
-## Certificate data from Mozilla as of: Wed Apr 22 03:12:04 2015
+## Certificate data from Mozilla as of: Wed Jan 20 04:12:04 2016
 ##
 ## This is a bundle of X.509 certificates of public Certificate Authorities
 ## (CA). These were automatically extracted from Mozilla's root certificates
@@ -14,30 +14,10 @@
 ## Just configure this file as the SSLCACertificateFile.
 ##
 ## Conversion done with mk-ca-bundle.pl version 1.25.
-## SHA1: ed3c0bbfb7912bcc00cd2033b0cb85c98d10559c
+## SHA1: 0ab47e2f41518f8d223eab517cb799e5b071231e
 ##
 
 
-Equifax Secure CA
-=================
------BEGIN CERTIFICATE-----
-MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJVUzEQMA4GA1UE
-ChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5
-MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoT
-B0VxdWlmYXgxLTArBgNVBAsTJEVxdWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCB
-nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPR
-fM6fBeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+AcJkVV5MW
-8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kCAwEAAaOCAQkwggEFMHAG
-A1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UE
-CxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoG
-A1UdEAQTMBGBDzIwMTgwODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvS
-spXXR9gjIBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQFMAMB
-Af8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUAA4GBAFjOKer89961
-zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y7qj/WsjTVbJmcVfewCHrPSqnI0kB
-BIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee95
-70+sB3c4
------END CERTIFICATE-----
-
 GlobalSign Root CA
 ==================
 -----BEGIN CERTIFICATE-----
@@ -105,30 +85,6 @@
 t20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ==
 -----END CERTIFICATE-----
 
-Verisign Class 4 Public Primary Certification Authority - G3
-============================================================
------BEGIN CERTIFICATE-----
-MIIEGjCCAwICEQDsoKeLbnVqAc/EfMwvlF7XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV
-UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
-cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
-IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh
-dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw
-CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy
-dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv
-cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDQgUHVibGljIFByaW1hcnkg
-Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
-ggEBAK3LpRFpxlmr8Y+1GQ9Wzsy1HyDkniYlS+BzZYlZ3tCD5PUPtbut8XzoIfzk6AzufEUiGXaS
-tBO3IFsJ+mGuqPKljYXCKtbeZjbSmwL0qJJgfJxptI8kHtCGUvYynEFYHiK9zUVilQhu0GbdU6LM
-8BDcVHOLBKFGMzNcF0C5nk3T875Vg+ixiY5afJqWIpA7iCXy0lOIAgwLePLmNxdLMEYH5IBtptiW
-Lugs+BGzOA1mppvqySNb247i8xOOGlktqgLw7KSHZtzBP/XYufTsgsbSPZUd5cBPhMnZo0QoBmrX
-Razwa2rvTl/4EYIeOGM0ZlDUPpNz+jDDZq3/ky2X7wMCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA
-j/ola09b5KROJ1WrIhVZPMq1CtRK26vdoV9TxaBXOcLORyu+OshWv8LZJxA6sQU8wHcxuzrTBXtt
-mhwwjIDLk5Mqg6sFUYICABFna/OIYUdfA5PVWw3g8dShMjWFsjrbsIKr0csKvE+MW8VLADsfKoKm
-fjaF3H48ZwC15DtS4KjrXRX5xm3wrR0OhbepmnMUWluPQSjA1egtTaRezarZ7c7c2NU8Qh0XwRJd
-RTjDOPP8hS6DRkiy1yBfkjaP53kPmF6Z6PDQpLv1U70qzlmwr25/bLvSHgCwIe34QWKCudiyxLtG
-UPMxxY8BqHTr9Xgn2uf3ZkPznoM+IKrDNWCRzg==
------END CERTIFICATE-----
-
 Entrust.net Premium 2048 Secure Server CA
 =========================================
 -----BEGIN CERTIFICATE-----
@@ -695,31 +651,6 @@
 iJf2fL1LuCAWZwWN4jvBcj+UlTfHXbme2JOhF4//DGYVwSR8MnwDHTuhWEUykw==
 -----END CERTIFICATE-----
 
-UTN DATACorp SGC Root CA
-========================
------BEGIN CERTIFICATE-----
-MIIEXjCCA0agAwIBAgIQRL4Mi1AAIbQR0ypoBqmtaTANBgkqhkiG9w0BAQUFADCBkzELMAkGA1UE
-BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
-IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xGzAZ
-BgNVBAMTElVUTiAtIERBVEFDb3JwIFNHQzAeFw05OTA2MjQxODU3MjFaFw0xOTA2MjQxOTA2MzBa
-MIGTMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4w
-HAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRy
-dXN0LmNvbTEbMBkGA1UEAxMSVVROIC0gREFUQUNvcnAgU0dDMIIBIjANBgkqhkiG9w0BAQEFAAOC
-AQ8AMIIBCgKCAQEA3+5YEKIrblXEjr8uRgnn4AgPLit6E5Qbvfa2gI5lBZMAHryv4g+OGQ0SR+ys
-raP6LnD43m77VkIVni5c7yPeIbkFdicZD0/Ww5y0vpQZY/KmEQrrU0icvvIpOxboGqBMpsn0GFlo
-wHDyUwDAXlCCpVZvNvlK4ESGoE1O1kduSUrLZ9emxAW5jh70/P/N5zbgnAVssjMiFdC04MwXwLLA
-9P4yPykqlXvY8qdOD1R8oQ2AswkDwf9c3V6aPryuvEeKaq5xyh+xKrhfQgUL7EYw0XILyulWbfXv
-33i+Ybqypa4ETLyorGkVl73v67SMvzX41MPRKA5cOp9wGDMgd8SirwIDAQABo4GrMIGoMAsGA1Ud
-DwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRTMtGzz3/64PGgXYVOktKeRR20TzA9
-BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vY3JsLnVzZXJ0cnVzdC5jb20vVVROLURBVEFDb3JwU0dD
-LmNybDAqBgNVHSUEIzAhBggrBgEFBQcDAQYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMA0GCSqGSIb3
-DQEBBQUAA4IBAQAnNZcAiosovcYzMB4p/OL31ZjUQLtgyr+rFywJNn9Q+kHcrpY6CiM+iVnJowft
-Gzet/Hy+UUla3joKVAgWRcKZsYfNjGjgaQPpxE6YsjuMFrMOoAyYUJuTqXAJyCyjj98C5OBxOvG0
-I3KgqgHf35g+FFCgMSa9KOlaMCZ1+XtgHI3zzVAmbQQnmt/VDUVHKWss5nbZqSl9Mt3JNjy9rjXx
-EZ4du5A/EkdOjtd+D2JzHVImOBwYSf0wdJrE5SIv2MCN7ZF6TACPcn9d2t0bi0Vr591pl6jFVkwP
-DPafepE39peC4N1xaf92P2BNPM/3mfnGV/TJVTl4uix5yaaIK/QI
------END CERTIFICATE-----
-
 UTN USERFirst Hardware Root CA
 ==============================
 -----BEGIN CERTIFICATE-----
@@ -1142,54 +1073,6 @@
 oKfN5XozNmr6mis=
 -----END CERTIFICATE-----
 
-TURKTRUST Certificate Services Provider Root 1
-==============================================
------BEGIN CERTIFICATE-----
-MIID+zCCAuOgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBtzE/MD0GA1UEAww2VMOcUktUUlVTVCBF
-bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGDAJUUjEP
-MA0GA1UEBwwGQU5LQVJBMVYwVAYDVQQKDE0oYykgMjAwNSBUw5xSS1RSVVNUIEJpbGdpIMSwbGV0
-acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLjAeFw0wNTA1MTMx
-MDI3MTdaFw0xNTAzMjIxMDI3MTdaMIG3MT8wPQYDVQQDDDZUw5xSS1RSVVNUIEVsZWt0cm9uaWsg
-U2VydGlmaWthIEhpem1ldCBTYcSfbGF5xLFjxLFzxLExCzAJBgNVBAYMAlRSMQ8wDQYDVQQHDAZB
-TktBUkExVjBUBgNVBAoMTShjKSAyMDA1IFTDnFJLVFJVU1QgQmlsZ2kgxLBsZXRpxZ9pbSB2ZSBC
-aWxpxZ9pbSBHw7x2ZW5sacSfaSBIaXptZXRsZXJpIEEuxZ4uMIIBIjANBgkqhkiG9w0BAQEFAAOC
-AQ8AMIIBCgKCAQEAylIF1mMD2Bxf3dJ7XfIMYGFbazt0K3gNfUW9InTojAPBxhEqPZW8qZSwu5GX
-yGl8hMW0kWxsE2qkVa2kheiVfrMArwDCBRj1cJ02i67L5BuBf5OI+2pVu32Fks66WJ/bMsW9Xe8i
-Si9BB35JYbOG7E6mQW6EvAPs9TscyB/C7qju6hJKjRTP8wrgUDn5CDX4EVmt5yLqS8oUBt5CurKZ
-8y1UiBAG6uEaPj1nH/vO+3yC6BFdSsG5FOpU2WabfIl9BJpiyelSPJ6c79L1JuTm5Rh8i27fbMx4
-W09ysstcP4wFjdFMjK2Sx+F4f2VsSQZQLJ4ywtdKxnWKWU51b0dewQIDAQABoxAwDjAMBgNVHRME
-BTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQAV9VX/N5aAWSGk/KEVTCD21F/aAyT8z5Aa9CEKmu46
-sWrv7/hg0Uw2ZkUd82YCdAR7kjCo3gp2D++Vbr3JN+YaDayJSFvMgzbC9UZcWYJWtNX+I7TYVBxE
-q8Sn5RTOPEFhfEPmzcSBCYsk+1Ql1haolgxnB2+zUEfjHCQo3SqYpGH+2+oSN7wBGjSFvW5P55Fy
-B0SFHljKVETd96y5y4khctuPwGkplyqjrhgjlxxBKot8KsF8kOipKMDTkcatKIdAaLX/7KfS0zgY
-nNN9aV3wxqUeJBujR/xpB2jn5Jq07Q+hh4cCzofSSE7hvP/L8XKSRGQDJereW26fyfJOrN3H
------END CERTIFICATE-----
-
-TURKTRUST Certificate Services Provider Root 2
-==============================================
------BEGIN CERTIFICATE-----
-MIIEPDCCAySgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvjE/MD0GA1UEAww2VMOcUktUUlVTVCBF
-bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEP
-MA0GA1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUg
-QmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUwHhcN
-MDUxMTA3MTAwNzU3WhcNMTUwOTE2MTAwNzU3WjCBvjE/MD0GA1UEAww2VMOcUktUUlVTVCBFbGVr
-dHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEPMA0G
-A1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmls
-acWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUwggEiMA0G
-CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCpNn7DkUNMwxmYCMjHWHtPFoylzkkBH3MOrHUTpvqe
-LCDe2JAOCtFp0if7qnefJ1Il4std2NiDUBd9irWCPwSOtNXwSadktx4uXyCcUHVPr+G1QRT0mJKI
-x+XlZEdhR3n9wFHxwZnn3M5q+6+1ATDcRhzviuyV79z/rxAc653YsKpqhRgNF8k+v/Gb0AmJQv2g
-QrSdiVFVKc8bcLyEVK3BEx+Y9C52YItdP5qtygy/p1Zbj3e41Z55SZI/4PGXJHpsmxcPbe9TmJEr
-5A++WXkHeLuXlfSfadRYhwqp48y2WBmfJiGxxFmNskF1wK1pzpwACPI2/z7woQ8arBT9pmAPAgMB
-AAGjQzBBMB0GA1UdDgQWBBTZN7NOBf3Zz58SFq62iS/rJTqIHDAPBgNVHQ8BAf8EBQMDBwYAMA8G
-A1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAHJglrfJ3NgpXiOFX7KzLXb7iNcX/ntt
-Rbj2hWyfIvwqECLsqrkw9qtY1jkQMZkpAL2JZkH7dN6RwRgLn7Vhy506vvWolKMiVW4XSf/SKfE4
-Jl3vpao6+XF75tpYHdN0wgH6PmlYX63LaL4ULptswLbcoCb6dxriJNoaN+BnrdFzgw2lGh1uEpJ+
-hGIAF728JRhX8tepb1mIvDS3LoV4nZbcFMMsilKbloxSZj2GFotHuFEJjOp9zYhys2AzsfAKRO8P
-9Qk3iCQOLGsgOqL6EfJANZxEaGM7rDNvY7wsu/LSy3Z9fYjYHcgFHW68lKlmjHdxx/qR+i9Rnuk5
-UrbnBEI=
------END CERTIFICATE-----
-
 SwissSign Gold CA - G2
 ======================
 -----BEGIN CERTIFICATE-----
@@ -1589,56 +1472,6 @@
 WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg==
 -----END CERTIFICATE-----
 
-TC TrustCenter Class 2 CA II
-============================
------BEGIN CERTIFICATE-----
-MIIEqjCCA5KgAwIBAgIOLmoAAQACH9dSISwRXDswDQYJKoZIhvcNAQEFBQAwdjELMAkGA1UEBhMC
-REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNVBAsTGVRDIFRydXN0Q2VudGVy
-IENsYXNzIDIgQ0ExJTAjBgNVBAMTHFRDIFRydXN0Q2VudGVyIENsYXNzIDIgQ0EgSUkwHhcNMDYw
-MTEyMTQzODQzWhcNMjUxMjMxMjI1OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1
-c3RDZW50ZXIgR21iSDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQTElMCMGA1UE
-AxMcVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
-AQoCggEBAKuAh5uO8MN8h9foJIIRszzdQ2Lu+MNF2ujhoF/RKrLqk2jftMjWQ+nEdVl//OEd+DFw
-IxuInie5e/060smp6RQvkL4DUsFJzfb95AhmC1eKokKguNV/aVyQMrKXDcpK3EY+AlWJU+MaWss2
-xgdW94zPEfRMuzBwBJWl9jmM/XOBCH2JXjIeIqkiRUuwZi4wzJ9l/fzLganx4Duvo4bRierERXlQ
-Xa7pIXSSTYtZgo+U4+lK8edJsBTj9WLL1XK9H7nSn6DNqPoByNkN39r8R52zyFTfSUrxIan+GE7u
-SNQZu+995OKdy1u2bv/jzVrndIIFuoAlOMvkaZ6vQaoahPUCAwEAAaOCATQwggEwMA8GA1UdEwEB
-/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTjq1RMgKHbVkO3kUrL84J6E1wIqzCB
-7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRydXN0Y2VudGVyLmRlL2NybC92Mi90
-Y19jbGFzc18yX2NhX0lJLmNybIaBn2xkYXA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBU
-cnVzdENlbnRlciUyMENsYXNzJTIwMiUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21i
-SCxPVT1yb290Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u
-TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEAjNfffu4bgBCzg/XbEeprS6iSGNn3Bzn1LL4G
-dXpoUxUc6krtXvwjshOg0wn/9vYua0Fxec3ibf2uWWuFHbhOIprtZjluS5TmVfwLG4t3wVMTZonZ
-KNaL80VKY7f9ewthXbhtvsPcW3nS7Yblok2+XnR8au0WOB9/WIFaGusyiC2y8zl3gK9etmF1Kdsj
-TYjKUCjLhdLTEKJZbtOTVAB6okaVhgWcqRmY5TFyDADiZ9lA4CQze28suVyrZZ0srHbqNZn1l7kP
-JOzHdiEoZa5X6AeIdUpWoNIFOqTmjZKILPPy4cHGYdtBxceb9w4aUUXCYWvcZCcXjFq32nQozZfk
-vQ==
------END CERTIFICATE-----
-
-TC TrustCenter Universal CA I
-=============================
------BEGIN CERTIFICATE-----
-MIID3TCCAsWgAwIBAgIOHaIAAQAC7LdggHiNtgYwDQYJKoZIhvcNAQEFBQAweTELMAkGA1UEBhMC
-REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNVBAsTG1RDIFRydXN0Q2VudGVy
-IFVuaXZlcnNhbCBDQTEmMCQGA1UEAxMdVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBIEkwHhcN
-MDYwMzIyMTU1NDI4WhcNMjUxMjMxMjI1OTU5WjB5MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMg
-VHJ1c3RDZW50ZXIgR21iSDEkMCIGA1UECxMbVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBMSYw
-JAYDVQQDEx1UQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0EgSTCCASIwDQYJKoZIhvcNAQEBBQAD
-ggEPADCCAQoCggEBAKR3I5ZEr5D0MacQ9CaHnPM42Q9e3s9B6DGtxnSRJJZ4Hgmgm5qVSkr1YnwC
-qMqs+1oEdjneX/H5s7/zA1hV0qq34wQi0fiU2iIIAI3TfCZdzHd55yx4Oagmcw6iXSVphU9VDprv
-xrlE4Vc93x9UIuVvZaozhDrzznq+VZeujRIPFDPiUHDDSYcTvFHe15gSWu86gzOSBnWLknwSaHtw
-ag+1m7Z3W0hZneTvWq3zwZ7U10VOylY0Ibw+F1tvdwxIAUMpsN0/lm7mlaoMwCC2/T42J5zjXM9O
-gdwZu5GQfezmlwQek8wiSdeXhrYTCjxDI3d+8NzmzSQfO4ObNDqDNOMCAwEAAaNjMGEwHwYDVR0j
-BBgwFoAUkqR1LKSevoFE63n8isWVpesQdXMwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
-AYYwHQYDVR0OBBYEFJKkdSyknr6BROt5/IrFlaXrEHVzMA0GCSqGSIb3DQEBBQUAA4IBAQAo0uCG
-1eb4e/CX3CJrO5UUVg8RMKWaTzqwOuAGy2X17caXJ/4l8lfmXpWMPmRgFVp/Lw0BxbFg/UU1z/Cy
-vwbZ71q+s2IhtNerNXxTPqYn8aEt2hojnczd7Dwtnic0XQ/CNnm8yUpiLe1r2X1BQ3y2qsrtYbE3
-ghUJGooWMNjsydZHcnhLEEYUjl8Or+zHL6sQ17bxbuyGssLoDZJz3KL0Dzq/YSMQiZxIQG5wALPT
-ujdEWBF6AmqI8Dc08BnprNRlc/ZpjGSUOnmFKbAWKwyCPwacx/0QK54PLLae4xW/2TYcuiUaUj0a
-7CIMHOCkoj3w6DnPgcB77V0fb8XQC9eY
------END CERTIFICATE-----
-
 Deutsche Telekom Root CA 2
 ==========================
 -----BEGIN CERTIFICATE-----
@@ -1661,28 +1494,6 @@
 Cm26OWMohpLzGITY+9HPBVZkVw==
 -----END CERTIFICATE-----
 
-ComSign Secured CA
-==================
------BEGIN CERTIFICATE-----
-MIIDqzCCApOgAwIBAgIRAMcoRwmzuGxFjB36JPU2TukwDQYJKoZIhvcNAQEFBQAwPDEbMBkGA1UE
-AxMSQ29tU2lnbiBTZWN1cmVkIENBMRAwDgYDVQQKEwdDb21TaWduMQswCQYDVQQGEwJJTDAeFw0w
-NDAzMjQxMTM3MjBaFw0yOTAzMTYxNTA0NTZaMDwxGzAZBgNVBAMTEkNvbVNpZ24gU2VjdXJlZCBD
-QTEQMA4GA1UEChMHQ29tU2lnbjELMAkGA1UEBhMCSUwwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
-ggEKAoIBAQDGtWhfHZQVw6QIVS3joFd67+l0Kru5fFdJGhFeTymHDEjWaueP1H5XJLkGieQcPOqs
-49ohgHMhCu95mGwfCP+hUH3ymBvJVG8+pSjsIQQPRbsHPaHA+iqYHU4Gk/v1iDurX8sWv+bznkqH
-7Rnqwp9D5PGBpX8QTz7RSmKtUxvLg/8HZaWSLWapW7ha9B20IZFKF3ueMv5WJDmyVIRD9YTC2LxB
-kMyd1mja6YJQqTtoz7VdApRgFrFD2UNd3V2Hbuq7s8lr9gOUCXDeFhF6K+h2j0kQmHe5Y1yLM5d1
-9guMsqtb3nQgJT/j8xH5h2iGNXHDHYwt6+UarA9z1YJZQIDTAgMBAAGjgacwgaQwDAYDVR0TBAUw
-AwEB/zBEBgNVHR8EPTA7MDmgN6A1hjNodHRwOi8vZmVkaXIuY29tc2lnbi5jby5pbC9jcmwvQ29t
-U2lnblNlY3VyZWRDQS5jcmwwDgYDVR0PAQH/BAQDAgGGMB8GA1UdIwQYMBaAFMFL7XC29z58ADsA
-j8c+DkWfHl3sMB0GA1UdDgQWBBTBS+1wtvc+fAA7AI/HPg5Fnx5d7DANBgkqhkiG9w0BAQUFAAOC
-AQEAFs/ukhNQq3sUnjO2QiBq1BW9Cav8cujvR3qQrFHBZE7piL1DRYHjZiM/EoZNGeQFsOY3wo3a
-BijJD4mkU6l1P7CW+6tMM1X5eCZGbxs2mPtCdsGCuY7e+0X5YxtiOzkGynd6qDwJz2w2PQ8KRUtp
-FhpFfTMDZflScZAmlaxMDPWLkz/MdXSFmLr/YnpNH4n+rr2UAJm/EaXc4HnFFgt9AmEd6oX5AhVP
-51qJThRv4zdLhfXBPGHg/QVBspJ/wx2g0K5SZGBrGMYmnNj1ZOQ2GmKfig8+/21OGVZOIJFsnzQz
-OjRXUDpvgV4GxvU+fE6OK85lBi5d0ipTdF7Tbieejw==
------END CERTIFICATE-----
-
 Cybertrust Global Root
 ======================
 -----BEGIN CERTIFICATE-----
@@ -1784,26 +1595,6 @@
 wDX3OaJdZtB7WZ+oRxKaJyOkLY4ng5IgodcVf/EuGO70SH8vf/GhGLWhC5SgYiAynB321O+/TIho
 -----END CERTIFICATE-----
 
-Buypass Class 3 CA 1
-====================
------BEGIN CERTIFICATE-----
-MIIDUzCCAjugAwIBAgIBAjANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU
-QnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3MgQ2xhc3MgMyBDQSAxMB4XDTA1
-MDUwOTE0MTMwM1oXDTE1MDUwOTE0MTMwM1owSzELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBh
-c3MgQVMtOTgzMTYzMzI3MR0wGwYDVQQDDBRCdXlwYXNzIENsYXNzIDMgQ0EgMTCCASIwDQYJKoZI
-hvcNAQEBBQADggEPADCCAQoCggEBAKSO13TZKWTeXx+HgJHqTjnmGcZEC4DVC69TB4sSveZn8AKx
-ifZgisRbsELRwCGoy+Gb72RRtqfPFfV0gGgEkKBYouZ0plNTVUhjP5JW3SROjvi6K//zNIqeKNc0
-n6wv1g/xpC+9UrJJhW05NfBEMJNGJPO251P7vGGvqaMU+8IXF4Rs4HyI+MkcVyzwPX6UvCWThOia
-AJpFBUJXgPROztmuOfbIUxAMZTpHe2DC1vqRycZxbL2RhzyRhkmr8w+gbCZ2Xhysm3HljbybIR6c
-1jh+JIAVMYKWsUnTYjdbiAwKYjT+p0h+mbEwi5A3lRyoH6UsjfRVyNvdWQrCrXig9IsCAwEAAaNC
-MEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUOBTmyPCppAP0Tj4io1vy1uCtQHQwDgYDVR0P
-AQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQABZ6OMySU9E2NdFm/soT4JXJEVKirZgCFPBdy7
-pYmrEzMqnji3jG8CcmPHc3ceCQa6Oyh7pEfJYWsICCD8igWKH7y6xsL+z27sEzNxZy5p+qksP2bA
-EllNC1QCkoS72xLvg3BweMhT+t/Gxv/ciC8HwEmdMldg0/L2mSlf56oBzKwzqBwKu5HEA6BvtjT5
-htOzdlSY9EqBs1OdTUDs5XcTRa9bqh/YL0yCe/4qxFi7T/ye/QNlGioOw6UgFpRreaaiErS7GqQj
-el/wroQk5PMr+4okoyeYZdowdXb8GZHo2+ubPzK/QJcHJrrM85SFSnonk8+QQtS4Wxam58tAA915
------END CERTIFICATE-----
-
 EBG Elektronik Sertifika Hizmet Sa\xC4\x9Flay\xc4\xb1\x63\xc4\xb1s\xc4\xb1
 ==========================================================================
 -----BEGIN CERTIFICATE-----
@@ -2635,29 +2426,6 @@
 +GijnsNacgmHKNHEc8RzGF9QdRYxn7fofMM=
 -----END CERTIFICATE-----
 
-A-Trust-nQual-03
-================
------BEGIN CERTIFICATE-----
-MIIDzzCCAregAwIBAgIDAWweMA0GCSqGSIb3DQEBBQUAMIGNMQswCQYDVQQGEwJBVDFIMEYGA1UE
-Cgw/QS1UcnVzdCBHZXMuIGYuIFNpY2hlcmhlaXRzc3lzdGVtZSBpbSBlbGVrdHIuIERhdGVudmVy
-a2VociBHbWJIMRkwFwYDVQQLDBBBLVRydXN0LW5RdWFsLTAzMRkwFwYDVQQDDBBBLVRydXN0LW5R
-dWFsLTAzMB4XDTA1MDgxNzIyMDAwMFoXDTE1MDgxNzIyMDAwMFowgY0xCzAJBgNVBAYTAkFUMUgw
-RgYDVQQKDD9BLVRydXN0IEdlcy4gZi4gU2ljaGVyaGVpdHNzeXN0ZW1lIGltIGVsZWt0ci4gRGF0
-ZW52ZXJrZWhyIEdtYkgxGTAXBgNVBAsMEEEtVHJ1c3QtblF1YWwtMDMxGTAXBgNVBAMMEEEtVHJ1
-c3QtblF1YWwtMDMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtPWFuA/OQO8BBC4SA
-zewqo51ru27CQoT3URThoKgtUaNR8t4j8DRE/5TrzAUjlUC5B3ilJfYKvUWG6Nm9wASOhURh73+n
-yfrBJcyFLGM/BWBzSQXgYHiVEEvc+RFZznF/QJuKqiTfC0Li21a8StKlDJu3Qz7dg9MmEALP6iPE
-SU7l0+m0iKsMrmKS1GWH2WrX9IWf5DMiJaXlyDO6w8dB3F/GaswADm0yqLaHNgBid5seHzTLkDx4
-iHQF63n1k3Flyp3HaxgtPVxO59X4PzF9j4fsCiIvI+n+u33J4PTs63zEsMMtYrWacdaxaujs2e3V
-cuy+VwHOBVWf3tFgiBCzAgMBAAGjNjA0MA8GA1UdEwEB/wQFMAMBAf8wEQYDVR0OBAoECERqlWdV
-eRFPMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAVdRU0VlIXLOThaq/Yy/kgM40
-ozRiPvbY7meIMQQDbwvUB/tOdQ/TLtPAF8fGKOwGDREkDg6lXb+MshOWcdzUzg4NCmgybLlBMRmr
-sQd7TZjTXLDR8KdCoLXEjq/+8T/0709GAHbrAvv5ndJAlseIOrifEXnzgGWovR/TeIGgUUw3tKZd
-JXDRZslo+S4RFGjxVJgIrCaSD96JntT6s3kr0qN51OyLrIdTaEJMUVF0HhsnLuP1Hyl0Te2v9+GS
-mYHovjrHF1D2t8b8m7CKa9aIA5GPBnc6hQLdmNVDeD/GMBWsm2vLV7eJUYs66MmEDNuxUCAKGkq6
-ahq97BvIxYSazQ==
------END CERTIFICATE-----
-
 TWCA Root Certification Authority
 =================================
 -----BEGIN CERTIFICATE-----
@@ -3986,3 +3754,140 @@
 kbcFgKyLmZJ956LYBws2J+dIeWCKw9cTXPhyQN9Ky8+ZAAoACxGV2lZFA4gKn2fQ1XmxqI1AbQ3C
 ekD6819kR5LLU7m7Wc5P/dAVUwHY3+vZ5nbv0CO7O6l5s9UCKc2Jo5YPSjXnTkLAdc0Hz+Ys63su
 -----END CERTIFICATE-----
+
+TÜRKTRUST Elektronik Sertifika Hizmet Sağlayıcısı H5
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIEJzCCAw+gAwIBAgIHAI4X/iQggTANBgkqhkiG9w0BAQsFADCBsTELMAkGA1UEBhMCVFIxDzAN
+BgNVBAcMBkFua2FyYTFNMEsGA1UECgxEVMOcUktUUlVTVCBCaWxnaSDEsGxldGnFn2ltIHZlIEJp
+bGnFn2ltIEfDvHZlbmxpxJ9pIEhpem1ldGxlcmkgQS7Fni4xQjBABgNVBAMMOVTDnFJLVFJVU1Qg
+RWxla3Ryb25payBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsSBINTAeFw0xMzA0MzAw
+ODA3MDFaFw0yMzA0MjgwODA3MDFaMIGxMQswCQYDVQQGEwJUUjEPMA0GA1UEBwwGQW5rYXJhMU0w
+SwYDVQQKDERUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnE
+n2kgSGl6bWV0bGVyaSBBLsWeLjFCMEAGA1UEAww5VMOcUktUUlVTVCBFbGVrdHJvbmlrIFNlcnRp
+ZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIEg1MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
+CgKCAQEApCUZ4WWe60ghUEoI5RHwWrom/4NZzkQqL/7hzmAD/I0Dpe3/a6i6zDQGn1k19uwsu537
+jVJp45wnEFPzpALFp/kRGml1bsMdi9GYjZOHp3GXDSHHmflS0yxjXVW86B8BSLlg/kJK9siArs1m
+ep5Fimh34khon6La8eHBEJ/rPCmBp+EyCNSgBbGM+42WAA4+Jd9ThiI7/PS98wl+d+yG6w8z5UNP
+9FR1bSmZLmZaQ9/LXMrI5Tjxfjs1nQ/0xVqhzPMggCTTV+wVunUlm+hkS7M0hO8EuPbJbKoCPrZV
+4jI3X/xml1/N1p7HIL9Nxqw/dV8c7TKcfGkAaZHjIxhT6QIDAQABo0IwQDAdBgNVHQ4EFgQUVpkH
+HtOsDGlktAxQR95DLL4gwPswDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZI
+hvcNAQELBQADggEBAJ5FdnsXSDLyOIspve6WSk6BGLFRRyDN0GSxDsnZAdkJzsiZ3GglE9Rc8qPo
+BP5yCccLqh0lVX6Wmle3usURehnmp349hQ71+S4pL+f5bFgWV1Al9j4uPqrtd3GqqpmWRgqujuwq
+URawXs3qZwQcWDD1YIq9pr1N5Za0/EKJAWv2cMhQOQwt1WbZyNKzMrcbGW3LM/nfpeYVhDfwwvJl
+lpKQd/Ct9JDpEXjXk4nAPQu6KfTomZ1yju2dL+6SfaHx/126M2CFYv4HAqGEVka+lgqaE9chTLd8
+B59OTj+RdPsnnRHM3eaxynFNExc5JsUpISuTKWqW+qtB4Uu2NQvAmxU=
+-----END CERTIFICATE-----
+
+TÜRKTRUST Elektronik Sertifika Hizmet Sağlayıcısı H6
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIEJjCCAw6gAwIBAgIGfaHyZeyKMA0GCSqGSIb3DQEBCwUAMIGxMQswCQYDVQQGEwJUUjEPMA0G
+A1UEBwwGQW5rYXJhMU0wSwYDVQQKDERUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmls
+acWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLjFCMEAGA1UEAww5VMOcUktUUlVTVCBF
+bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIEg2MB4XDTEzMTIxODA5
+MDQxMFoXDTIzMTIxNjA5MDQxMFowgbExCzAJBgNVBAYTAlRSMQ8wDQYDVQQHDAZBbmthcmExTTBL
+BgNVBAoMRFTDnFJLVFJVU1QgQmlsZ2kgxLBsZXRpxZ9pbSB2ZSBCaWxpxZ9pbSBHw7x2ZW5sacSf
+aSBIaXptZXRsZXJpIEEuxZ4uMUIwQAYDVQQDDDlUw5xSS1RSVVNUIEVsZWt0cm9uaWsgU2VydGlm
+aWthIEhpem1ldCBTYcSfbGF5xLFjxLFzxLEgSDYwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
+AoIBAQCdsGjW6L0UlqMACprx9MfMkU1xeHe59yEmFXNRFpQJRwXiM/VomjX/3EsvMsew7eKC5W/a
+2uqsxgbPJQ1BgfbBOCK9+bGlprMBvD9QFyv26WZV1DOzXPhDIHiTVRZwGTLmiddk671IUP320EED
+wnS3/faAz1vFq6TWlRKb55cTMgPp1KtDWxbtMyJkKbbSk60vbNg9tvYdDjTu0n2pVQ8g9P0pu5Fb
+HH3GQjhtQiht1AH7zYiXSX6484P4tZgvsycLSF5W506jM7NE1qXyGJTtHB6plVxiSvgNZ1GpryHV
++DKdeboaX+UEVU0TRv/yz3THGmNtwx8XEsMeED5gCLMxAgMBAAGjQjBAMB0GA1UdDgQWBBTdVRcT
+9qzoSCHK77Wv0QAy7Z6MtTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG
+9w0BAQsFAAOCAQEAb1gNl0OqFlQ+v6nfkkU/hQu7VtMMUszIv3ZnXuaqs6fvuay0EBQNdH49ba3R
+fdCaqaXKGDsCQC4qnFAUi/5XfldcEQlLNkVS9z2sFP1E34uXI9TDwe7UU5X+LEr+DXCqu4svLcsy
+o4LyVN/Y8t3XSHLuSqMplsNEzm61kod2pLv0kmzOLBQJZo6NrRa1xxsJYTvjIKIDgI6tflEATseW
+hvtDmHd9KMeP2Cpu54Rvl0EpABZeTeIT6lnAY2c6RPuY/ATTMHKm9ocJV612ph1jmv3XZch4gyt1
+O6VbuA1df74jrlZVlFjvH4GMKrLN5ptjnhi85WsGtAuYSyher4hYyw==
+-----END CERTIFICATE-----
+
+Certinomis - Root CA
+====================
+-----BEGIN CERTIFICATE-----
+MIIFkjCCA3qgAwIBAgIBATANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJGUjETMBEGA1UEChMK
+Q2VydGlub21pczEXMBUGA1UECxMOMDAwMiA0MzM5OTg5MDMxHTAbBgNVBAMTFENlcnRpbm9taXMg
+LSBSb290IENBMB4XDTEzMTAyMTA5MTcxOFoXDTMzMTAyMTA5MTcxOFowWjELMAkGA1UEBhMCRlIx
+EzARBgNVBAoTCkNlcnRpbm9taXMxFzAVBgNVBAsTDjAwMDIgNDMzOTk4OTAzMR0wGwYDVQQDExRD
+ZXJ0aW5vbWlzIC0gUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANTMCQos
+P5L2fxSeC5yaah1AMGT9qt8OHgZbn1CF6s2Nq0Nn3rD6foCWnoR4kkjW4znuzuRZWJflLieY6pOo
+d5tK8O90gC3rMB+12ceAnGInkYjwSond3IjmFPnVAy//ldu9n+ws+hQVWZUKxkd8aRi5pwP5ynap
+z8dvtF4F/u7BUrJ1Mofs7SlmO/NKFoL21prbcpjp3vDFTKWrteoB4owuZH9kb/2jJZOLyKIOSY00
+8B/sWEUuNKqEUL3nskoTuLAPrjhdsKkb5nPJWqHZZkCqqU2mNAKthH6yI8H7KsZn9DS2sJVqM09x
+RLWtwHkziOC/7aOgFLScCbAK42C++PhmiM1b8XcF4LVzbsF9Ri6OSyemzTUK/eVNfaoqoynHWmgE
+6OXWk6RiwsXm9E/G+Z8ajYJJGYrKWUM66A0ywfRMEwNvbqY/kXPLynNvEiCL7sCCeN5LLsJJwx3t
+FvYk9CcbXFcx3FXuqB5vbKziRcxXV4p1VxngtViZSTYxPDMBbRZKzbgqg4SGm/lg0h9tkQPTYKbV
+PZrdd5A9NaSfD171UkRpucC63M9933zZxKyGIjK8e2uR73r4F2iw4lNVYC2vPsKD2NkJK/DAZNuH
+i5HMkesE/Xa0lZrmFAYb1TQdvtj/dBxThZngWVJKYe2InmtJiUZ+IFrZ50rlau7SZRFDAgMBAAGj
+YzBhMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTvkUz1pcMw6C8I
+6tNxIqSSaHh02TAfBgNVHSMEGDAWgBTvkUz1pcMw6C8I6tNxIqSSaHh02TANBgkqhkiG9w0BAQsF
+AAOCAgEAfj1U2iJdGlg+O1QnurrMyOMaauo++RLrVl89UM7g6kgmJs95Vn6RHJk/0KGRHCwPT5iV
+WVO90CLYiF2cN/z7ZMF4jIuaYAnq1fohX9B0ZedQxb8uuQsLrbWwF6YSjNRieOpWauwK0kDDPAUw
+Pk2Ut59KA9N9J0u2/kTO+hkzGm2kQtHdzMjI1xZSg081lLMSVX3l4kLr5JyTCcBMWwerx20RoFAX
+lCOotQqSD7J6wWAsOMwaplv/8gzjqh8c3LigkyfeY+N/IZ865Z764BNqdeuWXGKRlI5nU7aJ+BIJ
+y29SWwNyhlCVCNSNh4YVH5Uk2KRvms6knZtt0rJ2BobGVgjF6wnaNsIbW0G+YSrjcOa4pvi2WsS9
+Iff/ql+hbHY5ZtbqTFXhADObE5hjyW/QASAJN1LnDE8+zbz1X5YnpyACleAu6AdBBR8Vbtaw5Bng
+DwKTACdyxYvRVB9dSsNAl35VpnzBMwQUAR1JIGkLGZOdblgi90AMRgwjY/M50n92Uaf0yKHxDHYi
+I0ZSKS3io0EHVmmY0gUJvGnHWmHNj4FgFU2A3ZDifcRQ8ow7bkrHxuaAKzyBvBGAFhAn1/DNP3nM
+cyrDflOR1m749fPH0FFNjkulW+YZFzvWgQncItzujrnEj1PhZ7szuIgVRs/taTX/dQ1G885x4cVr
+hkIGuUE=
+-----END CERTIFICATE-----
+
+OISTE WISeKey Global Root GB CA
+===============================
+-----BEGIN CERTIFICATE-----
+MIIDtTCCAp2gAwIBAgIQdrEgUnTwhYdGs/gjGvbCwDANBgkqhkiG9w0BAQsFADBtMQswCQYDVQQG
+EwJDSDEQMA4GA1UEChMHV0lTZUtleTEiMCAGA1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNl
+ZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwgUm9vdCBHQiBDQTAeFw0xNDEyMDExNTAw
+MzJaFw0zOTEyMDExNTEwMzFaMG0xCzAJBgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYD
+VQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEds
+b2JhbCBSb290IEdCIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2Be3HEokKtaX
+scriHvt9OO+Y9bI5mE4nuBFde9IllIiCFSZqGzG7qFshISvYD06fWvGxWuR51jIjK+FTzJlFXHtP
+rby/h0oLS5daqPZI7H17Dc0hBt+eFf1Biki3IPShehtX1F1Q/7pn2COZH8g/497/b1t3sWtuuMlk
+9+HKQUYOKXHQuSP8yYFfTvdv37+ErXNku7dCjmn21HYdfp2nuFeKUWdy19SouJVUQHMD9ur06/4o
+Qnc/nSMbsrY9gBQHTC5P99UKFg29ZkM3fiNDecNAhvVMKdqOmq0NpQSHiB6F4+lT1ZvIiwNjeOvg
+GUpuuy9rM2RYk61pv48b74JIxwIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB
+/zAdBgNVHQ4EFgQUNQ/INmNe4qPs+TtmFc5RUuORmj0wEAYJKwYBBAGCNxUBBAMCAQAwDQYJKoZI
+hvcNAQELBQADggEBAEBM+4eymYGQfp3FsLAmzYh7KzKNbrghcViXfa43FK8+5/ea4n32cZiZBKpD
+dHij40lhPnOMTZTg+XHEthYOU3gf1qKHLwI5gSk8rxWYITD+KJAAjNHhy/peyP34EEY7onhCkRd0
+VQreUGdNZtGn//3ZwLWoo4rOZvUPQ82nK1d7Y0Zqqi5S2PTt4W2tKZB4SLrhI6qjiey1q5bAtEui
+HZeeevJuQHHfaPFlTc58Bd9TZaml8LGXBHAVRgOY1NK/VLSgWH1Sb9pWJmLU2NuJMW8c8CLC02Ic
+Nc1MaRVUGpCY3useX8p3x8uOPUNpnJpY0CQ73xtAln41rYHHTnG6iBM=
+-----END CERTIFICATE-----
+
+Certification Authority of WoSign G2
+====================================
+-----BEGIN CERTIFICATE-----
+MIIDfDCCAmSgAwIBAgIQayXaioidfLwPBbOxemFFRDANBgkqhkiG9w0BAQsFADBYMQswCQYDVQQG
+EwJDTjEaMBgGA1UEChMRV29TaWduIENBIExpbWl0ZWQxLTArBgNVBAMTJENlcnRpZmljYXRpb24g
+QXV0aG9yaXR5IG9mIFdvU2lnbiBHMjAeFw0xNDExMDgwMDU4NThaFw00NDExMDgwMDU4NThaMFgx
+CzAJBgNVBAYTAkNOMRowGAYDVQQKExFXb1NpZ24gQ0EgTGltaXRlZDEtMCsGA1UEAxMkQ2VydGlm
+aWNhdGlvbiBBdXRob3JpdHkgb2YgV29TaWduIEcyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
+CgKCAQEAvsXEoCKASU+/2YcRxlPhuw+9YH+v9oIOH9ywjj2X4FA8jzrvZjtFB5sg+OPXJYY1kBai
+XW8wGQiHC38Gsp1ij96vkqVg1CuAmlI/9ZqD6TRay9nVYlzmDuDfBpgOgHzKtB0TiGsOqCR3A9Du
+W/PKaZE1OVbFbeP3PU9ekzgkyhjpJMuSA93MHD0JcOQg5PGurLtzaaNjOg9FD6FKmsLRY6zLEPg9
+5k4ot+vElbGs/V6r+kHLXZ1L3PR8du9nfwB6jdKgGlxNIuG12t12s9R23164i5jIFFTMaxeSt+BK
+v0mUYQs4kI9dJGwlezt52eJ+na2fmKEG/HgUYFf47oB3sQIDAQABo0IwQDAOBgNVHQ8BAf8EBAMC
+AQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU+mCp62XF3RYUCE4MD42b4Pdkr2cwDQYJKoZI
+hvcNAQELBQADggEBAFfDejaCnI2Y4qtAqkePx6db7XznPWZaOzG73/MWM5H8fHulwqZm46qwtyeY
+P0nXYGdnPzZPSsvxFPpahygc7Y9BMsaV+X3avXtbwrAh449G3CE4Q3RM+zD4F3LBMvzIkRfEzFg3
+TgvMWvchNSiDbGAtROtSjFA9tWwS1/oJu2yySrHFieT801LYYRf+epSEj3m2M1m6D8QL4nCgS3gu
++sif/a+RZQp4OBXllxcU3fngLDT4ONCEIgDAFFEYKwLcMFrw6AF8NTojrwjkr6qOKEJJLvD1mTS+
+7Q9LGOHSJDy7XUe3IfKN0QqZjuNuPq1w4I+5ysxugTH2e5x6eeRncRg=
+-----END CERTIFICATE-----
+
+CA WoSign ECC Root
+==================
+-----BEGIN CERTIFICATE-----
+MIICCTCCAY+gAwIBAgIQaEpYcIBr8I8C+vbe6LCQkDAKBggqhkjOPQQDAzBGMQswCQYDVQQGEwJD
+TjEaMBgGA1UEChMRV29TaWduIENBIExpbWl0ZWQxGzAZBgNVBAMTEkNBIFdvU2lnbiBFQ0MgUm9v
+dDAeFw0xNDExMDgwMDU4NThaFw00NDExMDgwMDU4NThaMEYxCzAJBgNVBAYTAkNOMRowGAYDVQQK
+ExFXb1NpZ24gQ0EgTGltaXRlZDEbMBkGA1UEAxMSQ0EgV29TaWduIEVDQyBSb290MHYwEAYHKoZI
+zj0CAQYFK4EEACIDYgAE4f2OuEMkq5Z7hcK6C62N4DrjJLnSsb6IOsq/Srj57ywvr1FQPEd1bPiU
+t5v8KB7FVMxjnRZLU8HnIKvNrCXSf4/CwVqCXjCLelTOA7WRf6qU0NGKSMyCBSah1VES1ns2o0Iw
+QDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUqv3VWqP2h4syhf3R
+MluARZPzA7gwCgYIKoZIzj0EAwMDaAAwZQIxAOSkhLCB1T2wdKyUpOgOPQB0TKGXa/kNUTyh2Tv0
+Daupn75OcsqF1NnstTJFGG+rrQIwfcf3aWMvoeGY7xMQ0Xk/0f7qO3/eVvSQsRUR2LIiFdAvwyYu
+a/GRspBl9JrmkO5K
+-----END CERTIFICATE-----
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/excon.gemspec new/excon.gemspec
--- old/excon.gemspec   2015-07-13 17:17:57.000000000 +0200
+++ new/excon.gemspec   2016-02-29 17:40:18.000000000 +0100
@@ -13,8 +13,8 @@
   ## If your rubyforge_project name is different, then edit it and comment out
   ## the sub! line in the Rakefile
   s.name              = 'excon'
-  s.version           = '0.45.4'
-  s.date              = '2015-07-13'
+  s.version           = '0.47.0'
+  s.date              = '2016-02-29'
   s.rubyforge_project = 'excon'
 
   ## Make sure your summary is short. The description may be as long
@@ -62,6 +62,7 @@
   s.add_development_dependency('rdoc')
   s.add_development_dependency('shindo')
   s.add_development_dependency('sinatra')
+  s.add_development_dependency('sinatra-contrib')
   s.add_development_dependency('json', '>= 1.8.2')
 
   ## Leave this section as-is. It will be automatically generated from the
@@ -104,6 +105,7 @@
     lib/excon/extensions/uri.rb
     lib/excon/headers.rb
     lib/excon/middlewares/base.rb
+    lib/excon/middlewares/capture_cookies.rb
     lib/excon/middlewares/decompress.rb
     lib/excon/middlewares/escape_path.rb
     lib/excon/middlewares/expects.rb
@@ -131,6 +133,7 @@
     tests/errors_tests.rb
     tests/header_tests.rb
     tests/middlewares/canned_response_tests.rb
+    tests/middlewares/capture_cookies_tests.rb
     tests/middlewares/decompress_tests.rb
     tests/middlewares/escape_path_tests.rb
     tests/middlewares/idempotent_tests.rb
@@ -147,6 +150,7 @@
     tests/rackups/proxy.ru
     tests/rackups/query_string.ru
     tests/rackups/redirecting.ru
+    tests/rackups/redirecting_with_cookie.ru
     tests/rackups/request_headers.ru
     tests/rackups/request_methods.ru
     tests/rackups/response_header.ru
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/excon/connection.rb new/lib/excon/connection.rb
--- old/lib/excon/connection.rb 2015-07-13 17:17:57.000000000 +0200
+++ new/lib/excon/connection.rb 2016-02-29 17:40:18.000000000 +0100
@@ -207,7 +207,7 @@
       datum[:headers] = @data[:headers].merge(datum[:headers] || {})
 
       if datum[:scheme] == UNIX
-        datum[:headers]['Host']   ||= '' << datum[:socket]
+        datum[:headers]['Host']   = ''
       else
         datum[:headers]['Host']   ||= '' << datum[:host] << port_string(datum)
       end
@@ -383,7 +383,7 @@
       unix_proxy = @data[:proxy] ? @data[:proxy][:scheme] == UNIX : false
       sockets[@socket_key] ||= if @data[:scheme] == UNIX || unix_proxy
         Excon::UnixSocket.new(@data)
-      elsif @data[:scheme] == HTTPS
+      elsif @data[:ssl_uri_schemes].include?(@data[:scheme])
         Excon::SSLSocket.new(@data)
       else
         Excon::Socket.new(@data)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/excon/constants.rb new/lib/excon/constants.rb
--- old/lib/excon/constants.rb  2015-07-13 17:17:57.000000000 +0200
+++ new/lib/excon/constants.rb  2016-02-29 17:40:18.000000000 +0100
@@ -1,6 +1,6 @@
 module Excon
 
-  VERSION = '0.45.4'
+  VERSION = '0.47.0'
 
   CR_NL = "\r\n"
 
@@ -132,6 +132,7 @@
     :read_timeout         => 60,
     :retry_limit          => DEFAULT_RETRY_LIMIT,
     :ssl_verify_peer      => true,
+    :ssl_uri_schemes      => [HTTPS],
     :tcp_nodelay          => false,
     :thread_safe_sockets  => true,
     :uri_parser           => URI,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/excon/errors.rb new/lib/excon/errors.rb
--- old/lib/excon/errors.rb     2015-07-13 17:17:57.000000000 +0200
+++ new/lib/excon/errors.rb     2016-02-29 17:40:18.000000000 +0100
@@ -8,7 +8,7 @@
     class SocketError < Error
       attr_reader :socket_error
 
-      def initialize(socket_error=Excon::Error.new)
+      def initialize(socket_error=Excon::Errors::Error.new)
         if socket_error.message =~ /certificate verify failed/
           super("Unable to verify certificate, please set 
`Excon.defaults[:ssl_ca_path] = path_to_certs`, `ENV['SSL_CERT_DIR'] = 
path_to_certs`, `Excon.defaults[:ssl_ca_file] = path_to_file`, 
`ENV['SSL_CERT_FILE'] = path_to_file`, `Excon.defaults[:ssl_verify_callback] = 
callback` (see OpenSSL::SSL::SSLContext#verify_callback), or 
`Excon.defaults[:ssl_verify_peer] = false` (less secure).")
         else
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/excon/middlewares/capture_cookies.rb 
new/lib/excon/middlewares/capture_cookies.rb
--- old/lib/excon/middlewares/capture_cookies.rb        1970-01-01 
01:00:00.000000000 +0100
+++ new/lib/excon/middlewares/capture_cookies.rb        2016-02-29 
17:40:18.000000000 +0100
@@ -0,0 +1,31 @@
+module Excon
+  module Middleware
+    class CaptureCookies < Excon::Middleware::Base
+
+      def extract_cookies_from_set_cookie(set_cookie)
+        set_cookie.split(',').map { |full| full.split(';').first.strip 
}.join('; ')
+      end
+
+      def get_header(datum, header)
+        _, header_value = datum[:response][:headers].detect do |key, value|
+          key.casecmp(header) == 0
+        end
+        header_value
+      end
+
+      def response_call(datum)
+        cookie = get_header(datum, 'Set-Cookie')
+        if cookie
+          cookie = extract_cookies_from_set_cookie(cookie)
+          unless datum[:headers].key?("Cookie")
+            datum[:headers]["Cookie"] = cookie
+          else
+            original_cookies = datum[:headers]["Cookie"]
+            datum[:headers]["Cookie"] = original_cookies.empty? ? cookie : 
[original_cookies,cookie].join('; ')
+          end
+        end
+        super(datum)
+      end
+    end
+  end
+end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/excon/middlewares/decompress.rb 
new/lib/excon/middlewares/decompress.rb
--- old/lib/excon/middlewares/decompress.rb     2015-07-13 17:17:57.000000000 
+0200
+++ new/lib/excon/middlewares/decompress.rb     2016-02-29 17:40:18.000000000 
+0100
@@ -12,16 +12,17 @@
       end
 
       def response_call(datum)
-        unless datum.has_key?(:response_block)
+        body = datum[:response][:body]
+        unless datum.has_key?(:response_block) || body.nil? || body.empty?
           if key = datum[:response][:headers].keys.detect {|k| 
k.casecmp('Content-Encoding') == 0 }
             encodings = 
Utils.split_header_value(datum[:response][:headers][key])
             if encoding = encodings.last
               if encoding.casecmp('deflate') == 0
                 # assume inflate omits header
-                datum[:response][:body] = 
Zlib::Inflate.new(-Zlib::MAX_WBITS).inflate(datum[:response][:body])
+                datum[:response][:body] = 
Zlib::Inflate.new(-Zlib::MAX_WBITS).inflate(body)
                 encodings.pop
               elsif encoding.casecmp('gzip') == 0 || 
encoding.casecmp('x-gzip') == 0
-                datum[:response][:body] = 
Zlib::GzipReader.new(StringIO.new(datum[:response][:body])).read
+                datum[:response][:body] = 
Zlib::GzipReader.new(StringIO.new(body)).read
                 encodings.pop
               end
               datum[:response][:headers][key] = encodings.join(', ')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/excon/middlewares/instrumentor.rb 
new/lib/excon/middlewares/instrumentor.rb
--- old/lib/excon/middlewares/instrumentor.rb   2015-07-13 17:17:57.000000000 
+0200
+++ new/lib/excon/middlewares/instrumentor.rb   2016-02-29 17:40:18.000000000 
+0100
@@ -3,9 +3,12 @@
     class Instrumentor < Excon::Middleware::Base
       def error_call(datum)
         if datum.has_key?(:instrumentor)
-          
datum[:instrumentor].instrument("#{datum[:instrumentor_name]}.error", :error => 
datum[:error])
+          
datum[:instrumentor].instrument("#{datum[:instrumentor_name]}.error", :error => 
datum[:error]) do
+            @stack.error_call(datum)
+          end
+        else
+          @stack.error_call(datum)
         end
-        @stack.error_call(datum)
       end
 
       def request_call(datum)
@@ -25,9 +28,12 @@
 
       def response_call(datum)
         if datum.has_key?(:instrumentor)
-          
datum[:instrumentor].instrument("#{datum[:instrumentor_name]}.response", 
datum[:response])
+          
datum[:instrumentor].instrument("#{datum[:instrumentor_name]}.response", 
datum[:response]) do
+            @stack.response_call(datum)
+          end
+        else
+          @stack.response_call(datum)
         end
-        @stack.response_call(datum)
       end
     end
   end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/excon/middlewares/redirect_follower.rb 
new/lib/excon/middlewares/redirect_follower.rb
--- old/lib/excon/middlewares/redirect_follower.rb      2015-07-13 
17:17:57.000000000 +0200
+++ new/lib/excon/middlewares/redirect_follower.rb      2016-02-29 
17:40:18.000000000 +0100
@@ -1,14 +1,21 @@
 module Excon
   module Middleware
     class RedirectFollower < Excon::Middleware::Base
+
+      def get_header(datum, header)
+        _, header_value = datum[:response][:headers].detect do |key, value|
+          key.casecmp(header) == 0
+        end
+        header_value
+      end
+
       def response_call(datum)
         if datum.has_key?(:response)
           case datum[:response][:status]
           when 301, 302, 303, 307, 308
             uri_parser = datum[:uri_parser] || Excon.defaults[:uri_parser]
-            _, location = datum[:response][:headers].detect do |key, value|
-              key.casecmp('Location') == 0
-            end
+
+            location = get_header(datum, 'Location')
             uri = uri_parser.parse(location)
 
             # delete old/redirect response
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/excon/response.rb new/lib/excon/response.rb
--- old/lib/excon/response.rb   2015-07-13 17:17:57.000000000 +0200
+++ new/lib/excon/response.rb   2016-02-29 17:40:18.000000000 +0100
@@ -16,17 +16,20 @@
     def headers
       @data[:headers]
     end
-    def status=(new_status)
-      @data[:status] = new_status
+    def host
+      @data[:host]
     end
-    def status
-      @data[:status]
+    def local_address
+      @data[:local_address]
     end
-    def status_line
-      @data[:status_line]
+    def local_port
+      @data[:local_port]
     end
-    def status_line=(new_status_line)
-      @data[:status_line] = new_status_line
+    def path
+      @data[:path]
+    end
+    def port
+      @data[:port]
     end
     def reason_phrase=(new_reason_phrase)
       @data[:reason_phrase] = new_reason_phrase
@@ -40,11 +43,17 @@
     def remote_ip
       @data[:remote_ip]
     end
-    def local_port
-      @data[:local_port]
+    def status=(new_status)
+      @data[:status] = new_status
     end
-    def local_address
-      @data[:local_address]
+    def status
+      @data[:status]
+    end
+    def status_line
+      @data[:status_line]
+    end
+    def status_line=(new_status_line)
+      @data[:status_line] = new_status_line
     end
 
     def self.parse(socket, datum)
@@ -57,7 +66,10 @@
 
       datum[:response] = {
         :body          => '',
+        :host          => datum[:host],
         :headers       => Excon::Headers.new,
+        :path          => datum[:path],
+        :port          => datum[:port],
         :status        => status,
         :status_line   => line,
         :reason_phrase => reason_phrase
@@ -100,25 +112,27 @@
           if response_block
             while (chunk_size = socket.readline.chomp!.to_i(16)) > 0
               while chunk_size > 0
-                chunk = socket.read(chunk_size)
+                chunk = socket.read(chunk_size) || raise(EOFError)
                 chunk_size -= chunk.bytesize
                 response_block.call(chunk, nil, nil)
               end
               new_line_size = 2 # 2 == "\r\n".length
               while new_line_size > 0
-                new_line_size -= socket.read(new_line_size).length
+                chunk = socket.read(new_line_size) || raise(EOFError)
+                new_line_size -= chunk.length
               end
             end
           else
             while (chunk_size = socket.readline.chomp!.to_i(16)) > 0
               while chunk_size > 0
-                chunk = socket.read(chunk_size)
+                chunk = socket.read(chunk_size) || raise(EOFError)
                 chunk_size -= chunk.bytesize
                 datum[:response][:body] << chunk
               end
               new_line_size = 2 # 2 == "\r\n".length
               while new_line_size > 0
-                new_line_size -= socket.read(new_line_size).length
+                chunk = socket.read(new_line_size) || raise(EOFError)
+                new_line_size -= chunk.length
               end
             end
           end
@@ -131,13 +145,13 @@
           if remaining = content_length
             if response_block
               while remaining > 0
-                chunk = socket.read([datum[:chunk_size], remaining].min)
+                chunk = socket.read([datum[:chunk_size], remaining].min) || 
raise(EOFError)
                 response_block.call(chunk, [remaining - chunk.bytesize, 
0].max, content_length)
                 remaining -= chunk.bytesize
               end
             else
               while remaining > 0
-                chunk = socket.read([datum[:chunk_size], remaining].min)
+                chunk = socket.read([datum[:chunk_size], remaining].min) || 
raise(EOFError)
                 datum[:response][:body] << chunk
                 remaining -= chunk.bytesize
               end
@@ -160,7 +174,7 @@
 
     def self.parse_headers(socket, datum)
       last_key = nil
-      until (data = socket.readline.chomp!).empty?
+      until (data = socket.readline.chomp).empty?
         if !data.lstrip!.nil?
           raise Excon::Errors::ResponseParseError, 'malformed header' unless 
last_key
           # append to last_key's last value
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/excon/utils.rb new/lib/excon/utils.rb
--- old/lib/excon/utils.rb      2015-07-13 17:17:57.000000000 +0200
+++ new/lib/excon/utils.rb      2016-02-29 17:40:18.000000000 +0100
@@ -40,11 +40,12 @@
       when Hash
         str << '?'
         datum[:query].sort_by {|k,_| k.to_s }.each do |key, values|
+          key = CGI.escape(key.to_s)
           if values.nil?
-            str << key.to_s << '&'
+            str << key << '&'
           else
             [values].flatten.each do |value|
-              str << key.to_s << '=' << CGI.escape(value.to_s) << '&'
+              str << key << '=' << CGI.escape(value.to_s) << '&'
             end
           end
         end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/excon.rb new/lib/excon.rb
--- old/lib/excon.rb    2015-07-13 17:17:57.000000000 +0200
+++ new/lib/excon.rb    2016-02-29 17:40:18.000000000 +0100
@@ -30,6 +30,7 @@
 require 'excon/middlewares/decompress'
 require 'excon/middlewares/escape_path'
 require 'excon/middlewares/redirect_follower'
+require 'excon/middlewares/capture_cookies'
 require 'excon/pretty_printer'
 require 'excon/socket'
 require 'excon/ssl_socket'
@@ -209,9 +210,9 @@
       nil
     end
 
-    # get a list of defined stubs
+    # get a list of defined stubs for the current thread
     def stubs
-      @stubs ||= []
+      Thread.current[:_excon_stubs] ||= []
     end
 
     # remove first/oldest stub matching request_params
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/metadata new/metadata
--- old/metadata        2015-07-13 17:17:57.000000000 +0200
+++ new/metadata        2016-02-29 17:40:18.000000000 +0100
@@ -1,7 +1,7 @@
 --- !ruby/object:Gem::Specification
 name: excon
 version: !ruby/object:Gem::Version
-  version: 0.45.4
+  version: 0.47.0
 platform: ruby
 authors:
 - dpiddy (Dan Peterson)
@@ -10,7 +10,7 @@
 autorequire: 
 bindir: bin
 cert_chain: []
-date: 2015-07-13 00:00:00.000000000 Z
+date: 2016-02-29 00:00:00.000000000 Z
 dependencies:
 - !ruby/object:Gem::Dependency
   name: activesupport
@@ -125,6 +125,20 @@
       - !ruby/object:Gem::Version
         version: '0'
 - !ruby/object:Gem::Dependency
+  name: sinatra-contrib
+  requirement: !ruby/object:Gem::Requirement
+    requirements:
+    - - ">="
+      - !ruby/object:Gem::Version
+        version: '0'
+  type: :development
+  prerelease: false
+  version_requirements: !ruby/object:Gem::Requirement
+    requirements:
+    - - ">="
+      - !ruby/object:Gem::Version
+        version: '0'
+- !ruby/object:Gem::Dependency
   name: json
   requirement: !ruby/object:Gem::Requirement
     requirements:
@@ -180,6 +194,7 @@
 - lib/excon/extensions/uri.rb
 - lib/excon/headers.rb
 - lib/excon/middlewares/base.rb
+- lib/excon/middlewares/capture_cookies.rb
 - lib/excon/middlewares/decompress.rb
 - lib/excon/middlewares/escape_path.rb
 - lib/excon/middlewares/expects.rb
@@ -207,6 +222,7 @@
 - tests/errors_tests.rb
 - tests/header_tests.rb
 - tests/middlewares/canned_response_tests.rb
+- tests/middlewares/capture_cookies_tests.rb
 - tests/middlewares/decompress_tests.rb
 - tests/middlewares/escape_path_tests.rb
 - tests/middlewares/idempotent_tests.rb
@@ -223,6 +239,7 @@
 - tests/rackups/proxy.ru
 - tests/rackups/query_string.ru
 - tests/rackups/redirecting.ru
+- tests/rackups/redirecting_with_cookie.ru
 - tests/rackups/request_headers.ru
 - tests/rackups/request_methods.ru
 - tests/rackups/response_header.ru
@@ -266,7 +283,7 @@
       version: '0'
 requirements: []
 rubyforge_project: excon
-rubygems_version: 2.2.2
+rubygems_version: 2.5.1
 signing_key: 
 specification_version: 2
 summary: speed, persistence, http(s)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tests/basic_tests.rb new/tests/basic_tests.rb
--- old/tests/basic_tests.rb    2015-07-13 17:17:57.000000000 +0200
+++ new/tests/basic_tests.rb    2016-02-29 17:40:18.000000000 +0100
@@ -1,3 +1,5 @@
+require 'json'
+
 Shindo.tests('Excon basics') do
   with_rackup('basic.ru') do
     basic_tests
@@ -246,6 +248,19 @@
         response[:status]
       end
     end
+
+    tests('http Host header is empty') do
+      tests('GET /headers').returns("") do
+        connection = Excon::Connection.new({
+          :socket           => file_name,
+          :nonblock         => false,
+          :scheme           => 'unix',
+          :ssl_verify_peer  => false
+        })
+        response = connection.request(:method => :get, :path => '/headers')
+        JSON.parse(response.body)['HTTP_HOST']
+      end
+    end
   end
 end
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tests/middlewares/capture_cookies_tests.rb 
new/tests/middlewares/capture_cookies_tests.rb
--- old/tests/middlewares/capture_cookies_tests.rb      1970-01-01 
01:00:00.000000000 +0100
+++ new/tests/middlewares/capture_cookies_tests.rb      2016-02-29 
17:40:18.000000000 +0100
@@ -0,0 +1,34 @@
+Shindo.tests("Excon redirecting with cookie preserved") do
+  env_init
+
+  with_rackup('redirecting_with_cookie.ru') do
+    tests('second request will send cookies set by the first').returns('ok') do
+      Excon.get(
+        'http://127.0.0.1:9292',
+        :path         => '/sets_cookie',
+        :middlewares  => Excon.defaults[:middlewares] + 
[Excon::Middleware::CaptureCookies, Excon::Middleware::RedirectFollower]
+      ).body
+    end
+
+    tests('second request will send multiple cookies set by the 
first').returns('ok') do
+      Excon.get(
+        'http://127.0.0.1:9292',
+        :path         => '/sets_multi_cookie',
+        :middlewares  => Excon.defaults[:middlewares] + 
[Excon::Middleware::CaptureCookies, Excon::Middleware::RedirectFollower]
+      ).body
+    end
+  end
+
+  with_rackup('redirecting.ru') do
+    tests("runs normally when there are no cookies set").returns('ok') do
+      Excon.post(
+        'http://127.0.0.1:9292',
+        :path         => '/first',
+        :middlewares  => Excon.defaults[:middlewares] + 
[Excon::Middleware::CaptureCookies, Excon::Middleware::RedirectFollower],
+        :body => "a=Some_content"
+      ).body
+    end
+  end
+
+  env_restore
+end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tests/middlewares/decompress_tests.rb 
new/tests/middlewares/decompress_tests.rb
--- old/tests/middlewares/decompress_tests.rb   2015-07-13 17:17:57.000000000 
+0200
+++ new/tests/middlewares/decompress_tests.rb   2016-02-29 17:40:18.000000000 
+0100
@@ -29,6 +29,11 @@
       tests('removes processed encoding from header').returns('') do
         resp[:headers]['Content-Encoding']
       end
+
+      tests('empty response body').returns('') do
+        resp = @connection.request(:body => '')
+        resp[:body]
+      end
     end
 
     tests('deflate') do
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tests/middlewares/instrumentation_tests.rb 
new/tests/middlewares/instrumentation_tests.rb
--- old/tests/middlewares/instrumentation_tests.rb      2015-07-13 
17:17:57.000000000 +0200
+++ new/tests/middlewares/instrumentation_tests.rb      2016-02-29 
17:40:18.000000000 +0100
@@ -3,13 +3,19 @@
 
 class SimpleInstrumentor
   class << self
-    attr_accessor :events
+    attr_accessor :events, :blocks
 
     def instrument(name, params = {}, &block)
-      @events ||= []
       @events << name
+      @blocks << name if block_given?
+
       yield if block_given?
     end
+
+    def reset!
+      @events = []
+      @blocks = []
+    end
   end
 end
 
@@ -26,6 +32,10 @@
     Excon.stubs.clear
   end
 
+  before do
+    SimpleInstrumentor.reset!
+  end
+
   def subscribe(match)
     @events = []
     ActiveSupport::Notifications.subscribe(match) do |*args|
@@ -238,6 +248,19 @@
     SimpleInstrumentor.events
   end
 
+  tests('always passes the block').returns(
+      ['excon.request', 'excon.response']) do
+    stub_success
+    connection = Excon.new(
+      'http://127.0.0.1:9292',
+      :instrumentor => SimpleInstrumentor,
+      :mock         => true
+    )
+    connection.get(:idempotent => true)
+
+    SimpleInstrumentor.blocks
+  end
+
   tests('does not generate events when not provided').returns(0) do
     subscribe(/excon/)
     stub_success
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tests/middlewares/mock_tests.rb 
new/tests/middlewares/mock_tests.rb
--- old/tests/middlewares/mock_tests.rb 2015-07-13 17:17:57.000000000 +0200
+++ new/tests/middlewares/mock_tests.rb 2016-02-29 17:40:18.000000000 +0100
@@ -252,5 +252,26 @@
     Excon.stubs.clear
   end
 
+  tests("thread-local stubs") do
+    q1, q2 = Queue.new, Queue.new
+    connection = Excon.new('http://127.0.0.1:9292', :mock => true)
+    Excon.stub({}, {:body => '1'})
+    t = Thread.new do
+      Excon.stub({}, {:body => '2'})
+      q1.push nil
+      q2.pop
+      connection.request(:method => :get).body
+    end
+    q1.pop
+    tests("get on a different thread").returns('1') do
+      connection.request(:method => :get).body
+    end
+    q2.push nil
+    tests("get on a different thread").returns('2') do
+      t.join.value
+    end
+    Excon.stubs.clear
+  end
+
   env_restore
 end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tests/query_string_tests.rb 
new/tests/query_string_tests.rb
--- old/tests/query_string_tests.rb     2015-07-13 17:17:58.000000000 +0200
+++ new/tests/query_string_tests.rb     2016-02-29 17:40:18.000000000 +0100
@@ -52,12 +52,12 @@
       response = connection.request(:method => :get, :path => '/query', :query 
=> {'foo[]' => ['bar', 'baz'], :me => 'too'})
       query_string = response.body[7..-1] # query string sent
 
-      test("query string sent includes 'foo[]=bar'") do
-        query_string.split('&').include?('foo[]=bar')
+      test("query string sent includes 'foo%5B%5D=bar'") do
+        query_string.split('&').include?('foo%5B%5D=bar')
       end
 
-      test("query string sent includes 'foo[]=baz'") do
-        query_string.split('&').include?('foo[]=baz')
+      test("query string sent includes 'foo%5B%5D=baz'") do
+        query_string.split('&').include?('foo%5B%5D=baz')
       end
 
       test("query string sent includes 'me=too'") do
@@ -65,5 +65,23 @@
       end
     end
 
+    tests(":query => {'foo%=#' => 'bar%=#'}") do
+      response = connection.request(:method => :get, :path => '/query', :query 
=> {'foo%=#' => 'bar%=#'})
+      query_string = response.body[7..-1] # query string sent
+
+      tests("query string sent").returns('foo%25%3D%23=bar%25%3D%23') do
+        query_string
+      end
+    end
+
+    tests(":query => {'foo%=#' => nil}") do
+      response = connection.request(:method => :get, :path => '/query', :query 
=> {'foo%=#' => nil})
+      query_string = response.body[7..-1] # query string sent
+
+      tests("query string sent").returns('foo%25%3D%23') do
+        query_string
+      end
+    end
+
   end
 end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tests/rackups/basic.rb new/tests/rackups/basic.rb
--- old/tests/rackups/basic.rb  2015-07-13 17:17:58.000000000 +0200
+++ new/tests/rackups/basic.rb  2016-02-29 17:40:18.000000000 +0100
@@ -1,4 +1,5 @@
 require 'sinatra'
+require 'json'
 require File.join(File.dirname(__FILE__), 'webrick_patch')
 
 class Basic < Sinatra::Base
@@ -10,6 +11,11 @@
     'x' * value.to_i
   end
 
+  get('/headers') do
+    content_type :json
+    request.env.select{|key, _| key.start_with? 'HTTP_'}.to_json
+  end
+
   post('/body-sink') do
     request.body.read.size.to_s
   end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tests/rackups/redirecting_with_cookie.ru 
new/tests/rackups/redirecting_with_cookie.ru
--- old/tests/rackups/redirecting_with_cookie.ru        1970-01-01 
01:00:00.000000000 +0100
+++ new/tests/rackups/redirecting_with_cookie.ru        2016-02-29 
17:40:18.000000000 +0100
@@ -0,0 +1,40 @@
+require 'sinatra'
+require 'sinatra/cookies'
+require 'json'
+require File.join(File.dirname(__FILE__), 'webrick_patch')
+
+class App < Sinatra::Base
+  helpers Sinatra::Cookies
+  set :environment, :production
+  enable :dump_errors
+
+  get('/sets_cookie') do
+    cookies[:chocolatechip] = "chunky"
+    redirect "/requires_cookie"
+  end
+
+  get('/requires_cookie') do
+    cookie = cookies[:chocolatechip]
+    unless cookie.nil? || cookie != "chunky"
+      "ok"
+    else
+      JSON.pretty_generate(headers)
+    end
+  end
+  
+  get('/sets_multi_cookie') do
+    cookies[:chocolatechip] = "chunky"
+    cookies[:thinmints] = "minty"
+    redirect "/requires_cookie"
+  end
+
+  get('/requires_cookie') do
+    if cookies[:chocolatechip] == "chunky" && cookies[:thinmints] == "minty" 
+      "ok"
+    else
+      JSON.pretty_generate(headers)
+    end
+  end
+end
+
+run App
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tests/servers/good.rb new/tests/servers/good.rb
--- old/tests/servers/good.rb   2015-07-13 17:17:58.000000000 +0200
+++ new/tests/servers/good.rb   2016-02-29 17:40:18.000000000 +0100
@@ -55,9 +55,14 @@
 
         case encoding
         when 'gzip'
-          io = (Zlib::GzipWriter.new(StringIO.new) << request[:body]).finish
-          io.rewind
-          body = io.read
+          body = request[:body]
+          if(body.nil? || body.empty?)
+            body = ''
+          else
+            io = (Zlib::GzipWriter.new(StringIO.new) << request[:body]).finish
+            io.rewind
+            body = io.read
+          end
         when 'deflate'
           # drops the zlib header
           deflator = Zlib::Deflate.new(nil, -Zlib::MAX_WBITS)


Reply via email to