+
+PHP_METHOD(HttpMessageBody, etag)
+{
+ if (SUCCESS == zend_parse_parameters_none()) {
+ php_http_message_body_object_t *obj = zend_object_store_get_object(getThis() TSRMLS_CC);
+ char *etag = php_http_message_body_etag(obj->body);
+
+ if (etag) {
+ RETURN_STRING(etag, 0);
+ }
+ }
+ RETURN_FALSE;
+}
+
+PHP_METHOD(HttpMessageBody, stat)
+{
+ char *field_str = NULL;
+ int field_len = 0;
+
+ if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s", &field_str, &field_len)) {
+ php_http_message_body_object_t *obj = zend_object_store_get_object(getThis() TSRMLS_CC);
+ const php_stream_statbuf *sb = php_http_message_body_stat(obj->body);
+
+ if (sb) {
+ if (field_str && field_len) {
+ switch (*field_str) {
+ case 's':
+ case 'S':
+ RETURN_LONG(sb->sb.st_size);
+ break;
+ case 'a':
+ case 'A':
+ RETURN_LONG(sb->sb.st_atime);
+ break;
+ case 'm':
+ case 'M':
+ RETURN_LONG(sb->sb.st_mtime);
+ break;
+ case 'c':
+ case 'C':
+ RETURN_LONG(sb->sb.st_ctime);
+ break;
+ default:
+ php_http_error(HE_WARNING, PHP_HTTP_E_MESSAGE_BODY, "unknown stat field: '%s' (should be one of [s]ize, [a]time, [m]time or [c]time)", field_str);
+ break;
+ }
+ } else {
+ array_init(return_value);
+ add_assoc_long_ex(return_value, ZEND_STRS("size"), sb->sb.st_size);
+ add_assoc_long_ex(return_value, ZEND_STRS("atime"), sb->sb.st_atime);
+ add_assoc_long_ex(return_value, ZEND_STRS("mtime"), sb->sb.st_mtime);
+ add_assoc_long_ex(return_value, ZEND_STRS("ctime"), sb->sb.st_ctime);
+ return;
+ }
+ }
+ }
+ RETURN_FALSE;
+}
+