+void php_http_header_to_callback_ex(const char *key, zval *val, zend_bool crlf, php_http_pass_format_callback_t cb, void *cb_arg TSRMLS_DC)
+{
+ HashPosition pos;
+ zval **aval, *tmp;
+
+ switch (Z_TYPE_P(val)) {
+ case IS_ARRAY:
+ FOREACH_VAL(pos, val, aval) {
+ php_http_header_to_callback_ex(key, *aval, crlf, cb, cb_arg TSRMLS_CC);
+ }
+ break;
+
+ case IS_BOOL:
+ cb(cb_arg, "%s: %s%s", key, Z_BVAL_P(val) ? "true" : "false", crlf ? PHP_HTTP_CRLF:"");
+ break;
+
+ default:
+ tmp = php_http_ztyp(IS_STRING, val);
+ cb(cb_arg, "%s: %s%s", key, Z_STRVAL_P(tmp), crlf ? PHP_HTTP_CRLF:"");
+ zval_ptr_dtor(&tmp);
+ break;
+ }
+}
+
+void php_http_header_to_string_ex(php_http_buffer_t *str, const char *key, zval *val TSRMLS_DC)
+{
+ php_http_header_to_callback_ex(key, val, 1, (php_http_pass_format_callback_t) php_http_buffer_appendf, str TSRMLS_CC);
+}
+