Source for file sl_loginzone_linker.php

Documentation is available at sl_loginzone_linker.php

  1. <?php
  2.     /**
  3.     * LoginZone linker script.
  4.     *
  5.     * Allows an in-world LoginZone to communicate with the main server
  6.     *
  7.     * @package sloodlelogin
  8.     * @copyright Copyright (c) 2007 Sloodle (various contributors)
  9.     * @license http://www.gnu.org/licenses/gpl-3.0.html GNU GPL v3
  10.     *
  11.     * @contributor Edmund Edgar
  12.     * @contributor Peter R. Bloomfield
  13.     *
  14.     */
  15.     
  16.     
  17.     // This script is expected to be accessed by objects from in-world.
  18.     // The following parameters are required at all times:
  19.     //
  20.     //   sloodlepwd = the prim password for accessing thesite
  21.     //
  22.     // Otherwise, there are two modes of operation.
  23.     // In Mode 1, a LoginZone is reporting its own size and position. That requires the following parameters:
  24.     //
  25.     //   sloodlepos = a vector "<x,y,z>" indicating the position of the loginzone
  26.     //   sloodlesize = a vector "<x,y,z>" indicating the size of the loginzone
  27.     //   sloodleregion = the name of the region where the loginzone is located
  28.     //
  29.     // In Mode 2, a LoginZone is reporting that a user has teleported in to authenticate their avatar, requiring the following parameters:
  30.     //
  31.     //   sloodlepos = the position at which the avatar has appeared
  32.     //   sloodleavname = the name of the avatar
  33.     //   sloodleuuid = the UUID of the avatar
  34.     //
  35.     // ***** Note: the script assumes Mode 2 if either the avatar name or the UUID is specified *****
  36.  
  37.     
  38.     // In either mode, the success response status code will be 1 ("OK").
  39.     // Various errors codes may also be used.
  40.     // The avatar UUID (if specified) will be returned in the request for Mode 2, according to the communications specification.
  41.  
  42.  
  43.     require_once('../config.php');
  44.     require_once(SLOODLE_DIRROOT.'/sl_debug.php');
  45.     require_once(SLOODLE_DIRROOT.'/lib/sl_lsllib.php');
  46.  
  47.     // Note: parameters sloodlepwd, sloodleavname, and sloodleuuid will be handled automatically by the API
  48.     
  49.     // Construct an LSL handler and process the basic request data
  50.     sloodle_debug_output("Constructing an LSL handler...<br/>");
  51.     $lsl new SloodleLSLHandler();
  52.     sloodle_debug_output("Processing basic request data...<br/>");
  53.     $lsl->request->process_request_data();
  54.     
  55.     // Ensure that the request is authenticated by prim password
  56.     sloodle_debug_output("Authenticating request...<br/>");
  57.     $lsl->request->authenticate_request();
  58.     
  59.     // Are we using Mode 1?
  60.     if ($lsl->request->get_avatar_name(== NULL && $lsl->request->get_avatar_uuid(== NULL{
  61.         // Mode 1
  62.         sloodle_debug_output("***** Mode 1 *****<br/>");
  63.         
  64.         // We require therefore that position, size and region are all specified
  65.         sloodle_debug_output("Obtaining Mode 1 parameters...<br/>");
  66.         $sloodlepos $lsl->request->required_param('sloodlepos'PARAM_RAW);
  67.         $sloodlesize $lsl->request->required_param('sloodlesize'PARAM_RAW);
  68.         $sloodleregion $lsl->request->required_param('sloodleregion'PARAM_RAW);
  69.         
  70.         // Remove the decimal places
  71.         $sloodlepos sloodle_round_vector($sloodlepos);
  72.         $sloodlesize sloodle_round_vector($sloodlesize);
  73.         
  74.         sloodle_debug_output("<hr><pre>sloodlepos=$sloodlepos\nsloodlesize=$sloodlesize\nsloodleregion=$sloodleregion</pre><hr>");
  75.         
  76.         // Attempt to store all the data
  77.         sloodle_debug_output("Storing LoginZone data...<br/>");
  78.         if (sloodle_set_loginzone_pos($sloodlepos&& sloodle_set_loginzone_size($sloodlesize&& sloodle_set_loginzone_region($sloodleregion)) {
  79.             // Everything seems fine
  80.             sloodle_debug_output("-&gt;Success.<br/>");
  81.             sloodle_debug_output("Preparing response...<br/>");
  82.             $lsl->response->set_status_code(1);
  83.             $lsl->response->set_status_descriptor('OK');
  84.         else {
  85.             // Something went wrong
  86.             sloodle_debug_output("-&gt;Failed.<br/>");
  87.             sloodle_debug_output("Preparing response...<br/>");
  88.             $lsl->response->set_status_code(-101);
  89.             $lsl->response->set_status_descriptor('SYSTEM');
  90.             $lsl->response->add_data_line('Failed to store the LoginZone data.');
  91.         }        
  92.         
  93.     else {
  94.         // Mode 2
  95.         sloodle_debug_output("***** Mode 2 *****<br/>");
  96.         
  97.         // We require therefore that position is specified
  98.         sloodle_debug_output("Obtaining Mode 2 parameters...<br/>");
  99.         $sloodlepos $lsl->request->required_param('sloodlepos'PARAM_RAW);
  100.         // Remove the decimal places
  101.         $sloodlepos sloodle_round_vector($sloodlepos);
  102.         
  103.         // Make sure the avatar name and UUID were specified
  104.         $sloodleuuid $lsl->request->required_param('sloodleuuid'PARAM_RAW);
  105.         $sloodleavname $lsl->request->required_param('sloodleavname'PARAM_RAW);
  106.         
  107.         // Check to see if the user identified in the request is already in the database
  108.         sloodle_debug_output("Checking if avatar is already in the database...<br/>");
  109.         $sloodle_user_exists $lsl->user->find_sloodle_user($sloodleuuid$sloodleavname);
  110.         if ($sloodle_user_exists === TRUE{
  111.             // Nothing we need to do - just stop here
  112.             sloodle_debug_output("-&gt;Avatar already registered.<br/>");
  113.             $lsl->response->set_status_code(301);
  114.             $lsl->response->set_status_descriptor('MISC_REGISTER');
  115.             $lsl->response->render_to_output();
  116.             exit();
  117.         }
  118.         
  119.         // Attempt to find the Sloodle user specified by login position in the request
  120.         sloodle_debug_output("Finding Sloodle user by loginzone...<br/>");
  121.         $result $lsl->user->find_sloodle_user_by_login_position($sloodlepos);
  122.         if ($result === TRUE{
  123.             // Success
  124.             sloodle_debug_output("-&gt;Success.<br/>");
  125.             // Store the avatar UUID and name
  126.             sloodle_debug_output("Adding avatar details...<br/>");
  127.             $lsl->user->sloodle_user_cache->uuid $lsl->request->get_avatar_uuid();
  128.             $lsl->user->sloodle_user_cache->avname $lsl->request->get_avatar_name();
  129.             // Remove the loginzone details
  130.             sloodle_debug_output("Removing login position...<br/>");
  131.             $lsl->user->sloodle_user_cache->loginposition '';
  132.             $lsl->user->sloodle_user_cache->loginpositionexpires '';
  133.             $lsl->user->sloodle_user_cache->loginpositionregion '';
  134.             
  135.             // Update the database
  136.             sloodle_debug_output("Updating database with new user data...<br/>");
  137.             $db_result $lsl->user->update_sloodle_user_cache_to_db();
  138.             if ($db_result === TRUE{
  139.                 // Success
  140.                 sloodle_debug_output("-&gt;Success.<br/>");
  141.                 // Our response will be very simple...
  142.                 sloodle_debug_output("Preparing response...<br/>");
  143.                 $lsl->response->set_status_code(1);
  144.                 $lsl->response->set_status_descriptor('OK');
  145.                 
  146.             else {
  147.                 // Something went wrong
  148.                 if (is_string($result)) {
  149.                     sloodle_debug_output("-&gt;Failed: $result<br/>");
  150.                 else {
  151.                     sloodle_debug_output("-&gt;Failed (unknown reason).<br/>");
  152.                 }
  153.                 
  154.                 // Report the problem back in the response
  155.                 sloodle_debug_output("Preparing response...<br/>");
  156.                 $lsl->response->set_status_code(-102);
  157.                 $lsl->response->set_status_descriptor('SYSTEM');
  158.                 if (is_string($result)) $lsl->response->add_data_line($result);
  159.             }
  160.             
  161.         else {
  162.             // Something went wrong
  163.             if (is_string($result)) {
  164.                 sloodle_debug_output("-&gt;Failed: $result<br/>");
  165.             else {
  166.                 sloodle_debug_output("-&gt;Failed (unknown reason).<br/>");
  167.             }
  168.             
  169.             // Report the problem back in the response
  170.             sloodle_debug_output("Preparing response...<br/>");
  171.             $lsl->response->set_status_code(-301);
  172.             $lsl->response->set_status_descriptor('USER_AUTH');
  173.             if (is_string($result)) $lsl->response->add_data_line($result);
  174.             else $lsl->response->add_data_line('No user found with specified Login Position.');
  175.         }
  176.         
  177.     }
  178.     
  179.     // Output the response
  180.     sloodle_debug_output("Outputting response...<br/>");
  181.     $lsl->response->render_to_output();
  182.     exit();
  183.  
  184. ?>

Documentation generated on Tue, 04 Mar 2008 15:08:47 +0000 by phpDocumentor 1.4.0