BlueShoes Application Framework made with PHP http://www.blueshoes.org/


Packageindex Classtrees Modulegroups Elementlist Report XML Files

File: C:/usr/local/lib/php/blueshoes-4.2/core/net/http/Bs_Browscap.class.php
BlueShoes Application Framework - net/http

Bs_Browscap

Bs_Object
   |
  +-- Bs_Browscap

Browser Capture Class.

 

public class Bs_Browscap extends Bs_Object

Browser Capture Class.
detects a lot. can even use a temp redirect page to grab much information using javascript.wishlist:- detect junkbuster/muffin etc. it's annoying if clients send different and wronguser-agent and http-referer each time. I think that especially the user-agent couldbe detected.- re-detect previous client machines using a hash.dependencies: Bs_Url, BsDb for detectUserType (with the kb),

Authors
Version4.0.$id$
Copyrightblueshoes.org

 

Methods inherited from Bs_Object

isex, isexception, tostring, tohtml, persist, unpersist, bs_object, bbsetoutput, bbawake, bbisawake, bbxmsg, bbxfunctionstart, bbxfunctionend, bbxecho, bbxvar, bbxvardump, bbforcetrace, bbbufferstart, bbbufferget, bbbufferendflush, bbbufferendclean

Public Method Summary

void

Bs_Browscap()

Constructor.
void

detectUserType()

tells what kind of 'user' the user is, based on
bool

isWebCrawler(string $userAgent, [ string $ip, string $hostName ])

better use detectUserType()! this is for testing only.
void

runTest()

Make cookie and javascript tests. For this we need to send an html file to the
bool

is(string $s)

tells if the client browser IS or HAS what you ask for. a regexp is being

Private Method Summary

void

compute()

runTest() has been done, now let's compute the data.
array

_getOsInfo(string &$userAgent)

reads out os information from the userAgent string. returns a
array

_getBrowserInfo(string $userAgent)

reads out browser information from the userAgent string. returns a
bool

_performBrowserSearch(array $data)

note: browserMinorVerlet is not used for the compare.
void

_insert(string $k, mixed $v)

inserts a key/value pair into the knowledge hash.
void

_test_cookies()

void

isEmailCrawler( $userAgent, string $ip, string $hostName)

Warning: documentation is missing.
void

isCrawler( $userAgent, string $ip, string $hostName)

Warning: documentation is missing.
void

bcCheck()

Warning: documentation is missing.
void

bsBcRedirect()

Warning: documentation is missing.
void

ieCheckPlugin( $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $head, $head, $head, $head, $head, $head, $head, $head, $head, $head, $head, $head, $head, $head, $head, $page, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, string $regex_windows, string $regex_mac)

Warning: documentation is missing.
void

checkFlash()

Warning: documentation is missing.
void

something()

Warning: documentation is missing.
void

_performLanguageSearch( $data)

Warning: documentation is missing.
void

_getLanguages()

Warning: documentation is missing.
void

_get_ip()

Warning: documentation is missing.

Public Field Summary

object [unknown]

$bsDb

a db instance, used in detectUserType to access the kb.
string

$runTestTemplate

if set then the html template at this location (absolute path)

Private Field Summary

array

$data

*****************************************************************************************
array

$_getVars

reference to the HTTP_GET_VARS.
unknown

$runTestTimeout

you may want to use the browsertest page as intro page. if so,
unknown

$this

Private Constant Summary

BS_BROWSCAP_VERSION >>4.0.$x$<< Warning: documentation is missing.

Public Method Details

Bs_Browscap

public void Bs_Browscap( )

  Constructor.

Returns void


detectUserType

public void detectUserType( )

  tells what kind of 'user' the user is, based on
ip and ip-rangehostnameuser-agent (browser string)NOTE:in order to be able to query the kb for crawler-data, we need a refto a db instance. so set $this->bsDb first.

Returns void

See Also $this

isWebCrawler

public bool isWebCrawler( string $userAgent, [ string $ip, string $hostName ] )

  better use detectUserType()! this is for testing only.
