Jump to content

Gregory McLeod

Resident
  • Posts

    140
  • Joined

  • Last visited

Posts posted by Gregory McLeod

  1. OK I will try to send the object. Please be aware that there are some security elements within the scripts which may need explanation. Please just try the game before you explore the scripts within all the sub-objects.

    I also have some other objects  related to the game - noticeboard, notecard etc I will include them.

    Please examine the object and if any problems send an IM to Gregory McLeod. I will not terminate my account until you are satisfied you understand the object and it's scripts.

  2. I am about to delete my account and take up other pastimes. I have spent too many hours scripting. What have I achieved, one Chinese Checker playing game.

    I would like to donate this to someone with the time and interest to take it and make use of it for gain or not as they will.

    The game is known as ChinChek and appeared in a few places but I never managed to make money out ot it.

    CAN YOU?

     

    Please apply to Gregory McLeod with a statement of what you might be able to do with the game.

    I will decide who gets it on the 31st December and provide a sample plus all the scripting at no charge.

     

  3. That has provided an answer which works, thank you.

    I was trying to use the examples in the link provided before and just could not get them to work.

    Now I have working lsl and php scripts I can expand on them to find out what is happening in my HUD.

  4. To try to resolve what I think may be a misunderstanding between us Darkie I show the whole of the PHP script that is being called and the method of calling.

    The method of calling

    <q>

    string  SERVER_URL  = "http://awebsite.com/folder1/folder2/manager.php?action=UPDATE";
    key     SERVER_REQ_ID;
    integer id;

    id = -1;

    request_server() {
        SERVER_REQ_ID = llHTTPRequest( SERVER_URL+"&id="+(string)id, [], "" );
    }

    other lines of code

    </q>

    the receiving website manager.php

    <q>

    <?php

    include_once('bin/DBHandler.php');

    $USE_APACHE_HEADERS = TRUE;
    // switch to false if you need cgi methods
    if ($USE_APACHE_HEADERS)
    {
     $headers    = apache_request_headers();
     $objectgrid = $headers["X-SecondLife-Shard"];
     $objectname = $headers["X-SecondLife-Object-Name"];
     $objectkey  = $headers["X-SecondLife-Object-Key"];
     $objectpos  = $headers["X-SecondLife-Local-Position"];
     $ownerkey   = $headers["X-SecondLife-Owner-Key"];
     $ownername  = $headers["X-SecondLife-Owner-Name"];
     $regiondata = $headers["X-SecondLife-Region"];
     $regiontmp  = explode ("(",$regiondata); // cut cords off
     $regionpos  = explode (")",$regiontmp[1]); //
     $regionname = substr($regiontmp[0],0,-1); // cut last space from simname
    } else {
     $db = $GLOBALS;
     $headers    = $db['HTTP_ENV_VARS'];
     $objectgrid = $headers["HTTP_X_SECONDLIFE_SHARD"];
     $objectname = $headers["HTTP_X_SECONDLIFE_OBJECT_NAME"];
     $objectkey  = $headers["HTTP_X_SECONDLIFE_OBJECT_KEY"];
     $ownerkey   = $headers["HTTP_X_SECONDLIFE_OWNER_KEY"];
     $objectpos  = $headers["HTTP_X_SECONDLIFE_LOCAL_POSITION"];
     $ownername  = $headers["HTTP_X_SECONDLIFE_OWNER_NAME"];
     $regiondata = $headers["HTTP_X_SECONDLIFE_REGION"];
     $regiontmp  = explode ("(",$regiondata);
     $regionpos  = explode (")",$regiontmp[1]);
     $regionname = substr($regiontmp[0],0,-1);
    }

    if(!isset($ownerkey)) {
     print "INVALID_ACCESS";; 
    }

    $db = new DBHandler();

    function createSurl($reg, $p) {
     $p = str_replace ( "(" , "" , $p );
     $p = str_replace ( ")" , "" , $p );
     $c = split ( "," , $p);
     return "secondlife://$reg/$c[0]/$c[1]/$c[2]";
    }

    $action = $_GET['action'];
    switch($action) {
     case "UPDATE":
      $id = $_GET['id'];
      if( is_numeric ($id) ) {
       if($id == -1) {
        $index = $db->getLastIndex() + 1;
        if($db->addField($index, $ownername, createSurl($regionname, $objectpos)))
         print "NEW,$index";
        else
         print "Database Error";
       }
       else if($id > 0) {
        if($db->isField($id)) {
         if($db->updateField($id, $ownername, createSurl($regionname, $objectpos)))
         {
          if($db->isFieldActive($id)) 
           print "ENABLE";
          else
           print "DISABLE";
         }
         else {
          print "DISABLE";
         }
        }
        else if($db->addField($id, $ownername, createSurl($regionname, $objectpos)))
         print "NEW,$index";
        else
         print "Database Error";
       }
      }
      else
       print "INVALID";
     break;
    }

    </q>

    Note in this PHP script there is an incompatability between the code and the PHP version in the statement

    <q>

    function createSurl($reg, $p) {
    ...

     $c = split ( "," , $p);

    ...

    </q>

    which is what got me into this mess in the first place. I have fixed that by changing the split to a preg_split as in

    $c = preg_split( '[(,)]' , $p );

    The result that the prim receives from the request is

    INVALID_ACCESSINVALID

    which suggest to me that the $ownerkey is not being set.

    Do you have any comments?

  5. I am using an HTTPRequest from a prim script

       SERVER_REQ_ID = llHTTPRequest( SERVER_URL+"&id="+(string)id, [], "" );

    I naively thought that all httprequests were accompanied by the Second_life Headers.

    The one I am missing is X-SecondLife-Owner-Key this results in an php script error and the returned data is invalid.

    Do you have to use one of the GET or POST methods to get SL to send the full headers?

     

    If so I wonder how this used to work, as it did.

  6. OK we seem to be on the same wavelength now.

    In a hud script there is the following line

    gkRequestID = llHTTPRequest(gsUpdateURL,[HTTP_METHOD,"POST",HTTP_MIMETYPE,"application/x-www-form-urlencoded"],lsOptions+"&au="+llMD5String(lsOptions+"#"+gsGameKey,giGameNonce));

    In the lines that precede that are lines that set the values for the gsUpdateURL, and the lsOptions.

    In the quoted line is a standard way of obscuring and authenticating the content should it be intercepted (the portion startng with &au=). the gsGameKey and giGameNonce are also set as fixed values although in the real HUD they are dynamically set.

    I want to use  a browser to verify the actions by the gsUpdateURL which is a PHP script which interprets the various parts of the value/pairs OP=??? and au=??? which are detected from the $_POST array variables in the PHP script..

    So if I type in the browser url field

    http://gsUpdateURL.php?op="somevalueofactionoperand"&au="somevalueofoperand" I get a 404 page not found when I expected a response from the server and that is what is bugging me.

    Any ideas?

    NB I now know that what I thought was a UUID is infact the url of the receiving HUD in a SL region !

  7. Thanks for the reply.

    I am sorry if I was not clear in my aims. To enable me to check that the correct response is coming from the PHP script in the server I wanted to be able to test it using a simple browser. Entering http://a.b.c/d.php followed by parameters which emulate or simulate what the llHTTPRequest assembles from a request such as

    gkRequestid = llHTTPRequest(gsUpdateURL,[HTTP_METHOD,"POST",HTTP_MIMETYPE,"application/x-www-form-urlencoded"],lsOptions.....

    where the lsOptions contains op="validate&ui="+llEscapeURL((string)gkPlayer)+"&ve="+llEscapeURL(gsHUDVersion);

    I am making it clearer?

     

  8. @Darkie

    That is what I believe is the correct process. The problem is that I am the only user of the test website I have setup and the saved information as you suggest gets saved with a serialize and save data to file.

    I think I have spotted my mistake in the analysis of the error.

    It raises an interesting question if the httprequest is

    gkRequestID = llHTTPRequest(gsUpdateURL,[HTTP_METHOD,"POST",HTTP_MIMETYPE,"application/x-www-form-urlencoded"],lsOptions+"&au="+llMD5String(lsOptions+"#"+gsGameKey,giGameNonce));

    Can this be generated from a browser so I can check the effect of the different parts

    http://website/a../b../c../d...php?op=hudcheck&ui=c337c075%2D0527%2D4684%2Db65b%2D94b6ddeaa0e6&ve=0%2E9%2E9%2E6&au=b21a99479bdccf6f27e8cbed01eab4dd

    Does not work I think because the & after the d..php is not the correct format.

    What is?

  9. Thanks again,

    I have tackled this problem from a different angle. From other LSL scripts I have detected that one of the functions obtains a URL for use by external sources. This is communicated to the webserver PHP script which is supposed to update the data file with the URL and which includes the port number so that the PHP script can send a request for the LSL script on ereceipt can give inventory to the requesting avatar. Something seems to be going wrong with that updating so I am trying to find out what.

    Back to the depths of PHP.

  10. Thanks for the reply.

    Yes it does and I have tried to decipher the PHP script that is invoked by the LSL script in the HUD. It Opens a file in the public_html folder on the server and that does contain a string which could be the problem. That string reads

    http://sim10156.agni.lindenlab.com:12046/cap/54604be4-4538-c807-80b7-3a26b11c7140/

    which possibly identifies the cap portion of the error message I quoted. The error seems to be a file or folder not found.

    I am still looking for a method of identifying the unknown UUID.

  11. I am debugging a complex HUD script which communicates with a website.

    The script sends a POST to the web page correctly and gets a response. The status returned is 200. The body however does not contain the expected "*OK" or "*UPD" so it sends a message to the owner, me, which says

    HUD Server Error: cap not found: '4baaf270-e135-eff9-da91-a2d5a422620a'

    This latter part would seem to be a UUID but I cannot identify it. I have looked for anything named 'cap' but not found anything.

    Is there a way of identifying whatever was not found using the UUID?

    If I can identify that I can then check what is missing and supply what is missing.

  12. Hi Rolig,

    I am sure I have heard of one of the environments (no names to protect my sanity) into which if you copied a Prim with scripts the scripts would if executed then become available. They are after all assets without which there aouwld be no purpose copying. My memory is not clear of exactly when this was possible but since my birth in SL.

    I accept your comments  as of now.

    I will have to confirm this before I jump as losing the scripts for this system could be expensive (for me).

     

  13. I am developing a system which currently requires a password to be loaded by the script and is used for all communications between prims and between the prims and a a website.

    Setting up a new instance of the system requires someone in authority to be present when the prims are "built" and load the password into the objects. This is obviously time consuming and prevents a distribution of a copy of the system to a new owner.

    So my question/s

    If all the prims can only be edited by a pre-named avatar and the scripts within the prims are all locked (permissions) can I assume that noone can get at the script content?

    I am aware that dumping the prims to another environment has in the past meant that the content is n ot secure. Is this still the case?

    TIA

     

×
×
  • Create New...