📄 hwapi.cpp
字号:
if(0 == (count = zend_hash_num_elements(lht))) { return NULL; } in = new HW_API_hwStat_In(); zend_hash_internal_pointer_reset(lht); for(i=0; i<count; i++) { ulong ind; char *key; zval **keydata; zend_hash_get_current_data(lht, (void **) &keydata); zend_hash_get_current_key(lht, &key, &ind, 0); switch((*keydata)->type) { case IS_ARRAY: { HW_API_StringArray *sarr; if(!strcmp(key, "attributeSelector")) { sarr = make_HW_API_StringArray((*keydata)->value.ht); in->setAttributeSelector(*sarr); /* FIXME: sarr can be propperly be freed now */ } break; } } zend_hash_move_forward(lht); } return(in);}static HW_API_dcStat_In *make_HW_API_dcStat_In(zval *arg1) { int count, i; HashTable *lht; HW_API_dcStat_In *in; lht = arg1->value.ht; if(0 == (count = zend_hash_num_elements(lht))) { return NULL; } in = new HW_API_dcStat_In(); zend_hash_internal_pointer_reset(lht); for(i=0; i<count; i++) { ulong ind; char *key; zval **keydata; zend_hash_get_current_data(lht, (void **) &keydata); zend_hash_get_current_key(lht, &key, &ind, 0); switch((*keydata)->type) { case IS_ARRAY: { HW_API_StringArray *sarr; if(!strcmp(key, "attributeSelector")) { sarr = make_HW_API_StringArray((*keydata)->value.ht); in->setAttributeSelector(*sarr); /* FIXME: sarr can be propperly be freed now */ } break; } } zend_hash_move_forward(lht); } return(in);}static HW_API_dbStat_In *make_HW_API_dbStat_In(zval *arg1) { int count, i; HashTable *lht; HW_API_dbStat_In *in; lht = arg1->value.ht; if(0 == (count = zend_hash_num_elements(lht))) { return NULL; } in = new HW_API_dbStat_In(); zend_hash_internal_pointer_reset(lht); for(i=0; i<count; i++) { ulong ind; char *key; zval **keydata; zend_hash_get_current_data(lht, (void **) &keydata); zend_hash_get_current_key(lht, &key, &ind, 0); switch((*keydata)->type) { case IS_ARRAY: { HW_API_StringArray *sarr; if(!strcmp(key, "attributeSelector")) { sarr = make_HW_API_StringArray((*keydata)->value.ht); in->setAttributeSelector(*sarr); /* FIXME: sarr can be propperly be freed now */ } break; } } zend_hash_move_forward(lht); } return(in);}static HW_API_ftStat_In *make_HW_API_ftStat_In(zval *arg1) { int count, i; HashTable *lht; HW_API_ftStat_In *in; lht = arg1->value.ht; if(0 == (count = zend_hash_num_elements(lht))) { return NULL; } in = new HW_API_ftStat_In(); zend_hash_internal_pointer_reset(lht); for(i=0; i<count; i++) { ulong ind; char *key; zval **keydata; zend_hash_get_current_data(lht, (void **) &keydata); zend_hash_get_current_key(lht, &key, &ind, 0); switch((*keydata)->type) { case IS_ARRAY: { HW_API_StringArray *sarr; if(!strcmp(key, "attributeSelector")) { sarr = make_HW_API_StringArray((*keydata)->value.ht); in->setAttributeSelector(*sarr); /* FIXME: sarr can be propperly be freed now */ } break; } } zend_hash_move_forward(lht); } return(in);}static HW_API_info_In *make_HW_API_info_In(zval *arg1) { int count, i; HashTable *lht; HW_API_info_In *in; lht = arg1->value.ht; if(0 == (count = zend_hash_num_elements(lht))) { return NULL; } in = new HW_API_info_In(); zend_hash_internal_pointer_reset(lht); for(i=0; i<count; i++) { ulong ind; char *key; zval **keydata; zend_hash_get_current_data(lht, (void **) &keydata); zend_hash_get_current_key(lht, &key, &ind, 0); switch((*keydata)->type) { case IS_ARRAY: { HW_API_StringArray *sarr; if(!strcmp(key, "attributeSelector")) { sarr = make_HW_API_StringArray((*keydata)->value.ht); in->setAttributeSelector(*sarr); /* FIXME: sarr can be propperly be freed now */ } break; } } zend_hash_move_forward(lht); } return(in);}PHP_INI_BEGIN()// STD_PHP_INI_ENTRY("hwapi.allow_persistent", "0", PHP_INI_SYSTEM, OnUpdateInt, allow_persistent, zend_hwapi_globals, hwapi_globals)PHP_INI_END()PHP_MINIT_FUNCTION(hwapi) { ZEND_INIT_MODULE_GLOBALS(hwapi, php_hwapi_init_globals, NULL); le_hwapip = zend_register_list_destructors_ex(php_free_hwapi, NULL, "hw_api", module_number); le_hwapi_attributep = zend_register_list_destructors_ex(php_free_hwapi_attribute, NULL, "hw_api_attribute", module_number); le_hwapi_objectp = zend_register_list_destructors_ex(php_free_hwapi_object, NULL, "hw_api_object", module_number); le_hwapi_errorp = zend_register_list_destructors_ex(php_free_hwapi_error, NULL, "hw_api_error", module_number); le_hwapi_contentp = zend_register_list_destructors_ex(php_free_hwapi_content, NULL, "hw_api_content", module_number); le_hwapi_reasonp = zend_register_list_destructors_ex(php_free_hwapi_reason, NULL, "hw_api_reason", module_number); hw_api_class_startup(); hw_api_object_class_startup(); hw_api_attribute_class_startup(); hw_api_error_class_startup(); hw_api_content_class_startup(); hw_api_reason_class_startup(); REGISTER_LONG_CONSTANT("HW_API_REMOVE_NORMAL", HW_API_remove_In::NORMAL, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("HW_API_REMOVE_PHYSICAL", HW_API_remove_In::PHYSICAL, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("HW_API_REMOVE_REMOVELINKS", HW_API_remove_In::REMOVELINKS, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("HW_API_REMOVE_NONRECURSIVE", HW_API_remove_In::NONRECURSIVE, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("HW_API_REPLACE_NORMAL", HW_API_replace_In::NORMAL, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("HW_API_REPLACE_FORCE_VERSION_CONTROL", HW_API_replace_In::FORCE_VERSION_CONTROL, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("HW_API_REPLACE_AUTOMATIC_CHECKOUT", HW_API_replace_In::AUTOMATIC_CHECKOUT, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("HW_API_REPLACE_AUTOMATIC_CHECKIN", HW_API_replace_In::AUTOMATIC_CHECKIN, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("HW_API_REPLACE_PLAIN", HW_API_replace_In::PLAIN, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("HW_API_REPLACE_REVERT_IF_NOT_CHANGED", HW_API_replace_In::REVERT_IF_NOT_CHANGED, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("HW_API_REPLACE_KEEP_TIME_MODIFIED", HW_API_replace_In::KEEP_TIME_MODIFIED, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("HW_API_INSERT_NORMAL", HW_API_insert_In::NORMAL, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("HW_API_INSERT_FORCE_VERSION_CONTROL", HW_API_insert_In::FORCE_VERSION_CONTROL, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("HW_API_INSERT_AUTOMATIC_CHECKOUT", HW_API_insert_In::AUTOMATIC_CHECKOUT, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("HW_API_INSERT_PLAIN", HW_API_insert_In::PLAIN, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("HW_API_INSERT_KEEP_TIME_MODIFIED", HW_API_insert_In::KEEP_TIME_MODIFIED, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("HW_API_INSERT_DELAY_INDEXING", HW_API_insert_In::DELAY_INDEXING, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("HW_API_LOCK_NORMAL", HW_API_lock_In::NORMAL, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("HW_API_LOCK_RECURSIVE", HW_API_lock_In::RECURSIVE, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("HW_API_LOCK_SESSION", HW_API_lock_In::SESSION, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("HW_API_CONTENT_ALLLINKS", HW_API_content_In::ALLLINKS, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("HW_API_CONTENT_REACHABLELINKS", HW_API_content_In::REACHABLELINKS, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("HW_API_CONTENT_PLAIN", HW_API_content_In::PLAIN, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("HW_API_REASON_ERROR", HW_API_Reason::HW_API_ERROR, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("HW_API_REASON_WARNING", HW_API_Reason::HW_API_WARNING, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("HW_API_REASON_MESSAGE", HW_API_Reason::HW_API_MESSAGE, CONST_CS | CONST_PERSISTENT); /* Make sure there are at least default values, though the MessageFilePath * is bogus. If it isn't set at all the web server dies. */ HW_API_init_In initargs; initargs.setArgv0("PHP HWAPI"); initargs.setMessageFilePath(""); HW_API::init(initargs); return SUCCESS;}PHP_MSHUTDOWN_FUNCTION(hwapi) { return SUCCESS;}PHP_RINIT_FUNCTION(hwapi) { return SUCCESS;}PHP_MINFO_FUNCTION(hwapi) { php_info_print_table_start(); php_info_print_table_row(2, "Hyperwave API Support", "enabled"); php_info_print_table_end();}/* {{{ proto string hwapi_dummy(int link, int id, int msgid) Hyperwave dummy function */PHP_FUNCTION(hwapi_dummy) { pval **arg1, **arg2, **arg3; int link, id, type, msgid; RETURN_TRUE;}/* }}} *//* {{{ proto void hwapi_init(string hostname, int port) Hyperwave initialisation */PHP_FUNCTION(hwapi_init) { zval **argv[2], *id; HW_API_init_In initargs; HW_API_init_Out out; int ret; HW_API_HGCSP *db; zval *rv; int argc = ZEND_NUM_ARGS(); if (((argc < 1) || (argc > 2)) || zend_get_parameters_array_ex(argc, argv) == FAILURE) { WRONG_PARAM_COUNT; } id = getThis(); convert_to_string_ex(argv[0]); initargs.setArgv0("PHP HWAPI"); initargs.setMessageFilePath(Z_STRVAL_PP(argv[0])); if(argc == 2) { convert_to_string_ex(argv[1]); initargs.setWhatString(Z_STRVAL_PP(argv[1])) ; } if(id) { db = (HW_API_HGCSP *) php_hwapi_get_object(id, le_hwapip); if(!db) { RETURN_FALSE; } out = db->init(initargs); } else { out = HW_API::init(initargs); } if (out.error().error()) { HW_API_Error *err = new HW_API_Error(out.error()); rv = php_hwapi_object_new((HW_API_Error *) err, le_hwapi_errorp); SEPARATE_ZVAL(&rv); *return_value = *rv; FREE_ZVAL(rv); return; } RETURN_TRUE;}/* }}} *//* {{{ proto string hwapi_hgcsp(string hostname, int port) Hyperwave dummy function */PHP_FUNCTION(hwapi_hgcsp) { zval **argv[2]; HW_API_HGCSP *db; zval *rv; int argc = ZEND_NUM_ARGS(); if (((argc < 1) || (argc > 2)) || zend_get_parameters_array_ex(argc, argv) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_string_ex(argv[0]); if(argc == 2) { convert_to_long_ex(argv[1]); db = new HW_API_HGCSP(Z_STRVAL_PP(argv[0]), Z_LVAL_PP(argv[1])); } else { db = new HW_API_HGCSP(Z_STRVAL_PP(argv[0])); } rv = php_hwapi_object_new((HW_API_HGCSP *) db, le_hwapip); SEPARATE_ZVAL(&rv); *return_value = *rv; FREE_ZVAL(rv);// ret = zend_list_insert(db, le_hwapip); /* construct an object with some methods */// object_init_ex(return_value, hw_api_class_entry_ptr);// add_property_resource(return_value, "this", ret);}/* }}} *//* {{{ proto object hwapi_object(array object_in) Hyperwave dummy function */PHP_FUNCTION(hwapi_object) { pval **arg1, *rv, *id; HW_API_Object *newobj; HW_API_object_In *in; HW_API_object_Out out; HW_API_HGCSP *db; if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_array_ex(arg1); id = getThis(); db = (HW_API_HGCSP *) php_hwapi_get_object(id, le_hwapip); if(!db) { RETURN_FALSE; } in = make_HW_API_object_In(*arg1); out = db->object(*in); delete in; if (out.error().error()) { HW_API_Error *err = new HW_API_Error(out.error()); rv = php_hwapi_object_new((HW_API_Error *) err, le_hwapi_errorp); SEPARATE_ZVAL(&rv); *return_value = *rv; FREE_ZVAL(rv); return; } //Frage: Diese Zeile erzeugt erst mit dem Konstruktor von HW_API_Object //eine Kopie und danach durch das assign. Wie kann man das verhindern. newobj = new HW_API_Object(); *newobj = out.object();// newobj = new HW_API_Object(out.object()); rv = php_hwapi_object_new(newobj, le_hwapi_objectp); SEPARATE_ZVAL(&rv); *return_value = *rv; FREE_ZVAL(rv);}/* }}} *//* {{{ proto string hwapi_mychildren(array parameters) Hyperwave dummy function */PHP_FUNCTION(hwapi_mychildren) { zval **arg1, *id, *rv; HW_API_ObjectArray objarr; HW_API_children_In *in; HW_API_children_Out out; HW_API_HGCSP *db; int i; if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_string_ex(arg1); id = getThis(); db = (HW_API_HGCSP *) php_hwapi_get_object(id, le_hwapip); if(!db) { RETURN_FALSE; } in = new HW_API_children_In(); in->setObjectIdentifier(Z_STRVAL_PP(arg1)); out = db->children(*in); delete in; if (out.error().error()) { HW_API_Error *err = new HW_API_Error(out.error()); rv = php_hwapi_object_new((HW_API_Error *) err, le_hwapi_errorp); SEPARATE_ZVAL(&rv); *return_value = *rv; FREE_ZVAL(rv); return; } else { objarr = (HW_API_ObjectArray) out.objects(); } if (array_init(return_value) == FAILURE) { RETURN_FALSE; } for(i=0; i<objarr.count(); i++) { zval *child; HW_API_Object obj, *objp; objarr.object(i, obj); objp = new HW_API_Object(obj); child = php_hwapi_object_new(objp, le_hwapi_objectp); add_next_index_zval(return_value, child); } return; for(i=0; i<objarr.count(); i++) { HW_API_Object obj; HW_API_Attribute attr; objarr.object(i, obj); obj.attribute("GOid", attr); add_next_index_string(return_value, (char *) attr.value().string(), 1); }}/* }}} *//* {{{ proto string hwapi_children(array parameters) Hyperwave dummy function */PHP_FUNCTION(hwapi_children) { zval **arg1, *id, *rv; HW_API_ObjectArray objarr; HW_API_children_In *in; HW_API_children_Out out; HW_API_HGCSP *db; int i; if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_array_ex(arg1); id = getThis(); db = (HW_API_HGCSP *) php_hwapi_get_object(id, le_hwapip); if(!db) { RETURN_FALSE; } in = make_HW_API_children_In(*arg1); out = db->children(*in); delete in; if (out.error().error()) { HW_API_Error *err = new HW_API_Error(out.error()); rv = php_hwapi_object_new((HW_API_Error *) err, le_hwapi_errorp); SEPARATE_ZVAL(&rv); *return_value = *rv; FREE_ZVAL(rv); return; } else { objarr = (HW_API_ObjectArray) out.objects(); } objectArray2ind
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -