+ * Perform a cURL session multiple times when it fails with a timeout.
+ *
+ * @param resource $ch
+ * a cURL session handle.
+ */
+ private static function curlExec($ch) {
+ $ret = FALSE;
+ $attempt = 0;
+ do {
+ $ret = curl_exec($ch);
+ if (FALSE === $ret) {
+ trigger_error(curl_error($ch), E_USER_WARNING);
+ }
+ } while (curl_errno($ch) == CURLE_OPERATION_TIMEDOUT && ++$attempt < Tweeper::$maxConnectionRetries);
+
+ $response_code = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);
+ if (FALSE === $response_code) {
+ trigger_error(curl_error($ch), E_USER_WARNING);
+ return FALSE;
+ }
+
+ if ($response_code >= 400) {
+ trigger_error("HTTP reponse code $response_code", E_USER_WARNING);
+ return FALSE;
+ }
+
+ return $ret;
+ }
+
+ /**