/* {{{ proto array tidy_get_config() Get current Tidy configuration */ static PHP_FUNCTION(tidy_get_config) { TidyIterator itOpt; char *opt_name; void *opt_value; TidyOptionType optt; TIDY_FETCH_OBJECT; itOpt = tidyGetOptionList(obj->ptdoc->doc); array_init(return_value); while (itOpt) { TidyOption opt = tidyGetNextOption(obj->ptdoc->doc, &itOpt); opt_name = (char *)tidyOptGetName(opt); opt_value = php_tidy_get_opt_val(obj->ptdoc, opt, &optt); switch (optt) { case TidyString: add_assoc_str(return_value, opt_name, (zend_string*)opt_value); break; case TidyInteger: add_assoc_long(return_value, opt_name, (zend_long)opt_value); break; case TidyBoolean: add_assoc_bool(return_value, opt_name, opt_value ? 1 : 0); break; } } return; }
/* {{{ apc_iterator_item */ static apc_iterator_item_t* apc_iterator_item_ctor(apc_iterator_t *iterator, apc_cache_slot_t **slot_pp) { zval zvalue; apc_cache_slot_t *slot = *slot_pp; apc_context_t ctxt = {0, }; apc_iterator_item_t *item = ecalloc(1, sizeof(apc_iterator_item_t)); array_init(&item->value); item->key = slot->key.str; if (APC_ITER_TYPE & iterator->format) { add_assoc_string_ex(&item->value, "type", sizeof("type")-1, "user"); } if (APC_ITER_KEY & iterator->format) { add_assoc_str(&item->value, "key", zend_string_copy(item->key)); } if (APC_ITER_VALUE & iterator->format) { apc_cache_make_context( apc_user_cache, &ctxt, APC_CONTEXT_NOSHARE, APC_UNPOOL, APC_COPY_OUT, 0); ZVAL_UNDEF(&zvalue); apc_cache_fetch_zval(&ctxt, &zvalue, &slot->value->val); add_assoc_zval(&item->value, "value", &zvalue); apc_pool_destroy(ctxt.pool); } if (APC_ITER_NUM_HITS & iterator->format) { add_assoc_long(&item->value, "num_hits", slot->nhits); } if (APC_ITER_MTIME & iterator->format) { add_assoc_long(&item->value, "mtime", slot->key.mtime); } if (APC_ITER_CTIME & iterator->format) { add_assoc_long(&item->value, "creation_time", slot->ctime); } if (APC_ITER_DTIME & iterator->format) { add_assoc_long(&item->value, "deletion_time", slot->dtime); } if (APC_ITER_ATIME & iterator->format) { add_assoc_long(&item->value, "access_time", slot->atime); } if (APC_ITER_REFCOUNT & iterator->format) { add_assoc_long(&item->value, "ref_count", slot->value->ref_count); } if (APC_ITER_MEM_SIZE & iterator->format) { add_assoc_long(&item->value, "mem_size", slot->value->mem_size); } if (APC_ITER_TTL & iterator->format) { add_assoc_long(&item->value, "ttl", slot->value->ttl); } return item; }
/* {{{ proto array accelerator_get_scripts() Get the scripts which are accelerated by ZendAccelerator */ static int accelerator_get_scripts(zval *return_value) { uint32_t i; zval persistent_script_report; zend_accel_hash_entry *cache_entry; struct tm *ta; struct timeval exec_time; struct timeval fetch_time; if (!ZCG(enabled) || !accel_startup_ok || !ZCSG(accelerator_enabled) || accelerator_shm_read_lock() != SUCCESS) { return 0; } array_init(return_value); for (i = 0; i<ZCSG(hash).max_num_entries; i++) { for (cache_entry = ZCSG(hash).hash_table[i]; cache_entry; cache_entry = cache_entry->next) { zend_persistent_script *script; char *str; size_t len; if (cache_entry->indirect) continue; script = (zend_persistent_script *)cache_entry->data; array_init(&persistent_script_report); add_assoc_str(&persistent_script_report, "full_path", zend_string_dup(script->script.filename, 0)); add_assoc_long(&persistent_script_report, "hits", (zend_long)script->dynamic_members.hits); add_assoc_long(&persistent_script_report, "memory_consumption", script->dynamic_members.memory_consumption); ta = localtime(&script->dynamic_members.last_used); str = asctime(ta); len = strlen(str); if (len > 0 && str[len - 1] == '\n') len--; add_assoc_stringl(&persistent_script_report, "last_used", str, len); add_assoc_long(&persistent_script_report, "last_used_timestamp", script->dynamic_members.last_used); if (ZCG(accel_directives).validate_timestamps) { add_assoc_long(&persistent_script_report, "timestamp", (zend_long)script->timestamp); } timerclear(&exec_time); timerclear(&fetch_time); zend_hash_str_update(Z_ARRVAL_P(return_value), cache_entry->key, cache_entry->key_length, &persistent_script_report); } } accelerator_shm_read_unlock(); return 1; }
/* {{{ apc_cache_link_info */ static zval apc_cache_link_info(apc_cache_t *cache, apc_cache_slot_t* p) { zval link; array_init(&link); add_assoc_str(&link, "info", p->key.str); add_assoc_long(&link, "ttl", p->value->ttl); add_assoc_double(&link, "num_hits", (double)p->nhits); add_assoc_long(&link, "mtime", p->key.mtime); add_assoc_long(&link, "creation_time", p->ctime); add_assoc_long(&link, "deletion_time", p->dtime); add_assoc_long(&link, "access_time", p->atime); add_assoc_long(&link, "ref_count", p->value->ref_count); add_assoc_long(&link, "mem_size", p->value->mem_size); return link; }
/* {{{ php_parserr */ static void php_parserr(PDNS_RECORD pRec, int type_to_fetch, int store, int raw, zval *subarray) { int type; u_long ttl; type = pRec->wType; ttl = pRec->dwTtl; if (type_to_fetch != DNS_TYPE_ANY && type != type_to_fetch) { return; } if (!store) { return; } array_init(subarray); add_assoc_string(subarray, "host", pRec->pName); add_assoc_string(subarray, "class", "IN"); add_assoc_long(subarray, "ttl", ttl); if (raw) { add_assoc_long(subarray, "type", type); add_assoc_stringl(subarray, "data", (char*) &pRec->Data, (uint) pRec->wDataLength); return; } switch (type) { case DNS_TYPE_A: { IN_ADDR ipaddr; ipaddr.S_un.S_addr = (pRec->Data.A.IpAddress); add_assoc_string(subarray, "type", "A"); add_assoc_string(subarray, "ip", inet_ntoa(ipaddr)); break; } case DNS_TYPE_MX: add_assoc_string(subarray, "type", "MX"); add_assoc_long(subarray, "pri", pRec->Data.Srv.wPriority); /* no break; */ case DNS_TYPE_CNAME: if (type == DNS_TYPE_CNAME) { add_assoc_string(subarray, "type", "CNAME"); } /* no break; */ case DNS_TYPE_NS: if (type == DNS_TYPE_NS) { add_assoc_string(subarray, "type", "NS"); } /* no break; */ case DNS_TYPE_PTR: if (type == DNS_TYPE_PTR) { add_assoc_string(subarray, "type", "PTR"); } add_assoc_string(subarray, "target", pRec->Data.MX.pNameExchange); break; /* Not available on windows, the query is possible but there is no DNS_HINFO_DATA structure */ case DNS_TYPE_HINFO: case DNS_TYPE_TEXT: { DWORD i = 0; DNS_TXT_DATA *data_txt = &pRec->Data.TXT; DWORD count = data_txt->dwStringCount; zend_string *txt; char *txt_dst; long txt_len = 0; zval entries; add_assoc_string(subarray, "type", "TXT"); array_init(&entries); for (i = 0; i < count; i++) { txt_len += strlen(data_txt->pStringArray[i]) + 1; } txt = zend_string_safe_alloc(txt_len, 2, 0, 0); txt_dst = txt->val; for (i = 0; i < count; i++) { int len = strlen(data_txt->pStringArray[i]); memcpy(txt_dst, data_txt->pStringArray[i], len); add_next_index_stringl(&entries, data_txt->pStringArray[i], len); txt_dst += len; } txt->len = txt_dst - txt->val; add_assoc_str(subarray, "txt", txt); add_assoc_zval(subarray, "entries", &entries); } break; case DNS_TYPE_SOA: { DNS_SOA_DATA *data_soa = &pRec->Data.Soa; add_assoc_string(subarray, "type", "SOA"); add_assoc_string(subarray, "mname", data_soa->pNamePrimaryServer); add_assoc_string(subarray, "rname", data_soa->pNameAdministrator); add_assoc_long(subarray, "serial", data_soa->dwSerialNo); add_assoc_long(subarray, "refresh", data_soa->dwRefresh); add_assoc_long(subarray, "retry", data_soa->dwRetry); add_assoc_long(subarray, "expire", data_soa->dwExpire); add_assoc_long(subarray, "minimum-ttl", data_soa->dwDefaultTtl); } break; case DNS_TYPE_AAAA: { DNS_AAAA_DATA *data_aaaa = &pRec->Data.AAAA; char buf[sizeof("AAAA:AAAA:AAAA:AAAA:AAAA:AAAA:AAAA:AAAA")]; char *tp = buf; int i; unsigned short out[8]; int have_v6_break = 0, in_v6_break = 0; for (i = 0; i < 4; ++i) { DWORD chunk = data_aaaa->Ip6Address.IP6Dword[i]; out[i * 2] = htons(LOWORD(chunk)); out[i * 2 + 1] = htons(HIWORD(chunk)); } for(i=0; i < 8; i++) { if (out[i] != 0) { if (tp > (u_char *)buf) { in_v6_break = 0; tp[0] = ':'; tp++; } tp += sprintf((char*)tp,"%x", out[i]); } else { if (!have_v6_break) { have_v6_break = 1; in_v6_break = 1; tp[0] = ':'; tp++; } else if (!in_v6_break) { tp[0] = ':'; tp++; tp[0] = '0'; tp++; } } } if (have_v6_break && in_v6_break) { tp[0] = ':'; tp++; } tp[0] = '\0'; add_assoc_string(subarray, "type", "AAAA"); add_assoc_string(subarray, "ipv6", buf); } break; #if 0 /* Won't be implemented. A6 is deprecated. (Pierre) */ case DNS_TYPE_A6: break; #endif case DNS_TYPE_SRV: { DNS_SRV_DATA *data_srv = &pRec->Data.Srv; add_assoc_string(subarray, "type", "SRV"); add_assoc_long(subarray, "pri", data_srv->wPriority); add_assoc_long(subarray, "weight", data_srv->wWeight); add_assoc_long(subarray, "port", data_srv->wPort); add_assoc_string(subarray, "target", data_srv->pNameTarget); } break; #if _MSC_VER >= 1500 case DNS_TYPE_NAPTR: { DNS_NAPTR_DATA * data_naptr = &pRec->Data.Naptr; add_assoc_string(subarray, "type", "NAPTR"); add_assoc_long(subarray, "order", data_naptr->wOrder); add_assoc_long(subarray, "pref", data_naptr->wPreference); add_assoc_string(subarray, "flags", data_naptr->pFlags); add_assoc_string(subarray, "services", data_naptr->pService); add_assoc_string(subarray, "regex", data_naptr->pRegularExpression); add_assoc_string(subarray, "replacement", data_naptr->pReplacement); } break; #endif default: /* unknown type */ ZVAL_UNDEF(subarray); return; } }
void sapnwrfc_throw_connection_exception(RFC_ERROR_INFO error_info, char *msg, ...) { va_list args; zend_string *message; zval info; zval ex; va_start(args, msg); message = vstrpprintf(0, msg, args); va_end(args); array_init(&info); zend_replace_error_handling(EH_THROW, sapnwrfc_connection_exception_ce, NULL); object_init_ex(&ex, sapnwrfc_connection_exception_ce); zend_update_property_string(sapnwrfc_connection_exception_ce, &ex, "message", sizeof("message") - 1, ZSTR_VAL(message)); zend_update_property_long(sapnwrfc_connection_exception_ce, &ex, "code", sizeof("code") - 1, error_info.code); // populate errorInfo array add_assoc_long(&info, "code", error_info.code); add_assoc_str(&info, "key", sapuc_to_zend_string(error_info.key)); add_assoc_str(&info, "message", sapuc_to_zend_string(error_info.message)); switch(error_info.group) { case LOGON_FAILURE: // Error message raised when logon fails case COMMUNICATION_FAILURE: // Problems with the network connection (or backend broke down and killed the connection) case EXTERNAL_RUNTIME_FAILURE: // Problems in the RFC runtime of the external program (i.e "this" library) // no additional properties, just the generic one's from above break; case ABAP_APPLICATION_FAILURE: // ABAP Exception raised in ABAP function modules case ABAP_RUNTIME_FAILURE: // ABAP Message raised in ABAP function modules or in ABAP runtime of the backend (e.g Kernel) case EXTERNAL_APPLICATION_FAILURE: // Problems in the external program (e.g in the external server implementation) case EXTERNAL_AUTHORIZATION_FAILURE: // Problems raised in the authorization check handler provided by the external server implementation add_assoc_str(&info, "abapMsgClass", sapuc_to_zend_string(error_info.abapMsgClass)); add_assoc_str(&info, "abapMsgType", sapuc_to_zend_string(error_info.abapMsgType)); add_assoc_str(&info, "abapMsgNumber", sapuc_to_zend_string(error_info.abapMsgNumber)); add_assoc_str(&info, "abapMsgV1", sapuc_to_zend_string(error_info.abapMsgV1)); add_assoc_str(&info, "abapMsgV2", sapuc_to_zend_string(error_info.abapMsgV2)); add_assoc_str(&info, "abapMsgV3", sapuc_to_zend_string(error_info.abapMsgV3)); add_assoc_str(&info, "abapMsgV4", sapuc_to_zend_string(error_info.abapMsgV4)); break; case RFC_OK: zend_error(E_ERROR, "Internal error: exception handler called for RFC_OK"); zend_replace_error_handling(EH_NORMAL, NULL, NULL); zend_string_release(message); return; default: zend_error(E_ERROR, "Internal error: unknown error group"); zend_replace_error_handling(EH_NORMAL, NULL, NULL); zend_string_release(message); return; } zend_update_property(sapnwrfc_connection_exception_ce, &ex, "errorInfo", sizeof("errorInfo") - 1, &info); zval_ptr_dtor(&info); zend_string_release(message); zend_throw_exception_object(&ex); zend_replace_error_handling(EH_NORMAL, NULL, NULL); }