X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=http_methods.c;h=08959ed0c152c9c2ec0e490bc5e57de4b23543cf;hb=902d195a198f4976c8ff081a95cdd3e315c14f5f;hp=f844c055ba06f3606be5a5281cfba399f771877b;hpb=559c156f3d0aeffe2c920d9275f47cfcdfc40bdf;p=m6w6%2Fext-http diff --git a/http_methods.c b/http_methods.c index f844c05..08959ed 100644 --- a/http_methods.c +++ b/http_methods.c @@ -18,8 +18,10 @@ #ifdef HAVE_CONFIG_H # include "config.h" #endif - #include "php.h" + +#ifdef ZEND_ENGINE_2 + #include "php_streams.h" #include "php_http.h" @@ -40,11 +42,9 @@ #include "php_http_requestpool_object.h" #include "php_http_exception_object.h" -#ifdef ZEND_ENGINE_2 - #include "missing.h" -ZEND_EXTERN_MODULE_GLOBALS(http) +ZEND_EXTERN_MODULE_GLOBALS(http); /* {{{ HttpResponse */ @@ -1133,7 +1133,7 @@ PHP_METHOD(HttpRequest, __destruct) PHP_METHOD(HttpRequest, setOptions) { char *key = NULL; - long idx = 0; + ulong idx = 0; zval *opts, *old_opts, **opt; getObject(http_request_object, obj); @@ -2069,12 +2069,14 @@ PHP_METHOD(HttpRequest, getResponseMessage) getObject(http_request_object, obj); message = GET_PROP(obj, responseMessage); - Z_TYPE_P(return_value) = IS_OBJECT; - return_value->is_ref = 1; - return_value->value.obj = message->value.obj; - zval_add_ref(&return_value); + if (Z_TYPE_P(message) == IS_OBJECT) { + RETVAL_OBJECT(message); + } else { + RETURN_NULL(); + } } } +/* }}} */ /* {{{ proto bool HttpRequest::send() * @@ -2142,13 +2144,46 @@ PHP_METHOD(HttpRequest, send) /* {{{ HttpRequestPool */ -/* {{{ proto void HttpRequestPool::__construct() +/* {{{ proto void HttpRequestPool::__construct([HttpRequest request[, ...]]) * - * Instantiate a new HttpRequestPool object. + * Instantiate a new HttpRequestPool object. An HttpRequestPool is + * able to send several HttpRequests in parallel. + * + * Example: + *
+ * attach($req[$url]);
+ *     }
+ *     $pool->send();
+ *     foreach ($urls as $url) {
+ *         printf("%s (%s) is %s\n",
+ *             $url, $req[$url]->getResponseInfo('effective_url'),
+ *             $r->getResponseCode() == 200 ? 'alive' : 'not alive'
+ *         );
+ *     }
+ * ?>
+ * 
*/ PHP_METHOD(HttpRequestPool, __construct) { - NO_ARGS; + int argc = ZEND_NUM_ARGS(); + zval ***argv = safe_emalloc(argc, sizeof(zval *), 0); + getObject(http_requestpool_object, obj); + + if (SUCCESS == zend_get_parameters_array_ex(argc, argv)) { + int i; + + for (i = 0; i < argc; ++i) { + if (Z_TYPE_PP(argv[i]) == IS_OBJECT && instanceof_function(Z_OBJCE_PP(argv[i]), http_request_object_ce TSRMLS_CC)) { + http_request_pool_attach(&obj->pool, *(argv[i])); + } + } + } + efree(argv); } /* }}} */ @@ -2162,7 +2197,7 @@ PHP_METHOD(HttpRequestPool, __destruct) NO_ARGS; - //http_request_pool_detach_all(&obj->pool); + http_request_pool_detach_all(&obj->pool); } /* }}} */ @@ -2224,11 +2259,16 @@ PHP_METHOD(HttpRequestPool, detach) */ PHP_METHOD(HttpRequestPool, send) { + STATUS status; getObject(http_requestpool_object, obj); NO_ARGS; - RETURN_SUCCESS(http_request_pool_send(&obj->pool)); + SET_EH_THROW_HTTP(); + status = http_request_pool_send(&obj->pool); + SET_EH_NORMAL(); + + RETURN_SUCCESS(status); } /* }}} */ @@ -2300,3 +2340,4 @@ PHP_METHOD(HttpRequestPool, socketRead) * vim600: noet sw=4 ts=4 fdm=marker * vim<600: noet sw=4 ts=4 */ +