Failsafename2key
Jump to navigation
Jump to search
This script is a example for a failsafe name2key lookup. The script will return results also when some of the given providers are unavailable.
Main Script: <lsl> list Servers = ["http://kubwa.de/_slworld/name2key.php?name=",
"http://w-hat.com/name2key?terse=1&name=", "https://n2k.danardlabs.com/n2k_io.php?action=getkey&verbose=0&username=", "http://kdc.ethernia.net/sys/name2key.php?name="];
list LookUpQueue; default {
link_message(integer Sender, integer Num, string Str, key ID) { if (ID == "Name2Key.Lookup") { LookUpQueue = LookUpQueue + [llHTTPRequest(llList2String(Servers, 0) + llEscapeURL(Str), [HTTP_METHOD, "GET", HTTP_VERIFY_CERT, FALSE], ""), 0, Str, Num, Sender]; } } http_response(key Request, integer Status, list Meta, string Data) { integer Found = llListFindList(LookUpQueue, [Request]); if (Found > -1) { list Temp = llParseString2List(Data, [",", ";", " ", ":", "\n", "|"], []); integer i; integer LoopFound = -1; for (i = 0; i < llGetListLength(Temp); ++i) { if (llStringLength(llList2String(Temp, i)) == 36 && llList2Key(Temp, i) != NULL_KEY) {LoopFound = i;} } if (LoopFound > -1) { llMessageLinked(llList2Integer(LookUpQueue, Found + 4), llList2Integer(LookUpQueue, Found + 3), "Found", llList2Key(Temp, LoopFound)); LookUpQueue = llDeleteSubList(LookUpQueue, Found, Found + 4); } else { if (llList2Integer(LookUpQueue, Found + 1) + 1 < llGetListLength(LookUpQueue) - 1) { LookUpQueue = llListReplaceList(LookUpQueue, [llHTTPRequest(llList2String(Servers, llList2Integer(LookUpQueue, Found + 1) + 1) + llEscapeURL(llList2String(LookUpQueue, Found + 2)), [HTTP_METHOD, "GET", HTTP_VERIFY_CERT, FALSE], ""), llList2Integer(LookUpQueue, Found + 1) + 1], Found, Found + 1); } else { llMessageLinked(llList2Integer(LookUpQueue, Found + 4), llList2Integer(LookUpQueue, Found + 3), "Not-Found", NULL_KEY); LookUpQueue = llDeleteSubList(LookUpQueue, Found, Found + 4); } } } }
} </lsl>
Example usage: <lsl> default {
state_entry() { llListen(1, "", "", ""); } listen(integer chan, string name, key id, string msg) { llMessageLinked(LINK_THIS, llRound(llFrand(9999)), msg, "Name2Key.Lookup"); } link_message(integer Sender, integer Num, string Str, key ID) { llOwnerSay((string)Sender + " => " + (string)Num + "> " + Str + ": " + (string)ID); }
} </lsl>
For questions please ask Simba Fuhr in Second Life.