<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.secondlife.com/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Sensei+Schism</id>
	<title>Second Life Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.secondlife.com/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Sensei+Schism"/>
	<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/wiki/Special:Contributions/Sensei_Schism"/>
	<updated>2026-07-25T23:02:57Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Jor3l_Boa/PHP/n2k.php&amp;diff=402582</id>
		<title>User:Jor3l Boa/PHP/n2k.php</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Jor3l_Boa/PHP/n2k.php&amp;diff=402582"/>
		<updated>2009-06-23T01:00:36Z</updated>

		<summary type="html">&lt;p&gt;Sensei Schism: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;PHP Based name2Key service.&lt;br /&gt;
&lt;br /&gt;
n2k.php:&lt;br /&gt;
&amp;lt;php&amp;gt;&lt;br /&gt;
//  PHP name2Key by Jor3l Boa&lt;br /&gt;
//  -------------------------&lt;br /&gt;
//  Released under Creative Commons 3.0&lt;br /&gt;
//  - support+n2k@sltools.biz&lt;br /&gt;
//  -------------------------&lt;br /&gt;
&lt;br /&gt;
        function getPage($web) {&lt;br /&gt;
		$html = &amp;quot;&amp;quot;;&lt;br /&gt;
		  $ch = curl_init($web);&lt;br /&gt;
		  curl_setopt($ch, CURLOPT_USERAGENT, &amp;quot;Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.12) Gecko/20070508 Firefox/1.5.0.12&amp;quot;);&lt;br /&gt;
		  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);&lt;br /&gt;
		  curl_setopt($ch, CURLOPT_HEADER, 0);&lt;br /&gt;
		  curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);&lt;br /&gt;
		  curl_setopt($ch, CURLOPT_AUTOREFERER, 1);&lt;br /&gt;
		  curl_setopt($ch, CURLOPT_TIMEOUT, 5);&lt;br /&gt;
		  $html = curl_exec($ch);&lt;br /&gt;
		  if(curl_errno($ch)) {&lt;br /&gt;
			  $html = &amp;quot;&amp;quot;;&lt;br /&gt;
		  }&lt;br /&gt;
		  curl_close ($ch);&lt;br /&gt;
		return $html;&lt;br /&gt;
	}&lt;br /&gt;
        function getBetween($content,$start,$end){&lt;br /&gt;
		//by Jor3l :)&lt;br /&gt;
		$a1 = strrpos($content,$start);&lt;br /&gt;
		$content = substr($content,$a1 + (strlen($start)),strlen($content));&lt;br /&gt;
		while($a2 = strrpos($content,$end))	{&lt;br /&gt;
			$content = substr($content,0,$a2);&lt;br /&gt;
		}&lt;br /&gt;
		return $content;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	function name2Key($name)	{&lt;br /&gt;
		$SL_SEARCH = &#039;http://search.secondlife.com/client_search.php?session=00000000-0000-0000-0000-000000000000&amp;amp;q=&#039;;&lt;br /&gt;
		$sName = split(&#039; &#039;,$name);&lt;br /&gt;
		$data = getPage($SL_SEARCH.$sName[0].&#039;%2520&#039;.$sName[1]);&lt;br /&gt;
		$uuid = getBetween($data,&#039;secondlife:///app/agent/&#039;,&#039;/about&#039;);&lt;br /&gt;
		return $uuid;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
example:&lt;br /&gt;
&amp;lt;php&amp;gt;&lt;br /&gt;
&amp;lt;?&lt;br /&gt;
require_once(&#039;n2k.php&#039;);&lt;br /&gt;
$uuid = name2key(&#039;FirstName LastName&#039;);&lt;br /&gt;
echo $uuid;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;NOTE ON HOSTING PROVIDERS:&amp;lt;/b&amp;gt;&lt;br /&gt;
Some hosting providers, notably GoDaddy, do not allow outbound traffic from their servers.  If you find that this script returns nothing, no matter what you try, that may be your issue.  The only fix is to switch providers to one that does allow outbound traffic.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;I&amp;gt;For an LSL version, see also: [[Name2Key_in_LSL]]&amp;lt;/i&amp;gt;&lt;/div&gt;</summary>
		<author><name>Sensei Schism</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Jor3l_Boa/PHP/n2k.php&amp;diff=402572</id>
		<title>User:Jor3l Boa/PHP/n2k.php</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Jor3l_Boa/PHP/n2k.php&amp;diff=402572"/>
		<updated>2009-06-23T00:59:39Z</updated>

		<summary type="html">&lt;p&gt;Sensei Schism: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;PHP Based name2Key service.&lt;br /&gt;
&lt;br /&gt;
n2k.php:&lt;br /&gt;
&amp;lt;php&amp;gt;&lt;br /&gt;
//  PHP name2Key by Jor3l Boa&lt;br /&gt;
//  -------------------------&lt;br /&gt;
//  Released under Creative Commons 3.0&lt;br /&gt;
//  - support+n2k@sltools.biz&lt;br /&gt;
//  -------------------------&lt;br /&gt;
&lt;br /&gt;
        function getPage($web) {&lt;br /&gt;
		$html = &amp;quot;&amp;quot;;&lt;br /&gt;
		  $ch = curl_init($web);&lt;br /&gt;
		  curl_setopt($ch, CURLOPT_USERAGENT, &amp;quot;Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.12) Gecko/20070508 Firefox/1.5.0.12&amp;quot;);&lt;br /&gt;
		  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);&lt;br /&gt;
		  curl_setopt($ch, CURLOPT_HEADER, 0);&lt;br /&gt;
		  curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);&lt;br /&gt;
		  curl_setopt($ch, CURLOPT_AUTOREFERER, 1);&lt;br /&gt;
		  curl_setopt($ch, CURLOPT_TIMEOUT, 5);&lt;br /&gt;
		  $html = curl_exec($ch);&lt;br /&gt;
		  if(curl_errno($ch)) {&lt;br /&gt;
			  $html = &amp;quot;&amp;quot;;&lt;br /&gt;
		  }&lt;br /&gt;
		  curl_close ($ch);&lt;br /&gt;
		return $html;&lt;br /&gt;
	}&lt;br /&gt;
        function getBetween($content,$start,$end){&lt;br /&gt;
		//by Jor3l :)&lt;br /&gt;
		$a1 = strrpos($content,$start);&lt;br /&gt;
		$content = substr($content,$a1 + (strlen($start)),strlen($content));&lt;br /&gt;
		while($a2 = strrpos($content,$end))	{&lt;br /&gt;
			$content = substr($content,0,$a2);&lt;br /&gt;
		}&lt;br /&gt;
		return $content;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	function name2Key($name)	{&lt;br /&gt;
		$SL_SEARCH = &#039;http://search.secondlife.com/client_search.php?session=00000000-0000-0000-0000-000000000000&amp;amp;q=&#039;;&lt;br /&gt;
		$sName = split(&#039; &#039;,$name);&lt;br /&gt;
		$data = getPage($SL_SEARCH.$sName[0].&#039;%2520&#039;.$sName[1]);&lt;br /&gt;
		$uuid = getBetween($data,&#039;secondlife:///app/agent/&#039;,&#039;/about&#039;);&lt;br /&gt;
		return $uuid;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
example:&lt;br /&gt;
&amp;lt;php&amp;gt;&lt;br /&gt;
&amp;lt;?&lt;br /&gt;
require_once(&#039;n2k.php&#039;);&lt;br /&gt;
$uuid = name2key(&#039;FirstName LastName&#039;);&lt;br /&gt;
echo $uuid;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;NOTE ON HOSTING PROVIDERS:&amp;lt;/b&amp;gt;&lt;br /&gt;
Some hosting providers, notably GoDaddy, do not allow outbound traffic from their servers.  If you find that this script returns nothing, no matter what you try, that may be your issue.  The only fix is to switch providers to one that does allow outbound traffic.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;I&amp;gt;For a version that does not require hosting, see also: [[Name2Key_in_LSL]]&amp;lt;/i&amp;gt;&lt;/div&gt;</summary>
		<author><name>Sensei Schism</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Name2Key_in_LSL&amp;diff=206573</id>
		<title>Name2Key in LSL</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Name2Key_in_LSL&amp;diff=206573"/>
		<updated>2009-01-23T03:39:47Z</updated>

		<summary type="html">&lt;p&gt;Sensei Schism: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Header}}&lt;br /&gt;
&lt;br /&gt;
Still missing Name2Key functions in your code ? Still relying on external databases that are not always up to date with latests SL subscribers ? &lt;br /&gt;
&lt;br /&gt;
Well now you can solve this by yourself, within your LSL script ! All you have to do is to rely on LL Search engine ! &lt;br /&gt;
&lt;br /&gt;
I put a kind of &amp;quot;library&amp;quot; and a sample of usage for your convenience&lt;br /&gt;
&lt;br /&gt;
Library:&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
integer SERVICE_NAME2KEY =	 19790;&lt;br /&gt;
integer SERVICE_NAME2KEY_RET=19791;&lt;br /&gt;
key     ONE_KEY =            &amp;quot;FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
integer gCurrentRequest=0;&lt;br /&gt;
key     gReqId=NULL_KEY;&lt;br /&gt;
string  gToSearch=&amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
ReturnService(integer Status, string message)&lt;br /&gt;
{&lt;br /&gt;
	key Key;&lt;br /&gt;
&lt;br /&gt;
	if (Status)&lt;br /&gt;
		Key=ONE_KEY;&lt;br /&gt;
	else&lt;br /&gt;
		Key=NULL_KEY;&lt;br /&gt;
&lt;br /&gt;
	llMessageLinked(LINK_THIS, gCurrentRequest+1, message, Key);&lt;br /&gt;
	&lt;br /&gt;
	gCurrentRequest=0;&lt;br /&gt;
	gReqId=NULL_KEY;&lt;br /&gt;
	gToSearch=&amp;quot;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
SvcName2Key(string message)&lt;br /&gt;
{&lt;br /&gt;
    if (gCurrentRequest) {&lt;br /&gt;
        ReturnService(FALSE, &amp;quot;BUSY&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    list Args=llParseString2List(message, [&amp;quot; &amp;quot;], []);&lt;br /&gt;
    &lt;br /&gt;
    string FirstName = llList2String(Args, 0);&lt;br /&gt;
    string LastName = llList2String(Args, 1);&lt;br /&gt;
    &lt;br /&gt;
    gCurrentRequest=SERVICE_NAME2KEY;&lt;br /&gt;
    &lt;br /&gt;
    string url=&amp;quot;http://66.196.80.202/babelfish/translate_url_content?.intl=us&amp;amp;lp=fr_en&amp;amp;trurl=http%3A%2F%2Fsearch.secondlife.com%2Fclient_search.php%3Fs%3DResident%26q%3D&amp;quot;+FirstName+&amp;quot;%2520&amp;quot;+LastName;&lt;br /&gt;
    gToSearch=&amp;quot;secondlife:///app/agent/&amp;quot;;&lt;br /&gt;
    &lt;br /&gt;
    gReqId=llHTTPRequest(url, [HTTP_METHOD,&amp;quot;GET&amp;quot;], &amp;quot;&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
	link_message(integer sender_number, integer number, string message, key id)&lt;br /&gt;
	{&lt;br /&gt;
		if (number==SERVICE_NAME2KEY) {&lt;br /&gt;
			SvcName2Key(message); &lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	http_response(key request_id, integer status, list metadata, string body)&lt;br /&gt;
	{&lt;br /&gt;
		if (request_id==gReqId) {&lt;br /&gt;
			integer Pos1=llSubStringIndex(body, gToSearch);&lt;br /&gt;
			integer Pos2=0;&lt;br /&gt;
			string  Ret=&amp;quot;&amp;quot;;&lt;br /&gt;
			if (Pos1!=-1) {&lt;br /&gt;
				body=llGetSubString(body, Pos1+llStringLength(gToSearch), -1);	&lt;br /&gt;
				if (gCurrentRequest==SERVICE_NAME2KEY) {&lt;br /&gt;
					Pos2=llStringLength((string)NULL_KEY);&lt;br /&gt;
					string Dat=llGetSubString(body, 0, Pos2-1);&lt;br /&gt;
					if (llStringLength((string)((key)Dat))==llStringLength(NULL_KEY)) {&lt;br /&gt;
						// Success !&lt;br /&gt;
						Ret=llGetSubString(body, 0, Pos2-1);&lt;br /&gt;
						ReturnService(TRUE, Ret);&lt;br /&gt;
					}&lt;br /&gt;
					else&lt;br /&gt;
						ReturnService(FALSE, &amp;quot;UNKNOWN&amp;quot;);&lt;br /&gt;
				}&lt;br /&gt;
				else&lt;br /&gt;
					ReturnService(FALSE, &amp;quot;UNKNOWN SERVICE&amp;quot;);&lt;br /&gt;
			}&lt;br /&gt;
			else&lt;br /&gt;
				ReturnService(FALSE, &amp;quot;UNKNOWN&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
	}	&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Usage sample:&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
integer SERVICE_NAME2KEY =	 19790;&lt;br /&gt;
integer SERVICE_NAME2KEY_RET=19791;&lt;br /&gt;
key     ONE_KEY =            &amp;quot;FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
MyName2Key(string message)&lt;br /&gt;
{&lt;br /&gt;
	llMessageLinked(LINK_THIS, SERVICE_NAME2KEY, message, NULL_KEY);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
	touch_start(integer total_number)&lt;br /&gt;
	{&lt;br /&gt;
		llOwnerSay(&amp;quot;Searching key for avatar named Secret2 Linden&amp;quot;);&lt;br /&gt;
		MyName2Key(&amp;quot;Secret2 Linden&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	link_message(integer sender_number, integer number, string message, key id)&lt;br /&gt;
	{&lt;br /&gt;
		if (number==SERVICE_NAME2KEY_RET)&lt;br /&gt;
		{&lt;br /&gt;
			if (id==ONE_KEY)&lt;br /&gt;
				llOwnerSay(&amp;quot;Found ! Key is: &amp;quot;+message);&lt;br /&gt;
			else&lt;br /&gt;
				llOwnerSay(&amp;quot;Error: &amp;quot;+message);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Hope this helps !&lt;br /&gt;
[[User:Maeva Anatine|Maeva Anatine]]&lt;br /&gt;
&lt;br /&gt;
EDIT : Looks like the Lindens have either broken or blocked this function. It works from my browser, however from LSL I get an error page containing this message &amp;quot;Access control configuration prevents your request from&lt;br /&gt;
being allowed at this time.  Please contact your service provider if&lt;br /&gt;
you feel this is incorrect.&amp;quot; - Darling Brody.&lt;br /&gt;
&lt;br /&gt;
EDIT : Yes you&#039;re right Darling. It seems they&#039;ve blocked this acces from within the world... I still wonder why, especially as there are some workarounds to this...&lt;br /&gt;
Anyway I discovered there is a JIRA issue for this. Please vote for the unblock !&lt;br /&gt;
https://jira.secondlife.com/browse/SVC-3122&lt;br /&gt;
- Mae&lt;br /&gt;
&lt;br /&gt;
EDIT : OK after having read this article from LL: http://wiki.secondlife.com/wiki/SearchAPI, it seems proxy usage is allowed. So I modified the upper code in order to go through a proxy machine and it works again :)&lt;br /&gt;
- Mae&lt;br /&gt;
&lt;br /&gt;
EDIT: After review, it appears the Yahoo Babelfish proxy you are using above does not return the results expected.  I rewrote this to allow different proxies by a simple configuration.  This now uses Google instead of Babelfish by default.  This does not, however, work for any avatars that do not have a Profile filled out (this is due to a limitation of the Googly proxy we&#039;re using here).  I&#039;m researching this and trying to see if there is a better proxy to use.&lt;br /&gt;
&lt;br /&gt;
This version can handle multiple requests at once.  Replies have changed slightly, as the found key is returned in the &amp;quot;key&amp;quot; field instead of the message field.  In addition, failure of any kind results in a NULL_KEY being returned, and status information is returned in the message field. - [[User:Sensei Schism|Sensei Schism]]&lt;br /&gt;
&lt;br /&gt;
Library:&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
integer SERVICE_NAME2KEY        = 19790;&lt;br /&gt;
integer SERVICE_NAME2KEY_RET    = 19791;&lt;br /&gt;
&lt;br /&gt;
string  proxy                   = &amp;quot;http://www.google.com/gwt/n?_gwt_noimg=1&amp;amp;u=&amp;quot;;&lt;br /&gt;
string  search                  = &amp;quot;http://search.secondlife.com/client_search.php?s=People&amp;amp;q=&amp;quot;;&lt;br /&gt;
string  result                  = &amp;quot;http%3A%2F%2Fworld.secondlife.com%2Fresident%2F&amp;quot;;&lt;br /&gt;
string  notfound                = &amp;quot;There were no matches for &amp;quot;;&lt;br /&gt;
&lt;br /&gt;
list    requests;&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer i) { llResetScript(); }&lt;br /&gt;
&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        requests = [];&lt;br /&gt;
    }&lt;br /&gt;
        &lt;br /&gt;
    link_message(integer s, integer n, string m, key i)&lt;br /&gt;
    {&lt;br /&gt;
        if (n == SERVICE_NAME2KEY) {&lt;br /&gt;
            if(llListFindList(requests,[m]) == -1) {&lt;br /&gt;
                string url = proxy+llEscapeURL(search+m);&lt;br /&gt;
                key id = llHTTPRequest(url, [], &amp;quot;&amp;quot;);&lt;br /&gt;
                requests += [(string)id,m];&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    http_response(key request_id, integer status, list metadata, string body)&lt;br /&gt;
    {&lt;br /&gt;
        integer p = llListFindList(requests,[(string)request_id]);&lt;br /&gt;
        if (p != -1) {&lt;br /&gt;
            string n = llList2String(requests,p+1);&lt;br /&gt;
            integer f = llSubStringIndex(body,result);&lt;br /&gt;
            if(f == -1) {&lt;br /&gt;
                f = llSubStringIndex(body,notfound);&lt;br /&gt;
                if(f == -1)&lt;br /&gt;
                    llMessageLinked(LINK_SET,SERVICE_NAME2KEY_RET,&amp;quot;Error with lookup!&amp;quot;,NULL_KEY);&lt;br /&gt;
                else&lt;br /&gt;
                    llMessageLinked(LINK_SET,SERVICE_NAME2KEY_RET,n+&amp;quot; not found.&amp;quot;,NULL_KEY);&lt;br /&gt;
            } else {&lt;br /&gt;
                f += llStringLength(result);&lt;br /&gt;
                string a = llGetSubString(body,f,f+35);&lt;br /&gt;
            &lt;br /&gt;
                llMessageLinked(LINK_SET,SERVICE_NAME2KEY_RET,n,(key)a);&lt;br /&gt;
            }&lt;br /&gt;
            requests = llDeleteSubList(requests,p,p+1);&lt;br /&gt;
        }&lt;br /&gt;
    }    &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example use (listens on channel /1 and looks up anything sent in that channel):&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
integer SERVICE_NAME2KEY        =   19790;&lt;br /&gt;
integer SERVICE_NAME2KEY_RET    =   19791;&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer i) { llResetScript(); }&lt;br /&gt;
    &lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llListen(1, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    listen(integer c, string n, key i, string m)&lt;br /&gt;
    {&lt;br /&gt;
        llSay(0,&amp;quot;Requesting key for &amp;quot;+m);&lt;br /&gt;
        llMessageLinked(LINK_THIS, SERVICE_NAME2KEY, m, &amp;quot;&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    link_message(integer f, integer n, string s, key i)&lt;br /&gt;
    {&lt;br /&gt;
        if(n == SERVICE_NAME2KEY_RET) {&lt;br /&gt;
            if(i == NULL_KEY)&lt;br /&gt;
                llSay(0,&amp;quot;Lookup failed.  Returned: &amp;quot;+s);&lt;br /&gt;
            else&lt;br /&gt;
                llSay(0,s+&amp;quot;: &amp;quot;+(string)i);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{LSLC|Library}}&lt;/div&gt;</summary>
		<author><name>Sensei Schism</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Name2Key_in_LSL&amp;diff=202683</id>
		<title>Name2Key in LSL</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Name2Key_in_LSL&amp;diff=202683"/>
		<updated>2009-01-20T02:52:03Z</updated>

		<summary type="html">&lt;p&gt;Sensei Schism: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Header}}&lt;br /&gt;
&lt;br /&gt;
Still missing Name2Key functions in your code ? Still relying on external databases that are not always up to date with latests SL subscribers ? &lt;br /&gt;
&lt;br /&gt;
Well now you can solve this by yourself, within your LSL script ! All you have to do is to rely on LL Search engine ! &lt;br /&gt;
&lt;br /&gt;
I put a kind of &amp;quot;library&amp;quot; and a sample of usage for your convenience&lt;br /&gt;
&lt;br /&gt;
Library:&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
integer SERVICE_NAME2KEY =	 19790;&lt;br /&gt;
integer SERVICE_NAME2KEY_RET=19791;&lt;br /&gt;
key     ONE_KEY =            &amp;quot;FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
integer gCurrentRequest=0;&lt;br /&gt;
key     gReqId=NULL_KEY;&lt;br /&gt;
string  gToSearch=&amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
ReturnService(integer Status, string message)&lt;br /&gt;
{&lt;br /&gt;
	key Key;&lt;br /&gt;
&lt;br /&gt;
	if (Status)&lt;br /&gt;
		Key=ONE_KEY;&lt;br /&gt;
	else&lt;br /&gt;
		Key=NULL_KEY;&lt;br /&gt;
&lt;br /&gt;
	llMessageLinked(LINK_THIS, gCurrentRequest+1, message, Key);&lt;br /&gt;
	&lt;br /&gt;
	gCurrentRequest=0;&lt;br /&gt;
	gReqId=NULL_KEY;&lt;br /&gt;
	gToSearch=&amp;quot;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
SvcName2Key(string message)&lt;br /&gt;
{&lt;br /&gt;
    if (gCurrentRequest) {&lt;br /&gt;
        ReturnService(FALSE, &amp;quot;BUSY&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    list Args=llParseString2List(message, [&amp;quot; &amp;quot;], []);&lt;br /&gt;
    &lt;br /&gt;
    string FirstName = llList2String(Args, 0);&lt;br /&gt;
    string LastName = llList2String(Args, 1);&lt;br /&gt;
    &lt;br /&gt;
    gCurrentRequest=SERVICE_NAME2KEY;&lt;br /&gt;
    &lt;br /&gt;
    string url=&amp;quot;http://66.196.80.202/babelfish/translate_url_content?.intl=us&amp;amp;lp=fr_en&amp;amp;trurl=http%3A%2F%2Fsearch.secondlife.com%2Fclient_search.php%3Fs%3DResident%26q%3D&amp;quot;+FirstName+&amp;quot;%2520&amp;quot;+LastName;&lt;br /&gt;
    gToSearch=&amp;quot;secondlife:///app/agent/&amp;quot;;&lt;br /&gt;
    &lt;br /&gt;
    gReqId=llHTTPRequest(url, [HTTP_METHOD,&amp;quot;GET&amp;quot;], &amp;quot;&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
	link_message(integer sender_number, integer number, string message, key id)&lt;br /&gt;
	{&lt;br /&gt;
		if (number==SERVICE_NAME2KEY) {&lt;br /&gt;
			SvcName2Key(message); &lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	http_response(key request_id, integer status, list metadata, string body)&lt;br /&gt;
	{&lt;br /&gt;
		if (request_id==gReqId) {&lt;br /&gt;
			integer Pos1=llSubStringIndex(body, gToSearch);&lt;br /&gt;
			integer Pos2=0;&lt;br /&gt;
			string  Ret=&amp;quot;&amp;quot;;&lt;br /&gt;
			if (Pos1!=-1) {&lt;br /&gt;
				body=llGetSubString(body, Pos1+llStringLength(gToSearch), -1);	&lt;br /&gt;
				if (gCurrentRequest==SERVICE_NAME2KEY) {&lt;br /&gt;
					Pos2=llStringLength((string)NULL_KEY);&lt;br /&gt;
					string Dat=llGetSubString(body, 0, Pos2-1);&lt;br /&gt;
					if (llStringLength((string)((key)Dat))==llStringLength(NULL_KEY)) {&lt;br /&gt;
						// Success !&lt;br /&gt;
						Ret=llGetSubString(body, 0, Pos2-1);&lt;br /&gt;
						ReturnService(TRUE, Ret);&lt;br /&gt;
					}&lt;br /&gt;
					else&lt;br /&gt;
						ReturnService(FALSE, &amp;quot;UNKNOWN&amp;quot;);&lt;br /&gt;
				}&lt;br /&gt;
				else&lt;br /&gt;
					ReturnService(FALSE, &amp;quot;UNKNOWN SERVICE&amp;quot;);&lt;br /&gt;
			}&lt;br /&gt;
			else&lt;br /&gt;
				ReturnService(FALSE, &amp;quot;UNKNOWN&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
	}	&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Usage sample:&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
integer SERVICE_NAME2KEY =	 19790;&lt;br /&gt;
integer SERVICE_NAME2KEY_RET=19791;&lt;br /&gt;
key     ONE_KEY =            &amp;quot;FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
MyName2Key(string message)&lt;br /&gt;
{&lt;br /&gt;
	llMessageLinked(LINK_THIS, SERVICE_NAME2KEY, message, NULL_KEY);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
	touch_start(integer total_number)&lt;br /&gt;
	{&lt;br /&gt;
		llOwnerSay(&amp;quot;Searching key for avatar named Secret2 Linden&amp;quot;);&lt;br /&gt;
		MyName2Key(&amp;quot;Secret2 Linden&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	link_message(integer sender_number, integer number, string message, key id)&lt;br /&gt;
	{&lt;br /&gt;
		if (number==SERVICE_NAME2KEY_RET)&lt;br /&gt;
		{&lt;br /&gt;
			if (id==ONE_KEY)&lt;br /&gt;
				llOwnerSay(&amp;quot;Found ! Key is: &amp;quot;+message);&lt;br /&gt;
			else&lt;br /&gt;
				llOwnerSay(&amp;quot;Error: &amp;quot;+message);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Hope this helps !&lt;br /&gt;
[[User:Maeva Anatine|Maeva Anatine]]&lt;br /&gt;
&lt;br /&gt;
EDIT : Looks like the Lindens have either broken or blocked this function. It works from my browser, however from LSL I get an error page containing this message &amp;quot;Access control configuration prevents your request from&lt;br /&gt;
being allowed at this time.  Please contact your service provider if&lt;br /&gt;
you feel this is incorrect.&amp;quot; - Darling Brody.&lt;br /&gt;
&lt;br /&gt;
EDIT : Yes you&#039;re right Darling. It seems they&#039;ve blocked this acces from within the world... I still wonder why, especially as there are some workarounds to this...&lt;br /&gt;
Anyway I discovered there is a JIRA issue for this. Please vote for the unblock !&lt;br /&gt;
https://jira.secondlife.com/browse/SVC-3122&lt;br /&gt;
- Mae&lt;br /&gt;
&lt;br /&gt;
EDIT : OK after having read this article from LL: http://wiki.secondlife.com/wiki/SearchAPI, it seems proxy usage is allowed. So I modified the upper code in order to go through a proxy machine and it works again :)&lt;br /&gt;
- Mae&lt;br /&gt;
&lt;br /&gt;
EDIT: After review, it appears the Yahoo Babelfish proxy you are using above does not return the results expected.  I rewrote this to allow different proxies by a simple configuration.  This now uses Google instead of Babelfish by default.  This does not, however, work for any avatars that do not have a Profile filled out.  I&#039;m researching this and trying to see if there is a solution.&lt;br /&gt;
&lt;br /&gt;
This version can handle multiple requests at once.  Replies have changed slightly, as the found key is returned in the &amp;quot;key&amp;quot; field instead of the message field.  In addition, failure of any kind results in a NULL_KEY being returned, and status information is returned in the message field. - [[User:Sensei Schism|Sensei Schism]]&lt;br /&gt;
&lt;br /&gt;
Library:&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
integer SERVICE_NAME2KEY        = 19790;&lt;br /&gt;
integer SERVICE_NAME2KEY_RET    = 19791;&lt;br /&gt;
&lt;br /&gt;
string  proxy                   = &amp;quot;http://www.google.com/gwt/n?_gwt_noimg=1&amp;amp;u=&amp;quot;;&lt;br /&gt;
string  search                  = &amp;quot;http://search.secondlife.com/client_search.php?s=People&amp;amp;q=&amp;quot;;&lt;br /&gt;
string  result                  = &amp;quot;http%3A%2F%2Fworld.secondlife.com%2Fresident%2F&amp;quot;;&lt;br /&gt;
string  notfound                = &amp;quot;There were no matches for &amp;quot;;&lt;br /&gt;
&lt;br /&gt;
list    requests;&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer i) { llResetScript(); }&lt;br /&gt;
&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        requests = [];&lt;br /&gt;
    }&lt;br /&gt;
        &lt;br /&gt;
    link_message(integer s, integer n, string m, key i)&lt;br /&gt;
    {&lt;br /&gt;
        if (n == SERVICE_NAME2KEY) {&lt;br /&gt;
            if(llListFindList(requests,[m]) == -1) {&lt;br /&gt;
                string url = proxy+llEscapeURL(search+m);&lt;br /&gt;
                key id = llHTTPRequest(url, [], &amp;quot;&amp;quot;);&lt;br /&gt;
                requests += [(string)id,m];&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    http_response(key request_id, integer status, list metadata, string body)&lt;br /&gt;
    {&lt;br /&gt;
        integer p = llListFindList(requests,[(string)request_id]);&lt;br /&gt;
        if (p != -1) {&lt;br /&gt;
            string n = llList2String(requests,p+1);&lt;br /&gt;
            integer f = llSubStringIndex(body,result);&lt;br /&gt;
            if(f == -1) {&lt;br /&gt;
                f = llSubStringIndex(body,notfound);&lt;br /&gt;
                if(f == -1)&lt;br /&gt;
                    llMessageLinked(LINK_SET,SERVICE_NAME2KEY_RET,&amp;quot;Error with lookup!&amp;quot;,NULL_KEY);&lt;br /&gt;
                else&lt;br /&gt;
                    llMessageLinked(LINK_SET,SERVICE_NAME2KEY_RET,n+&amp;quot; not found.&amp;quot;,NULL_KEY);&lt;br /&gt;
            } else {&lt;br /&gt;
                f += llStringLength(result);&lt;br /&gt;
                string a = llGetSubString(body,f,f+35);&lt;br /&gt;
            &lt;br /&gt;
                llMessageLinked(LINK_SET,SERVICE_NAME2KEY_RET,n,(key)a);&lt;br /&gt;
            }&lt;br /&gt;
            requests = llDeleteSubList(requests,p,p+1);&lt;br /&gt;
        }&lt;br /&gt;
    }    &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example use (listens on channel /1 and looks up anything sent in that channel):&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
integer SERVICE_NAME2KEY        =   19790;&lt;br /&gt;
integer SERVICE_NAME2KEY_RET    =   19791;&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer i) { llResetScript(); }&lt;br /&gt;
    &lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llListen(1, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    listen(integer c, string n, key i, string m)&lt;br /&gt;
    {&lt;br /&gt;
        llSay(0,&amp;quot;Requesting key for &amp;quot;+m);&lt;br /&gt;
        llMessageLinked(LINK_THIS, SERVICE_NAME2KEY, m, &amp;quot;&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    link_message(integer f, integer n, string s, key i)&lt;br /&gt;
    {&lt;br /&gt;
        if(n == SERVICE_NAME2KEY_RET) {&lt;br /&gt;
            if(i == NULL_KEY)&lt;br /&gt;
                llSay(0,&amp;quot;Lookup failed.  Returned: &amp;quot;+s);&lt;br /&gt;
            else&lt;br /&gt;
                llSay(0,s+&amp;quot;: &amp;quot;+(string)i);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{LSLC|Library}}&lt;/div&gt;</summary>
		<author><name>Sensei Schism</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Name2Key_in_LSL&amp;diff=202643</id>
		<title>Name2Key in LSL</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Name2Key_in_LSL&amp;diff=202643"/>
		<updated>2009-01-19T23:29:36Z</updated>

		<summary type="html">&lt;p&gt;Sensei Schism: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Header}}&lt;br /&gt;
&lt;br /&gt;
Still missing Name2Key functions in your code ? Still relying on external databases that are not always up to date with latests SL subscribers ? &lt;br /&gt;
&lt;br /&gt;
Well now you can solve this by yourself, within your LSL script ! All you have to do is to rely on LL Search engine ! &lt;br /&gt;
&lt;br /&gt;
I put a kind of &amp;quot;library&amp;quot; and a sample of usage for your convenience&lt;br /&gt;
&lt;br /&gt;
Library:&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
integer SERVICE_NAME2KEY =	 19790;&lt;br /&gt;
integer SERVICE_NAME2KEY_RET=19791;&lt;br /&gt;
key     ONE_KEY =            &amp;quot;FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
integer gCurrentRequest=0;&lt;br /&gt;
key     gReqId=NULL_KEY;&lt;br /&gt;
string  gToSearch=&amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
ReturnService(integer Status, string message)&lt;br /&gt;
{&lt;br /&gt;
	key Key;&lt;br /&gt;
&lt;br /&gt;
	if (Status)&lt;br /&gt;
		Key=ONE_KEY;&lt;br /&gt;
	else&lt;br /&gt;
		Key=NULL_KEY;&lt;br /&gt;
&lt;br /&gt;
	llMessageLinked(LINK_THIS, gCurrentRequest+1, message, Key);&lt;br /&gt;
	&lt;br /&gt;
	gCurrentRequest=0;&lt;br /&gt;
	gReqId=NULL_KEY;&lt;br /&gt;
	gToSearch=&amp;quot;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
SvcName2Key(string message)&lt;br /&gt;
{&lt;br /&gt;
    if (gCurrentRequest) {&lt;br /&gt;
        ReturnService(FALSE, &amp;quot;BUSY&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    list Args=llParseString2List(message, [&amp;quot; &amp;quot;], []);&lt;br /&gt;
    &lt;br /&gt;
    string FirstName = llList2String(Args, 0);&lt;br /&gt;
    string LastName = llList2String(Args, 1);&lt;br /&gt;
    &lt;br /&gt;
    gCurrentRequest=SERVICE_NAME2KEY;&lt;br /&gt;
    &lt;br /&gt;
    string url=&amp;quot;http://66.196.80.202/babelfish/translate_url_content?.intl=us&amp;amp;lp=fr_en&amp;amp;trurl=http%3A%2F%2Fsearch.secondlife.com%2Fclient_search.php%3Fs%3DResident%26q%3D&amp;quot;+FirstName+&amp;quot;%2520&amp;quot;+LastName;&lt;br /&gt;
    gToSearch=&amp;quot;secondlife:///app/agent/&amp;quot;;&lt;br /&gt;
    &lt;br /&gt;
    gReqId=llHTTPRequest(url, [HTTP_METHOD,&amp;quot;GET&amp;quot;], &amp;quot;&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
	link_message(integer sender_number, integer number, string message, key id)&lt;br /&gt;
	{&lt;br /&gt;
		if (number==SERVICE_NAME2KEY) {&lt;br /&gt;
			SvcName2Key(message); &lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	http_response(key request_id, integer status, list metadata, string body)&lt;br /&gt;
	{&lt;br /&gt;
		if (request_id==gReqId) {&lt;br /&gt;
			integer Pos1=llSubStringIndex(body, gToSearch);&lt;br /&gt;
			integer Pos2=0;&lt;br /&gt;
			string  Ret=&amp;quot;&amp;quot;;&lt;br /&gt;
			if (Pos1!=-1) {&lt;br /&gt;
				body=llGetSubString(body, Pos1+llStringLength(gToSearch), -1);	&lt;br /&gt;
				if (gCurrentRequest==SERVICE_NAME2KEY) {&lt;br /&gt;
					Pos2=llStringLength((string)NULL_KEY);&lt;br /&gt;
					string Dat=llGetSubString(body, 0, Pos2-1);&lt;br /&gt;
					if (llStringLength((string)((key)Dat))==llStringLength(NULL_KEY)) {&lt;br /&gt;
						// Success !&lt;br /&gt;
						Ret=llGetSubString(body, 0, Pos2-1);&lt;br /&gt;
						ReturnService(TRUE, Ret);&lt;br /&gt;
					}&lt;br /&gt;
					else&lt;br /&gt;
						ReturnService(FALSE, &amp;quot;UNKNOWN&amp;quot;);&lt;br /&gt;
				}&lt;br /&gt;
				else&lt;br /&gt;
					ReturnService(FALSE, &amp;quot;UNKNOWN SERVICE&amp;quot;);&lt;br /&gt;
			}&lt;br /&gt;
			else&lt;br /&gt;
				ReturnService(FALSE, &amp;quot;UNKNOWN&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
	}	&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Usage sample:&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
integer SERVICE_NAME2KEY =	 19790;&lt;br /&gt;
integer SERVICE_NAME2KEY_RET=19791;&lt;br /&gt;
key     ONE_KEY =            &amp;quot;FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
MyName2Key(string message)&lt;br /&gt;
{&lt;br /&gt;
	llMessageLinked(LINK_THIS, SERVICE_NAME2KEY, message, NULL_KEY);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
	touch_start(integer total_number)&lt;br /&gt;
	{&lt;br /&gt;
		llOwnerSay(&amp;quot;Searching key for avatar named Secret2 Linden&amp;quot;);&lt;br /&gt;
		MyName2Key(&amp;quot;Secret2 Linden&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	link_message(integer sender_number, integer number, string message, key id)&lt;br /&gt;
	{&lt;br /&gt;
		if (number==SERVICE_NAME2KEY_RET)&lt;br /&gt;
		{&lt;br /&gt;
			if (id==ONE_KEY)&lt;br /&gt;
				llOwnerSay(&amp;quot;Found ! Key is: &amp;quot;+message);&lt;br /&gt;
			else&lt;br /&gt;
				llOwnerSay(&amp;quot;Error: &amp;quot;+message);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Hope this helps !&lt;br /&gt;
[[User:Maeva Anatine|Maeva Anatine]]&lt;br /&gt;
&lt;br /&gt;
EDIT : Looks like the Lindens have either broken or blocked this function. It works from my browser, however from LSL I get an error page containing this message &amp;quot;Access control configuration prevents your request from&lt;br /&gt;
being allowed at this time.  Please contact your service provider if&lt;br /&gt;
you feel this is incorrect.&amp;quot; - Darling Brody.&lt;br /&gt;
&lt;br /&gt;
EDIT : Yes you&#039;re right Darling. It seems they&#039;ve blocked this acces from within the world... I still wonder why, especially as there are some workarounds to this...&lt;br /&gt;
Anyway I discovered there is a JIRA issue for this. Please vote for the unblock !&lt;br /&gt;
https://jira.secondlife.com/browse/SVC-3122&lt;br /&gt;
- Mae&lt;br /&gt;
&lt;br /&gt;
EDIT : OK after having read this article from LL: http://wiki.secondlife.com/wiki/SearchAPI, it seems proxy usage is allowed. So I modified the upper code in order to go through a proxy machine and it works again :)&lt;br /&gt;
- Mae&lt;br /&gt;
&lt;br /&gt;
EDIT: After reviewing this (and it not working for me for some reason) I rewrote this to allow different proxies by a simple configuration.  This now uses Google instead of bablefish.  It now can handle multiple requests at once.  Replies have changed slightly, as the found key is returned in the &amp;quot;key&amp;quot; field instead of the message field.  In addition, failure of any kind results in a NULL_KEY being returned, and status information is returned in the message field. - [[User:Sensei Schism|Sensei Schism]]&lt;br /&gt;
&lt;br /&gt;
Library:&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
integer SERVICE_NAME2KEY        = 19790;&lt;br /&gt;
integer SERVICE_NAME2KEY_RET    = 19791;&lt;br /&gt;
&lt;br /&gt;
string  proxy                   = &amp;quot;http://www.google.com/gwt/n?_gwt_noimg=1&amp;amp;u=&amp;quot;;&lt;br /&gt;
string  search                  = &amp;quot;http://search.secondlife.com/client_search.php?s=People&amp;amp;q=&amp;quot;;&lt;br /&gt;
string  result                  = &amp;quot;http%3A%2F%2Fworld.secondlife.com%2Fresident%2F&amp;quot;;&lt;br /&gt;
string  notfound                = &amp;quot;There were no matches for &amp;quot;;&lt;br /&gt;
&lt;br /&gt;
list    requests;&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer i) { llResetScript(); }&lt;br /&gt;
&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        requests = [];&lt;br /&gt;
    }&lt;br /&gt;
        &lt;br /&gt;
    link_message(integer s, integer n, string m, key i)&lt;br /&gt;
    {&lt;br /&gt;
        if (n == SERVICE_NAME2KEY) {&lt;br /&gt;
            if(llListFindList(requests,[m]) == -1) {&lt;br /&gt;
                string url = proxy+llEscapeURL(search+m);&lt;br /&gt;
                key id = llHTTPRequest(url, [], &amp;quot;&amp;quot;);&lt;br /&gt;
                requests += [(string)id,m];&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    http_response(key request_id, integer status, list metadata, string body)&lt;br /&gt;
    {&lt;br /&gt;
        integer p = llListFindList(requests,[(string)request_id]);&lt;br /&gt;
        if (p != -1) {&lt;br /&gt;
            string n = llList2String(requests,p+1);&lt;br /&gt;
            integer f = llSubStringIndex(body,result);&lt;br /&gt;
            if(f == -1) {&lt;br /&gt;
                f = llSubStringIndex(body,notfound);&lt;br /&gt;
                if(f == -1)&lt;br /&gt;
                    llMessageLinked(LINK_SET,SERVICE_NAME2KEY_RET,&amp;quot;Error with lookup!&amp;quot;,NULL_KEY);&lt;br /&gt;
                else&lt;br /&gt;
                    llMessageLinked(LINK_SET,SERVICE_NAME2KEY_RET,n+&amp;quot; not found.&amp;quot;,NULL_KEY);&lt;br /&gt;
            } else {&lt;br /&gt;
                f += llStringLength(result);&lt;br /&gt;
                string a = llGetSubString(body,f,f+35);&lt;br /&gt;
            &lt;br /&gt;
                llMessageLinked(LINK_SET,SERVICE_NAME2KEY_RET,n,(key)a);&lt;br /&gt;
            }&lt;br /&gt;
            requests = llDeleteSubList(requests,p,p+1);&lt;br /&gt;
        }&lt;br /&gt;
    }    &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example use (listens on channel /1 and looks up anything sent in that channel):&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
integer SERVICE_NAME2KEY        =   19790;&lt;br /&gt;
integer SERVICE_NAME2KEY_RET    =   19791;&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer i) { llResetScript(); }&lt;br /&gt;
    &lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llListen(1, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    listen(integer c, string n, key i, string m)&lt;br /&gt;
    {&lt;br /&gt;
        llSay(0,&amp;quot;Requesting key for &amp;quot;+m);&lt;br /&gt;
        llMessageLinked(LINK_THIS, SERVICE_NAME2KEY, m, &amp;quot;&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    link_message(integer f, integer n, string s, key i)&lt;br /&gt;
    {&lt;br /&gt;
        if(n == SERVICE_NAME2KEY_RET) {&lt;br /&gt;
            if(i == NULL_KEY)&lt;br /&gt;
                llSay(0,&amp;quot;Lookup failed.  Returned: &amp;quot;+s);&lt;br /&gt;
            else&lt;br /&gt;
                llSay(0,s+&amp;quot;: &amp;quot;+(string)i);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hope this helps!&lt;br /&gt;
&lt;br /&gt;
{{LSLC|Library}}&lt;/div&gt;</summary>
		<author><name>Sensei Schism</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlKey2Name&amp;diff=202633</id>
		<title>LlKey2Name</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlKey2Name&amp;diff=202633"/>
		<updated>2009-01-19T23:28:02Z</updated>

		<summary type="html">&lt;p&gt;Sensei Schism: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function/object|id|prim or avatar|sim=*}}{{LSL_Function&lt;br /&gt;
|func_id=210|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|sort=Key2Name|func=llKey2Name&lt;br /&gt;
|return_type=string|p1_type=key|p1_name=id&lt;br /&gt;
|func_footnote=&#039;&#039;&#039;id&#039;&#039;&#039; must specify a valid rezzed prim or avatar key, present in or otherwise known to the sim in which the script is running, otherwise an empty string is returned. In the case of an avatar, this function will still return a valid name if the avatar is a child agent of the sim (i.e., in an adjacent sim, but presently able to see into the one the script is in), or for a short period after the avatar leaves the sim (specifically, when the client completely disconnects from the sim, either as a main or child agent).&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Keys of inventory items will not work; in the case of these, use [[llGetInventoryName]] instead.&lt;br /&gt;
|func_desc&lt;br /&gt;
|return_text=that is the name of the prim or avatar specified by &#039;&#039;&#039;id&#039;&#039;&#039;.&lt;br /&gt;
|spec&lt;br /&gt;
|caveats=* It is difficult to tell the difference between a prim that has a name that is an empty string and a prim that is not in the sim, or because an invalid key was specified.&lt;br /&gt;
* To get around the &amp;quot;avatar must be present&amp;quot; limitation, you can use the [[llRequestAgentData]] function and the [[dataserver]] event to obtain the avatar&#039;s name from a key.&lt;br /&gt;
* There is no opposite function ([[llName2Key]]) available. However, there are third-party websites which can be queried using the [[llHTTPRequest]] function and the [[http_response]] event.&lt;br /&gt;
|constants&lt;br /&gt;
|examples=&amp;lt;lsl&amp;gt;// Best viewed in Chat History (ctrl-h)&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    collision_start(integer a)//Announce who collided&lt;br /&gt;
    {&lt;br /&gt;
        llSay(0, &amp;quot;llKey2Name: &amp;quot; + llKey2Name(llDetectedKey(0)) +&lt;br /&gt;
               &amp;quot;\nllDetectedName: &amp;quot; + llDetectedName(0));&lt;br /&gt;
    }&lt;br /&gt;
    touch_start(integer a)&lt;br /&gt;
    {&lt;br /&gt;
        llSay(0,&amp;quot;llKey2Name: &amp;quot; + llKey2Name(llDetectedKey(0)) +&lt;br /&gt;
               &amp;quot;\nllDetectedName: &amp;quot; + llDetectedName(0));&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/lsl&amp;gt;&lt;br /&gt;
|helpers&lt;br /&gt;
|also_functions=&lt;br /&gt;
{{LSL DefineRow||[[llGetObjectDetails]]}}&lt;br /&gt;
{{LSL DefineRow||[[llRequestAgentData]]|Uses the [[dataserver]] to request avatar information}}&lt;br /&gt;
|also_events&lt;br /&gt;
|also_articles=&lt;br /&gt;
{{LSL DefineRow||[[Prim Attribute Overloading]]}}&lt;br /&gt;
|also_tests&lt;br /&gt;
|notes=&#039;&#039;&#039;Active Name2Key Databases:&#039;&#039;&#039;&lt;br /&gt;
*http://w-hat.com/name2key&lt;br /&gt;
*http://kdc.ethernia.net/sys/name2key.php&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Dead Name2Key Databases:&#039;&#039;&#039;&lt;br /&gt;
*&amp;lt;s&amp;gt;http://www.libsecondlife.org/protocol/index.php/Name2key&amp;lt;/s&amp;gt;&amp;lt;font color=red&amp;gt;(Appears to be gone as of Apr 2008, but search for name2key on that site for more information)&amp;lt;/font&amp;gt;&lt;br /&gt;
*&amp;lt;s&amp;gt;http://www.ulrikasheim.org/tools/name2key.html&amp;lt;/s&amp;gt;&amp;lt;font color=red&amp;gt;(Appears to be gone as of Apr 2008)&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Name2Key Libraries:&#039;&#039;&#039;&lt;br /&gt;
*[[Name2Key_in_LSL]]&lt;br /&gt;
&lt;br /&gt;
|cat1=Avatar&lt;br /&gt;
|cat2=Prim&lt;br /&gt;
|cat3=Key&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Sensei Schism</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlKey2Name&amp;diff=202623</id>
		<title>LlKey2Name</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlKey2Name&amp;diff=202623"/>
		<updated>2009-01-19T23:26:44Z</updated>

		<summary type="html">&lt;p&gt;Sensei Schism: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function/object|id|prim or avatar|sim=*}}{{LSL_Function&lt;br /&gt;
|func_id=210|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|sort=Key2Name|func=llKey2Name&lt;br /&gt;
|return_type=string|p1_type=key|p1_name=id&lt;br /&gt;
|func_footnote=&#039;&#039;&#039;id&#039;&#039;&#039; must specify a valid rezzed prim or avatar key, present in or otherwise known to the sim in which the script is running, otherwise an empty string is returned. In the case of an avatar, this function will still return a valid name if the avatar is a child agent of the sim (i.e., in an adjacent sim, but presently able to see into the one the script is in), or for a short period after the avatar leaves the sim (specifically, when the client completely disconnects from the sim, either as a main or child agent).&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Keys of inventory items will not work; in the case of these, use [[llGetInventoryName]] instead.&lt;br /&gt;
|func_desc&lt;br /&gt;
|return_text=that is the name of the prim or avatar specified by &#039;&#039;&#039;id&#039;&#039;&#039;.&lt;br /&gt;
|spec&lt;br /&gt;
|caveats=* It is difficult to tell the difference between a prim that has a name that is an empty string and a prim that is not in the sim, or because an invalid key was specified.&lt;br /&gt;
* To get around the &amp;quot;avatar must be present&amp;quot; limitation, you can use the [[llRequestAgentData]] function and the [[dataserver]] event to obtain the avatar&#039;s name from a key.&lt;br /&gt;
* There is no opposite function ([[llName2Key]]) available. However, there are third-party websites which can be queried using the [[llHTTPRequest]] function and the [[http_response]] event.&lt;br /&gt;
|constants&lt;br /&gt;
|examples=&amp;lt;lsl&amp;gt;// Best viewed in Chat History (ctrl-h)&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    collision_start(integer a)//Announce who collided&lt;br /&gt;
    {&lt;br /&gt;
        llSay(0, &amp;quot;llKey2Name: &amp;quot; + llKey2Name(llDetectedKey(0)) +&lt;br /&gt;
               &amp;quot;\nllDetectedName: &amp;quot; + llDetectedName(0));&lt;br /&gt;
    }&lt;br /&gt;
    touch_start(integer a)&lt;br /&gt;
    {&lt;br /&gt;
        llSay(0,&amp;quot;llKey2Name: &amp;quot; + llKey2Name(llDetectedKey(0)) +&lt;br /&gt;
               &amp;quot;\nllDetectedName: &amp;quot; + llDetectedName(0));&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/lsl&amp;gt;&lt;br /&gt;
|helpers&lt;br /&gt;
|also_functions=&lt;br /&gt;
{{LSL DefineRow||[[llGetObjectDetails]]}}&lt;br /&gt;
{{LSL DefineRow||[[llRequestAgentData]]|Uses the [[dataserver]] to request avatar information}}&lt;br /&gt;
|also_events&lt;br /&gt;
|also_articles=&lt;br /&gt;
{{LSL DefineRow||[[Prim Attribute Overloading]]}}&lt;br /&gt;
|also_tests&lt;br /&gt;
|notes=&#039;&#039;&#039;Active Name2Key Databases:&#039;&#039;&#039;&lt;br /&gt;
*http://w-hat.com/name2key&lt;br /&gt;
*http://kdc.ethernia.net/sys/name2key.php&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Dead Name2Key Databases:&#039;&#039;&#039;&lt;br /&gt;
*&amp;lt;s&amp;gt;http://www.libsecondlife.org/protocol/index.php/Name2key&amp;lt;/s&amp;gt;&amp;lt;font color=red&amp;gt;(Appears to be gone as of Apr 2008, but search for name2key on that site for more information)&amp;lt;/font&amp;gt;&lt;br /&gt;
*&amp;lt;s&amp;gt;http://www.ulrikasheim.org/tools/name2key.html&amp;lt;/s&amp;gt;&amp;lt;font color=red&amp;gt;(Appears to be gone as of Apr 2008)&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Name2Key Libraries:&#039;&#039;&#039;&lt;br /&gt;
*http://wiki.secondlife.com/wiki/Name2Key_in_LSL&lt;br /&gt;
&lt;br /&gt;
|cat1=Avatar&lt;br /&gt;
|cat2=Prim&lt;br /&gt;
|cat3=Key&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Sensei Schism</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlKey2Name&amp;diff=202613</id>
		<title>LlKey2Name</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlKey2Name&amp;diff=202613"/>
		<updated>2009-01-19T23:25:26Z</updated>

		<summary type="html">&lt;p&gt;Sensei Schism: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function/object|id|prim or avatar|sim=*}}{{LSL_Function&lt;br /&gt;
|func_id=210|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|sort=Key2Name|func=llKey2Name&lt;br /&gt;
|return_type=string|p1_type=key|p1_name=id&lt;br /&gt;
|func_footnote=&#039;&#039;&#039;id&#039;&#039;&#039; must specify a valid rezzed prim or avatar key, present in or otherwise known to the sim in which the script is running, otherwise an empty string is returned. In the case of an avatar, this function will still return a valid name if the avatar is a child agent of the sim (i.e., in an adjacent sim, but presently able to see into the one the script is in), or for a short period after the avatar leaves the sim (specifically, when the client completely disconnects from the sim, either as a main or child agent).&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Keys of inventory items will not work; in the case of these, use [[llGetInventoryName]] instead.&lt;br /&gt;
|func_desc&lt;br /&gt;
|return_text=that is the name of the prim or avatar specified by &#039;&#039;&#039;id&#039;&#039;&#039;.&lt;br /&gt;
|spec&lt;br /&gt;
|caveats=* It is difficult to tell the difference between a prim that has a name that is an empty string and a prim that is not in the sim, or because an invalid key was specified.&lt;br /&gt;
* To get around the &amp;quot;avatar must be present&amp;quot; limitation, you can use the [[llRequestAgentData]] function and the [[dataserver]] event to obtain the avatar&#039;s name from a key.&lt;br /&gt;
* There is no opposite function ([[llName2Key]]) available. However, there are third-party websites which can be queried using the [[llHTTPRequest]] function and the [[http_response]] event.&lt;br /&gt;
|constants&lt;br /&gt;
|examples=&amp;lt;lsl&amp;gt;// Best viewed in Chat History (ctrl-h)&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    collision_start(integer a)//Announce who collided&lt;br /&gt;
    {&lt;br /&gt;
        llSay(0, &amp;quot;llKey2Name: &amp;quot; + llKey2Name(llDetectedKey(0)) +&lt;br /&gt;
               &amp;quot;\nllDetectedName: &amp;quot; + llDetectedName(0));&lt;br /&gt;
    }&lt;br /&gt;
    touch_start(integer a)&lt;br /&gt;
    {&lt;br /&gt;
        llSay(0,&amp;quot;llKey2Name: &amp;quot; + llKey2Name(llDetectedKey(0)) +&lt;br /&gt;
               &amp;quot;\nllDetectedName: &amp;quot; + llDetectedName(0));&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/lsl&amp;gt;&lt;br /&gt;
|helpers&lt;br /&gt;
|also_functions=&lt;br /&gt;
{{LSL DefineRow||[[llGetObjectDetails]]}}&lt;br /&gt;
{{LSL DefineRow||[[llRequestAgentData]]|Uses the [[dataserver]] to request avatar information}}&lt;br /&gt;
|also_events&lt;br /&gt;
|also_articles=&lt;br /&gt;
{{LSL DefineRow||[[Prim Attribute Overloading]]}}&lt;br /&gt;
|also_tests&lt;br /&gt;
|notes=&#039;&#039;&#039;Active Name2Key databases:&#039;&#039;&#039;&lt;br /&gt;
*http://w-hat.com/name2key&lt;br /&gt;
*http://kdc.ethernia.net/sys/name2key.php&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Dead databases:&#039;&#039;&#039;&lt;br /&gt;
*&amp;lt;s&amp;gt;http://www.libsecondlife.org/protocol/index.php/Name2key&amp;lt;/s&amp;gt;&amp;lt;font color=red&amp;gt;(Appears to be gone as of Apr 2008, but search for name2key on that site for more information)&amp;lt;/font&amp;gt;&lt;br /&gt;
*&amp;lt;s&amp;gt;http://www.ulrikasheim.org/tools/name2key.html&amp;lt;/s&amp;gt;&amp;lt;font color=red&amp;gt;(Appears to be gone as of Apr 2008)&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Library Functions&#039;&#039;&#039;&lt;br /&gt;
*https://wiki.secondlife.com/wiki/Name2Key_in_LSL&lt;br /&gt;
&lt;br /&gt;
|cat1=Avatar&lt;br /&gt;
|cat2=Prim&lt;br /&gt;
|cat3=Key&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Sensei Schism</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlKey2Name&amp;diff=202603</id>
		<title>LlKey2Name</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlKey2Name&amp;diff=202603"/>
		<updated>2009-01-19T23:24:48Z</updated>

		<summary type="html">&lt;p&gt;Sensei Schism: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function/object|id|prim or avatar|sim=*}}{{LSL_Function&lt;br /&gt;
|func_id=210|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|sort=Key2Name|func=llKey2Name&lt;br /&gt;
|return_type=string|p1_type=key|p1_name=id&lt;br /&gt;
|func_footnote=&#039;&#039;&#039;id&#039;&#039;&#039; must specify a valid rezzed prim or avatar key, present in or otherwise known to the sim in which the script is running, otherwise an empty string is returned. In the case of an avatar, this function will still return a valid name if the avatar is a child agent of the sim (i.e., in an adjacent sim, but presently able to see into the one the script is in), or for a short period after the avatar leaves the sim (specifically, when the client completely disconnects from the sim, either as a main or child agent).&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Keys of inventory items will not work; in the case of these, use [[llGetInventoryName]] instead.&lt;br /&gt;
|func_desc&lt;br /&gt;
|return_text=that is the name of the prim or avatar specified by &#039;&#039;&#039;id&#039;&#039;&#039;.&lt;br /&gt;
|spec&lt;br /&gt;
|caveats=* It is difficult to tell the difference between a prim that has a name that is an empty string and a prim that is not in the sim, or because an invalid key was specified.&lt;br /&gt;
* To get around the &amp;quot;avatar must be present&amp;quot; limitation, you can use the [[llRequestAgentData]] function and the [[dataserver]] event to obtain the avatar&#039;s name from a key.&lt;br /&gt;
* There is no opposite function ([[llName2Key]]) available. However, there are third-party websites which can be queried using the [[llHTTPRequest]] function and the [[http_response]] event.&lt;br /&gt;
|constants&lt;br /&gt;
|examples=&amp;lt;lsl&amp;gt;// Best viewed in Chat History (ctrl-h)&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    collision_start(integer a)//Announce who collided&lt;br /&gt;
    {&lt;br /&gt;
        llSay(0, &amp;quot;llKey2Name: &amp;quot; + llKey2Name(llDetectedKey(0)) +&lt;br /&gt;
               &amp;quot;\nllDetectedName: &amp;quot; + llDetectedName(0));&lt;br /&gt;
    }&lt;br /&gt;
    touch_start(integer a)&lt;br /&gt;
    {&lt;br /&gt;
        llSay(0,&amp;quot;llKey2Name: &amp;quot; + llKey2Name(llDetectedKey(0)) +&lt;br /&gt;
               &amp;quot;\nllDetectedName: &amp;quot; + llDetectedName(0));&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/lsl&amp;gt;&lt;br /&gt;
|helpers&lt;br /&gt;
|also_functions=&lt;br /&gt;
{{LSL DefineRow||[[llGetObjectDetails]]}}&lt;br /&gt;
{{LSL DefineRow||[[llRequestAgentData]]|Uses the [[dataserver]] to request avatar information}}&lt;br /&gt;
|also_events&lt;br /&gt;
|also_articles=&lt;br /&gt;
{{LSL DefineRow||[[Prim Attribute Overloading]]}}&lt;br /&gt;
|also_tests&lt;br /&gt;
|notes=&#039;&#039;&#039;Active Name2Key databases:&#039;&#039;&#039;&lt;br /&gt;
*http://w-hat.com/name2key&lt;br /&gt;
*http://kdc.ethernia.net/sys/name2key.php&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Dead databases:&#039;&#039;&#039;&lt;br /&gt;
*&amp;lt;s&amp;gt;http://www.libsecondlife.org/protocol/index.php/Name2key&amp;lt;/s&amp;gt;&amp;lt;font color=red&amp;gt;(Appears to be gone as of Apr 2008, but search for name2key on that site for more information)&amp;lt;/font&amp;gt;&lt;br /&gt;
*&amp;lt;s&amp;gt;http://www.ulrikasheim.org/tools/name2key.html&amp;lt;/s&amp;gt;&amp;lt;font color=red&amp;gt;(Appears to be gone as of Apr 2008)&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Library Functions&#039;&#039;&#039;&lt;br /&gt;
*&amp;lt;s&amp;gt;https://wiki.secondlife.com/wiki/Name2Key_in_LSL&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|cat1=Avatar&lt;br /&gt;
|cat2=Prim&lt;br /&gt;
|cat3=Key&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Sensei Schism</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Name2Key_in_LSL&amp;diff=202593</id>
		<title>Name2Key in LSL</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Name2Key_in_LSL&amp;diff=202593"/>
		<updated>2009-01-19T23:16:22Z</updated>

		<summary type="html">&lt;p&gt;Sensei Schism: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Header}}&lt;br /&gt;
&lt;br /&gt;
Still missing Name2Key functions in your code ? Still relying on external databases that are not always up to date with latests SL subscribers ? &lt;br /&gt;
&lt;br /&gt;
Well now you can solve this by yourself, within your LSL script ! All you have to do is to rely on LL Search engine ! &lt;br /&gt;
&lt;br /&gt;
I put a kind of &amp;quot;library&amp;quot; and a sample of usage for your convenience&lt;br /&gt;
&lt;br /&gt;
Library:&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
integer SERVICE_NAME2KEY =	 19790;&lt;br /&gt;
integer SERVICE_NAME2KEY_RET=19791;&lt;br /&gt;
key     ONE_KEY =            &amp;quot;FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
integer gCurrentRequest=0;&lt;br /&gt;
key     gReqId=NULL_KEY;&lt;br /&gt;
string  gToSearch=&amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
ReturnService(integer Status, string message)&lt;br /&gt;
{&lt;br /&gt;
	key Key;&lt;br /&gt;
&lt;br /&gt;
	if (Status)&lt;br /&gt;
		Key=ONE_KEY;&lt;br /&gt;
	else&lt;br /&gt;
		Key=NULL_KEY;&lt;br /&gt;
&lt;br /&gt;
	llMessageLinked(LINK_THIS, gCurrentRequest+1, message, Key);&lt;br /&gt;
	&lt;br /&gt;
	gCurrentRequest=0;&lt;br /&gt;
	gReqId=NULL_KEY;&lt;br /&gt;
	gToSearch=&amp;quot;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
SvcName2Key(string message)&lt;br /&gt;
{&lt;br /&gt;
    if (gCurrentRequest) {&lt;br /&gt;
        ReturnService(FALSE, &amp;quot;BUSY&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    list Args=llParseString2List(message, [&amp;quot; &amp;quot;], []);&lt;br /&gt;
    &lt;br /&gt;
    string FirstName = llList2String(Args, 0);&lt;br /&gt;
    string LastName = llList2String(Args, 1);&lt;br /&gt;
    &lt;br /&gt;
    gCurrentRequest=SERVICE_NAME2KEY;&lt;br /&gt;
    &lt;br /&gt;
    string url=&amp;quot;http://66.196.80.202/babelfish/translate_url_content?.intl=us&amp;amp;lp=fr_en&amp;amp;trurl=http%3A%2F%2Fsearch.secondlife.com%2Fclient_search.php%3Fs%3DResident%26q%3D&amp;quot;+FirstName+&amp;quot;%2520&amp;quot;+LastName;&lt;br /&gt;
    gToSearch=&amp;quot;secondlife:///app/agent/&amp;quot;;&lt;br /&gt;
    &lt;br /&gt;
    gReqId=llHTTPRequest(url, [HTTP_METHOD,&amp;quot;GET&amp;quot;], &amp;quot;&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
	link_message(integer sender_number, integer number, string message, key id)&lt;br /&gt;
	{&lt;br /&gt;
		if (number==SERVICE_NAME2KEY) {&lt;br /&gt;
			SvcName2Key(message); &lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	http_response(key request_id, integer status, list metadata, string body)&lt;br /&gt;
	{&lt;br /&gt;
		if (request_id==gReqId) {&lt;br /&gt;
			integer Pos1=llSubStringIndex(body, gToSearch);&lt;br /&gt;
			integer Pos2=0;&lt;br /&gt;
			string  Ret=&amp;quot;&amp;quot;;&lt;br /&gt;
			if (Pos1!=-1) {&lt;br /&gt;
				body=llGetSubString(body, Pos1+llStringLength(gToSearch), -1);	&lt;br /&gt;
				if (gCurrentRequest==SERVICE_NAME2KEY) {&lt;br /&gt;
					Pos2=llStringLength((string)NULL_KEY);&lt;br /&gt;
					string Dat=llGetSubString(body, 0, Pos2-1);&lt;br /&gt;
					if (llStringLength((string)((key)Dat))==llStringLength(NULL_KEY)) {&lt;br /&gt;
						// Success !&lt;br /&gt;
						Ret=llGetSubString(body, 0, Pos2-1);&lt;br /&gt;
						ReturnService(TRUE, Ret);&lt;br /&gt;
					}&lt;br /&gt;
					else&lt;br /&gt;
						ReturnService(FALSE, &amp;quot;UNKNOWN&amp;quot;);&lt;br /&gt;
				}&lt;br /&gt;
				else&lt;br /&gt;
					ReturnService(FALSE, &amp;quot;UNKNOWN SERVICE&amp;quot;);&lt;br /&gt;
			}&lt;br /&gt;
			else&lt;br /&gt;
				ReturnService(FALSE, &amp;quot;UNKNOWN&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
	}	&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Usage sample:&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
integer SERVICE_NAME2KEY =	 19790;&lt;br /&gt;
integer SERVICE_NAME2KEY_RET=19791;&lt;br /&gt;
key     ONE_KEY =            &amp;quot;FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
MyName2Key(string message)&lt;br /&gt;
{&lt;br /&gt;
	llMessageLinked(LINK_THIS, SERVICE_NAME2KEY, message, NULL_KEY);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
	touch_start(integer total_number)&lt;br /&gt;
	{&lt;br /&gt;
		llOwnerSay(&amp;quot;Searching key for avatar named Secret2 Linden&amp;quot;);&lt;br /&gt;
		MyName2Key(&amp;quot;Secret2 Linden&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	link_message(integer sender_number, integer number, string message, key id)&lt;br /&gt;
	{&lt;br /&gt;
		if (number==SERVICE_NAME2KEY_RET)&lt;br /&gt;
		{&lt;br /&gt;
			if (id==ONE_KEY)&lt;br /&gt;
				llOwnerSay(&amp;quot;Found ! Key is: &amp;quot;+message);&lt;br /&gt;
			else&lt;br /&gt;
				llOwnerSay(&amp;quot;Error: &amp;quot;+message);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Hope this helps !&lt;br /&gt;
[[User:Maeva Anatine|Maeva Anatine]]&lt;br /&gt;
&lt;br /&gt;
EDIT : Looks like the Lindens have either broken or blocked this function. It works from my browser, however from LSL I get an error page containing this message &amp;quot;Access control configuration prevents your request from&lt;br /&gt;
being allowed at this time.  Please contact your service provider if&lt;br /&gt;
you feel this is incorrect.&amp;quot; - Darling Brody.&lt;br /&gt;
&lt;br /&gt;
EDIT : Yes you&#039;re right Darling. It seems they&#039;ve blocked this acces from within the world... I still wonder why, especially as there are some workarounds to this...&lt;br /&gt;
Anyway I discovered there is a JIRA issue for this. Please vote for the unblock !&lt;br /&gt;
https://jira.secondlife.com/browse/SVC-3122&lt;br /&gt;
- Mae&lt;br /&gt;
&lt;br /&gt;
EDIT : OK after having read this article from LL: http://wiki.secondlife.com/wiki/SearchAPI, it seems proxy usage is allowed. So I modified the upper code in order to go through a proxy machine and it works again :)&lt;br /&gt;
- Mae&lt;br /&gt;
&lt;br /&gt;
EDIT: After reviewing this (and it not working for me for some reason) I rewrote this to allow different proxies by a simple configuration.  This now uses Google instead of bablefish.  It now can handle multiple requests at once.  Replies have changed slightly, as the found key is returned in the &amp;quot;key&amp;quot; field instead of the message field.  In addition, failure of any kind results in a NULL_KEY being returned, and status information is returned in the message field. - [[User:Sensei Schism|Sensei Schism]]&lt;br /&gt;
&lt;br /&gt;
Library:&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
integer SERVICE_NAME2KEY        = 19790;&lt;br /&gt;
integer SERVICE_NAME2KEY_RET    = 19791;&lt;br /&gt;
&lt;br /&gt;
string  proxy                   = &amp;quot;http://www.google.com/gwt/n?_gwt_noimg=1&amp;amp;u=&amp;quot;;&lt;br /&gt;
string  search                  = &amp;quot;http://search.secondlife.com/client_search.php?s=People&amp;amp;q=&amp;quot;;&lt;br /&gt;
string  result                  = &amp;quot;http%3A%2F%2Fworld.secondlife.com%2Fresident%2F&amp;quot;;&lt;br /&gt;
string  notfound                = &amp;quot;There were no matches for &amp;quot;;&lt;br /&gt;
&lt;br /&gt;
list    requests;&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer i) { llResetScript(); }&lt;br /&gt;
&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        requests = [];&lt;br /&gt;
    }&lt;br /&gt;
        &lt;br /&gt;
    link_message(integer s, integer n, string m, key i)&lt;br /&gt;
    {&lt;br /&gt;
        if (n == SERVICE_NAME2KEY) {&lt;br /&gt;
            if(llListFindList(requests,[m]) == -1) {&lt;br /&gt;
                string url = proxy+llEscapeURL(search+m);&lt;br /&gt;
                key id = llHTTPRequest(url, [], &amp;quot;&amp;quot;);&lt;br /&gt;
                requests += [(string)id,m];&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    http_response(key request_id, integer status, list metadata, string body)&lt;br /&gt;
    {&lt;br /&gt;
        integer p = llListFindList(requests,[(string)request_id]);&lt;br /&gt;
        if (p != -1) {&lt;br /&gt;
            string n = llList2String(requests,p+1);&lt;br /&gt;
            integer f = llSubStringIndex(body,result);&lt;br /&gt;
            if(f == -1) {&lt;br /&gt;
                f = llSubStringIndex(body,notfound);&lt;br /&gt;
                if(f == -1)&lt;br /&gt;
                    llMessageLinked(LINK_SET,SERVICE_NAME2KEY_RET,&amp;quot;Error with lookup!&amp;quot;,NULL_KEY);&lt;br /&gt;
                else&lt;br /&gt;
                    llMessageLinked(LINK_SET,SERVICE_NAME2KEY_RET,n+&amp;quot; not found.&amp;quot;,NULL_KEY);&lt;br /&gt;
            } else {&lt;br /&gt;
                f += llStringLength(result);&lt;br /&gt;
                string a = llGetSubString(body,f,f+35);&lt;br /&gt;
            &lt;br /&gt;
                llMessageLinked(LINK_SET,SERVICE_NAME2KEY_RET,n,(key)a);&lt;br /&gt;
            }&lt;br /&gt;
            requests = llDeleteSubList(requests,p,p+1);&lt;br /&gt;
        }&lt;br /&gt;
    }    &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example use (listens on channel /1 and looks up anything send in that channel):&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
integer SERVICE_NAME2KEY        =   19790;&lt;br /&gt;
integer SERVICE_NAME2KEY_RET    =   19791;&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer i) { llResetScript(); }&lt;br /&gt;
    &lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llListen(1, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    listen(integer c, string n, key i, string m)&lt;br /&gt;
    {&lt;br /&gt;
        llSay(0,&amp;quot;Requesting key for &amp;quot;+m);&lt;br /&gt;
        llMessageLinked(LINK_THIS, SERVICE_NAME2KEY, m, &amp;quot;&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    link_message(integer f, integer n, string s, key i)&lt;br /&gt;
    {&lt;br /&gt;
        if(n == SERVICE_NAME2KEY_RET) {&lt;br /&gt;
            if(i == NULL_KEY)&lt;br /&gt;
                llSay(0,&amp;quot;Lookup failed.  Returned: &amp;quot;+s);&lt;br /&gt;
            else&lt;br /&gt;
                llSay(0,s+&amp;quot;: &amp;quot;+(string)i);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hope this helps!&lt;br /&gt;
&lt;br /&gt;
{{LSLC|Library}}&lt;/div&gt;</summary>
		<author><name>Sensei Schism</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Name2Key_in_LSL&amp;diff=202583</id>
		<title>Name2Key in LSL</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Name2Key_in_LSL&amp;diff=202583"/>
		<updated>2009-01-19T23:15:20Z</updated>

		<summary type="html">&lt;p&gt;Sensei Schism: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Header}}&lt;br /&gt;
&lt;br /&gt;
Still missing Name2Key functions in your code ? Still relying on external databases that are not always up to date with latests SL subscribers ? &lt;br /&gt;
&lt;br /&gt;
Well now you can solve this by yourself, within your LSL script ! All you have to do is to rely on LL Search engine ! &lt;br /&gt;
&lt;br /&gt;
I put a kind of &amp;quot;library&amp;quot; and a sample of usage for your convenience&lt;br /&gt;
&lt;br /&gt;
Library:&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
integer SERVICE_NAME2KEY =	 19790;&lt;br /&gt;
integer SERVICE_NAME2KEY_RET=19791;&lt;br /&gt;
key     ONE_KEY =            &amp;quot;FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
integer gCurrentRequest=0;&lt;br /&gt;
key     gReqId=NULL_KEY;&lt;br /&gt;
string  gToSearch=&amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
ReturnService(integer Status, string message)&lt;br /&gt;
{&lt;br /&gt;
	key Key;&lt;br /&gt;
&lt;br /&gt;
	if (Status)&lt;br /&gt;
		Key=ONE_KEY;&lt;br /&gt;
	else&lt;br /&gt;
		Key=NULL_KEY;&lt;br /&gt;
&lt;br /&gt;
	llMessageLinked(LINK_THIS, gCurrentRequest+1, message, Key);&lt;br /&gt;
	&lt;br /&gt;
	gCurrentRequest=0;&lt;br /&gt;
	gReqId=NULL_KEY;&lt;br /&gt;
	gToSearch=&amp;quot;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
SvcName2Key(string message)&lt;br /&gt;
{&lt;br /&gt;
    if (gCurrentRequest) {&lt;br /&gt;
        ReturnService(FALSE, &amp;quot;BUSY&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    list Args=llParseString2List(message, [&amp;quot; &amp;quot;], []);&lt;br /&gt;
    &lt;br /&gt;
    string FirstName = llList2String(Args, 0);&lt;br /&gt;
    string LastName = llList2String(Args, 1);&lt;br /&gt;
    &lt;br /&gt;
    gCurrentRequest=SERVICE_NAME2KEY;&lt;br /&gt;
    &lt;br /&gt;
    string url=&amp;quot;http://66.196.80.202/babelfish/translate_url_content?.intl=us&amp;amp;lp=fr_en&amp;amp;trurl=http%3A%2F%2Fsearch.secondlife.com%2Fclient_search.php%3Fs%3DResident%26q%3D&amp;quot;+FirstName+&amp;quot;%2520&amp;quot;+LastName;&lt;br /&gt;
    gToSearch=&amp;quot;secondlife:///app/agent/&amp;quot;;&lt;br /&gt;
    &lt;br /&gt;
    gReqId=llHTTPRequest(url, [HTTP_METHOD,&amp;quot;GET&amp;quot;], &amp;quot;&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
	link_message(integer sender_number, integer number, string message, key id)&lt;br /&gt;
	{&lt;br /&gt;
		if (number==SERVICE_NAME2KEY) {&lt;br /&gt;
			SvcName2Key(message); &lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	http_response(key request_id, integer status, list metadata, string body)&lt;br /&gt;
	{&lt;br /&gt;
		if (request_id==gReqId) {&lt;br /&gt;
			integer Pos1=llSubStringIndex(body, gToSearch);&lt;br /&gt;
			integer Pos2=0;&lt;br /&gt;
			string  Ret=&amp;quot;&amp;quot;;&lt;br /&gt;
			if (Pos1!=-1) {&lt;br /&gt;
				body=llGetSubString(body, Pos1+llStringLength(gToSearch), -1);	&lt;br /&gt;
				if (gCurrentRequest==SERVICE_NAME2KEY) {&lt;br /&gt;
					Pos2=llStringLength((string)NULL_KEY);&lt;br /&gt;
					string Dat=llGetSubString(body, 0, Pos2-1);&lt;br /&gt;
					if (llStringLength((string)((key)Dat))==llStringLength(NULL_KEY)) {&lt;br /&gt;
						// Success !&lt;br /&gt;
						Ret=llGetSubString(body, 0, Pos2-1);&lt;br /&gt;
						ReturnService(TRUE, Ret);&lt;br /&gt;
					}&lt;br /&gt;
					else&lt;br /&gt;
						ReturnService(FALSE, &amp;quot;UNKNOWN&amp;quot;);&lt;br /&gt;
				}&lt;br /&gt;
				else&lt;br /&gt;
					ReturnService(FALSE, &amp;quot;UNKNOWN SERVICE&amp;quot;);&lt;br /&gt;
			}&lt;br /&gt;
			else&lt;br /&gt;
				ReturnService(FALSE, &amp;quot;UNKNOWN&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
	}	&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Usage sample:&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
integer SERVICE_NAME2KEY =	 19790;&lt;br /&gt;
integer SERVICE_NAME2KEY_RET=19791;&lt;br /&gt;
key     ONE_KEY =            &amp;quot;FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
MyName2Key(string message)&lt;br /&gt;
{&lt;br /&gt;
	llMessageLinked(LINK_THIS, SERVICE_NAME2KEY, message, NULL_KEY);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
	touch_start(integer total_number)&lt;br /&gt;
	{&lt;br /&gt;
		llOwnerSay(&amp;quot;Searching key for avatar named Secret2 Linden&amp;quot;);&lt;br /&gt;
		MyName2Key(&amp;quot;Secret2 Linden&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	link_message(integer sender_number, integer number, string message, key id)&lt;br /&gt;
	{&lt;br /&gt;
		if (number==SERVICE_NAME2KEY_RET)&lt;br /&gt;
		{&lt;br /&gt;
			if (id==ONE_KEY)&lt;br /&gt;
				llOwnerSay(&amp;quot;Found ! Key is: &amp;quot;+message);&lt;br /&gt;
			else&lt;br /&gt;
				llOwnerSay(&amp;quot;Error: &amp;quot;+message);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Hope this helps !&lt;br /&gt;
[[User:Maeva Anatine|Maeva Anatine]]&lt;br /&gt;
&lt;br /&gt;
EDIT : Looks like the Lindens have either broken or blocked this function. It works from my browser, however from LSL I get an error page containing this message &amp;quot;Access control configuration prevents your request from&lt;br /&gt;
being allowed at this time.  Please contact your service provider if&lt;br /&gt;
you feel this is incorrect.&amp;quot; - Darling Brody.&lt;br /&gt;
&lt;br /&gt;
EDIT : Yes you&#039;re right Darling. It seems they&#039;ve blocked this acces from within the world... I still wonder why, especially as there are some workarounds to this...&lt;br /&gt;
Anyway I discovered there is a JIRA issue for this. Please vote for the unblock !&lt;br /&gt;
https://jira.secondlife.com/browse/SVC-3122&lt;br /&gt;
- Mae&lt;br /&gt;
&lt;br /&gt;
EDIT : OK after having read this article from LL: http://wiki.secondlife.com/wiki/SearchAPI, it seems proxy usage is allowed. So I modified the upper code in order to go through a proxy machine and it works again :)&lt;br /&gt;
- Mae&lt;br /&gt;
&lt;br /&gt;
EDIT: After reviewing this (and it not working for me for some reason) I rewrote this to allow different proxies by a simple configuration.  This now uses Google instead of bablefish.  It now can handle multiple requests at once.  Replies have changed slightly, as the found key is returned in the &amp;quot;key&amp;quot; field instead of the message field.  In addition, failure of any kind results in a NULL_KEY being returned, and status information is returned in the message field. - Sensei Schism&lt;br /&gt;
&lt;br /&gt;
Library:&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
integer SERVICE_NAME2KEY        = 19790;&lt;br /&gt;
integer SERVICE_NAME2KEY_RET    = 19791;&lt;br /&gt;
&lt;br /&gt;
string  proxy                   = &amp;quot;http://www.google.com/gwt/n?_gwt_noimg=1&amp;amp;u=&amp;quot;;&lt;br /&gt;
string  search                  = &amp;quot;http://search.secondlife.com/client_search.php?s=People&amp;amp;q=&amp;quot;;&lt;br /&gt;
string  result                  = &amp;quot;http%3A%2F%2Fworld.secondlife.com%2Fresident%2F&amp;quot;;&lt;br /&gt;
string  notfound                = &amp;quot;There were no matches for &amp;quot;;&lt;br /&gt;
&lt;br /&gt;
list    requests;&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer i) { llResetScript(); }&lt;br /&gt;
&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        requests = [];&lt;br /&gt;
    }&lt;br /&gt;
        &lt;br /&gt;
    link_message(integer s, integer n, string m, key i)&lt;br /&gt;
    {&lt;br /&gt;
        if (n == SERVICE_NAME2KEY) {&lt;br /&gt;
            if(llListFindList(requests,[m]) == -1) {&lt;br /&gt;
                string url = proxy+llEscapeURL(search+m);&lt;br /&gt;
                key id = llHTTPRequest(url, [], &amp;quot;&amp;quot;);&lt;br /&gt;
                requests += [(string)id,m];&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    http_response(key request_id, integer status, list metadata, string body)&lt;br /&gt;
    {&lt;br /&gt;
        integer p = llListFindList(requests,[(string)request_id]);&lt;br /&gt;
        if (p != -1) {&lt;br /&gt;
            string n = llList2String(requests,p+1);&lt;br /&gt;
            integer f = llSubStringIndex(body,result);&lt;br /&gt;
            if(f == -1) {&lt;br /&gt;
                f = llSubStringIndex(body,notfound);&lt;br /&gt;
                if(f == -1)&lt;br /&gt;
                    llMessageLinked(LINK_SET,SERVICE_NAME2KEY_RET,&amp;quot;Error with lookup!&amp;quot;,NULL_KEY);&lt;br /&gt;
                else&lt;br /&gt;
                    llMessageLinked(LINK_SET,SERVICE_NAME2KEY_RET,n+&amp;quot; not found.&amp;quot;,NULL_KEY);&lt;br /&gt;
            } else {&lt;br /&gt;
                f += llStringLength(result);&lt;br /&gt;
                string a = llGetSubString(body,f,f+35);&lt;br /&gt;
            &lt;br /&gt;
                llMessageLinked(LINK_SET,SERVICE_NAME2KEY_RET,n,(key)a);&lt;br /&gt;
            }&lt;br /&gt;
            requests = llDeleteSubList(requests,p,p+1);&lt;br /&gt;
        }&lt;br /&gt;
    }    &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example use (listens on channel /1 and looks up anything send in that channel):&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
integer SERVICE_NAME2KEY        =   19790;&lt;br /&gt;
integer SERVICE_NAME2KEY_RET    =   19791;&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer i) { llResetScript(); }&lt;br /&gt;
    &lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llListen(1, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    listen(integer c, string n, key i, string m)&lt;br /&gt;
    {&lt;br /&gt;
        llSay(0,&amp;quot;Requesting key for &amp;quot;+m);&lt;br /&gt;
        llMessageLinked(LINK_THIS, SERVICE_NAME2KEY, m, &amp;quot;&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    link_message(integer f, integer n, string s, key i)&lt;br /&gt;
    {&lt;br /&gt;
        if(n == SERVICE_NAME2KEY_RET) {&lt;br /&gt;
            if(i == NULL_KEY)&lt;br /&gt;
                llSay(0,&amp;quot;Lookup failed.  Returned: &amp;quot;+s);&lt;br /&gt;
            else&lt;br /&gt;
                llSay(0,s+&amp;quot;: &amp;quot;+(string)i);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hope this helps!&lt;br /&gt;
&lt;br /&gt;
{{LSLC|Library}}&lt;/div&gt;</summary>
		<author><name>Sensei Schism</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Name2Key_in_LSL&amp;diff=202573</id>
		<title>Name2Key in LSL</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Name2Key_in_LSL&amp;diff=202573"/>
		<updated>2009-01-19T23:14:23Z</updated>

		<summary type="html">&lt;p&gt;Sensei Schism: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Header}}&lt;br /&gt;
&lt;br /&gt;
Still missing Name2Key functions in your code ? Still relying on external databases that are not always up to date with latests SL subscribers ? &lt;br /&gt;
&lt;br /&gt;
Well now you can solve this by yourself, within your LSL script ! All you have to do is to rely on LL Search engine ! &lt;br /&gt;
&lt;br /&gt;
I put a kind of &amp;quot;library&amp;quot; and a sample of usage for your convenience&lt;br /&gt;
&lt;br /&gt;
Library:&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
integer SERVICE_NAME2KEY =	 19790;&lt;br /&gt;
integer SERVICE_NAME2KEY_RET=19791;&lt;br /&gt;
key     ONE_KEY =            &amp;quot;FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
integer gCurrentRequest=0;&lt;br /&gt;
key     gReqId=NULL_KEY;&lt;br /&gt;
string  gToSearch=&amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
ReturnService(integer Status, string message)&lt;br /&gt;
{&lt;br /&gt;
	key Key;&lt;br /&gt;
&lt;br /&gt;
	if (Status)&lt;br /&gt;
		Key=ONE_KEY;&lt;br /&gt;
	else&lt;br /&gt;
		Key=NULL_KEY;&lt;br /&gt;
&lt;br /&gt;
	llMessageLinked(LINK_THIS, gCurrentRequest+1, message, Key);&lt;br /&gt;
	&lt;br /&gt;
	gCurrentRequest=0;&lt;br /&gt;
	gReqId=NULL_KEY;&lt;br /&gt;
	gToSearch=&amp;quot;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
SvcName2Key(string message)&lt;br /&gt;
{&lt;br /&gt;
    if (gCurrentRequest) {&lt;br /&gt;
        ReturnService(FALSE, &amp;quot;BUSY&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    list Args=llParseString2List(message, [&amp;quot; &amp;quot;], []);&lt;br /&gt;
    &lt;br /&gt;
    string FirstName = llList2String(Args, 0);&lt;br /&gt;
    string LastName = llList2String(Args, 1);&lt;br /&gt;
    &lt;br /&gt;
    gCurrentRequest=SERVICE_NAME2KEY;&lt;br /&gt;
    &lt;br /&gt;
    string url=&amp;quot;http://66.196.80.202/babelfish/translate_url_content?.intl=us&amp;amp;lp=fr_en&amp;amp;trurl=http%3A%2F%2Fsearch.secondlife.com%2Fclient_search.php%3Fs%3DResident%26q%3D&amp;quot;+FirstName+&amp;quot;%2520&amp;quot;+LastName;&lt;br /&gt;
    gToSearch=&amp;quot;secondlife:///app/agent/&amp;quot;;&lt;br /&gt;
    &lt;br /&gt;
    gReqId=llHTTPRequest(url, [HTTP_METHOD,&amp;quot;GET&amp;quot;], &amp;quot;&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
	link_message(integer sender_number, integer number, string message, key id)&lt;br /&gt;
	{&lt;br /&gt;
		if (number==SERVICE_NAME2KEY) {&lt;br /&gt;
			SvcName2Key(message); &lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	http_response(key request_id, integer status, list metadata, string body)&lt;br /&gt;
	{&lt;br /&gt;
		if (request_id==gReqId) {&lt;br /&gt;
			integer Pos1=llSubStringIndex(body, gToSearch);&lt;br /&gt;
			integer Pos2=0;&lt;br /&gt;
			string  Ret=&amp;quot;&amp;quot;;&lt;br /&gt;
			if (Pos1!=-1) {&lt;br /&gt;
				body=llGetSubString(body, Pos1+llStringLength(gToSearch), -1);	&lt;br /&gt;
				if (gCurrentRequest==SERVICE_NAME2KEY) {&lt;br /&gt;
					Pos2=llStringLength((string)NULL_KEY);&lt;br /&gt;
					string Dat=llGetSubString(body, 0, Pos2-1);&lt;br /&gt;
					if (llStringLength((string)((key)Dat))==llStringLength(NULL_KEY)) {&lt;br /&gt;
						// Success !&lt;br /&gt;
						Ret=llGetSubString(body, 0, Pos2-1);&lt;br /&gt;
						ReturnService(TRUE, Ret);&lt;br /&gt;
					}&lt;br /&gt;
					else&lt;br /&gt;
						ReturnService(FALSE, &amp;quot;UNKNOWN&amp;quot;);&lt;br /&gt;
				}&lt;br /&gt;
				else&lt;br /&gt;
					ReturnService(FALSE, &amp;quot;UNKNOWN SERVICE&amp;quot;);&lt;br /&gt;
			}&lt;br /&gt;
			else&lt;br /&gt;
				ReturnService(FALSE, &amp;quot;UNKNOWN&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
	}	&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Usage sample:&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
integer SERVICE_NAME2KEY =	 19790;&lt;br /&gt;
integer SERVICE_NAME2KEY_RET=19791;&lt;br /&gt;
key     ONE_KEY =            &amp;quot;FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
MyName2Key(string message)&lt;br /&gt;
{&lt;br /&gt;
	llMessageLinked(LINK_THIS, SERVICE_NAME2KEY, message, NULL_KEY);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
	touch_start(integer total_number)&lt;br /&gt;
	{&lt;br /&gt;
		llOwnerSay(&amp;quot;Searching key for avatar named Secret2 Linden&amp;quot;);&lt;br /&gt;
		MyName2Key(&amp;quot;Secret2 Linden&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	link_message(integer sender_number, integer number, string message, key id)&lt;br /&gt;
	{&lt;br /&gt;
		if (number==SERVICE_NAME2KEY_RET)&lt;br /&gt;
		{&lt;br /&gt;
			if (id==ONE_KEY)&lt;br /&gt;
				llOwnerSay(&amp;quot;Found ! Key is: &amp;quot;+message);&lt;br /&gt;
			else&lt;br /&gt;
				llOwnerSay(&amp;quot;Error: &amp;quot;+message);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Hope this helps !&lt;br /&gt;
[[User:Maeva Anatine|Maeva Anatine]]&lt;br /&gt;
&lt;br /&gt;
EDIT : Looks like the Lindens have either broken or blocked this function. It works from my browser, however from LSL I get an error page containing this message &amp;quot;Access control configuration prevents your request from&lt;br /&gt;
being allowed at this time.  Please contact your service provider if&lt;br /&gt;
you feel this is incorrect.&amp;quot; - Darling Brody.&lt;br /&gt;
&lt;br /&gt;
EDIT : Yes you&#039;re right Darling. It seems they&#039;ve blocked this acces from within the world... I still wonder why, especially as there are some workarounds to this...&lt;br /&gt;
Anyway I discovered there is a JIRA issue for this. Please vote for the unblock !&lt;br /&gt;
https://jira.secondlife.com/browse/SVC-3122&lt;br /&gt;
- Mae&lt;br /&gt;
&lt;br /&gt;
EDIT : OK after having read this article from LL: http://wiki.secondlife.com/wiki/SearchAPI, it seems proxy usage is allowed. So I modified the upper code in order to go through a proxy machine and it works again :)&lt;br /&gt;
- Mae&lt;br /&gt;
&lt;br /&gt;
EDIT: After reviewing this (and it not working for me for some reason) I rewrote this to allow different proxies by a simple configuration.  This now uses Google instead of bablefish.  It now can handle multiple requests at once.  Replies have changed slightly, as the found key is returned in the &amp;quot;key&amp;quot; field instead of the message field.  In addition, failure of any kind results in a NULL_KEY being returned, and status information is returned in the message field.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
integer SERVICE_NAME2KEY        = 19790;&lt;br /&gt;
integer SERVICE_NAME2KEY_RET    = 19791;&lt;br /&gt;
&lt;br /&gt;
string  proxy                   = &amp;quot;http://www.google.com/gwt/n?_gwt_noimg=1&amp;amp;u=&amp;quot;;&lt;br /&gt;
string  search                  = &amp;quot;http://search.secondlife.com/client_search.php?s=People&amp;amp;q=&amp;quot;;&lt;br /&gt;
string  result                  = &amp;quot;http%3A%2F%2Fworld.secondlife.com%2Fresident%2F&amp;quot;;&lt;br /&gt;
string  notfound                = &amp;quot;There were no matches for &amp;quot;;&lt;br /&gt;
&lt;br /&gt;
list    requests;&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer i) { llResetScript(); }&lt;br /&gt;
&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        requests = [];&lt;br /&gt;
    }&lt;br /&gt;
        &lt;br /&gt;
    link_message(integer s, integer n, string m, key i)&lt;br /&gt;
    {&lt;br /&gt;
        if (n == SERVICE_NAME2KEY) {&lt;br /&gt;
            if(llListFindList(requests,[m]) == -1) {&lt;br /&gt;
                string url = proxy+llEscapeURL(search+m);&lt;br /&gt;
                key id = llHTTPRequest(url, [], &amp;quot;&amp;quot;);&lt;br /&gt;
                requests += [(string)id,m];&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    http_response(key request_id, integer status, list metadata, string body)&lt;br /&gt;
    {&lt;br /&gt;
        integer p = llListFindList(requests,[(string)request_id]);&lt;br /&gt;
        if (p != -1) {&lt;br /&gt;
            string n = llList2String(requests,p+1);&lt;br /&gt;
            integer f = llSubStringIndex(body,result);&lt;br /&gt;
            if(f == -1) {&lt;br /&gt;
                f = llSubStringIndex(body,notfound);&lt;br /&gt;
                if(f == -1)&lt;br /&gt;
                    llMessageLinked(LINK_SET,SERVICE_NAME2KEY_RET,&amp;quot;Error with lookup!&amp;quot;,NULL_KEY);&lt;br /&gt;
                else&lt;br /&gt;
                    llMessageLinked(LINK_SET,SERVICE_NAME2KEY_RET,n+&amp;quot; not found.&amp;quot;,NULL_KEY);&lt;br /&gt;
            } else {&lt;br /&gt;
                f += llStringLength(result);&lt;br /&gt;
                string a = llGetSubString(body,f,f+35);&lt;br /&gt;
            &lt;br /&gt;
                llMessageLinked(LINK_SET,SERVICE_NAME2KEY_RET,n,(key)a);&lt;br /&gt;
            }&lt;br /&gt;
            requests = llDeleteSubList(requests,p,p+1);&lt;br /&gt;
        }&lt;br /&gt;
    }    &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example use (listens on channel /1 and looks up anything send in that channel):&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
integer SERVICE_NAME2KEY        =   19790;&lt;br /&gt;
integer SERVICE_NAME2KEY_RET    =   19791;&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer i) { llResetScript(); }&lt;br /&gt;
    &lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llListen(1, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    listen(integer c, string n, key i, string m)&lt;br /&gt;
    {&lt;br /&gt;
        llSay(0,&amp;quot;Requesting key for &amp;quot;+m);&lt;br /&gt;
        llMessageLinked(LINK_THIS, SERVICE_NAME2KEY, m, &amp;quot;&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    link_message(integer f, integer n, string s, key i)&lt;br /&gt;
    {&lt;br /&gt;
        if(n == SERVICE_NAME2KEY_RET) {&lt;br /&gt;
            if(i == NULL_KEY)&lt;br /&gt;
                llSay(0,&amp;quot;Lookup failed.  Returned: &amp;quot;+s);&lt;br /&gt;
            else&lt;br /&gt;
                llSay(0,s+&amp;quot;: &amp;quot;+(string)i);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{LSLC|Library}}&lt;/div&gt;</summary>
		<author><name>Sensei Schism</name></author>
	</entry>
</feed>