X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=php_http_message_body.c;h=f48dbd66f7bdb9218a39c0251522b4b389be93a2;hb=b7c74d29e14a92bc649d767b53c392eba4ddde2e;hp=fd5b76293b9384b279089a9301d1084467cc5526;hpb=0b83632b2b0a03eeca090f993259ccd95ab646fb;p=m6w6%2Fext-http diff --git a/php_http_message_body.c b/php_http_message_body.c index fd5b762..f48dbd6 100644 --- a/php_http_message_body.c +++ b/php_http_message_body.c @@ -202,7 +202,10 @@ PHP_HTTP_API size_t php_http_message_body_append(php_http_message_body_t *body, php_stream *s; TSRMLS_FETCH_FROM_CTX(body->ts); - s = php_http_message_body_stream(body); + if (!(s = php_http_message_body_stream(body))) { + return -1; + } + php_stream_seek(s, 0, SEEK_END); return php_stream_write(s, buf, len); } @@ -660,6 +663,8 @@ PHP_METHOD(HttpMessageBody, unserialize) ZEND_BEGIN_ARG_INFO_EX(ai_HttpMessageBody_toStream, 0, 0, 1) ZEND_ARG_INFO(0, stream) + ZEND_ARG_INFO(0, offset) + ZEND_ARG_INFO(0, maxlen) ZEND_END_ARG_INFO(); PHP_METHOD(HttpMessageBody, toStream) { @@ -674,13 +679,14 @@ PHP_METHOD(HttpMessageBody, toStream) php_stream_from_zval(stream, &zstream); php_http_message_body_to_stream(obj->body, stream, offset, forlen); - RETURN_TRUE; + RETURN_ZVAL(getThis(), 1, 0); } - RETURN_FALSE; } ZEND_BEGIN_ARG_INFO_EX(ai_HttpMessageBody_toCallback, 0, 0, 1) ZEND_ARG_INFO(0, callback) + ZEND_ARG_INFO(0, offset) + ZEND_ARG_INFO(0, maxlen) ZEND_END_ARG_INFO(); PHP_METHOD(HttpMessageBody, toCallback) { @@ -700,9 +706,8 @@ PHP_METHOD(HttpMessageBody, toCallback) zend_fcall_info_args_clear(&fcd.fci, 1); zval_ptr_dtor(&fcd.fcz); - RETURN_TRUE; + RETURN_ZVAL(getThis(), 1, 0); } - RETURN_FALSE; } ZEND_BEGIN_ARG_INFO_EX(ai_HttpMessageBody_getResource, 0, 0, 0) @@ -719,6 +724,21 @@ PHP_METHOD(HttpMessageBody, getResource) } } +ZEND_BEGIN_ARG_INFO_EX(ai_HttpMessageBody_getBoundary, 0, 0, 0) +ZEND_END_ARG_INFO(); +PHP_METHOD(HttpMessageBody, getBoundary) +{ + if (SUCCESS == zend_parse_parameters_none()) { + php_http_message_body_object_t * obj = zend_object_store_get_object(getThis() TSRMLS_CC); + + PHP_HTTP_MESSAGE_BODY_OBJECT_INIT(obj); + + if (obj->body->boundary) { + RETURN_STRING(obj->body->boundary, 1); + } + } +} + ZEND_BEGIN_ARG_INFO_EX(ai_HttpMessageBody_append, 0, 0, 1) ZEND_ARG_INFO(0, string) ZEND_END_ARG_INFO(); @@ -732,9 +752,11 @@ PHP_METHOD(HttpMessageBody, append) PHP_HTTP_MESSAGE_BODY_OBJECT_INIT(obj); - RETURN_LONG(php_http_message_body_append(obj->body, str, len)); + if (len != php_http_message_body_append(obj->body, str, len)) { + php_http_error(HE_WARNING, PHP_HTTP_E_MESSAGE_BODY, "Could not append to body"); + } + RETURN_ZVAL(getThis(), 1, 0); } - RETURN_FALSE; } ZEND_BEGIN_ARG_INFO_EX(ai_HttpMessageBody_addForm, 0, 0, 0) @@ -750,9 +772,9 @@ PHP_METHOD(HttpMessageBody, addForm) PHP_HTTP_MESSAGE_BODY_OBJECT_INIT(obj); - RETURN_BOOL(SUCCESS == php_http_message_body_add_form(obj->body, fields, files)); + php_http_message_body_add_form(obj->body, fields, files); + RETURN_ZVAL(getThis(), 1, 0); } - RETURN_FALSE; } ZEND_BEGIN_ARG_INFO_EX(ai_HttpMessageBody_addPart, 0, 0, 1) @@ -769,9 +791,8 @@ PHP_METHOD(HttpMessageBody, addPart) PHP_HTTP_MESSAGE_BODY_OBJECT_INIT(obj); php_http_message_body_add_part(obj->body, mobj->message); - RETURN_TRUE; + RETURN_ZVAL(getThis(), 1, 0); } - RETURN_FALSE; } ZEND_BEGIN_ARG_INFO_EX(ai_HttpMessageBody_etag, 0, 0, 0) @@ -786,13 +807,14 @@ PHP_METHOD(HttpMessageBody, etag) if ((etag = php_http_message_body_etag(obj->body))) { RETURN_STRING(etag, 0); + } else { + RETURN_FALSE; } } - RETURN_FALSE; } ZEND_BEGIN_ARG_INFO_EX(ai_HttpMessageBody_stat, 0, 0, 0) - ZEND_ARG_INFO(0, what) + ZEND_ARG_INFO(0, field) ZEND_END_ARG_INFO(); PHP_METHOD(HttpMessageBody, stat) { @@ -829,16 +851,14 @@ PHP_METHOD(HttpMessageBody, stat) 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; + object_init(return_value); + add_property_long_ex(return_value, ZEND_STRS("size"), sb->sb.st_size TSRMLS_CC); + add_property_long_ex(return_value, ZEND_STRS("atime"), sb->sb.st_atime TSRMLS_CC); + add_property_long_ex(return_value, ZEND_STRS("mtime"), sb->sb.st_mtime TSRMLS_CC); + add_property_long_ex(return_value, ZEND_STRS("ctime"), sb->sb.st_ctime TSRMLS_CC); } } } - RETURN_FALSE; } static zend_function_entry php_http_message_body_methods[] = { @@ -850,6 +870,7 @@ static zend_function_entry php_http_message_body_methods[] = { PHP_ME(HttpMessageBody, toStream, ai_HttpMessageBody_toStream, ZEND_ACC_PUBLIC) PHP_ME(HttpMessageBody, toCallback, ai_HttpMessageBody_toCallback, ZEND_ACC_PUBLIC) PHP_ME(HttpMessageBody, getResource, ai_HttpMessageBody_getResource, ZEND_ACC_PUBLIC) + PHP_ME(HttpMessageBody, getBoundary, ai_HttpMessageBody_getBoundary, ZEND_ACC_PUBLIC) PHP_ME(HttpMessageBody, append, ai_HttpMessageBody_append, ZEND_ACC_PUBLIC) PHP_ME(HttpMessageBody, addForm, ai_HttpMessageBody_addForm, ZEND_ACC_PUBLIC) PHP_ME(HttpMessageBody, addPart, ai_HttpMessageBody_addPart, ZEND_ACC_PUBLIC)