Don't click here unless you want to be banned.

LSL Wiki : httpHeaderCrunch

HomePage :: PageIndex :: RecentChanges :: RecentlyCommented :: UserSettings :: You are crawl338.us.archive.org
Hi.
Posting this so maybe it helps others out. it's pretty basic.

<?php
    
//SL Class.9
    //This class can pull info from SL headers. 
    //Currently for http_req

    //TODO: Add Email header parsing when I have a few free mins... If someone else wants to, go ahead. 
    //I don't rely on SLEmail as much anymore, so it isn't a priority
    //Find any bugs? Ways to make it better? Please share :)
    //Max Case - July 8, 2006    
    
  
class secondlife {
     var 
$UserAgent;
     var 
$UserAgentVersion;
     var 
$Shard//Production or Testing?

     
var $HostNumber
     var 
$Region;
     var 
$LocalPos;
     var 
$LocalRot;
     var 
$LocalVel;
     var 
$ObjectKey;
     var 
$ObjectName;
     var 
$OwnerKey;
     var 
$OwnerName;

 
// Class constructor
 
function secondlife() {

 }

 
// Returns class name
 
function GetClassName() {
    return 
'secondlife';
 }

 
//This take in $_SERVER for args at the moment.
 //Loads up all the vars.
 
 
function ParseHeaders($headers) {
     foreach( 
$headers as $key => $value )
     {
         
//Loop though values
         
        
if($key == "HTTP_USER_AGENT" //HTTP_USER_AGENT is Second Life LSL/1.10.0(32) (http://secondlife.com)
        
{
            
$this->SetUserAgent($value);
            
$this->SetUserAgentVersion($value);
        }
        else if(
$key == "HTTP_VIA")//HTTP_VIA is 1.1 sim480.agni.lindenlab.com:3128 (squid/2.5.STABLE9)
        
{
            
$this->SetHostNumber($value);
        }
        else if(  
strpos($key,"HTTP_X_SECONDLIFE_") !== false )
        {
            
$temp explode("HTTP_X_SECONDLIFE_"$key);
            
$headerinfo $temp[1];

            if(
$headerinfo == "LOCAL_POSITION")
            {
//Parse out ( ) in SetLocalPos
                
$this->SetLocalPos($value);
            }
            else if(
$headerinfo == "LOCAL_ROTATION")
            {
                
$this->SetLocalRot($value);
            }
            else if(
$headerinfo == "LOCAL_VELOCITY")
            {
                
$this->SetLocalVel($value);
            }
            else if(
$headerinfo == "OBJECT_KEY")
            {
                
$this->SetObjectKey($value);
            }
            else if(
$headerinfo == "OBJECT_NAME")
            {
                
$this->SetObjectName($value);
            }
            else if(
$headerinfo == "OWNER_KEY")
            {
                
$this->SetOwnerKey($value);
            }
            else if(
$headerinfo == "OWNER_NAME")
            {
                
$this->SetOwnerName($value);
            }
            else if(
$headerinfo == "REGION")
            {
                
$this->SetRegion($value);
            }
            else if(
$headerinfo == "SHARD")
            {
                
$this->SetShard($value);
            }
        }
     }
 }

 function 
GetAll() {
 
  return 
compact(
        
$this->UserAgent,
        
$this->UserAgentVersion,
        
$this->Shard//Production or Testing?

        
$this->HostNumber
        
$this->Region,
        
$this->RegionCorners,
        
$this->LocalPos,
        
$this->LocalRot,
        
$this->LocalVel,
        
$this->ObjectKey,
        
$this->ObjectName,
        
$this->OwnerKey,
        
$this->OwnerName
    
); //compact it all into array, return it
 
}

 function 
GetUserAgent() {
    return 
$this->UserAgent;
 }

 function 
GetUserAgentVersion() {
    return 
$this->UserAgentVersion;
 }

 function 
GetShard() {
    return 
$this->Shard;
 }

 function 
GetHostNumber() {
    return 
$this->HostNumber;
 }

 function 
GetRegion() {
    return 
$this->Region;
 }

 function 
GetLocalPos() {
    return 
$this->LocalPos;
 }

 function 
GetLocalRot() {
    return 
$this->LocalRot;
 }

 function 
GetLocalVel() {
    return 
$this->LocalVel;
 }

 function 
GetObjectKey() {
    return 
$this->ObjectKey;
 }

 function 
GetObjectName() {
    return 
$this->ObjectName;
 }

 function 
GetOwnerKey() {
    return 
$this->OwnerKey;
 }

 function 
GetOwnerName() {
    return 
$this->OwnerName;
 }

 function 
SetUserAgent($UserAgent) { 
     
    
$this->UserAgent $UserAgent;
 }

//Sets to 0 if Not SL
//Use that as indicator of SL or not sl?
//good for one script which can handle browser req's, or SL req's
 
function SetUserAgentVersion($UserAgentVersion
 {
     if(  
strpos($UserAgentVersion,"Second Life") !== false )
     {     
         if (
preg_match("/LSL\/(.*)/"$UserAgentVersion$matches))
         {           
             
$temp explode("("$matches[1]);
             
$ua_version $temp[0];
         }
     
         
$this->UserAgentVersion $ua_version;
     }
     else
     {
         
$this->UserAgentVersion 0;
     }   
 }

 function 
SetShard($Shard) {
    
$this->Shard $Shard;
 }

 function 
SetHostNumber($HostNumber
 {  
    if (
preg_match("/sim(.*)/"$HostNumber$matches))
    {   
//grab region_sim
        
$temp explode("."$matches[1]);
        
$region_sim_number $temp[0];
    }
    
    
$this->HostNumber $region_sim_number;
 }

 function 
SetRegion($Region
 {
    
$foo =  explode(' ('$Region2);
    
//explode region, and create world corner coords.     
    
    
$temp $this->burst_coords($this->remove_brackets$foo[1] ));
    
$reg_corners = array();
    
$reg_corners['x'] = $temp[0];
    
$reg_corners['y'] = $temp[1];
    
    
$this->RegionCorners $reg_corners;
    
$this->Region $foo[0];    
 }

 function 
SetLocalPos($LocalPos
 {
    
$temp $this->burst_coords($this->remove_brackets$LocalPos ));
    
$position = array();
    
$position['x'] = $temp[0];
    
$position['y'] = $temp[1];
    
$position['z'] = $temp[2];

    
$this->LocalPos $position;
 }

 function 
SetLocalRot($LocalRot
 { 
//returns x,y,z,w
    
$temp $this->burst_coords($this->remove_brackets$LocalRot ));
    
$rotation = array();
    
$rotation['x'] = $temp[0];
    
$rotation['y'] = $temp[1];
    
$rotation['z'] = $temp[2];
    
$rotation['w'] = $temp[3];

    
$this->LocalRot $rotation;
 }

 function 
SetLocalVel($LocalVel
 {
     
$temp $this->burst_coords($this->remove_brackets$LocalVel ));
     
$velocity = array();
     
$velocity['x'] = $temp[0];
     
$velocity['y'] = $temp[1];
     
$velocity['z'] = $temp[2];

    
$this->LocalVel $velocity;
 }

 function 
SetObjectKey($ObjectKey) {
    
$this->ObjectKey $ObjectKey;
 }

 function 
SetObjectName($ObjectName) {
    
$this->ObjectName $ObjectName;
 }

 function 
SetOwnerKey($OwnerKey) {
     
$this->OwnerKey $OwnerKey;
 }

 function 
SetOwnerName($OwnerName) {
     
$this->OwnerName $OwnerName;
 }

//Little utility / string cleaner functions. 
//This removes brackets, and spaces :> 
function remove_brackets($foo)
{
    return 
trim($foo" ())");
}
 function 
burst_coords($foo//CSV ", "
 
{
     return 
explode", "$foo);
 }
}

/* EXAMPLE */
/*
$testheader = array(
"HTTP_USER_AGENT"=>"Second Life LSL/1.10.0(32) (http://secondlife.com)",
"HTTP_VIA"=>"1.1 sim400.agni.lindenlab.com:3128 (squid/2.5.STABLE9)",
"HTTP_X_SECONDLIFE_LOCAL_POSITION"=>"(34.408112, 159.722198, 68.476143)",
"HTTP_X_SECONDLIFE_LOCAL_ROTATION"=>"(0.000000, 0.000000, 0.000000, 1.000000)",
"HTTP_X_SECONDLIFE_LOCAL_VELOCITY"=>"(0.000000, 0.000000, 0.000000)",
"HTTP_X_SECONDLIFE_OBJECT_KEY"=>"4d97ef9f-3e36-efe7-ffd5-c210a973ec1b",
"HTTP_X_SECONDLIFE_OBJECT_NAME"=>"Flagpole .5",
"HTTP_X_SECONDLIFE_OWNER_KEY"=>"6d869ee0-e19e-4afa-8431-b85705198a0c",
"HTTP_X_SECONDLIFE_OWNER_NAME"=>"Max Case",
"HTTP_X_SECONDLIFE_REGION"=>"Yoyo slsls (254720, 258048)",
"HTTP_X_SECONDLIFE_SHARD"=>"Production"
);


$sl = new secondlife; //Make the object
$sl->ParseHeaders($testheader);

print_r($sl->GetAll());
*/
?>
There is one comment on this page. [Display comments/form]