]> git.mxchange.org Git - friendica.git/blobdiff - boot.php
provide ability to use different port
[friendica.git] / boot.php
index 35adae3308de5fa629b4a81290c54f48fe81878d..a72fbf6734269b63a822757a369696cfc4794fe5 100644 (file)
--- a/boot.php
+++ b/boot.php
@@ -1,12 +1,8 @@
 <?php
 
-set_time_limit(0);
-ini_set('pcre.backtrack_limit', 250000);
-
-
-define ( 'FRIENDIKA_VERSION',      '2.2.1029' );
+define ( 'FRIENDIKA_VERSION',      '2.2.1052' );
 define ( 'DFRN_PROTOCOL_VERSION',  '2.21'    );
-define ( 'DB_UPDATE_VERSION',      1073      );
+define ( 'DB_UPDATE_VERSION',      1076      );
 
 define ( 'EOL',                    "<br />\r\n"     );
 define ( 'ATOM_TIME',              'Y-m-d\TH:i:s\Z' );
@@ -89,6 +85,7 @@ define ( 'PAGE_FREELOVE',          3 );
  * Network and protocol family types 
  */
 
+define ( 'NETWORK_ZOT',              'zot!');    // Zot!
 define ( 'NETWORK_DFRN',             'dfrn');    // Friendika, Mistpark, other DFRN implementations
 define ( 'NETWORK_OSTATUS',          'stat');    // status.net, identi.ca, GNU-social, other OStatus implementations
 define ( 'NETWORK_FEED',             'feed');    // RSS/Atom feeds with no known "post/notify" protocol
@@ -103,6 +100,13 @@ define ( 'NETWORK_FACEBOOK',         'face');    // Facebook API
 
 define ( 'MAX_LIKERS',    75);
 
+/**
+ * Communication timeout
+ */
+
+define ( 'ZCURL_TIMEOUT' , (-1));
+
+
 /**
  * email notification options
  */
@@ -117,6 +121,7 @@ define ( 'NOTIFY_MAIL',    0x0010 );
  * various namespaces we may need to parse
  */
 
+define ( 'NAMESPACE_ZOT',             'http://purl.org/macgirvin/zot' );
 define ( 'NAMESPACE_DFRN' ,           'http://purl.org/macgirvin/dfrn/1.0' ); 
 define ( 'NAMESPACE_THREAD' ,         'http://purl.org/syndication/thread/1.0' );
 define ( 'NAMESPACE_TOMB' ,           'http://purl.org/atompub/tombstones/1.0' );
@@ -130,7 +135,7 @@ define ( 'NAMESPACE_POCO',            'http://portablecontacts.net/spec/1.0' );
 define ( 'NAMESPACE_FEED',            'http://schemas.google.com/g/2010#updates-from' );
 define ( 'NAMESPACE_OSTATUS',         'http://ostatus.org/schema/1.0' );
 define ( 'NAMESPACE_STATUSNET',       'http://status.net/schema/api/1/' );
-
+define ( 'NAMESPACE_ATOM1',           'http://www.w3.org/2005/Atom' );
 /**
  * activity stream defines
  */
@@ -170,20 +175,28 @@ define ( 'GRAVITY_COMMENT',      6);
  *
  */
 