if it's a web crawler we might want to send different pages, andwe certainly don't want a redirect for browser sniffing.

Parameter
string $userAgent
string $ip = >>NULL,<<
string $hostName = >>NULL<<
Returns bool


runTest

public void runTest( )

  Make cookie and javascript tests. For this we need to send an html file to the
client and redirect to the same page.NOTE: this method does EXIT at the end.

Returns void


is

public bool is( string $s )

  tells if the client browser IS or HAS what you ask for. a regexp is being
fired for it each time.example I:you wanna know if the browser is opera version 5 or higher.$client->is('b:OP5Up');should also work with the 'browser language' somehow. dunno. not supported yet.

Parameter
string $s
search phrase, format 'l:lang;b:browser'
Returns bool

TRUE on success, FALSE on failure.


Private Method Details

compute

private void compute( )

  runTest() has been done, now let's compute the data.

Returns void


_getOsInfo

private array _getOsInfo( string &$userAgent )

  reads out os information from the userAgent string. returns a
vector with 2 elements, [0] being the os and [1] the osVersion.possible values are:OS OS Versionwin 31,95,98,NT,2000,ME,XPos2 os2mac 68k, ppc*nix sun|sun4|sun5|suni86irix|irix5|irix6|...hpux9|hpux10|...aix|aix1|aix2|aix3|...dec, vms, sco, unixware, mpras, reliant, sinix, bsd|freebsd, linuxunknown unknown

Parameter
string &$userAgent
Returns array

(vector with 2 elements)

Author(s) ,

_getBrowserInfo

private array _getBrowserInfo( string $userAgent )

  reads out browser information from the userAgent string. returns a
vector with 7 elements:[0] = browser ('ie', 'ns' etc)[1] = browserFullVersion ('6.0b')[2] = browserMajorVersion ('6')[3] = browserMinorVersion ('0')[4] = browserMinorVerlet ('b')[5] = isGecko[6] = browserBuild

Parameter
string $userAgent
Returns array

(vector with 5 elements)

Author(s) ,

_performBrowserSearch

private bool _performBrowserSearch( array $data )

  note: browserMinorVerlet is not used for the compare.
param $data: $this->is() was called with a param like 'b:OP5Up'.this gets parsed into a 5-element vector like this:array('b:OP5Up', 'OP', '5', '', 'Up');here the 4th element is empty cause the browser had nominor version (like 'b:OP5.5Up').

Parameter
array $data
vector with 5 elements. see above.
Returns bool

TRUE on success, FALSE on failure.

See Also $this

_insert

private void _insert( string $k, mixed $v )

  inserts a key/value pair into the knowledge hash.

Parameter
string $k
(key)
mixed $v
(value)
Returns void


_test_cookies

private void _test_cookies( )

 

Returns void


isEmailCrawler

private void isEmailCrawler( $userAgent, string $ip, string $hostName )

 

Warning: documentation is missing.

Parameter
$userAgent
Warning: documentation is missing.
string $ip
Warning: documentation is missing.
string $hostName
Warning: documentation is missing.
Returns void


isCrawler

private void isCrawler( $userAgent, string $ip, string $hostName )

 

Warning: documentation is missing.

Parameter
$userAgent
Warning: documentation is missing.
string $ip
Warning: documentation is missing.
string $hostName
Warning: documentation is missing.
Returns void


bcCheck

private void bcCheck( )

 

Warning: documentation is missing.

Returns void


bsBcRedirect

private void bsBcRedirect( )

 

Warning: documentation is missing.

Returns void


ieCheckPlugin

private void ieCheckPlugin( $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $dummyHs}, $head, $head, $head, $head, $head, $head, $head, $head, $head, $head, $head, $head, $head, $head, $head, $page, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, &$userAgent, string $regex_windows, string $regex_mac )

 

Warning: documentation is missing.

