User:SignpostMarv Martin/PHP/lsl fu.php

From Second Life Wiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

For an actually readable and color-coded version of the code below, click here

<?php
class lsl_processor
{
// this class is a part of SignpostMarv Martin's "UHU" codebase.
// All code is my own eccentricity, except for a slightly modified version of VeloxSeverine's $_POST fixer
	public static $headers;
	public static $llHTTPRequestPayload;
	public static $get;
	public static $post;
	public static $fixedPOST;
	function lsl_processor()
	{
		if(EXPLICIT_FIX_POST)
		{
			$_POST = lsl_processor::fix_post();
		}
		self::$headers = self::parse_llHTTPRequest_headers();
		self::$llHTTPRequestPayload = self::$get + lsl_processor::$post;
	}
	function parse_llHTTPRequest_headers()
	{
		$position_array = explode(', ',substr($_SERVER['HTTP_X_SECONDLIFE_LOCAL_POSITION'],1,-1));
		$rotation_array = explode(', ',substr($_SERVER['HTTP_X_SECONDLIFE_LOCAL_ROTATION'],1,-1));
		$velocity_array = explode(', ',substr($_SERVER['HTTP_X_SECONDLIFE_LOCAL_VELOCITY'],1,-1));
		$position_of_left_bracket = strrpos($_SERVER['HTTP_X_SECONDLIFE_REGION'],'(');
		$region_name = trim(substr($_SERVER['HTTP_X_SECONDLIFE_REGION'],0,$position_of_left_bracket));
		list($global_x,$global_y) = explode(',',trim(substr($_SERVER['HTTP_X_SECONDLIFE_REGION'],$position_of_left_bracket + 1,-1)));
		$region_array = array($region_name,(integer)$global_x,(integer)$global_y);
		$headers = array('Accept'=>$_SERVER['HTTP_ACCEPT'],
			'User-Agent'=>$_SERVER['HTTP_USER_AGENT'],
			'X-SecondLife-Shard'=>$_SERVER['HTTP_X_SECONDLIFE_SHARD'],
			'X-SecondLife-Object-Name'=>$_SERVER['HTTP_X_SECONDLIFE_OBJECT_NAME'],
			'X-SecondLife-Object-Key'=>$_SERVER['HTTP_X_SECONDLIFE_OBJECT_KEY'],
			'X-SecondLife-Region'=>$_SERVER['HTTP_X_SECONDLIFE_REGION'],
			'X-SecondLife-Region-Array'=> $region_array,
			'X-SecondLife-Local-Position'=>array(	'x'=>(float)$position_array[0],
													'y'=>(float)$position_array[1],
													'z'=>(float)$position_array[2]),
			'X-SecondLife-Local-Rotation'=>array(	'x'=>(float)$rotation_array[0],
													'y'=>(float)$rotation_array[1],
													'z'=>(float)$rotation_array[2],
													'w'=>(float)$rotation_array[3]),
			'X-SecondLife-Local-Velocity'=>array(	'x'=>(float)$velocity_array[0],
													'y'=>(float)$velocity_array[1],
													'z'=>(float)$velocity_array[2]),
			'X-SecondLife-Owner-Name'=>$_SERVER['HTTP_X_SECONDLIFE_OWNER_NAME'],
			'X-SecondLife-Owner-Key'=>$_SERVER['HTTP_X_SECONDLIFE_OWNER_KEY']
		);
		if(!strstr($headers['X-SecondLife-Owner-Name'],' ') && $_POST['X-SecondLife-Owner-Name'])
		{
			$headers['X-SecondLife-Owner-Name'] == $_POST['X-SecondLife-Owner-Name'];
		}
		if(is_array($headers))
		{
			return $headers;
		}
		else
		{
			return FALSE;
		}
	}
	function fix_post()
	{
// Code by VeloxSeverine
//  http://lslwiki.net/lslwiki/wakka.php?wakka=llHTTPRequest&show_comments=1#comment
		$p_data = implode('', file('php://input'));
		$p_data = explode('&', $p_data);
		$fixedPOST = array();
		foreach ($p_data as $p_val)
		{
			$d_parts = explode('=', $p_val);
			$fixedPOST[$d_parts[0]] = urldecode($d_parts[1]);
		}
		return $fixedPOST;
	}
	function process_agent_info($agent_info)
	{			
		$always_run = (bool)($agent_info & AGENT_ALWAYS_RUN);
		$attachments = (bool)($agent_info & AGENT_ATTACHMENTS);
		$away = (bool)($agent_info & AGENT_AWAY);
		$busy = (bool)($agent_info & AGENT_BUSY);
		$crouching = (bool)($agent_info & AGENT_CROUCHING);
		$flying = (bool)($agent_info & AGENT_FLYING);
		$in_air = (bool)($agent_info & AGENT_IN_AIR);
		$mouselook = (bool)($agent_info & AGENT_MOUSELOOK);
		$on_object = (bool)($agent_info & AGENT_ON_OBJECT);
		$scripted = (bool)($agent_info & AGENT_SCRIPTED);
		$sitting = (bool)($agent_info & AGENT_SITTING);
		$typing = (bool)($agent_info & AGENT_TYPING);
		$walking = (bool)($agent_info & AGENT_WALKING);
		
		$info = array(	'always run'=>$always_run,
						'attachments'=>$attachments,
						'away'=>$away,
						'busy'=>$busy,
						'crouching'=>$crouching,
						'flying'=>$flying,
						'in air'=>$in_air,
						'mouselook'=>$mouselook,
						'on object'=>$on_object,
						'scripted'=>$scripted,
						'sitting'=>$sitting,
						'typing'=>$typing,
						'walking'=>$walking);
		foreach($info as $key => $val)
		{
			if($val == '')
			{
				$info[$key] = 0;
			}
		}
		return $info;
	}
}
?>