TSRMLS_SET_CTX(message->ts);
php_http_message_set_type(message, type);
+ message->http.version.major = 1;
+ message->http.version.minor = 1;
zend_hash_init(&message->hdrs, 0, NULL, ZVAL_PTR_DTOR, 0);
php_http_message_body_init(&message->body, NULL TSRMLS_CC);
case PHP_HTTP_REQUEST:
if ((sval = php_http_env_get_server_var(ZEND_STRL("SERVER_PROTOCOL"), 1 TSRMLS_CC)) && !strncmp(Z_STRVAL_P(sval), "HTTP/", lenof("HTTP/"))) {
php_http_version_parse(&message->http.version, Z_STRVAL_P(sval) TSRMLS_CC);
- } else {
- message->http.version.major = 1;
- message->http.version.minor = 1;
}
if ((sval = php_http_env_get_server_var(ZEND_STRL("REQUEST_METHOD"), 1 TSRMLS_CC))) {
message->http.info.request.method = estrdup(Z_STRVAL_P(sval));
case PHP_HTTP_RESPONSE:
if (!SG(sapi_headers).http_status_line || !php_http_info_parse((php_http_info_t *) &message->http, SG(sapi_headers).http_status_line TSRMLS_CC)) {
- message->http.version.major = 1;
- message->http.version.minor = 1;
if (!(message->http.info.response.code = SG(sapi_headers).http_response_code)) {
message->http.info.response.code = 200;
}
PHP_HTTP_ARG_VAL(body, 0)
PHP_HTTP_END_ARGS;
+PHP_HTTP_BEGIN_ARGS(addBody, 1)
+ PHP_HTTP_ARG_VAL(body, 0)
+PHP_HTTP_END_ARGS;
+
PHP_HTTP_BEGIN_ARGS(getHeader, 1)
PHP_HTTP_ARG_VAL(header, 0)
PHP_HTTP_END_ARGS;
PHP_HTTP_BEGIN_ARGS(toString, 0)
PHP_HTTP_ARG_VAL(include_parent, 0)
PHP_HTTP_END_ARGS;
+PHP_HTTP_BEGIN_ARGS(toCallback, 1)
+ PHP_HTTP_ARG_VAL(callback, 0)
+PHP_HTTP_END_ARGS;
+PHP_HTTP_BEGIN_ARGS(toStream, 1)
+ PHP_HTTP_ARG_VAL(stream, 0)
+PHP_HTTP_END_ARGS;
PHP_HTTP_EMPTY_ARGS(count);
PHP_HTTP_MESSAGE_ME(__construct, ZEND_ACC_PUBLIC|ZEND_ACC_CTOR)
PHP_HTTP_MESSAGE_ME(getBody, ZEND_ACC_PUBLIC)
PHP_HTTP_MESSAGE_ME(setBody, ZEND_ACC_PUBLIC)
+ PHP_HTTP_MESSAGE_ME(addBody, ZEND_ACC_PUBLIC)
PHP_HTTP_MESSAGE_ME(getHeader, ZEND_ACC_PUBLIC)
PHP_HTTP_MESSAGE_ME(setHeader, ZEND_ACC_PUBLIC)
PHP_HTTP_MESSAGE_ME(addHeader, ZEND_ACC_PUBLIC)
PHP_HTTP_MESSAGE_ME(setHttpVersion, ZEND_ACC_PUBLIC)
PHP_HTTP_MESSAGE_ME(getParentMessage, ZEND_ACC_PUBLIC)
PHP_HTTP_MESSAGE_ME(toString, ZEND_ACC_PUBLIC)
+ PHP_HTTP_MESSAGE_ME(toCallback, ZEND_ACC_PUBLIC)
+ PHP_HTTP_MESSAGE_ME(toStream, ZEND_ACC_PUBLIC)
/* implements Countable */
PHP_HTTP_MESSAGE_ME(count, ZEND_ACC_PUBLIC)
RETVAL_ZVAL(getThis(), 1, 0);
}
+PHP_METHOD(HttpMessage, addBody)
+{
+ zval *new_body;
+
+ if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "O", &new_body, php_http_message_body_class_entry)) {
+ php_http_message_body_object_t *old_obj = zend_object_store_get_object(getThis() TSRMLS_CC);
+ php_http_message_body_object_t *new_obj = zend_object_store_get_object(new_body TSRMLS_CC);
+
+ php_http_message_body_to_callback(old_obj->body, (php_http_pass_callback_t) php_http_message_body_append, new_obj->body, 0, 0);
+ }
+ RETVAL_ZVAL(getThis(), 1, 0);
+}
+
+
PHP_METHOD(HttpMessage, getHeader)
{
char *header_str;
RETURN_EMPTY_STRING();
}
+PHP_METHOD(HttpMessage, toStream)
+{
+ zval *zstream;
+
+ if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &zstream)) {
+ php_http_message_object_t *obj = zend_object_store_get_object(getThis() TSRMLS_CC);
+ php_stream *s;
+
+ php_stream_from_zval(s, &zstream);
+
+ if (!obj->message) {
+ obj->message = php_http_message_init(NULL, 0 TSRMLS_CC);
+ }
+
+ php_http_message_to_callback(obj->message, (php_http_pass_callback_t) _php_stream_write, s);
+ }
+}
+
+PHP_METHOD(HttpMessage, toCallback)
+{
+ php_http_pass_fcall_arg_t fcd;
+
+ if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "f", &fcd.fci, &fcd.fcc)) {
+ php_http_message_object_t *obj = zend_object_store_get_object(getThis() TSRMLS_CC);
+
+ fcd.fcz = getThis();
+ Z_ADDREF_P(fcd.fcz);
+ TSRMLS_SET_CTX(fcd.ts);
+
+ php_http_message_to_callback(obj->message, php_http_pass_fcall_callback, &fcd);
+ zend_fcall_info_args_clear(&fcd.fci, 1);
+
+ zval_ptr_dtor(&fcd.fcz);
+ RETURN_TRUE;
+ }
+ RETURN_FALSE;
+}
+
PHP_METHOD(HttpMessage, serialize)
{
if (SUCCESS == zend_parse_parameters_none()) {