Parameter
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$dummyHs}
Warning: documentation is missing.
$head
Warning: documentation is missing.
$head
Warning: documentation is missing.
$head
Warning: documentation is missing.
$head
Warning: documentation is missing.
$head
Warning: documentation is missing.
$head
Warning: documentation is missing.
$head
Warning: documentation is missing.
$head
Warning: documentation is missing.
$head
Warning: documentation is missing.
$head
Warning: documentation is missing.
$head
Warning: documentation is missing.
$head
Warning: documentation is missing.
$head
Warning: documentation is missing.
$head
Warning: documentation is missing.
$head
Warning: documentation is missing.
$page
Warning: documentation is missing.
&$userAgent
Warning: documentation is missing.
&$userAgent
Warning: documentation is missing.
&$userAgent
Warning: documentation is missing.
&$userAgent
Warning: documentation is missing.
&$userAgent
Warning: documentation is missing.
&$userAgent
Warning: documentation is missing.
&$userAgent
Warning: documentation is missing.
&$userAgent
Warning: documentation is missing.
&$userAgent
Warning: documentation is missing.
&$userAgent
Warning: documentation is missing.
&$userAgent
Warning: documentation is missing.
&$userAgent
Warning: documentation is missing.
&$userAgent
Warning: documentation is missing.
&$userAgent
Warning: documentation is missing.
&$userAgent
Warning: documentation is missing.
&$userAgent
Warning: documentation is missing.
&$userAgent
Warning: documentation is missing.
&$userAgent
Warning: documentation is missing.
&$userAgent
Warning: documentation is missing.
&$userAgent
Warning: documentation is missing.
&$userAgent
Warning: documentation is missing.
&$userAgent
Warning: documentation is missing.
&$userAgent
Warning: documentation is missing.
&$userAgent
Warning: documentation is missing.
&$userAgent
Warning: documentation is missing.
&$userAgent
Warning: documentation is missing.
&$userAgent
Warning: documentation is missing.
&$userAgent
Warning: documentation is missing.
&$userAgent
Warning: documentation is missing.
&$userAgent
Warning: documentation is missing.
&$userAgent
Warning: documentation is missing.
&$userAgent
Warning: documentation is missing.
&$userAgent
Warning: documentation is missing.
&$userAgent
Warning: documentation is missing.
&$userAgent
Warning: documentation is missing.
&$userAgent
Warning: documentation is missing.
&$userAgent
Warning: documentation is missing.
&$userAgent
Warning: documentation is missing.
&$userAgent
Warning: documentation is missing.
&$userAgent
Warning: documentation is missing.
&$userAgent
Warning: documentation is missing.
&$userAgent
Warning: documentation is missing.
&$userAgent
Warning: documentation is missing.
&$userAgent
Warning: documentation is missing.
&$userAgent
Warning: documentation is missing.
&$userAgent
Warning: documentation is missing.
&$userAgent
Warning: documentation is missing.
&$userAgent
Warning: documentation is missing.
&$userAgent
Warning: documentation is missing.
&$userAgent
Warning: documentation is missing.
&$userAgent
Warning: documentation is missing.
&$userAgent
Warning: documentation is missing.
&$userAgent
Warning: documentation is missing.
&$userAgent
Warning: documentation is missing.
&$userAgent
Warning: documentation is missing.
&$userAgent
Warning: documentation is missing.
&$userAgent
Warning: documentation is missing.
&$userAgent
Warning: documentation is missing.
&$userAgent
Warning: documentation is missing.
&$userAgent
Warning: documentation is missing.
&$userAgent
Warning: documentation is missing.
&$userAgent
Warning: documentation is missing.
string $regex_windows
Warning: documentation is missing.
string $regex_mac
Warning: documentation is missing.
Returns void


checkFlash

private void checkFlash( )

 

Warning: documentation is missing.

Returns void


something

private void something( )

 

Warning: documentation is missing.

Returns void


_performLanguageSearch

private void _performLanguageSearch( $data )

 

Warning: documentation is missing.

Parameter
$data
Warning: documentation is missing.
Returns void


_getLanguages

private void _getLanguages( )

 

Warning: documentation is missing.

