Ignore:
Timestamp:
Jul 18, 2011, 1:46:56 PM (13 years ago)
Author:
djay
Message:

Solving bugs #43 and #42

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/zoo-kernel/service_internal_js.c

    r42 r274  
    2727static char dbg[1024];
    2828
     29JSBool
     30JSAlert(JSContext *cx, uintN argc, jsval *argv1)
     31{
     32  jsval *argv = JS_ARGV(cx,argv1);
     33  int i=0;
     34  JS_MaybeGC(cx);
     35  for(i=0;i<argc;i++){
     36    JSString* jsmsg = JS_ValueToString(cx,argv[i]);
     37    fprintf(stderr,"[ZOO-API:JS] %s\n",JS_EncodeString(cx,jsmsg));
     38  }
     39  JS_MaybeGC(cx);
     40 
     41  return JS_TRUE;
     42}
     43
    2944int zoo_js_support(maps** main_conf,map* request,service* s,
    3045                   maps **inputs,maps **outputs)
     
    5772    return 1;
    5873  }
    59   JS_SetOptions(cx, JSOPTION_VAROBJFIX);
     74  JS_SetOptions(cx, JSOPTION_VAROBJFIX | JSOPTION_JIT | JSOPTION_METHODJIT);
    6075  JS_SetVersion(cx, JSVERSION_LATEST);
    6176  JS_SetErrorReporter(cx, reportError);
    6277
    6378  /* Create the global object. */
    64   global = JS_NewObject(cx, &global_class, NULL, NULL);
    65   if (global == NULL){
    66     return 1;
    67   }
     79  global = JS_NewCompartmentAndGlobalObject(cx, &global_class, NULL);
    6880
    6981  /* Populate the global object with the standard globals,
     
    7284    return 1;
    7385  }
     86
    7487  if (!JS_DefineFunction(cx, global, "ZOORequest", JSRequest, 4, 0))
    7588    return 1;
    7689  if (!JS_DefineFunction(cx, global, "ZOOUpdateStatus", JSUpdateStatus, 2, 0))
     90    return 1;
     91  if (!JS_DefineFunction(cx, global, "alert", JSAlert, 2, 0))
    7792    return 1;
    7893
     
    86101  char api0[strlen(tmpm1->value)+strlen(ntmp)+15];
    87102  sprintf(api0,"%s/%sZOO-proj4js.js",ntmp,tmpm1->value);
     103#ifdef JS_DEBUG
    88104  fprintf(stderr,"Trying to load %s\n",api0);
    89   JSScript *api_script1=loadZooApiFile(cx,global,api0);
     105#endif
     106  JSObject *api_script1=loadZooApiFile(cx,global,api0);
    90107  fflush(stderr);
    91108
    92109  char api1[strlen(tmpm1->value)+strlen(ntmp)+11];
    93110  sprintf(api1,"%s/%sZOO-api.js",ntmp,tmpm1->value);
     111#ifdef JS_DEBUG
    94112  fprintf(stderr,"Trying to load %s\n",api1);
    95   JSScript *api_script2=loadZooApiFile(cx,global,api1);
     113#endif
     114  JSObject *api_script2=loadZooApiFile(cx,global,api1);
    96115  fflush(stderr);
    97116
     
    106125  sprintf(filename,"%s/%s%s",ntmp,tmpm1->value,tmpm2->value);
    107126  filename[strlen(tmpm1->value)+strlen(tmpm2->value)+strlen(ntmp)+1]=0;
     127#ifdef JS_DEBUG
    108128  fprintf(stderr,"FILENAME %s\n",filename);
     129#endif
    109130  struct stat file_status;
    110131  stat(filename, &file_status);
     
    112133  uint16 lineno;
    113134  jsval rval;
    114   FILE *jsfile=fopen(filename,"r");
    115135  JSBool ok ;
    116   JSScript *script = JS_CompileFileHandle(cx, global, filename,jsfile);
     136  JSObject *script = JS_CompileFile(cx, global, filename);
    117137  if(script!=NULL){
    118138    (void)JS_ExecuteScript(cx, global, script, &rval);
     
    127147    JS_DestroyRuntime(rt);
    128148    JS_ShutDown();
    129     fclose(jsfile);
    130149    exit(-1);
    131150  }
     
    161180    if(strlen(dbg)==0)
    162181      sprintf(dbg,"No result was found after the function call");
    163     sprintf(tmp1,"Unable to run %s from the JavScript file %s : \n %s",s->name,filename,dbg);
     182    sprintf(tmp1,"Unable to run %s from the JavaScript file %s : \n %s",s->name,filename,dbg);
     183#ifdef JS_DEBUG
    164184    fprintf(stderr,"%s",tmp1);
     185#endif
    165186    map* err=createMap("text",tmp1);
    166187    addToMap(err,"code","NoApplicableCode");
     
    211232    jsval tmp2;
    212233    JSBool hasElement=JS_GetProperty(cx,d,"outputs",&tmp2);
     234#ifdef JS_DEBUG
    213235    if(!hasElement)
    214236      fprintf(stderr,"No outputs property returned\n");
     
    217239    else
    218240      fprintf(stderr,"outputs is not an array as expected\n");
     241#endif
    219242    *outputs=mapsFromJSObject(cx,tmp2);
    220243#ifdef JS_DEBUG
    221     dumpMaps(out);
     244    dumpMaps(outputs);
    222245#endif
    223246  }
    224247
    225248  /* Cleanup. */
    226   JS_DestroyScript(cx, script);
    227   JS_DestroyScript(cx, api_script1);
    228   JS_DestroyScript(cx, api_script2);
    229   //JS_MaybeGC(cx);
    230   // If we use the DestroyContext as requested to release memory then we get
    231   // issue getting back the main configuration maps after coming back to the
    232   // runRequest function ...
    233   //JS_DestroyContext(cx);
     249  JS_DestroyContext(cx);
    234250  JS_DestroyRuntime(rt);
    235251  JS_ShutDown();
     
    240256}
    241257
    242 JSScript * loadZooApiFile(JSContext *cx,JSObject  *global, char* filename){
     258JSObject * loadZooApiFile(JSContext *cx,JSObject  *global, char* filename){
    243259  struct stat api_status;
    244260  int s=stat(filename, &api_status);
    245261  if(s==0){
    246262    jsval rval;
    247     FILE *jsfile=fopen(filename,"r");
    248263    JSBool ok ;
    249     JSScript *script = JS_CompileFileHandle(cx, global, filename,jsfile);
     264    JSObject *script = JS_CompileFile(cx, JS_GetGlobalObject(cx), filename);
    250265    if(script!=NULL){
    251       (void)JS_ExecuteScript(cx, global, script, &rval);
     266      (void)JS_ExecuteScript(cx, JS_GetGlobalObject(cx), script, &rval);
     267#ifdef JS_DEBUG
    252268      fprintf(stderr,"**************\n%s correctly loaded\n**************\n",filename);
     269#endif
    253270      return script;
    254271    }
     272#ifdef JS_DEBUG
    255273    else
    256274      fprintf(stderr,"\n**************\nUnable to run %s\n**************\n",filename);
    257   }
     275#endif
     276  }
     277#ifdef JS_DEBUG
    258278  else
    259279    fprintf(stderr,"\n**************\nUnable to load %s\n**************\n",filename);
     280#endif
    260281  return NULL;
    261282}
     
    288309  map* tmpm=t;
    289310  while(tmpm!=NULL){
    290     jsval jsstr = STRING_TO_JSVAL(JS_NewString(cx,tmpm->value,strlen(tmpm->value)));
     311    jsval jsstr = STRING_TO_JSVAL(JS_NewStringCopyN(cx,tmpm->value,strlen(tmpm->value)));
    291312    JS_SetProperty(cx, res, tmpm->name,&jsstr);
    292313#ifdef JS_DEBUG
     
    335356      fprintf(stderr,"Properties length :  %d \n",idp->length);
    336357#endif
     358      tres=(maps*)malloc(MAPS_SIZE);
     359      tres->name=NULL;
     360      tres->content=NULL;
     361      tres->next=NULL;
     362
    337363      for (index=0,argNum=idp->length;index<argNum;index++) {
    338364        jsval id = idp->vector[index];
     
    346372        len1 = JS_GetStringLength(jsmsg);
    347373#ifdef JS_DEBUG
    348         fprintf(stderr,"Enumerate id : %d => %s\n",oi,JS_GetStringBytes(jsmsg));
     374        fprintf(stderr,"Enumerate id : %d => %s\n",oi,JS_EncodeString(cx,jsmsg));
    349375#endif
    350376        jsval nvp=JSVAL_NULL;
    351         if((JS_GetProperty(cx, JSVAL_TO_OBJECT(tmp1), JS_GetStringBytes(jsmsg), &nvp)==JS_FALSE))
    352 #ifdef JS_DEBUG
    353         fprintf(stderr,"Enumerate id : %d => %s => No more value\n",oi,JS_GetStringBytes(jsmsg));
    354 #endif
     377        if((JS_GetProperty(cx, JSVAL_TO_OBJECT(tmp1), JS_EncodeString(cx,jsmsg), &nvp)==JS_FALSE)){
     378#ifdef JS_DEBUG
     379          fprintf(stderr,"Enumerate id : %d => %s => No more value\n",oi,JS_EncodeString(cx,jsmsg));
     380#endif
     381        }
     382       
    355383        if(JSVAL_IS_OBJECT(nvp)){
    356384#ifdef JS_DEBUG
     
    358386#endif
    359387        }
    360 #ifdef JS_DEBUG
    361         else
    362           fprintf(stderr,"JSVAL NVP IS NOT OBJECT !!\n");
    363 #endif
    364         JSObject *nvp1;
     388
     389        JSObject *nvp1=JSVAL_NULL;
    365390        JS_ValueToObject(cx,nvp,&nvp1);
    366391        jsval nvp1j=OBJECT_TO_JSVAL(nvp1);
    367392        if(JSVAL_IS_OBJECT(nvp1j)){
    368 #ifdef JS_DEBUG
    369           fprintf(stderr,"JSVAL NVP1J IS OBJECT\n");
    370 #endif
    371           tres=(maps*)malloc(MAPS_SIZE);
    372           tres->name=strdup(JS_GetStringBytes(jsmsg));
    373           tres->content=mapFromJSObject(cx,nvp1j);
    374           tres->next=NULL;
    375 #ifdef JS_DEBUG
    376           dumpMaps(res);
    377 #endif
    378           if(res==NULL)
    379             res=dupMaps(&tres);
     393          JSString *jsmsg1;
     394          JSObject *nvp2=JSVAL_NULL;
     395          jsmsg1 = JS_ValueToString(cx,nvp1j);
     396          len1 = JS_GetStringLength(jsmsg1);
     397          //#ifdef JS_DEBUG
     398          fprintf(stderr,"JSVAL NVP1J IS OBJECT %s = %s\n",JS_EncodeString(cx,jsmsg),JS_EncodeString(cx,jsmsg1));
     399          //#endif
     400          if(strcasecmp(JS_EncodeString(cx,jsmsg1),"[object Object]")==0){
     401            tres->name=strdup(JS_EncodeString(cx,jsmsg));
     402            tres->content=mapFromJSObject(cx,nvp1j);
     403          }
    380404          else
    381             addMapsToMaps(&res,tres);
    382           freeMaps(&tres);
    383           free(tres);
    384           tres=NULL;
    385 #ifdef JS_DEBUG
    386           dumpMaps(res);
    387 #endif
     405            if(strcasecmp(JS_EncodeString(cx,jsmsg),"name")==0){
     406              tres->name=strdup(JS_EncodeString(cx,jsmsg1));
     407            }
     408            else{
     409              if(tres->content==NULL)
     410                tres->content=createMap(JS_EncodeString(cx,jsmsg),JS_EncodeString(cx,jsmsg1));
     411              else
     412                addToMap(tres->content,JS_EncodeString(cx,jsmsg),JS_EncodeString(cx,jsmsg1));
     413            }
    388414        }
    389415#ifdef JS_DEBUG
     
    391417          fprintf(stderr,"JSVAL NVP1J IS NOT OBJECT !!\n");
    392418#endif
     419
    393420      }
     421      //#ifdef JS_DEBUG
     422      dumpMaps(tres);
     423      //#endif
     424      if(res==NULL)
     425        res=dupMaps(&tres);
     426      else
     427        addMapsToMaps(&res,tres);
     428      freeMaps(&tres);
     429      free(tres);
     430      tres=NULL;
     431
    394432    }
    395433  }
    396 #ifdef JS_DEBUG
     434  //#ifdef JS_DEBUG
    397435  dumpMaps(res);
    398 #endif
     436  //#endif
    399437  return res;
    400438}
     
    423461      len = JS_GetStringLength(jsmsg);
    424462      jsval nvp;
    425       JS_GetProperty(cx, JSVAL_TO_OBJECT(t), JS_GetStringBytes(jsmsg), &nvp);
     463      JS_GetProperty(cx, JSVAL_TO_OBJECT(t), JS_EncodeString(cx,jsmsg), &nvp);
    426464      jsmsg1 = JS_ValueToString(cx,nvp);
    427465      len1 = JS_GetStringLength(jsmsg1);
    428466#ifdef JS_DEBUG
    429       fprintf(stderr,"Enumerate id : %d [ %s => %s ]\n",index,JS_GetStringBytes(jsmsg),JS_GetStringBytes(jsmsg1));
     467      fprintf(stderr,"Enumerate id : %d [ %s => %s ]\n",index,JS_EncodeString(cx,jsmsg),JS_EncodeString(cx,jsmsg1));
    430468#endif
    431469      if(res!=NULL){
    432470#ifdef JS_DEBUG
    433         fprintf(stderr,"%s - %s\n",JS_GetStringBytes(jsmsg),JS_GetStringBytes(jsmsg1));
    434 #endif
    435         addToMap(res,JS_GetStringBytes(jsmsg),JS_GetStringBytes(jsmsg1));
     471        fprintf(stderr,"%s - %s\n",JS_EncodeString(cx,jsmsg),JS_EncodeString(cx,jsmsg1));
     472#endif
     473        addToMap(res,JS_EncodeString(cx,jsmsg),JS_EncodeString(cx,jsmsg1));
    436474      }
    437475      else{
    438         res=createMap(JS_GetStringBytes(jsmsg),JS_GetStringBytes(jsmsg1));
     476        res=createMap(JS_EncodeString(cx,jsmsg),JS_EncodeString(cx,jsmsg1));
    439477        res->next=NULL;
    440478      }
Note: See TracChangeset for help on using the changeset viewer.

Search

Context Navigation

ZOO Sponsors

http://www.zoo-project.org/trac/chrome/site/img/geolabs-logo.pnghttp://www.zoo-project.org/trac/chrome/site/img/neogeo-logo.png http://www.zoo-project.org/trac/chrome/site/img/apptech-logo.png http://www.zoo-project.org/trac/chrome/site/img/3liz-logo.png http://www.zoo-project.org/trac/chrome/site/img/gateway-logo.png

Become a sponsor !

Knowledge partners

http://www.zoo-project.org/trac/chrome/site/img/ocu-logo.png http://www.zoo-project.org/trac/chrome/site/img/gucas-logo.png http://www.zoo-project.org/trac/chrome/site/img/polimi-logo.png http://www.zoo-project.org/trac/chrome/site/img/fem-logo.png http://www.zoo-project.org/trac/chrome/site/img/supsi-logo.png http://www.zoo-project.org/trac/chrome/site/img/cumtb-logo.png

Become a knowledge partner

Related links

http://zoo-project.org/img/ogclogo.png http://zoo-project.org/img/osgeologo.png