44 global $remote_world; global $teleport_allowed; global
$readings;
53 $sql_query =
"select PrincipalId from UserAccounts where PrincipalId = :key";
54 $stmt = $PDO1->prepare($sql_query);
55 $stmt->execute([
'key' =>
$readings[
'owner']]);
56 $is_user = $stmt->fetch(PDO::FETCH_ASSOC);
68 $sql_query =
"select * from ls_os_teleport_allowed where teleport_owner = :key and teleport_world = :world";
69 $stmt = $PDO->prepare($sql_query);
71 $is_user = $stmt->fetch(PDO::FETCH_ASSOC);
74 die(
"FAILURE=BANNED|Teleporter Owner ".
$readings[
'owner'].
" is unknown\n");
78 $remote_world = $is_user[
'teleport_world'];
79 $is_allowed = $is_user[
'teleport_allowed'];
102 $dsn =
"mysql:host=$Host;dbname=$Database;charset=utf8mb4";
106 PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
107 PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
108 PDO::ATTR_EMULATE_PREPARES =>
true,
114 $pdo =
new PDO($dsn, $Username, $Password, $options);
116 catch (PDOException $e)
121 die(
"FAILURE=DATABASE:Connection failed " . $e->getMessage());
151 $NULL_KEY = (string)
'00000000-0000-0000-0000-000000000000';
155 $teleport_allowed = FALSE;
168 $allow_outsiders = FALSE;
174 global $db; global $host; global $db_username; global $db_password;
175 global $db1; global $host1; global $db1_username; global $db1_password;
176 global $pdo; global $pdo1; global $remote_world; global
$readings;
179 $pdo = $this->
rdOpenDatabase($db, $host, $db_username, $db_password);
183 if ($use_sim_db) $pdo1 = $this->
rdOpenDatabase($db1, $host1, $db1_username, $db1_password);
202 if ($remote_world !=
"" && (!is_allowed || !$allow_outsiders))
204 die(
"FAILURE=BANNED|Teleporter Owner ".
$readings[
'owner'].
"@".
$readings[
'world'].
" is not authorised\n");
212 $position_string = substr(
$readings[
'position'], 1, -1);
213 $pos = explode(
",", $position_string);
214 $position = array_slice($pos, 0, 3);
217 $rotation_string = substr(
$readings[
'rotation'], 1, -1);
218 $rot = explode(
",", $rotation_string);
219 $rotation = array_slice($rot, 0, 4);
226 $sql_query =
"select * from ls_os_teleport where teleport_key = :key";
229 $stmt = $pdo->prepare($sql_query);
230 $stmt->execute([
'key' =>
$readings[
'key']]);
231 $exists = $stmt->fetch(PDO::FETCH_ASSOC);
235 echo
"FAILURE=IDENTIFY:".$e->getMessage().
"\n";
247 $position[0], $position[1], $position[2],
248 $rotation[0], $rotation[1], $rotation[2], $rotation[3],
255 $sql_query =
"update ls_os_teleport set ";
256 $sql_query .=
"teleport_name = ?, teleport_owner_key = ?, teleport_world = ?, teleport_region = ?, ";
257 $sql_query .=
"teleport_region_x = ?, teleport_region_y = ?, teleport_region_z = ?, ";
258 $sql_query .=
"teleport_rotation_x = ?, teleport_rotation_y = ?, teleport_rotation_z = ?, teleport_rotation_s = ?, ";
259 $sql_query .=
"teleport_offset = ?, teleport_group_key = ?, teleport_front_offset_angle = ?, ";
260 $sql_query .=
"teleport_location_info = ?, teleport_version_number = ?, teleport_locality_group = ?, ";
261 $sql_query .=
"teleport_heartbeat = CURRENT_TIMESTAMP()";
262 $sql_query .=
"where teleport_key = ?";
267 $stmt = $pdo->prepare($sql_query);
268 $stmt->execute($data);
272 echo
"FAILURE=UPDATE:".$e->getMessage().
"\n";
286 $sql_query =
"select * from ls_os_teleport where teleport_name = :name";
289 $stmt = $pdo->prepare($sql_query);
290 $stmt->execute([
'name' =>
$readings[
'name']]);
291 $same_name = $stmt->fetch(PDO::FETCH_ASSOC);
295 echo
"FAILURE=NAME_MATCH: ".$readings[
'name'].
":Failed with".$e->getMessage().
"\n";
299 echo
"FAILURE=NAME_MATCH: Existing teleporter data - ";
300 echo $row[
'teleport_world'].
"/".$row[
'teleport_region'].
"/";
301 echo
"<".$row[
'teleport_region_x'].
",".$row[
'teleport_region_y'].
",".$row[
'teleport_region_z'].
">\n";
309 $position[0], $position[1], $position[2],
310 $rotation[0], $rotation[1], $rotation[2], $rotation[3],
316 $sql_query =
"insert into ls_os_teleport(";
317 $sql_query .=
"teleport_key, teleport_name, teleport_owner_key, teleport_world, teleport_region, ";
318 $sql_query .=
"teleport_region_x, teleport_region_y, teleport_region_z, ";
319 $sql_query .=
"teleport_rotation_x, teleport_rotation_y, teleport_rotation_z, teleport_rotation_s, ";
320 $sql_query .=
"teleport_offset, teleport_group_key, teleport_front_offset_angle,";
321 $sql_query .=
"teleport_location_info, teleport_version_number, teleport_locality_group";
322 $sql_query .=
")VALUES(";
323 $sql_query .=
"?, ?, ?, ?, ?, ";
324 $sql_query .=
"?, ?, ?, ";
325 $sql_query .=
"?, ?, ?, ?, ";
326 $sql_query .=
"?, ?, ?, ";
327 $sql_query .=
"?, ?, ?";
333 $stmt = $pdo->prepare($sql_query);
334 $stmt->execute($data);
338 echo
"FAILURE=INSERT:".$e->getMessage().
"\n";
344 echo
"EXTRACT_LIST=START\n";
347 $this_group_flag =
$readings[
'locationinfo'] & $GROUP_FLAG;
348 $this_region_flag =
$readings[
'locationinfo'] & $REGION_FLAG;
349 $this_world_flag =
$readings[
'locationinfo'] & $WORLD_FLAG;
350 $this_metaverse_flag =
$readings[
'locationinfo'] & $METAVERSE_FLAG;
357 $sql_query .=
"select * from ls_os_teleport";
358 $sql_query .=
" where teleport_key != :key";
359 $sql_query .=
" and ((teleport_location_info & :group_flag = :this_group_flag and teleport_locality_group = :group) or teleport_location_info & :region_flag = :this_region_flag)";
360 $sql_query .=
" and teleport_location_info & :anon_flag = 0";
361 $sql_query .=
" and teleport_region = :region";
362 $sql_query .=
" and teleport_world = :world";
363 $sql_query .=
" and teleport_version_number != 0";
365 $sql_query .=
" UNION ";
368 $sql_query .=
"select * from ls_os_teleport ";
369 $sql_query .=
" where teleport_key != :key";
370 $sql_query .=
" and ((teleport_location_info & :world_flag = :this_world_flag and teleport_world = :world)";
371 $sql_query .=
" and teleport_location_info & :anon_flag = 0";
372 $sql_query .=
" or (teleport_location_info & :metaverse_flag = :this_metaverse_flag and teleport_world != :world))";
373 $sql_query .=
" and teleport_version_number != 0";
376 $sql_query .=
" order by teleport_name";
380 'group_flag' => $GROUP_FLAG,
381 'region_flag' => $REGION_FLAG,
382 'world_flag' => $WORLD_FLAG,
383 'metaverse_flag' => $METAVERSE_FLAG,
384 'anon_flag' => $ANONYMOUS_FLAG,
385 'this_group_flag' => $this_group_flag,
386 'this_region_flag' => $this_region_flag,
387 'this_world_flag' => $this_world_flag,
388 'this_metaverse_flag' => $this_metaverse_flag,
398 echo
"EXTRACT_LIST=END\n";
415 $SqlQuery =
"select * from ls_os_teleport";
416 $SqlQuery .=
"where DATE_ADD(teleport_heartbeat, INTERVAL :lifetime HOUR) < CURRENT_TIMESTAMP()";
417 $SqlQuery .=
" and teleport_version_number != 0 ";
418 if ($world !=
'###') $SqlQuery .=
" and teleport_world = :world";
419 $SqlQuery .=
" order by teleport_name;";
421 $Parameters = [
'lifetime' =>
$readings[
'lifetime'] ];
422 if ($world !=
'###') $Parameters[
'world'] = $world;
426 $stmt = $pdo->prepare($SqlQuery);
427 $stmt->execute($Parameters);
428 $results = $stmt->fetchAll(PDO::FETCH_DEFAULT);
432 echo
"FAILURE=SCAN:".$e->getMessage().
"\n";
439 echo
"SCAN_LIST=START\n";
440 echo
"//=========================== Date: ".date(
"Y-m-d H:i:s").
"==================\n";
442 foreach ($results as $row)
444 $action_string =
"SCANNED";
445 $teleport_name = $row[
'teleport_name'];
446 $teleport_version = $row[
'teleport_version_number'];
451 $sql_query1 =
"delete from ls_os_teleport where teleport_key = :key";
452 $parameters1 = [
'key' => $row[
'teleport_key'] ];
453 $stmt1 = $pdo->prepare($sql_query1);
454 $stmt1->execute($parameters1);
455 $results1 = $stmt1->fetchAll(PDO::FETCH_DEFAULT);
456 $action_string =
"DELETED";
458 echo $row[
'teleport_name'].
"|".$action_string.
"|";
459 echo
"hop://".$row[
'teleport_world'].
"/".$row[
'teleport_region'].
"/".$row[
'teleport_region_x'].
"/".$row[
'teleport_region_y'].
"/".$row[
'teleport_region_z'].
"\n";
461 echo
"SCAN_LIST=END\n";