Changeset 586 for trunk/zoo-project/zoo-kernel/service_internal_php.c
- Timestamp:
- Feb 16, 2015, 10:45:52 PM (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/zoo-project/zoo-kernel/service_internal_php.c
r580 r586 32 32 #include <zend_stream.h> 33 33 34 #ifdef ZTS35 void ***tsrm_ls;36 #endif37 38 34 zval *php_Array_from_maps(maps* t); 39 35 zval* php_Array_from_map(map*); 40 36 maps* php_maps_from_Array(HashTable* t); 41 37 map* php_map_from_HasTable(HashTable* t); 38 39 #ifdef ZTS 40 void ***tsrm_ls; 41 #endif 42 43 ZEND_BEGIN_MODULE_GLOBALS(zoo) 44 long _SERVICE_SUCCEEDED; 45 long _SERVICE_FAILED; 46 ZEND_END_MODULE_GLOBALS(zoo) 47 48 #ifdef ZTS 49 #define ZOO_G(v) TSRMG(zoo_globals_id, zend_zoo_globals *, v) 50 #else 51 #define ZOO_G(v) (zoo_globals.v) 52 #endif 53 54 #define PHP_ZOO_VERSION "1.0" 55 #define PHP_ZOO_EXTNAME "ZOO" 56 57 PHP_MINIT_FUNCTION(zoo); 58 PHP_MSHUTDOWN_FUNCTION(zoo); 59 PHP_RINIT_FUNCTION(zoo); 60 61 PHP_FUNCTION(zoo_Translate); 62 PHP_FUNCTION(zoo_UpdateStatus); 63 PHP_FUNCTION(zoo_SERVICE_SUCCEEDED); 64 PHP_FUNCTION(zoo_SERVICE_FAILED); 65 66 extern zend_module_entry zoo_module_entry; 67 #define phpext_zoo_ptr &zoo_entry 68 69 ZEND_DECLARE_MODULE_GLOBALS(zoo) 70 71 static zend_function_entry zoo_functions[] = { 72 PHP_FE(zoo_Translate, NULL) 73 PHP_FE(zoo_UpdateStatus, NULL) 74 PHP_FE(zoo_SERVICE_SUCCEEDED, NULL) 75 PHP_FE(zoo_SERVICE_FAILED, NULL) 76 {NULL, NULL, NULL} 77 }; 78 79 zend_module_entry zoo_module_entry = { 80 #if ZEND_MODULE_API_NO >= 20010901 81 STANDARD_MODULE_HEADER, 82 #endif 83 PHP_ZOO_EXTNAME, 84 zoo_functions, 85 PHP_MINIT(zoo), 86 PHP_MSHUTDOWN(zoo), 87 PHP_RINIT(zoo), 88 NULL, 89 NULL, 90 #if ZEND_MODULE_API_NO >= 20010901 91 PHP_ZOO_VERSION, 92 #endif 93 STANDARD_MODULE_PROPERTIES 94 }; 95 96 ZEND_GET_MODULE(zoo) 97 98 PHP_INI_BEGIN() 99 PHP_INI_END() 100 101 static void 102 php_zoo_init_globals(zend_zoo_globals *zoo_globals) 103 { 104 zoo_globals->_SERVICE_SUCCEEDED=3; 105 zoo_globals->_SERVICE_FAILED=4; 106 } 107 108 PHP_RINIT_FUNCTION(zoo) 109 { 110 return SUCCESS; 111 } 112 113 PHP_MINIT_FUNCTION(zoo) 114 { 115 ZEND_INIT_MODULE_GLOBALS(zoo, php_zoo_init_globals,NULL); 116 REGISTER_INI_ENTRIES(); 117 return SUCCESS; 118 } 119 120 PHP_MSHUTDOWN_FUNCTION(zoo) 121 { 122 UNREGISTER_INI_ENTRIES(); 123 return SUCCESS; 124 } 125 126 PHP_FUNCTION(zoo_Translate) 127 { 128 char *value; 129 int value_len; 130 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &value, &value_len) == FAILURE) { 131 RETURN_NULL(); 132 } 133 RETURN_STRING(_ss(value), 1); 134 } 135 136 PHP_FUNCTION(zoo_UpdateStatus) 137 { 138 zval *arr; 139 char *message; 140 int message_len; 141 long pourcent; 142 char *status=(char*)malloc(4*sizeof(char)); 143 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "asl", &arr, &message, &message_len,&pourcent) == FAILURE) { 144 RETURN_NULL(); 145 } 146 HashTable* t=HASH_OF(arr); 147 maps* conf=php_maps_from_Array(t); 148 setMapInMaps(conf,"lenv","message",message); 149 sprintf(status,"%d",pourcent); 150 setMapInMaps(conf,"lenv","status",status); 151 _updateStatus(conf); 152 freeMaps(&conf); 153 free(conf); 154 free(status); 155 RETURN_NULL(); 156 } 157 158 PHP_FUNCTION(zoo_SERVICE_SUCCEEDED) 159 { 160 RETURN_LONG(ZOO_G(_SERVICE_SUCCEEDED)); 161 } 162 163 PHP_FUNCTION(zoo_SERVICE_FAILED) 164 { 165 RETURN_LONG(ZOO_G(_SERVICE_FAILED)); 166 } 42 167 43 168 /** … … 62 187 63 188 tmp=getMap(s->content,"serviceProvider"); 189 map* cwd=getMapFromMaps(m,"lenv","cwd"); 190 map* mp=getMap(request,"metapath"); 191 char *scriptName; 192 if(mp!=NULL && strlen(mp->value)>0){ 193 scriptName=(char*)malloc((strlen(cwd->value)+strlen(mp->value)+strlen(tmp->value)+3)*sizeof(char)); 194 sprintf(scriptName,"%s/%s/%s",cwd->value,mp->value,tmp->value); 195 }else{ 196 scriptName=(char*)malloc((strlen(cwd->value)+strlen(tmp->value)+2)*sizeof(char)); 197 sprintf(scriptName,"%s/%s",cwd->value,tmp->value); 198 } 64 199 zend_file_handle iscript; 65 iscript.type=ZEND_HANDLE_FP; 200 iscript.type=ZEND_HANDLE_FD; 201 iscript.opened_path=NULL; 66 202 iscript.filename=tmp->value; 67 iscript. opened_path=NULL;68 //iscript.free_filname=0;69 if( !(iscript.handle.fp=fopen(iscript.filename,"rb"))){203 iscript.free_filename=0; 204 FILE* temp=fopen(scriptName,"rb"); 205 if(temp==NULL){ 70 206 char tmp1[1024]; 71 sprintf(tmp1,"Unable to load PHP file %s",tmp->value); 72 map* err=createMap("text",tmp1); 73 addToMap(err,"code","NoApplicableCode"); 74 printExceptionReportResponse(m,err); 75 exit(-1); 76 } 77 78 php_embed_init(0,NULL,&tsrm_ls); 207 sprintf(tmp1,_("Unable to load the PHP file %s"),tmp->value); 208 free(scriptName); 209 return errorException(m,tmp1,"NoApplicableCode",NULL); 210 } 211 iscript.handle.fd=fileno(temp); 212 213 php_embed_init(0,NULL PTSRMLS_CC); 79 214 80 215 zend_try { 81 216 zend_startup_module(&zoo_module_entry); 82 217 php_execute_script(&iscript TSRMLS_CC); 83 84 218 zval *iargs[3]; 85 219 zval iret, ifunc,ifile; … … 89 223 iargs[1] = php_Array_from_maps(*real_inputs); 90 224 iargs[2] = php_Array_from_maps(*real_outputs); 91 92 call_user_function(EG(function_table), NULL, &ifunc, &iret, 3, iargs TSRMLS_CC); 93 94 HashTable* t=HASH_OF(iargs[2]); 95 *real_outputs=php_maps_from_Array(t); 96 97 char tmp1[1024]; 98 99 res=SERVICE_SUCCEEDED; 100 225 226 if((res=call_user_function(EG(function_table), NULL, &ifunc, &iret, 3, iargs TSRMLS_CC))==SUCCESS){ 227 228 HashTable* t=HASH_OF(iargs[2]); 229 HashTable* t1=HASH_OF(iargs[0]); 230 *real_outputs=php_maps_from_Array(t); 231 *main_conf=php_maps_from_Array(t1); 232 233 res=Z_LVAL(iret); 234 }else{ 235 free(scriptName); 236 fclose(temp); 237 return errorException(m,"Unable to process.","NoApplicableCode",NULL);; 238 } 101 239 } zend_catch { 102 map* err=createMap("text","Unable to process."); 103 addToMap(err,"code","NoApplicableCode"); 104 printExceptionReportResponse(m,err); 105 exit(-1); 240 free(scriptName); 241 fclose(temp); 242 return errorException(m,"Unable to process.","NoApplicableCode",NULL);; 106 243 } zend_end_try(); 107 244 free(scriptName); 245 fclose(temp); 108 246 php_embed_shutdown(TSRMLS_C); 109 247 … … 216 354 if(final_res==NULL) 217 355 final_res=cursor; 218 else 356 else{ 219 357 addMapsToMaps(&final_res,cursor); 358 freeMaps(&cursor); 359 free(cursor); 360 } 220 361 #ifdef DEBUG 221 362 fprintf(stderr,"key : %s\n",key); … … 289 430 return final_res; 290 431 } 291 292 293 294 295 296 297 298 299 300 301 302 303 304
Note: See TracChangeset
for help on using the changeset viewer.