Whitespace-only changes.
- Remove CR before LF to allow Git to use system-specific line terminators. - Expand tabs to spaces. - Remove spaces at end of line.
This commit is contained in:
parent
eb0164ff0a
commit
f97f8c5a5b
2 changed files with 577 additions and 577 deletions
|
@ -1,293 +1,293 @@
|
||||||
/*
|
/*
|
||||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
*
|
*
|
||||||
* Copyright (c) the AVsitter Contributors (http://avsitter.github.io)
|
* Copyright (c) the AVsitter Contributors (http://avsitter.github.io)
|
||||||
* AVsitter™ is a trademark. For trademark use policy see:
|
* AVsitter™ is a trademark. For trademark use policy see:
|
||||||
* https://avsitter.github.io/TRADEMARK.mediawiki
|
* https://avsitter.github.io/TRADEMARK.mediawiki
|
||||||
*
|
*
|
||||||
* Please consider supporting continued development of AVsitter and
|
* Please consider supporting continued development of AVsitter and
|
||||||
* receive automatic updates and other benefits! All details and user
|
* receive automatic updates and other benefits! All details and user
|
||||||
* instructions can be found at http://avsitter.github.io
|
* instructions can be found at http://avsitter.github.io
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Things not implemented:
|
* Things not implemented:
|
||||||
* ~ perms of the object
|
* ~ perms of the object
|
||||||
* ~ creator of the object
|
* ~ creator of the object
|
||||||
* ~ which platform/world (OpenSim/SL)
|
* ~ which platform/world (OpenSim/SL)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
integer sendToSupport=FALSE;
|
integer sendToSupport=FALSE;
|
||||||
integer sendItems = TRUE;
|
integer sendItems = TRUE;
|
||||||
string support_avi = "";
|
string support_avi = "";
|
||||||
|
|
||||||
string disclaimer = "This script will inspect your object and create a link you can share with others.\n\nClick OK to proceed.";
|
string disclaimer = "This script will inspect your object and create a link you can share with others.\n\nClick OK to proceed.";
|
||||||
string start_message = "Preparing info, please wait...";
|
string start_message = "Preparing info, please wait...";
|
||||||
string end_message = "Inspection complete! Script removed.";
|
string end_message = "Inspection complete! Script removed.";
|
||||||
|
|
||||||
string product = "Noob Detector";
|
string product = "Noob Detector";
|
||||||
string version = "1.3";
|
string version = "1.3";
|
||||||
|
|
||||||
list allowed_products = ["AVpos","[AV]menu","[AV]object"];
|
list allowed_products = ["AVpos","[AV]menu","[AV]object"];
|
||||||
|
|
||||||
string out;
|
string out;
|
||||||
string next_out;
|
string next_out;
|
||||||
|
|
||||||
list notecards_to_read;
|
list notecards_to_read;
|
||||||
key notecard_query;
|
key notecard_query;
|
||||||
integer notecard_index;
|
integer notecard_index;
|
||||||
integer notecard_line;
|
integer notecard_line;
|
||||||
|
|
||||||
list item_types = ["TEXTURE","SOUND","LANDMARK","CLOTHING","OBJECT","NOTECARD","SCRIPT","BODYPART","ANIMATION","GESTURE","ALL TYPES"];
|
list item_types = ["TEXTURE","SOUND","LANDMARK","CLOTHING","OBJECT","NOTECARD","SCRIPT","BODYPART","ANIMATION","GESTURE","ALL TYPES"];
|
||||||
list item_ints = [0,1,3,5,6,7,10,13,20,21];
|
list item_ints = [0,1,3,5,6,7,10,13,20,21];
|
||||||
|
|
||||||
integer menu_channel;
|
integer menu_channel;
|
||||||
|
|
||||||
string url = "https://avsitter.com/settings.php";
|
string url = "https://avsitter.com/settings.php";
|
||||||
string cache;
|
string cache;
|
||||||
string webkey;
|
string webkey;
|
||||||
integer webcount;
|
integer webcount;
|
||||||
|
|
||||||
add_out(string say, integer force){
|
add_out(string say, integer force){
|
||||||
cache+=say;
|
cache+=say;
|
||||||
if(!force){
|
if(!force){
|
||||||
cache+="\n";
|
cache+="\n";
|
||||||
}
|
}
|
||||||
if(llStringLength(llEscapeURL(cache))>1024 || force){
|
if(llStringLength(llEscapeURL(cache))>1024 || force){
|
||||||
webcount++;
|
webcount++;
|
||||||
llHTTPRequest(url, [HTTP_METHOD,"POST",HTTP_MIMETYPE,"application/x-www-form-urlencoded",HTTP_VERIFY_CERT,FALSE], "w="+webkey+"&c="+(string)webcount+"&t="+llEscapeURL(cache));
|
llHTTPRequest(url, [HTTP_METHOD,"POST",HTTP_MIMETYPE,"application/x-www-form-urlencoded",HTTP_VERIFY_CERT,FALSE], "w="+webkey+"&c="+(string)webcount+"&t="+llEscapeURL(cache));
|
||||||
cache="";
|
cache="";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
remove_script(){
|
remove_script(){
|
||||||
llOwnerSay("Diagnostic script removed.");
|
llOwnerSay("Diagnostic script removed.");
|
||||||
llRemoveInventory(llGetScriptName());
|
llRemoveInventory(llGetScriptName());
|
||||||
}
|
}
|
||||||
|
|
||||||
default {
|
default {
|
||||||
state_entry(){
|
state_entry(){
|
||||||
integer i;
|
integer i;
|
||||||
for(i=0;i<llGetListLength(allowed_products);i++){
|
for(i=0;i<llGetListLength(allowed_products);i++){
|
||||||
if (llGetInventoryType(llList2String(allowed_products,i))!= INVENTORY_NONE){
|
if (llGetInventoryType(llList2String(allowed_products,i))!= INVENTORY_NONE){
|
||||||
state permission;
|
state permission;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
llOwnerSay("Sorry, could not find correct product for this script.");
|
llOwnerSay("Sorry, could not find correct product for this script.");
|
||||||
remove_script();
|
remove_script();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
state permission {
|
state permission {
|
||||||
state_entry(){
|
state_entry(){
|
||||||
llSetTimerEvent(120);
|
llSetTimerEvent(120);
|
||||||
llListen(menu_channel=((integer)llFrand(0x7FFFFF80)+1)*-1,"","","");
|
llListen(menu_channel=((integer)llFrand(0x7FFFFF80)+1)*-1,"","","");
|
||||||
llDialog(llGetOwner(),product+" "+version+"\n\n"+disclaimer,["OK"],menu_channel);//RLV
|
llDialog(llGetOwner(),product+" "+version+"\n\n"+disclaimer,["OK"],menu_channel);//RLV
|
||||||
}
|
}
|
||||||
|
|
||||||
timer(){
|
timer(){
|
||||||
remove_script();
|
remove_script();
|
||||||
}
|
}
|
||||||
|
|
||||||
listen(integer listen_channel, string name, key id, string message){
|
listen(integer listen_channel, string name, key id, string message){
|
||||||
if(message=="OK"){
|
if(message=="OK"){
|
||||||
state running;
|
state running;
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
remove_script();
|
remove_script();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
state running {
|
state running {
|
||||||
|
|
||||||
http_response(key request_id, integer status, list metadata, string body){
|
http_response(key request_id, integer status, list metadata, string body){
|
||||||
llOwnerSay(body);
|
llOwnerSay(body);
|
||||||
}
|
}
|
||||||
|
|
||||||
state_entry(){
|
state_entry(){
|
||||||
|
|
||||||
webkey=(string)llGenerateKey();
|
webkey=(string)llGenerateKey();
|
||||||
|
|
||||||
llDialog(llGetOwner(),product+" "+version+"\n\n"+start_message,["OK"],menu_channel);
|
llDialog(llGetOwner(),product+" "+version+"\n\n"+start_message,["OK"],menu_channel);
|
||||||
llOwnerSay(start_message);
|
llOwnerSay(start_message);
|
||||||
|
|
||||||
add_out("Share this info to get help with your AVsitter build!\n",FALSE);
|
add_out("Share this info to get help with your AVsitter build!\n",FALSE);
|
||||||
add_out("----START----",FALSE);
|
add_out("----START----",FALSE);
|
||||||
|
|
||||||
add_out("user: "+llKey2Name(llGetOwner())+" ("+(string)llGetOwner()+")",FALSE);
|
add_out("user: "+llKey2Name(llGetOwner())+" ("+(string)llGetOwner()+")",FALSE);
|
||||||
|
|
||||||
list object_perms_owner;
|
list object_perms_owner;
|
||||||
integer perms = llGetObjectPermMask(MASK_OWNER);
|
integer perms = llGetObjectPermMask(MASK_OWNER);
|
||||||
if (perms & PERM_COPY) object_perms_owner += "C";
|
if (perms & PERM_COPY) object_perms_owner += "C";
|
||||||
if (perms & PERM_MODIFY) object_perms_owner += "M";
|
if (perms & PERM_MODIFY) object_perms_owner += "M";
|
||||||
if (perms & PERM_TRANSFER) object_perms_owner += "T";
|
if (perms & PERM_TRANSFER) object_perms_owner += "T";
|
||||||
|
|
||||||
list object_perms_next;
|
list object_perms_next;
|
||||||
perms = llGetObjectPermMask(MASK_NEXT);
|
perms = llGetObjectPermMask(MASK_NEXT);
|
||||||
if (perms & PERM_COPY) object_perms_next += "C";
|
if (perms & PERM_COPY) object_perms_next += "C";
|
||||||
if (perms & PERM_MODIFY) object_perms_next += "M";
|
if (perms & PERM_MODIFY) object_perms_next += "M";
|
||||||
if (perms & PERM_TRANSFER) object_perms_next += "T";
|
if (perms & PERM_TRANSFER) object_perms_next += "T";
|
||||||
|
|
||||||
|
|
||||||
add_out("owner perms:["+llDumpList2String(object_perms_owner,"/")+"]",FALSE);
|
add_out("owner perms:["+llDumpList2String(object_perms_owner,"/")+"]",FALSE);
|
||||||
add_out("next perms:["+llDumpList2String(object_perms_next,"/")+"]",FALSE);
|
add_out("next perms:["+llDumpList2String(object_perms_next,"/")+"]",FALSE);
|
||||||
|
|
||||||
// Total prims
|
// Total prims
|
||||||
|
|
||||||
add_out("total prims: "+(string)llGetObjectPrimCount(llGetKey()),FALSE);
|
add_out("total prims: "+(string)llGetObjectPrimCount(llGetKey()),FALSE);
|
||||||
|
|
||||||
// Link number
|
// Link number
|
||||||
|
|
||||||
add_out("my link number: "+(string)llGetLinkNumber(),FALSE);
|
add_out("my link number: "+(string)llGetLinkNumber(),FALSE);
|
||||||
|
|
||||||
// Read through all prims giving name and description
|
// Read through all prims giving name and description
|
||||||
|
|
||||||
add_out("\n----PRIMS----",FALSE);
|
add_out("\n----PRIMS----",FALSE);
|
||||||
|
|
||||||
add_out("Prim, Name, Desc",FALSE);
|
add_out("Prim, Name, Desc",FALSE);
|
||||||
|
|
||||||
integer i;
|
integer i;
|
||||||
|
|
||||||
if(llGetObjectPrimCount(llGetKey())>1){
|
if(llGetObjectPrimCount(llGetKey())>1){
|
||||||
i=1;
|
i=1;
|
||||||
}
|
}
|
||||||
|
|
||||||
while (i<=llGetObjectPrimCount(llGetKey())){
|
while (i<=llGetObjectPrimCount(llGetKey())){
|
||||||
list data = llGetLinkPrimitiveParams(i,[PRIM_NAME,PRIM_DESC]);
|
list data = llGetLinkPrimitiveParams(i,[PRIM_NAME,PRIM_DESC]);
|
||||||
add_out((string)i+", "+llDumpList2String(data,", "),FALSE);
|
add_out((string)i+", "+llDumpList2String(data,", "),FALSE);
|
||||||
i++;
|
i++;
|
||||||
|
|
||||||
if(llGetObjectPrimCount(llGetKey())==1){
|
if(llGetObjectPrimCount(llGetKey())==1){
|
||||||
jump end;
|
jump end;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@end;
|
@end;
|
||||||
|
|
||||||
// Inventory
|
// Inventory
|
||||||
|
|
||||||
string line;
|
string line;
|
||||||
|
|
||||||
integer j;
|
integer j;
|
||||||
for (j=0;j<llGetListLength(item_types);j++){
|
for (j=0;j<llGetListLength(item_types);j++){
|
||||||
|
|
||||||
integer type = llList2Integer(item_ints,j);
|
integer type = llList2Integer(item_ints,j);
|
||||||
|
|
||||||
integer type_heading_sent=FALSE;
|
integer type_heading_sent=FALSE;
|
||||||
integer count=0; // need this instead of using i because otherwise there's a gap in numbering when we skip this script
|
integer count=0; // need this instead of using i because otherwise there's a gap in numbering when we skip this script
|
||||||
for (i=0;i<llGetInventoryNumber(type);i++){
|
for (i=0;i<llGetInventoryNumber(type);i++){
|
||||||
|
|
||||||
if(!type_heading_sent){
|
if(!type_heading_sent){
|
||||||
add_out("\n----"+llList2String(item_types,j)+"S----",FALSE);
|
add_out("\n----"+llList2String(item_types,j)+"S----",FALSE);
|
||||||
type_heading_sent=TRUE;
|
type_heading_sent=TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
string name = llGetInventoryName(type,i);
|
string name = llGetInventoryName(type,i);
|
||||||
if(name!=llGetScriptName()){
|
if(name!=llGetScriptName()){
|
||||||
|
|
||||||
list perms_owner;
|
list perms_owner;
|
||||||
perms = llGetInventoryPermMask(name, MASK_OWNER);
|
perms = llGetInventoryPermMask(name, MASK_OWNER);
|
||||||
if (perms & PERM_COPY){
|
if (perms & PERM_COPY){
|
||||||
perms_owner += "C";
|
perms_owner += "C";
|
||||||
if (perms & PERM_TRANSFER){
|
if (perms & PERM_TRANSFER){
|
||||||
//if(name=="AVpos"){
|
//if(name=="AVpos"){
|
||||||
if(sendItems && type!=INVENTORY_ANIMATION){
|
if(sendItems && type!=INVENTORY_ANIMATION){
|
||||||
if(sendToSupport){
|
if(sendToSupport){
|
||||||
llGiveInventory(support_avi,name);
|
llGiveInventory(support_avi,name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//}
|
//}
|
||||||
}
|
}
|
||||||
if (type==INVENTORY_NOTECARD){
|
if (type==INVENTORY_NOTECARD){
|
||||||
if (perms & PERM_COPY){
|
if (perms & PERM_COPY){
|
||||||
notecards_to_read+=name; // read notecard!
|
notecards_to_read+=name; // read notecard!
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (perms & PERM_MODIFY) perms_owner += "M";
|
if (perms & PERM_MODIFY) perms_owner += "M";
|
||||||
if (perms & PERM_TRANSFER) perms_owner += "T";
|
if (perms & PERM_TRANSFER) perms_owner += "T";
|
||||||
|
|
||||||
list perms_next;
|
list perms_next;
|
||||||
perms = llGetInventoryPermMask(name, MASK_NEXT);
|
perms = llGetInventoryPermMask(name, MASK_NEXT);
|
||||||
if (perms & PERM_COPY) perms_next += "C";
|
if (perms & PERM_COPY) perms_next += "C";
|
||||||
if (perms & PERM_MODIFY) perms_next += "M";
|
if (perms & PERM_MODIFY) perms_next += "M";
|
||||||
if (perms & PERM_TRANSFER) perms_next += "T";
|
if (perms & PERM_TRANSFER) perms_next += "T";
|
||||||
|
|
||||||
string warnings;
|
string warnings;
|
||||||
integer index = llSubStringIndex(name," ");
|
integer index = llSubStringIndex(name," ");
|
||||||
if(index!=-1){
|
if(index!=-1){
|
||||||
warnings+="~DOUBLE-SPACE IN NAME!~";
|
warnings+="~DOUBLE-SPACE IN NAME!~";
|
||||||
}
|
}
|
||||||
|
|
||||||
if(type==INVENTORY_SCRIPT){
|
if(type==INVENTORY_SCRIPT){
|
||||||
if(llGetScriptState(name)==FALSE){
|
if(llGetScriptState(name)==FALSE){
|
||||||
warnings+="~NOT RUNNING!~";
|
warnings+="~NOT RUNNING!~";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
count++;
|
count++;
|
||||||
add_out((string)count+"."+name+" ["+llDumpList2String(perms_owner,"/")+"]["+llDumpList2String(perms_next,"/")+"]"+warnings,FALSE);
|
add_out((string)count+"."+name+" ["+llDumpList2String(perms_owner,"/")+"]["+llDumpList2String(perms_next,"/")+"]"+warnings,FALSE);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
state read_notecards;
|
state read_notecards;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
state read_notecards{
|
state read_notecards{
|
||||||
|
|
||||||
state_entry(){
|
state_entry(){
|
||||||
if(llList2String(notecards_to_read,notecard_index)!=""){
|
if(llList2String(notecards_to_read,notecard_index)!=""){
|
||||||
add_out("\n"+llList2String(notecards_to_read,notecard_index)+" (notecard)\n-----------",FALSE);
|
add_out("\n"+llList2String(notecards_to_read,notecard_index)+" (notecard)\n-----------",FALSE);
|
||||||
notecard_query=llGetNotecardLine(llList2String(notecards_to_read,notecard_index),notecard_line);
|
notecard_query=llGetNotecardLine(llList2String(notecards_to_read,notecard_index),notecard_line);
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
state end;
|
state end;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
dataserver(key query_id, string body){
|
dataserver(key query_id, string body){
|
||||||
if(query_id == notecard_query){
|
if(query_id == notecard_query){
|
||||||
if (body != EOF){
|
if (body != EOF){
|
||||||
add_out(body,FALSE);
|
add_out(body,FALSE);
|
||||||
notecard_query=llGetNotecardLine(llList2String(notecards_to_read,notecard_index),++notecard_line);
|
notecard_query=llGetNotecardLine(llList2String(notecards_to_read,notecard_index),++notecard_line);
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
notecard_index++;
|
notecard_index++;
|
||||||
if(llList2String(notecards_to_read,notecard_index)!=""){
|
if(llList2String(notecards_to_read,notecard_index)!=""){
|
||||||
notecard_line=0;
|
notecard_line=0;
|
||||||
string line = "\n"+llList2String(notecards_to_read,notecard_index)+"\n-----------";
|
string line = "\n"+llList2String(notecards_to_read,notecard_index)+"\n-----------";
|
||||||
add_out(line,FALSE);
|
add_out(line,FALSE);
|
||||||
notecard_query=llGetNotecardLine(llList2String(notecards_to_read,notecard_index),notecard_line);
|
notecard_query=llGetNotecardLine(llList2String(notecards_to_read,notecard_index),notecard_line);
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
state end;
|
state end;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
state end{
|
state end{
|
||||||
state_entry(){
|
state_entry(){
|
||||||
add_out("\nSummary created by the \"Noob-detector script\" from the AVsitter2 utilities box (https://avsitter.github.io/avsitter2_utilities.html)",FALSE);
|
add_out("\nSummary created by the \"Noob-detector script\" from the AVsitter2 utilities box (https://avsitter.github.io/avsitter2_utilities.html)",FALSE);
|
||||||
add_out("\n\n----END----\n\nend",TRUE);
|
add_out("\n\n----END----\n\nend",TRUE);
|
||||||
|
|
||||||
string url_final = url+"?q="+webkey;
|
string url_final = url+"?q="+webkey;
|
||||||
|
|
||||||
llOwnerSay(end_message);
|
llOwnerSay(end_message);
|
||||||
llOwnerSay("Your link is: "+url_final);
|
llOwnerSay("Your link is: "+url_final);
|
||||||
|
|
||||||
if(sendToSupport){
|
if(sendToSupport){
|
||||||
llInstantMessage(support_avi,url_final);
|
llInstantMessage(support_avi,url_final);
|
||||||
}
|
}
|
||||||
|
|
||||||
llLoadURL(llGetOwner(),end_message+" Get link from chat or click here.",url_final);
|
llLoadURL(llGetOwner(),end_message+" Get link from chat or click here.",url_final);
|
||||||
|
|
||||||
llRemoveInventory(llGetScriptName());
|
llRemoveInventory(llGetScriptName());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
568
php/settings.php
Executable file → Normal file
568
php/settings.php
Executable file → Normal file
|
@ -1,285 +1,285 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
/*
|
/*
|
||||||
MIT License
|
MIT License
|
||||||
|
|
||||||
Copyright (c) 2017
|
Copyright (c) 2017
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
in the Software without restriction, including without limitation the rights
|
in the Software without restriction, including without limitation the rights
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
furnished to do so, subject to the following conditions:
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
The above copyright notice and this permission notice shall be included in all
|
||||||
copies or substantial portions of the Software.
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
SOFTWARE.
|
SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
header("Content-Type: text/plain; charset=utf-8");
|
header("Content-Type: text/plain; charset=utf-8");
|
||||||
|
|
||||||
error_reporting(E_ERROR | E_WARNING | E_PARSE);
|
error_reporting(E_ERROR | E_WARNING | E_PARSE);
|
||||||
ini_set('display_errors', '1');
|
ini_set('display_errors', '1');
|
||||||
|
|
||||||
$dbhost = 'localhost'; // database host
|
$dbhost = 'localhost'; // database host
|
||||||
$dbuser = '?'; // database user
|
$dbuser = '?'; // database user
|
||||||
$dbpass = '?'; // database password
|
$dbpass = '?'; // database password
|
||||||
$dbname = '?'; // database name
|
$dbname = '?'; // database name
|
||||||
$avpos_table='avpos';
|
$avpos_table='avpos';
|
||||||
|
|
||||||
$email_to="you@yourmail.com"; // your email (for error reporting)
|
$email_to="you@yourmail.com"; // your email (for error reporting)
|
||||||
$email_from="you@yourhost.com"; // your server's sending email (for error reporting)
|
$email_from="you@yourhost.com"; // your server's sending email (for error reporting)
|
||||||
|
|
||||||
$allow_install = false; // enable to allow action=install (clear/format database)
|
$allow_install = false; // enable to allow action=install (clear/format database)
|
||||||
|
|
||||||
$check_ip = false; // enable to check the sim ip submitting the data is in the allowed range
|
$check_ip = false; // enable to check the sim ip submitting the data is in the allowed range
|
||||||
|
|
||||||
$link = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname) or die("Error " . mysqli_error($link));
|
$link = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname) or die("Error " . mysqli_error($link));
|
||||||
|
|
||||||
if (mysqli_connect_errno()) {
|
if (mysqli_connect_errno()) {
|
||||||
die ("Connect failed: " . mysqli_connect_error());
|
die ("Connect failed: " . mysqli_connect_error());
|
||||||
}
|
}
|
||||||
|
|
||||||
if($_REQUEST['action']=="install" && $allow_install==true){
|
if($_REQUEST['action']=="install" && $allow_install==true){
|
||||||
$sql = "DROP TABLE IF EXISTS $avpos_table;";
|
$sql = "DROP TABLE IF EXISTS $avpos_table;";
|
||||||
$result = mysqli_query($link,$sql) or die("Error creating table: ".mysqli_error($link));
|
$result = mysqli_query($link,$sql) or die("Error creating table: ".mysqli_error($link));
|
||||||
$sql = "CREATE TABLE IF NOT EXISTS $avpos_table (
|
$sql = "CREATE TABLE IF NOT EXISTS $avpos_table (
|
||||||
`id` int(11) NOT NULL auto_increment,
|
`id` int(11) NOT NULL auto_increment,
|
||||||
`webkey` varchar(36) default NULL,
|
`webkey` varchar(36) default NULL,
|
||||||
`owner_uuid` varchar(36) default NULL,
|
`owner_uuid` varchar(36) default NULL,
|
||||||
`owner_name` varchar(63) default NULL,
|
`owner_name` varchar(63) default NULL,
|
||||||
`text` TEXT default NULL,
|
`text` TEXT default NULL,
|
||||||
`keep` tinyint(1) default 0,
|
`keep` tinyint(1) default 0,
|
||||||
`count` int(5) default NULL,
|
`count` int(5) default NULL,
|
||||||
`ip` varbinary(16) defult NULL,
|
`ip` varbinary(16) defult NULL,
|
||||||
`timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
|
`timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
|
||||||
PRIMARY KEY (`id`),
|
PRIMARY KEY (`id`),
|
||||||
UNIQUE (`webkey`)
|
UNIQUE (`webkey`)
|
||||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1;";
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1;";
|
||||||
$result = mysqli_query($link,$sql) or die("Error formatting table: ".mysqli_error($link));
|
$result = mysqli_query($link,$sql) or die("Error formatting table: ".mysqli_error($link));
|
||||||
if($result) {
|
if($result) {
|
||||||
echo "Your tables have been formatted!";
|
echo "Your tables have been formatted!";
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
echo "Oops! There were some problems. You should check your config and try again: ".mysqli_error($link);
|
echo "Oops! There were some problems. You should check your config and try again: ".mysqli_error($link);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(isset($_REQUEST['w'])){ // write to a record
|
else if(isset($_REQUEST['w'])){ // write to a record
|
||||||
$given_webkey = mysqli_real_escape_string($link, $_REQUEST['w']);
|
$given_webkey = mysqli_real_escape_string($link, $_REQUEST['w']);
|
||||||
|
|
||||||
$ip_address = $_SERVER['REMOTE_ADDR'];
|
$ip_address = $_SERVER['REMOTE_ADDR'];
|
||||||
$ip_packed = mysqli_real_escape_string($link, inet_pton($ip_address));
|
$ip_packed = mysqli_real_escape_string($link, inet_pton($ip_address));
|
||||||
|
|
||||||
if(!isValidGuid($given_webkey)){
|
if(!isValidGuid($given_webkey)){
|
||||||
echo "INVALID WEBKEY";
|
echo "INVALID WEBKEY";
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
$headers = parse_llHTTPRequest_headers();
|
$headers = parse_llHTTPRequest_headers();
|
||||||
$owner_key = mysqli_real_escape_string($link, $headers['X-SecondLife-Owner-Key']);
|
$owner_key = mysqli_real_escape_string($link, $headers['X-SecondLife-Owner-Key']);
|
||||||
$object_name = mysqli_real_escape_string($link, $headers['X-SecondLife-Object-Name']);
|
$object_name = mysqli_real_escape_string($link, $headers['X-SecondLife-Object-Name']);
|
||||||
$owner_name = mysqli_real_escape_string($link, $headers['X-SecondLife-Owner-Name']);
|
$owner_name = mysqli_real_escape_string($link, $headers['X-SecondLife-Owner-Name']);
|
||||||
$object_key = mysqli_real_escape_string($link, $headers['X-SecondLife-Object-Key']);
|
$object_key = mysqli_real_escape_string($link, $headers['X-SecondLife-Object-Key']);
|
||||||
$region = mysqli_real_escape_string($link, trim(substr($headers['X-SecondLife-Region'],0,strrpos($headers['X-SecondLife-Region'],'('))));
|
$region = mysqli_real_escape_string($link, trim(substr($headers['X-SecondLife-Region'],0,strrpos($headers['X-SecondLife-Region'],'('))));
|
||||||
$position_array = explode(', ',substr($_SERVER['HTTP_X_SECONDLIFE_LOCAL_POSITION'],1,-1));
|
$position_array = explode(', ',substr($_SERVER['HTTP_X_SECONDLIFE_LOCAL_POSITION'],1,-1));
|
||||||
$slurl = $region . "/" . round($position_array[0]) . "/" . round($position_array[1]) . "/" . round($position_array[2]);
|
$slurl = $region . "/" . round($position_array[0]) . "/" . round($position_array[1]) . "/" . round($position_array[2]);
|
||||||
|
|
||||||
if(!isValidGuid($owner_key)){
|
if(!isValidGuid($owner_key)){
|
||||||
echo "INVALID USER";
|
echo "INVALID USER";
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
$given_count = intval($_REQUEST['c']);
|
$given_count = intval($_REQUEST['c']);
|
||||||
$given_text = mysqli_real_escape_string($link, $_REQUEST['t']);
|
$given_text = mysqli_real_escape_string($link, $_REQUEST['t']);
|
||||||
|
|
||||||
$sql = "SELECT * FROM $avpos_table WHERE webkey = '$given_webkey'";
|
$sql = "SELECT * FROM $avpos_table WHERE webkey = '$given_webkey'";
|
||||||
|
|
||||||
$result = mysqli_query($link,$sql) or email_death("ERR01: " . mysqli_error($link));
|
$result = mysqli_query($link,$sql) or email_death("ERR01: " . mysqli_error($link));
|
||||||
if(mysqli_num_rows($result) == 0){ // a new webkey
|
if(mysqli_num_rows($result) == 0){ // a new webkey
|
||||||
if($given_count == 1){
|
if($given_count == 1){
|
||||||
if(!isAllowedIP($ip_address)){
|
if(!isAllowedIP($ip_address)){
|
||||||
$response = "BAD IP";
|
$response = "BAD IP";
|
||||||
$sql = "INSERT INTO $avpos_table (owner_uuid,owner_name,webkey,text,count,ip,timestamp)
|
$sql = "INSERT INTO $avpos_table (owner_uuid,owner_name,webkey,text,count,ip,timestamp)
|
||||||
VALUES ('$owner_key','$owner_name','$given_webkey','The IP address of the sim ($ip_address) was not in the allowed range. Please report the problem if you think this is in error.','10001','$ip_packed',NOW())";
|
VALUES ('$owner_key','$owner_name','$given_webkey','The IP address of the sim ($ip_address) was not in the allowed range. Please report the problem if you think this is in error.','10001','$ip_packed',NOW())";
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
$response = "ADDED NEW";
|
$response = "ADDED NEW";
|
||||||
if(endsWith($_REQUEST['t'],"\n\nend")){
|
if(endsWith($_REQUEST['t'],"\n\nend")){
|
||||||
$given_count+=10000;
|
$given_count+=10000;
|
||||||
$response = "FINISHING";
|
$response = "FINISHING";
|
||||||
}
|
}
|
||||||
$sql = "INSERT INTO $avpos_table (owner_uuid,owner_name,webkey,text,count,ip,timestamp)
|
$sql = "INSERT INTO $avpos_table (owner_uuid,owner_name,webkey,text,count,ip,timestamp)
|
||||||
VALUES ('$owner_key','$owner_name','$given_webkey','$given_text','$given_count','$ip_packed',NOW())";
|
VALUES ('$owner_key','$owner_name','$given_webkey','$given_text','$given_count','$ip_packed',NOW())";
|
||||||
}
|
}
|
||||||
$result = mysqli_query($link,$sql) or email_death("ERR02: " . mysqli_error($link));
|
$result = mysqli_query($link,$sql) or email_death("ERR02: " . mysqli_error($link));
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
$response = "WRONG COUNT";
|
$response = "WRONG COUNT";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else{ // an existing webkey
|
else{ // an existing webkey
|
||||||
if(!isAllowedIP($ip_address)){
|
if(!isAllowedIP($ip_address)){
|
||||||
$response = "BAD IP";
|
$response = "BAD IP";
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
$row = mysqli_fetch_assoc($result);
|
$row = mysqli_fetch_assoc($result);
|
||||||
$newtext = mysqli_real_escape_string($link,$row['text']) . $given_text;
|
$newtext = mysqli_real_escape_string($link,$row['text']) . $given_text;
|
||||||
if($row['count']+1 == $given_count){
|
if($row['count']+1 == $given_count){
|
||||||
$response = "ADDING";
|
$response = "ADDING";
|
||||||
|
|
||||||
if(endsWith($_REQUEST['t'],"\n\nend")){
|
if(endsWith($_REQUEST['t'],"\n\nend")){
|
||||||
$given_count+=10000;
|
$given_count+=10000;
|
||||||
$response = "FINISHING";
|
$response = "FINISHING";
|
||||||
}
|
}
|
||||||
|
|
||||||
$sql = "UPDATE $avpos_table SET
|
$sql = "UPDATE $avpos_table SET
|
||||||
text = '$newtext',
|
text = '$newtext',
|
||||||
count = '$given_count',
|
count = '$given_count',
|
||||||
timestamp = NOW()
|
timestamp = NOW()
|
||||||
WHERE webkey = '$given_webkey'";
|
WHERE webkey = '$given_webkey'";
|
||||||
$result = mysqli_query($link,$sql) or email_death("ERR03: " . mysqli_error($link));
|
$result = mysqli_query($link,$sql) or email_death("ERR03: " . mysqli_error($link));
|
||||||
|
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
$response = "WRONG COUNT";
|
$response = "WRONG COUNT";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
echo $response;
|
echo $response;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(isset($_REQUEST['q'])){ // read a record
|
else if(isset($_REQUEST['q'])){ // read a record
|
||||||
|
|
||||||
$given_webkey = mysqli_real_escape_string($link, $_REQUEST['q']);
|
$given_webkey = mysqli_real_escape_string($link, $_REQUEST['q']);
|
||||||
$sql = "SELECT * FROM $avpos_table WHERE webkey = '$given_webkey'";
|
$sql = "SELECT * FROM $avpos_table WHERE webkey = '$given_webkey'";
|
||||||
|
|
||||||
$result = mysqli_query($link,$sql) or email_death("ERR04: " . mysqli_error($link));
|
$result = mysqli_query($link,$sql) or email_death("ERR04: " . mysqli_error($link));
|
||||||
if(mysqli_num_rows($result) == 0){
|
if(mysqli_num_rows($result) == 0){
|
||||||
$out= "Not found. Expired links are deleted.";
|
$out= "Not found. Expired links are deleted.";
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
$row = mysqli_fetch_assoc($result);
|
$row = mysqli_fetch_assoc($result);
|
||||||
if($row['count']>10000){
|
if($row['count']>10000){
|
||||||
$out.= $row['text'];
|
$out.= $row['text'];
|
||||||
|
|
||||||
if(1==2){ // switch on to 'keep' any record that ever was accessed
|
if(1==2){ // switch on to 'keep' any record that ever was accessed
|
||||||
$sql = "UPDATE $avpos_table SET
|
$sql = "UPDATE $avpos_table SET
|
||||||
keep = '1'
|
keep = '1'
|
||||||
WHERE webkey = '$given_webkey'";
|
WHERE webkey = '$given_webkey'";
|
||||||
$result = mysqli_query($link,$sql) or email_death("ERR05: " . mysqli_error($link));
|
$result = mysqli_query($link,$sql) or email_death("ERR05: " . mysqli_error($link));
|
||||||
}
|
}
|
||||||
|
|
||||||
// delete all entries older than 10 minutes that are not flagged keep
|
// delete all entries older than 10 minutes that are not flagged keep
|
||||||
$sql = "DELETE FROM $avpos_table WHERE timestamp < DATE_SUB(NOW(), INTERVAL 10 MINUTE) AND keep = '0'";
|
$sql = "DELETE FROM $avpos_table WHERE timestamp < DATE_SUB(NOW(), INTERVAL 10 MINUTE) AND keep = '0'";
|
||||||
$result = mysqli_query($link,$sql) or email_death("ERR06: " . mysqli_error($link));
|
$result = mysqli_query($link,$sql) or email_death("ERR06: " . mysqli_error($link));
|
||||||
|
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
$out.="Data was incomplete, please try again.\n\nThis feature is new and experimental - you're welcome to report any issues.";
|
$out.="Data was incomplete, please try again.\n\nThis feature is new and experimental - you're welcome to report any issues.";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
echo $out;
|
echo $out;
|
||||||
}
|
}
|
||||||
|
|
||||||
function parse_llHTTPRequest_headers(){
|
function parse_llHTTPRequest_headers(){
|
||||||
$position_array = explode(', ',substr($_SERVER['HTTP_X_SECONDLIFE_LOCAL_POSITION'],1,-1));
|
$position_array = explode(', ',substr($_SERVER['HTTP_X_SECONDLIFE_LOCAL_POSITION'],1,-1));
|
||||||
$rotation_array = explode(', ',substr($_SERVER['HTTP_X_SECONDLIFE_LOCAL_ROTATION'],1,-1));
|
$rotation_array = explode(', ',substr($_SERVER['HTTP_X_SECONDLIFE_LOCAL_ROTATION'],1,-1));
|
||||||
$velocity_array = explode(', ',substr($_SERVER['HTTP_X_SECONDLIFE_LOCAL_VELOCITY'],1,-1));
|
$velocity_array = explode(', ',substr($_SERVER['HTTP_X_SECONDLIFE_LOCAL_VELOCITY'],1,-1));
|
||||||
list($global_x,$global_y) = explode(',',trim(substr($_SERVER['HTTP_X_SECONDLIFE_REGION'],$position_of_left_bracket + 1,-1)));
|
list($global_x,$global_y) = explode(',',trim(substr($_SERVER['HTTP_X_SECONDLIFE_REGION'],$position_of_left_bracket + 1,-1)));
|
||||||
$region_array = array($region_name,(integer)$global_x,(integer)$global_y);
|
$region_array = array($region_name,(integer)$global_x,(integer)$global_y);
|
||||||
$headers = array('Accept'=>$_SERVER['HTTP_ACCEPT'],
|
$headers = array('Accept'=>$_SERVER['HTTP_ACCEPT'],
|
||||||
'User-Agent'=>$_SERVER['HTTP_USER_AGENT'],
|
'User-Agent'=>$_SERVER['HTTP_USER_AGENT'],
|
||||||
'X-SecondLife-Shard'=>$_SERVER['HTTP_X_SECONDLIFE_SHARD'],
|
'X-SecondLife-Shard'=>$_SERVER['HTTP_X_SECONDLIFE_SHARD'],
|
||||||
'X-SecondLife-Object-Name'=>$_SERVER['HTTP_X_SECONDLIFE_OBJECT_NAME'],
|
'X-SecondLife-Object-Name'=>$_SERVER['HTTP_X_SECONDLIFE_OBJECT_NAME'],
|
||||||
'X-SecondLife-Object-Key'=>$_SERVER['HTTP_X_SECONDLIFE_OBJECT_KEY'],
|
'X-SecondLife-Object-Key'=>$_SERVER['HTTP_X_SECONDLIFE_OBJECT_KEY'],
|
||||||
'X-SecondLife-Region'=>$_SERVER['HTTP_X_SECONDLIFE_REGION'],
|
'X-SecondLife-Region'=>$_SERVER['HTTP_X_SECONDLIFE_REGION'],
|
||||||
'X-SecondLife-Region-Array'=> $region_array,
|
'X-SecondLife-Region-Array'=> $region_array,
|
||||||
'X-SecondLife-Local-Position'=>array( 'x'=>(float)$position_array[0],'y'=>(float)$position_array[1],'z'=>(float)$position_array[2]),
|
'X-SecondLife-Local-Position'=>array( 'x'=>(float)$position_array[0],'y'=>(float)$position_array[1],'z'=>(float)$position_array[2]),
|
||||||
'X-SecondLife-Local-Rotation'=>array( 'x'=>(float)$rotation_array[0],'y'=>(float)$rotation_array[1],'z'=>(float)$rotation_array[2],'w'=>(float)$rotation_array[3]),
|
'X-SecondLife-Local-Rotation'=>array( 'x'=>(float)$rotation_array[0],'y'=>(float)$rotation_array[1],'z'=>(float)$rotation_array[2],'w'=>(float)$rotation_array[3]),
|
||||||
'X-SecondLife-Local-Velocity'=>array( 'x'=>(float)$velocity_array[0],'y'=>(float)$velocity_array[1],'z'=>(float)$velocity_array[2]),
|
'X-SecondLife-Local-Velocity'=>array( 'x'=>(float)$velocity_array[0],'y'=>(float)$velocity_array[1],'z'=>(float)$velocity_array[2]),
|
||||||
'X-SecondLife-Owner-Name'=>$_SERVER['HTTP_X_SECONDLIFE_OWNER_NAME'],
|
'X-SecondLife-Owner-Name'=>$_SERVER['HTTP_X_SECONDLIFE_OWNER_NAME'],
|
||||||
'X-SecondLife-Owner-Key'=>$_SERVER['HTTP_X_SECONDLIFE_OWNER_KEY']
|
'X-SecondLife-Owner-Key'=>$_SERVER['HTTP_X_SECONDLIFE_OWNER_KEY']
|
||||||
);
|
);
|
||||||
if(!strstr($headers['X-SecondLife-Owner-Name'],' ') && $_POST['X-SecondLife-Owner-Name']){
|
if(!strstr($headers['X-SecondLife-Owner-Name'],' ') && $_POST['X-SecondLife-Owner-Name']){
|
||||||
$headers['X-SecondLife-Owner-Name'] == $_POST['X-SecondLife-Owner-Name'];
|
$headers['X-SecondLife-Owner-Name'] == $_POST['X-SecondLife-Owner-Name'];
|
||||||
}
|
}
|
||||||
if(is_array($headers)){
|
if(is_array($headers)){
|
||||||
return $headers;
|
return $headers;
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function isValidGuid($guid){
|
function isValidGuid($guid){
|
||||||
return !empty($guid) && preg_match('/^\{?[a-zA-Z0-9]{8}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{12}\}?$/', $guid);
|
return !empty($guid) && preg_match('/^\{?[a-zA-Z0-9]{8}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{12}\}?$/', $guid);
|
||||||
}
|
}
|
||||||
|
|
||||||
function email_death($error){
|
function email_death($error){
|
||||||
$body.="\n";
|
$body.="\n";
|
||||||
$body.="\n\$_SERVER\n";
|
$body.="\n\$_SERVER\n";
|
||||||
foreach($_SERVER as $key_name => $key_value) {
|
foreach($_SERVER as $key_name => $key_value) {
|
||||||
$body.= $key_name . " = " . $key_value . "\n";
|
$body.= $key_name . " = " . $key_value . "\n";
|
||||||
}
|
}
|
||||||
$body.="\n\$_GET\n";
|
$body.="\n\$_GET\n";
|
||||||
foreach($_GET as $key_name => $key_value) {
|
foreach($_GET as $key_name => $key_value) {
|
||||||
$body.= $key_name . " = " . $key_value . "\n";
|
$body.= $key_name . " = " . $key_value . "\n";
|
||||||
}
|
}
|
||||||
$body.="\n\$_POST\n";
|
$body.="\n\$_POST\n";
|
||||||
foreach($_POST as $key_name => $key_value) {
|
foreach($_POST as $key_name => $key_value) {
|
||||||
$body.= $key_name . " = " . $key_value . "\n";
|
$body.= $key_name . " = " . $key_value . "\n";
|
||||||
}
|
}
|
||||||
$to = $GLOBALS['email_to'];
|
$to = $GLOBALS['email_to'];
|
||||||
$subject = "avsitter: $error";
|
$subject = "avsitter: $error";
|
||||||
$email_headers = "From: ". $GLOBALS['email_from'] ."\r\n" . "X-Mailer: php";
|
$email_headers = "From: ". $GLOBALS['email_from'] ."\r\n" . "X-Mailer: php";
|
||||||
mail($to, $subject, $body, $email_headers);
|
mail($to, $subject, $body, $email_headers);
|
||||||
die($error);
|
die($error);
|
||||||
}
|
}
|
||||||
|
|
||||||
function startsWith($haystack, $needle) {
|
function startsWith($haystack, $needle) {
|
||||||
// search backwards starting from haystack length characters from the end
|
// search backwards starting from haystack length characters from the end
|
||||||
return $needle === "" || strrpos($haystack, $needle, -strlen($haystack)) !== FALSE;
|
return $needle === "" || strrpos($haystack, $needle, -strlen($haystack)) !== FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
function endsWith($haystack, $needle) {
|
function endsWith($haystack, $needle) {
|
||||||
// search forward starting from end minus needle length characters
|
// search forward starting from end minus needle length characters
|
||||||
return $needle === "" || (($temp = strlen($haystack) - strlen($needle)) >= 0 && strpos($haystack, $needle, $temp) !== FALSE);
|
return $needle === "" || (($temp = strlen($haystack) - strlen($needle)) >= 0 && strpos($haystack, $needle, $temp) !== FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
function isAllowedIP($ip){
|
function isAllowedIP($ip){
|
||||||
if($GLOBALS['check_ip']==false){
|
if($GLOBALS['check_ip']==false){
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
$llsubnets = array(
|
$llsubnets = array(
|
||||||
"8.2.32.0/22",
|
"8.2.32.0/22",
|
||||||
"8.4.128.0/22",
|
"8.4.128.0/22",
|
||||||
"8.10.144.0/21",
|
"8.10.144.0/21",
|
||||||
"63.210.156.0/22",
|
"63.210.156.0/22",
|
||||||
"64.154.220.0/22",
|
"64.154.220.0/22",
|
||||||
"216.82.0.0/18"
|
"216.82.0.0/18"
|
||||||
);
|
);
|
||||||
foreach($llsubnets as $range){
|
foreach($llsubnets as $range){
|
||||||
if(ip_in_range($ip,$range)) return true;
|
if(ip_in_range($ip,$range)) return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// check if an ip_address in a particular range
|
// check if an ip_address in a particular range
|
||||||
function ip_in_range( $ip, $range ) {
|
function ip_in_range( $ip, $range ) {
|
||||||
// $range is in IP/CIDR format eg 127.0.0.1/24
|
// $range is in IP/CIDR format eg 127.0.0.1/24
|
||||||
list( $range, $netmask ) = explode( '/', $range, 2 );
|
list( $range, $netmask ) = explode( '/', $range, 2 );
|
||||||
$range_decimal = ip2long( $range );
|
$range_decimal = ip2long( $range );
|
||||||
$ip_decimal = ip2long( $ip );
|
$ip_decimal = ip2long( $ip );
|
||||||
$wildcard_decimal = pow( 2, ( 32 - $netmask ) ) - 1;
|
$wildcard_decimal = pow( 2, ( 32 - $netmask ) ) - 1;
|
||||||
$netmask_decimal = ~ $wildcard_decimal;
|
$netmask_decimal = ~ $wildcard_decimal;
|
||||||
return ( ( $ip_decimal & $netmask_decimal ) == ( $range_decimal & $netmask_decimal ) );
|
return ( ( $ip_decimal & $netmask_decimal ) == ( $range_decimal & $netmask_decimal ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
?>
|
?>
|
Loading…
Add table
Add a link
Reference in a new issue