]> git.mxchange.org Git - friendica.git/blobdiff - include/network.php
Merge pull request #3879 from zeroadam/Remove-Includes-#3873
[friendica.git] / include / network.php
index 035abc478a3cfbe017eb8c7b9282301be9a0598f..90aea6e766b59de4904e22d863c93ee421a6b6c7 100644 (file)
@@ -5,6 +5,7 @@
  */
 
 use Friendica\App;
+use Friendica\Core\System;
 use Friendica\Core\Config;
 use Friendica\Network\Probe;
 
@@ -64,7 +65,7 @@ function fetch_url($url,$binary = false, &$redirects = 0, $timeout = 0, $accept_
  *    string 'body' => fetched content
  */
 function z_fetch_url($url, $binary = false, &$redirects = 0, $opts = array()) {
-       $ret = array('return_code' => 0, 'success' => false, 'header' => '', 'body' => '');
+       $ret = array('return_code' => 0, 'success' => false, 'header' => '', 'info' => '', 'body' => '');
 
        $stamp1 = microtime(true);
 
@@ -107,6 +108,11 @@ function z_fetch_url($url, $binary = false, &$redirects = 0, $opts = array()) {
                @curl_setopt($ch, CURLOPT_RANGE, '0-' . $range);
        }
 
+       // Without this setting it seems as if some webservers send compressed content
+       // This seems to confuse curl so that it shows this uncompressed.
+       /// @todo  We could possibly set this value to "gzip" or something similar
+       curl_setopt($ch, CURLOPT_ENCODING, '');
+
        if (x($opts, 'headers')) {
                @curl_setopt($ch, CURLOPT_HTTPHEADER, $opts['headers']);
        }
@@ -118,32 +124,36 @@ function z_fetch_url($url, $binary = false, &$redirects = 0, $opts = array()) {
        if (x($opts, 'timeout')) {
                @curl_setopt($ch, CURLOPT_TIMEOUT, $opts['timeout']);
        } else {
-               $curl_time = intval(get_config('system', 'curl_timeout'));
+               $curl_time = intval(Config::get('system', 'curl_timeout'));
                @curl_setopt($ch, CURLOPT_TIMEOUT, (($curl_time !== false) ? $curl_time : 60));
        }
 
        // by default we will allow self-signed certs
        // but you can override this
 
-       $check_cert = get_config('system', 'verifyssl');
+       $check_cert = Config::get('system', 'verifyssl');
        @curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, (($check_cert) ? true : false));
 
        if ($check_cert) {
                @curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
        }
 
-       $proxy = get_config('system', 'proxy');
+       $proxy = Config::get('system', 'proxy');
 
        if (strlen($proxy)) {
                @curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 1);
                @curl_setopt($ch, CURLOPT_PROXY, $proxy);
-               $proxyuser = @get_config('system', 'proxyuser');
+               $proxyuser = @Config::get('system', 'proxyuser');
 
                if (strlen($proxyuser)) {
                        @curl_setopt($ch, CURLOPT_PROXYUSERPWD, $proxyuser);
                }
        }
 
+       if (Config::get('system', 'ipv4_resolve', false)) {
+               curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
+       }
+
        if ($binary) {
                @curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
        }
@@ -154,6 +164,15 @@ function z_fetch_url($url, $binary = false, &$redirects = 0, $opts = array()) {
        // if it throws any errors.
 
        $s = @curl_exec($ch);
+       $curl_info = @curl_getinfo($ch);
+
+       // Special treatment for HTTP Code 416
+       // See https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/416
+       if (($curl_info['http_code'] == 416) && ($range > 0)) {
+               @curl_setopt($ch, CURLOPT_RANGE, '');
+               $s = @curl_exec($ch);
+               $curl_info = @curl_getinfo($ch);
+       }
 
        if (curl_errno($ch) !== CURLE_OK) {
                logger('fetch_url error fetching ' . $url . ': ' . curl_error($ch), LOGGER_NORMAL);
@@ -162,9 +181,10 @@ function z_fetch_url($url, $binary = false, &$redirects = 0, $opts = array()) {
        $ret['errno'] = curl_errno($ch);
 
        $base = $s;
-       $curl_info = @curl_getinfo($ch);
+       $ret['info'] = $curl_info;
 
        $http_code = $curl_info['http_code'];
+
        logger('fetch_url ' . $url . ': ' . $http_code . " " . $s, LOGGER_DATA);
        $header = '';
 
@@ -220,8 +240,8 @@ function z_fetch_url($url, $binary = false, &$redirects = 0, $opts = array()) {
        if (!$ret['success']) {
                $ret['error'] = curl_error($ch);
                $ret['debug'] = $curl_info;
-               logger('z_fetch_url: error: ' . $url . ': ' . $ret['error'], LOGGER_DEBUG);
-               logger('z_fetch_url: debug: ' . print_r($curl_info, true), LOGGER_DATA);
+               logger('z_fetch_url: error: '.$url.': '.$ret['return_code'].' - '.$ret['error'], LOGGER_DEBUG);
+               logger('z_fetch_url: debug: '.print_r($curl_info, true), LOGGER_DATA);
        }
 
        $ret['body'] = substr($s, strlen($header));
@@ -272,10 +292,14 @@ function post_url($url, $params, $headers = null, &$redirects = 0, $timeout = 0)
        curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
        curl_setopt($ch, CURLOPT_USERAGENT, $a->get_useragent());
 
+       if (Config::get('system', 'ipv4_resolve', false)) {
+               curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
+       }
+
        if (intval($timeout)) {
                curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
        } else {
-               $curl_time = intval(get_config('system', 'curl_timeout'));
+               $curl_time = intval(Config::get('system', 'curl_timeout'));
                curl_setopt($ch, CURLOPT_TIMEOUT, (($curl_time !== false) ? $curl_time : 60));
        }
 
@@ -293,19 +317,19 @@ function post_url($url, $params, $headers = null, &$redirects = 0, $timeout = 0)
                curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
        }
 
-       $check_cert = get_config('system', 'verifyssl');
+       $check_cert = Config::get('system', 'verifyssl');
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, (($check_cert) ? true : false));
 
        if ($check_cert) {
                @curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
        }
 
-       $proxy = get_config('system', 'proxy');
+       $proxy = Config::get('system', 'proxy');
 
        if (strlen($proxy)) {
                curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 1);
                curl_setopt($ch, CURLOPT_PROXY, $proxy);
-               $proxyuser = get_config('system', 'proxyuser');
+               $proxyuser = Config::get('system', 'proxyuser');
                if (strlen($proxyuser)) {
                        curl_setopt($ch, CURLOPT_PROXYUSERPWD, $proxyuser);
                }
@@ -372,14 +396,22 @@ function post_url($url, $params, $headers = null, &$redirects = 0, $timeout = 0)
 
 function xml_status($st, $message = '') {
 
-       $xml_message = ((strlen($message)) ? "\t<message>" . xmlify($message) . "</message>\r\n" : '');
+       $result = array('status' => $st);
+
+       if ($message != '') {
+               $result['message'] = $message;
+       }
 
-       if ($st)
+       if ($st) {
                logger('xml_status returning non_zero: ' . $st . " message=" . $message);
+       }
+
+       header("Content-type: text/xml");
+
+       $xmldata = array("result" => $result);
+
+       echo xml::from_array($xmldata, $xml);
 
-       header( "Content-type: text/xml" );
-       echo '<?xml version="1.0" encoding="UTF-8"?>'."\r\n";
-       echo "<result>\r\n\t<status>$st</status>\r\n$xml_message</result>\r\n";
        killme();
 }
 
@@ -433,7 +465,7 @@ function http_status_exit($val, $description = array()) {
  * @return boolean True if it's a valid URL, fals if something wrong with it
  */
 function validate_url(&$url) {
-       if (get_config('system','disable_url_validation'))
+       if (Config::get('system','disable_url_validation'))
                return true;
 
        // no naked subdomains (allow localhost for tests)
@@ -461,7 +493,7 @@ function validate_url(&$url) {
  */
 function validate_email($addr) {
 
-       if (get_config('system','disable_email_validation'))
+       if (Config::get('system','disable_email_validation'))
                return true;
 
        if (! strpos($addr,'@'))
@@ -566,7 +598,7 @@ function allowed_email($email) {
                return false;
        }
 
-       $str_allowed = get_config('system','allowed_email');
+       $str_allowed = Config::get('system','allowed_email');
        if (! $str_allowed) {
                return true;
        }
@@ -598,7 +630,7 @@ function avatar_img($email) {
        call_hooks('avatar_lookup', $avatar);
 
        if (! $avatar['success']) {
-               $avatar['url'] = App::get_baseurl() . '/images/person-175.jpg';
+               $avatar['url'] = System::baseUrl() . '/images/person-175.jpg';
        }
 
        logger('Avatar: ' . $avatar['email'] . ' ' . $avatar['url'], LOGGER_DEBUG);
@@ -606,20 +638,15 @@ function avatar_img($email) {
 }
 
 
-function parse_xml_string($s,$strict = true) {
+function parse_xml_string($s, $strict = true) {
+       // the "strict" parameter is deactivated
+
        /// @todo Move this function to the xml class
-       if ($strict) {
-               if (! strstr($s,'<?xml'))
-                       return false;
-               $s2 = substr($s,strpos($s,'<?xml'));
-       }
-       else
-               $s2 = $s;
        libxml_use_internal_errors(true);
 
-       $x = @simplexml_load_string($s2);
-       if (! $x) {
-               logger('libxml: parse: error: ' . $s2, LOGGER_DATA);
+       $x = @simplexml_load_string($s);
+       if (!$x) {
+               logger('libxml: parse: error: ' . $s, LOGGER_DATA);
                foreach (libxml_get_errors() as $err) {
                        logger('libxml: parse: ' . $err->code." at ".$err->line.":".$err->column." : ".$err->message, LOGGER_DATA);
                }
@@ -631,7 +658,7 @@ function parse_xml_string($s,$strict = true) {
 function scale_external_images($srctext, $include_link = true, $scale_replace = false) {
 
        // Suppress "view full size"
-       if (intval(get_config('system','no_view_full_size'))) {
+       if (intval(Config::get('system','no_view_full_size'))) {
                $include_link = false;
        }
 
@@ -647,7 +674,7 @@ function scale_external_images($srctext, $include_link = true, $scale_replace =
                foreach ($matches as $mtch) {
                        logger('scale_external_image: ' . $mtch[1]);
 
-                       $hostname = str_replace('www.','',substr(App::get_baseurl(),strpos(App::get_baseurl(),'://')+3));
+                       $hostname = str_replace('www.','',substr(System::baseUrl(),strpos(System::baseUrl(),'://')+3));
                        if (stristr($mtch[1],$hostname)) {
                                continue;
                        }
@@ -723,7 +750,10 @@ function fix_contact_ssl_policy(&$contact,$new_policy) {
        }
 
        if ($ssl_changed) {
-               dba::update('contact', $contact, array('id' => $contact['id']));
+               $fields = array('url' => $contact['url'], 'request' => $contact['request'],
+                               'notify' => $contact['notify'], 'poll' => $contact['poll'],
+                               'confirm' => $contact['confirm'], 'poco' => $contact['poco']);
+               dba::update('contact', $fields, array('id' => $contact['id']));
        }
 }
 
@@ -885,11 +915,11 @@ function original_url($url, $depth = 1, $fetchbody = false) {
 function short_link($url) {
        require_once('library/slinky.php');
        $slinky = new Slinky($url);
-       $yourls_url = get_config('yourls','url1');
+       $yourls_url = Config::get('yourls','url1');
        if ($yourls_url) {
-               $yourls_username = get_config('yourls','username1');
-               $yourls_password = get_config('yourls', 'password1');
-               $yourls_ssl = get_config('yourls', 'ssl1');
+               $yourls_username = Config::get('yourls','username1');
+               $yourls_password = Config::get('yourls', 'password1');
+               $yourls_ssl = Config::get('yourls', 'ssl1');
                $yourls = new Slinky_YourLS();
                $yourls->set('username', $yourls_username);
                $yourls->set('password', $yourls_password);
@@ -973,3 +1003,34 @@ function matching_url($url1, $url2) {
 
        return normalise_link($match);
 }
+
+/**
+ * @brief Glue url parts together
+ *
+ * @param array $parsed URL parts
+ *
+ * @return string The glued URL
+ */
+function unParseUrl($parsed) {
+       $get = function ($key) use ($parsed) {
+               return isset($parsed[$key]) ? $parsed[$key] : null;
+       };
+
+       $pass      = $get('pass');
+       $user      = $get('user');
+       $userinfo  = $pass !== null ? "$user:$pass" : $user;
+       $port      = $get('port');
+       $scheme    = $get('scheme');
+       $query     = $get('query');
+       $fragment  = $get('fragment');
+       $authority =
+               ($userinfo !== null ? $userinfo."@" : '') .
+               $get('host') .
+               ($port ? ":$port" : '');
+
+       return  (strlen($scheme) ? $scheme.":" : '') .
+               (strlen($authority) ? "//".$authority : '') .
+               $get('path') .
+               (strlen($query) ? "?".$query : '') .
+               (strlen($fragment) ? "#".$fragment : '');
+}