$connect_url = '';
$name = '';
$network = '';
- $updated = '0000-00-00 00:00:00';
+ $updated = NULL_DATE;
$location = '';
$about = '';
$keywords = '';
if (($network == "") AND ($x[0]["network"] != NETWORK_STATUSNET))
$network = $x[0]["network"];
- if ($updated == "0000-00-00 00:00:00")
+ if ($updated <= NULL_DATE)
$updated = $x[0]["updated"];
$created = $x[0]["created"];
$alias = $x[0]["alias"];
$notify = $x[0]["notify"];
} else {
- $created = "0000-00-00 00:00:00";
+ $created = NULL_DATE;
$server_url = "";
$urlparts = parse_url($profile_url);
$gcontacts = q("SELECT * FROM `gcontact` WHERE `nurl` = '%s'",
dbesc(normalise_link($profile)));
- if ($gcontacts[0]["created"] == "0000-00-00 00:00:00")
+ if ($gcontacts[0]["created"] <= NULL_DATE)
q("UPDATE `gcontact` SET `created` = '%s' WHERE `nurl` = '%s'",
dbesc(datetime_convert()), dbesc(normalise_link($profile)));
// Maybe there aren't any entries. Then check if it is a valid feed
if ($last_updated == "")
if ($xpath->query('/atom:feed')->length > 0)
- $last_updated = "0000-00-00 00:00:00";
+ $last_updated = NULL_DATE;
q("UPDATE `gcontact` SET `updated` = '%s', `last_contact` = '%s' WHERE `nurl` = '%s'",
- dbesc(dbm::date($last_updated)), dbesc(datetime_convert()), dbesc(normalise_link($profile)));
+ dbesc(dbm::date($last_updated)), dbesc(dbm::date()), dbesc(normalise_link($profile)));
if (($gcontacts[0]["generation"] == 0))
q("UPDATE `gcontact` SET `generation` = 9 WHERE `nurl` = '%s'",
return false;
$servers = q("SELECT * FROM `gserver` WHERE `nurl` = '%s'", dbesc(normalise_link($server_url)));
- if ($servers) {
+ if (dbm::is_result($servers)) {
- if ($servers[0]["created"] == "0000-00-00 00:00:00")
+ if ($servers[0]["created"] <= NULL_DATE)
q("UPDATE `gserver` SET `created` = '%s' WHERE `nurl` = '%s'",
dbesc(datetime_convert()), dbesc(normalise_link($server_url)));
$info = "";
$register_policy = -1;
- $last_contact = "0000-00-00 00:00:00";
- $last_failure = "0000-00-00 00:00:00";
+ $last_contact = NULL_DATE;
+ $last_failure = NULL_DATE;
}
logger("Server ".$server_url." is outdated or unknown. Start discovery. Force: ".$force." Created: ".$servers[0]["created"]." Failure: ".$last_failure." Contact: ".$last_contact, LOGGER_DEBUG);
$orig_last_failure = $last_failure;
// Check if the page is accessible via SSL.
+ $orig_server_url = $server_url;
$server_url = str_replace("http://", "https://", $server_url);
- $serverret = z_fetch_url($server_url."/.well-known/host-meta");
+
+ // We set the timeout to 20 seconds since this operation should be done in no time if the server was vital
+ $serverret = z_fetch_url($server_url."/.well-known/host-meta", false, $redirects, array('timeout' => 20));
+
+ // Quit if there is a timeout.
+ // But we want to make sure to only quit if we are mostly sure that this server url fits.
+ if (dbm::is_result($servers) AND ($orig_server_url == $server_url) AND
+ ($serverret['errno'] == CURLE_OPERATION_TIMEDOUT)) {
+ logger("Connection to server ".$server_url." timed out.", LOGGER_DEBUG);
+ return false;
+ }
// Maybe the page is unencrypted only?
$xmlobj = @simplexml_load_string($serverret["body"],'SimpleXMLElement',0, "http://docs.oasis-open.org/ns/xri/xrd-1.0");
if (!$serverret["success"] OR ($serverret["body"] == "") OR (@sizeof($xmlobj) == 0) OR !is_object($xmlobj)) {
$server_url = str_replace("https://", "http://", $server_url);
- $serverret = z_fetch_url($server_url."/.well-known/host-meta");
+
+ // We set the timeout to 20 seconds since this operation should be done in no time if the server was vital
+ $serverret = z_fetch_url($server_url."/.well-known/host-meta", false, $redirects, array('timeout' => 20));
+
+ // Quit if there is a timeout
+ if ($serverret['errno'] == CURLE_OPERATION_TIMEDOUT) {
+ logger("Connection to server ".$server_url." timed out.", LOGGER_DEBUG);
+ return false;
+ }
$xmlobj = @simplexml_load_string($serverret["body"],'SimpleXMLElement',0, "http://docs.oasis-open.org/ns/xri/xrd-1.0");
}
if (!$serverret["success"] OR ($serverret["body"] == "") OR (sizeof($xmlobj) == 0) OR !is_object($xmlobj)) {
// Workaround for bad configured servers (known nginx problem)
- if ($serverret["debug"]["http_code"] != "403") {
+ if (!in_array($serverret["debug"]["http_code"], array("403", "404"))) {
$last_failure = datetime_convert();
$failure = true;
}
where uid = %d and not gcontact.nurl in ( select nurl from contact where uid = %d )
AND NOT `gcontact`.`name` IN (SELECT `name` FROM `contact` WHERE `uid` = %d)
AND NOT `gcontact`.`id` IN (SELECT `gcid` FROM `gcign` WHERE `uid` = %d)
- AND `gcontact`.`updated` != '0000-00-00 00:00:00'
+ AND `gcontact`.`updated` >= '%s'
AND `gcontact`.`last_contact` >= `gcontact`.`last_failure`
AND `gcontact`.`network` IN (%s)
GROUP BY `glink`.`gcid` ORDER BY `gcontact`.`updated` DESC,`total` DESC LIMIT %d, %d",
intval($uid),
intval($uid),
intval($uid),
+ dbesc(NULL_DATE),
$sql_network,
intval($start),
intval($limit)
WHERE `glink`.`uid` = 0 AND `glink`.`cid` = 0 AND `glink`.`zcid` = 0 AND NOT `gcontact`.`nurl` IN (SELECT `nurl` FROM `contact` WHERE `uid` = %d)
AND NOT `gcontact`.`name` IN (SELECT `name` FROM `contact` WHERE `uid` = %d)
AND NOT `gcontact`.`id` IN (SELECT `gcid` FROM `gcign` WHERE `uid` = %d)
- AND `gcontact`.`updated` != '0000-00-00 00:00:00'
+ AND `gcontact`.`updated` >= '%s'
AND `gcontact`.`last_contact` >= `gcontact`.`last_failure`
AND `gcontact`.`network` IN (%s)
ORDER BY rand() LIMIT %d, %d",
intval($uid),
intval($uid),
intval($uid),
+ dbesc(NULL_DATE),
$sql_network,
intval($start),
intval($limit)
poco_check_server("https://".$server->host);
}
- // Discover GNU Social Servers
- if (!get_config('system','ostatus_disabled')) {
- $serverdata = "http://gstools.org/api/get_open_instances/";
+ // Currently disabled, since the service isn't available anymore.
+ // It is not removed since I hope that there will be a successor.
+ // Discover GNU Social Servers.
+ //if (!get_config('system','ostatus_disabled')) {
+ // $serverdata = "http://gstools.org/api/get_open_instances/";
- $result = z_fetch_url($serverdata);
- if ($result["success"]) {
- $servers = json_decode($result["body"]);
+ // $result = z_fetch_url($serverdata);
+ // if ($result["success"]) {
+ // $servers = json_decode($result["body"]);
- foreach($servers->data AS $server)
- poco_check_server($server->instance_address);
- }
- }
+ // foreach($servers->data AS $server)
+ // poco_check_server($server->instance_address);
+ // }
+ //}
set_config('poco','last_federation_discovery', time());
}
$connect_url = '';
$name = '';
$network = '';
- $updated = '0000-00-00 00:00:00';
+ $updated = NULL_DATE;
$location = '';
$about = '';
$keywords = '';
*/
function update_gcontact($contact) {
+ // Check for invalid "contact-type" value
+ if (isset($contact['contact-type']) AND (intval($contact['contact-type']) < 0)) {
+ $contact['contact-type'] = 0;
+ }
+
/// @todo update contact table as well
$gcontact_id = get_gcontact_id($contact);