-if (get_magic_quotes_gpc()) {
-    $process = array(&$_GET, &$_POST, &$_COOKIE, &$_REQUEST);
-    while (list($key, $val) = each($process)) {
-        foreach ($val as $k => $v) {
-            unset($process[$key][$k]);
-            if (is_array($v)) {
-                $process[$key][stripslashes($k)] = $v;
-                $process[] = &$process[$key][stripslashes($k)];
-            } else {
-                $process[$key][stripslashes($k)] = stripslashes($v);
-            }
-        }
-    }
-    unset($process);
+function startup() {
+       error_reporting(E_ERROR | E_WARNING | E_PARSE);
+       set_time_limit(0);
+       ini_set('pcre.backtrack_limit', 250000);
+
+
+       if (get_magic_quotes_gpc()) {
+       $process = array(&$_GET, &$_POST, &$_COOKIE, &$_REQUEST);
+           while (list($key, $val) = each($process)) {
+           foreach ($val as $k => $v) {
+                   unset($process[$key][$k]);
+               if (is_array($v)) {
+                       $process[$key][stripslashes($k)] = $v;
+                       $process[] = &$process[$key][stripslashes($k)];
+               } else {
+                       $process[$key][stripslashes($k)] = stripslashes($v);
+               }
+               }
+       }
+           unset($process);
+       }
+
 }
 
 /*
@@ -251,11 +264,14 @@ class App {
 
                $this->query_string = '';
 
+               startup();
+
                $this->scheme = ((isset($_SERVER['HTTPS']) && ($_SERVER['HTTPS']))      ?  'https' : 'http' );
 
                if(x($_SERVER,'SERVER_NAME')) {
                        $this->hostname = $_SERVER['SERVER_NAME'];
-
+                       if(x($_SERVER,'SERVER_PORT') && $_SERVER['SERVER_PORT'] != 80 && $_SERVER['SERVER_PORT'] != 443)
+                               $this->hostname .= ':' . $_SERVER['SERVER_PORT'];
                        /** 
                         * Figure out if we are running at the top of a domain
                         * or in a sub-directory and adjust accordingly
@@ -702,13 +718,21 @@ function fetch_url($url,$binary = false, &$redirects = 0) {
 
        $s = @curl_exec($ch);
 
-       $http_code = intval(curl_getinfo($ch, CURLINFO_HTTP_CODE));
-       $header = substr($s,0,strpos($s,"\r\n\r\n"));
-       if(preg_match('/HTTP\/.+? 100/',$header)) {
-               // 100 Continue has two headers, get the real one
-               $s = substr($s,strlen($header)+4);
-               $header = substr($s,0,strpos($s,"\r\n\r\n"));
+       $base = $s;
+       $curl_info = curl_getinfo($ch);
+       $http_code = $curl_info['http_code'];
+
+       $header = '';
+
+       // Pull out multiple headers, e.g. proxy and continuation headers
+       // allow for HTTP/2.x without fixing code
+
+       while(preg_match('/^HTTP\/[1-2].+? [1-5][0-9][0-9]/',$base)) {
+               $chunk = substr($base,0,strpos($base,"\r\n\r\n")+4);
+               $header .= $chunk;
+               $base = substr($base,strlen($chunk));
        }
+
        if($http_code == 301 || $http_code == 302 || $http_code == 303 || $http_code == 307) {
         $matches = array();
         preg_match('/(Location:|URI:)(.*?)\n/', $header, $matches);
@@ -719,16 +743,10 @@ function fetch_url($url,$binary = false, &$redirects = 0) {
             return fetch_url($url,$binary,$redirects);
         }
     }
-       $a->set_curl_code($http_code);
 
-       $body = substr($s,strlen($header)+4);
+       $a->set_curl_code($http_code);
 
-       /* one more try to make sure there are no more headers */
-
-       if(strpos($body,'HTTP/') === 0) {
-               $header = substr($body,0,strpos($body,"\r\n\r\n"));
-               $body = substr($body,strlen($header)+4);
-       }
+       $body = substr($s,strlen($header));
 
        $a->set_curl_headers($header);
 
@@ -754,7 +772,16 @@ function post_url($url,$params, $headers = null, &$redirects = 0) {
        $curl_time = intval(get_config('system','curl_timeout'));
        curl_setopt($ch, CURLOPT_TIMEOUT, (($curl_time !== false) ? $curl_time : 60));
 
-       if(is_array($headers))
+       if(defined('LIGHTTPD')) {
+               if(!is_array($headers)) {
+                       $headers = array('Expect:');
+               } else {
+                       if(!in_array('Expect:', $headers)) {
+                               array_push($headers, 'Expect:');
+                       }
+               }
+       }
+       if($headers)
                curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
 
        $check_cert = get_config('system','verifyssl');
@@ -775,13 +802,21 @@ function post_url($url,$params, $headers = null, &$redirects = 0) {
 
        $s = @curl_exec($ch);
 
-       $http_code = intval(curl_getinfo($ch, CURLINFO_HTTP_CODE));
-       $header = substr($s,0,strpos($s,"\r\n\r\n"));
-       if(preg_match('/HTTP\/.+? 100/',$header)) {
-               // 100 Continue has two headers, get the real one
-               $s = substr($s,strlen($header)+4);
-               $header = substr($s,0,strpos($s,"\r\n\r\n"));
+       $base = $s;
+       $curl_info = curl_getinfo($ch);
+       $http_code = $curl_info['http_code'];
+
+       $header = '';
+
+       // Pull out multiple headers, e.g. proxy and continuation headers
+       // allow for HTTP/2.x without fixing code
+
+       while(preg_match('/^HTTP\/[1-2].+? [1-5][0-9][0-9]/',$base)) {
+               $chunk = substr($base,0,strpos($base,"\r\n\r\n")+4);
+               $header .= $chunk;
+               $base = substr($base,strlen($chunk));
        }
+
        if($http_code == 301 || $http_code == 302 || $http_code == 303) {
         $matches = array();
         preg_match('/(Location:|URI:)(.*?)\n/', $header, $matches);
@@ -793,14 +828,7 @@ function post_url($url,$params, $headers = null, &$redirects = 0) {
         }
     }
        $a->set_curl_code($http_code);
-       $body = substr($s,strlen($header)+4);
-
-       /* one more try to make sure there are no more headers */
-
-       if(strpos($body,'HTTP/') === 0) {
-               $header = substr($body,0,strpos($body,"\r\n\r\n"));
-               $body = substr($body,strlen($header)+4);
-       }
+       $body = substr($s,strlen($header));
 
        $a->set_curl_headers($header);
 
@@ -2021,7 +2049,10 @@ function get_tags($s) {
 
        $s = preg_replace('/\[code\](.*?)\[\/code\]/sm','',$s);
 
-       if(preg_match_all('/([@#][^ \x0D\x0A,:?]+ [^ \x0D\x0A,:?]+)([ \x0D\x0A,:?]|$)/',$s,$match)) {
+       // Match full names against @tags including the space between first and last
+       // We will look these up afterward to see if they are full names or not recognisable.
+
+       if(preg_match_all('/(@[^ \x0D\x0A,:?]+ [^ \x0D\x0A,:?]+)([ \x0D\x0A,:?]|$)/',$s,$match)) {
                foreach($match[1] as $mtch) {
                        if(strstr($mtch,"]")) {
                                // we might be inside a bbcode color tag - leave it alone
@@ -2034,12 +2065,18 @@ function get_tags($s) {
                }
        }
 
+       // Otherwise pull out single word tags. These can be @nickname, @first_last
+       // and #hash tags.
+
        if(preg_match_all('/([@#][^ \x0D\x0A,:?]+)([ \x0D\x0A,:?]|$)/',$s,$match)) {
                foreach($match[1] as $mtch) {
                        if(strstr($mtch,"]")) {
                                // we might be inside a bbcode color tag - leave it alone
                                continue;
                        }
+                       // ignore strictly numeric tags like #1
+                       if((strpos($mtch,'#') === 0) && ctype_digit(substr($mtch,1)))
+                               continue;
                        if(substr($mtch,-1,1) === '.')
                                $ret[] = substr($mtch,0,-1);
                        else
@@ -2921,3 +2958,15 @@ function return_bytes ($size_str) {
     }
 }}
 
+function generate_guid() {
+       $found = true;
+       do {
+               $guid = substr(random_string(),0,16);
+               $x = q("SELECT `uid` FROM `user` WHERE `guid` = '%s' LIMIT 1",
+                       dbesc($guid)
+               );
+               if(! count($x))
+                       $found = false;
+       } while ($found == true );
+       return $guid;
+}
\ No newline at end of file