Fix for some buggy curl versions.
authorJanusz Dobrowolski <janusz@frontaccounting.eu>
Thu, 12 Feb 2009 17:42:24 +0000 (17:42 +0000)
committerJanusz Dobrowolski <janusz@frontaccounting.eu>
Thu, 12 Feb 2009 17:42:24 +0000 (17:42 +0000)
gl/includes/db/gl_db_rates.inc
gl/manage/exchange_rates.php

index ab1848346efdb2f26090525fc98dfa01229df52b..1355e1b72c705a6930f9cc9d68212b7c7a61bae7 100644 (file)
@@ -74,20 +74,28 @@ function delete_exchange_rate($rate_id)
 function get_ecb_rate($curr_b) 
 {
        $curr_a = get_company_pref('curr_default');
-       $ecb_filename = 'http://www.ecb.int/stats/eurofxref/eurofxref-daily.xml';
+       $ecb_filename = '/stats/eurofxref/eurofxref-daily.xml';
+       $ecb_site = 'www.ecb.int';
        $contents = '';
 
        if (function_exists('curl_init'))
        {       // first check with curl as we can set short timeout;
-       $ch = curl_init();
-       curl_setopt ($ch, CURLOPT_URL, $ecb_filename);
-       curl_setopt ($ch, CURLOPT_COOKIEJAR, "cookie.txt");
-       curl_setopt ($ch, CURLOPT_HEADER, 0);
-       curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
-       curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1);
-       curl_setopt ($ch, CURLOPT_TIMEOUT, 5);
-       $contents = curl_exec ($ch);
-       curl_close($ch);
+               $retry = 1;
+               do {
+              $ch = curl_init();
+          curl_setopt ($ch, CURLOPT_URL, 'http://'.$ecb_site.$ecb_filename);
+              curl_setopt ($ch, CURLOPT_COOKIEJAR, "cookie.txt");
+          curl_setopt ($ch, CURLOPT_HEADER, 0);
+              curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
+          curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1);
+              curl_setopt ($ch, CURLOPT_TIMEOUT, 3);
+          $contents = curl_exec ($ch);
+              curl_close($ch);
+                       // due to resolver bug in some curl versions (e.g. 7.15.5) 
+                       // try again for constant IP.
+                  $ecb_site="195.128.2.97";
+          } while( ($contents == '') && $retry--);
+          
        } else {
                $handle = @fopen($ecb_filename, 'rb');
                if ($handle) {
index 02ba10c766c43f6be5d7ac5c504df91a1d45959a..493509f9d7a339eb3da2c23638b11b05972984db 100644 (file)
@@ -135,9 +135,6 @@ function display_rate_edit()
        if (isset($_POST['get_rate']))
        {
                $_POST['BuyRate'] = exrate_format(get_ecb_rate($_POST['curr_abrev']));
-               if ($_POST['BuyRate'] == 0) {
-                       display_error(_('This currency is not listed by ECB. Enter exchange rate manually.'));
-               }
                $Ajax->activate('BuyRate');
        }
        small_amount_row(_("Exchange Rate:"), 'BuyRate', null, '',