Returns void


_get_ip

private void _get_ip( )

 

Warning: documentation is missing.

Returns void


Public Field Details

$bsDb

public object [unknown] $bsDb

>><<

a db instance, used in detectUserType to access the kb.

See Also $this

$runTestTemplate

public string $runTestTemplate

>><<

if set then the html template at this location (absolute path)
will be used in runTest().the special placeholder __HEAD__ in the template will be replacedwith all the needed javascript and stuff.your body tag needs to do onLoad="bcCheck();".


Private Field Details

$data

private array $data

>>array()<<

*****************************************************************************************
Data hash holding the key/value pairs with the information. If something isnot set or null it means 'not known' while false means 'no'.Normally we would write var names like 'hasFrames' instead of just 'frames' and'isJavaScriptEnabled' instead of 'javaScriptEnabled' but to save characters wedon't do that here.-------------------------------------------------------------------------------------------BROWSER, BASIC-------------------------------------------------------------------------------------------KEY: userAgent (string):The browser string as we get it from the client.NOTE: The client can send *anything*. Some users even have stupid anonymizersand banner killers installed which send a random client string on each request. Sucks!Also it is usual that less common browsers identify themselves as well known ones.Example: 'Mozilla/4.5 [en] (X11; U; Linux 2.2.9 i586)'Supported: all afaik "As Far As I Know", (sent in the header request).KEY: browser (string):'ie', 'ns' etc.Supported: depends on userAgenttodo: i'd like to classify all moz-browsers as gecko (mozilla, netscape, konqueror etc)KEY: isGecko (bool):tells if the browser uses the gecko engine.that should be TRUE for things like mozilla, netscape, galeon, "konqueror" (sp?) etc.check browserBuild for the versionKEY: browserMajorVersion (int):For "internet explorer 6.0b" this would be '6'.Supported: depends on userAgentKEY: browserMinorVersion (int):For "internet explorer 6.0b" this would be '0'.Supported: depends on userAgentKEY: browserMinorVerlet (mixed):For "internet explorer 6.0b" this would be 'b'.Supported: depends on userAgentKEY: browserFullVersion (string):For "internet explorer 6.0b" this would be '6.0b'.Supported: depends on userAgentKEY: browserBuild (string):2do...for gecko: from the browser string "Gecko/20020530" => "20020530"so it's a date.20020530 is the release version of moz 1.0 moz 1.0 identifies as 5.0, revision 1.0.0, see here: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.0.0) Gecko/2002053020020826 is the release version of moz 1.1 moz 1.1 identified as 5.0, revision 1.1, see here: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.1) Gecko/20020826KEY: browserCodeName (string):The nickname of the browser. Invented by netscape cause their browser was called 'mozilla'.Comes from "mosaic killer", "mosaic killa". ie identifies itself as 'mozilla' aswell. So Iguess most clients do, which makes this var pretty useless(?)Supported: Needs javascript. I think that it could be read out from the userAgent aswell,cause 'mozilla' is often in there. dunno.KEY: browserLanguages (array holding strings):ISO codes like 'en' or extended like 'en-uk', 'de-ch' etc.Supported: all afaik (sent in the header request).KEY: webCrawler (bool):2do...If the client is a webcrawler. For example search engines crawl the web to update theirindexes. So if we detect a crawler, one can send a crawler-optimized webpage, for example.Supported: depends on userAgent, maybe ip/hostname.KEY: emailCrawler (bool):2do...If the client is an email crawler. I don't see how we can detect these, cause i guess theyusually identify themself as a standard browser. Maybe using ranges of known ip addresses?Email crawlers spider the web to get email addresses, so that's something we don't wanna have.Supported: depends on userAgent, maybe ip/hostname.KEY: wap (bool):2do...If the client is a wap mobile phone. => use wmlSupported: depends on userAgentKEY: pda (bool):2do...If the client is a portable device. Like palm or handspring.Dunno what language they need. Dul I thin .Supported: depends on userAgentKEY: os (string):One of 'win', 'mac', 'linux', 'beos', 'freebsd', 'solaris', ...Supported: depends on userAgentKEY: osVersion (string):Something like '95', '98', '2000', 'xp', 'ppc', ...Supported: depends on userAgentKEY: cpuClass (string):Something like 'x86'.Supported: only ie afaik, not netscape, needs javascript.-------------------------------------------------------------------------------------------CLIENT-------------------------------------------------------------------------------------------KEY: ip (string 15 chars, IPv6 would be 24):Example: 217.162.141.109Sometimes ISP Cache Servers/Proxies replace the REMOTE_ADDR with their ip address.If so, they usually add the originators ip to the HTTP_X_FORWARDED_FOR header. butthere are 2 problems:1) Anyone can add such a header, and thus we cannot use this as the real ip address.2) Sometimes this header value is a comma separated list cause there are more proxiesin a row, and each one adds the previous host to the list.Though you can still log this information.I have read once that using netscape and a java applet, it would be possible to getthe real ip address of a client inside a company using a proxy server. hrm?Supported: alwaysKEY: ipResolved (string): (also known as 'host')The resolved ip address. Example: dclient217-162-141-109.hispeed.chSupported: If resolving is enabled in the web server (apache) and the host can be resolved to a name.KEY: referrer (string):I have seen this word written as referer and referrer (2r) both multiple times. So Ithink both writings are ok. But when it comes to variables it matters. For php (apache)it is HTTP_REFERER. My translator only knows 2r.The address of the page (if any) which referred the browser to the current page. This isset by the user's browser; not all browsers will set it.As with userAgent, anonymizer programs often fake this one.It is not really used here. the information is lost with the redirect, but we could fixthat easily. Should we? The browser check is only done once; when the session starts.So after that you have to read out the current http referer yourself anyway. The sameapplies for proxy and via. I kinda thing that we should carry on the original referrerbefore our redirect. The same applies to anything, like post-, get- and cookie vars.KEY: proxy (string):2do...see referrer.KEY: via (string):2do...see referrer.KEY: userType (array):type => webcrawler|emailcrawler|user|proxy|virus|translator|anonymizerwebcrawler[s] come from public search engines to update their indexes. they're mostly welcome.emailcrawler[s] come to find email addresses from spamming, we never want them.users[s] are ppl visiting the web site, they're mostly welcome.prox[ies] come to our site to fetch pages for ppl. they're fine. some ppl and services mayabuse them to be anonymous.virus[es] are programs (or users) trying to fuck with our server. often the owners of thesemachines don't know what happens from their box, are using dial-up accounts, andthus we really should not block them permanently.translator like babelfish from altavista, google has that aswell.anonymizer like a proxy (or translator) to be anonymous.nice => true|falsewebcrawlers are nice until known otherwise or until they don't respect our robots.txt.emailcrawlers are never nice.users ans proxies are nice until they fuck with our bandwidth or so.viruses are never nice.name => if a crawler is coming from google, the name will be "Google" (not googlebot). it's the nameof the service. of course a user has no such 'name'.url => again for crawlers, google would have the value http://www.google.com/ here.if you use cloaking and know the request comes from altavista, you may want to add a back-linkto them, the spider may like it. :-)supported: needs detectUserType() to be executed.-------------------------------------------------------------------------------------------PROPERTIES-------------------------------------------------------------------------------------------KEY: dom (string):string 'dom' || 'ie4' || 'ns4' || 'basic' || ''ie4: document.- all , style window. - eventns4: document.- layers array - push , popbasic: dunnosupported: needs javascripttodo: maybe detect it if js is disabled based on the browser string. at least for ie5+ and ns6+.BUT: spiders could fake it and that way get dom-pages. do we want that? not sure.new implementation: if we get to compute the values with a js=0 param (js disabled, but redirectworked), this var will be computed from the browser string. spiders should notfall into that category, hopefully. i need that feature now.KEY: height (int):The full screen height of the client computer. In 1024/768 that is 768.Supported: needs javascriptKEY: width (int):The f