while (' ' == *status) ++status;
HTTP_INFO(info).response.status = estrndup(status, end - status);
} else {
- HTTP_INFO(info).response.status = ecalloc(1, 1);
+ HTTP_INFO(info).response.status = NULL;
}
return SUCCESS;
return FAILURE;
}
} else {
- HTTP_INFO(info).request.method = ecalloc(1, 1);
- HTTP_INFO(info).request.url = ecalloc(1, 1);
+ HTTP_INFO(info).request.method = NULL;
+ HTTP_INFO(info).request.url = NULL;
}
return SUCCESS;
}
if ((sval = http_get_server_var("REQUEST_METHOD", 1))) {
inf.http.info.request.method = estrdup(Z_STRVAL_P(sval));
- } else {
- inf.http.info.request.method = ecalloc(1, 1);
}
if ((sval = http_get_server_var("REQUEST_URI", 1))) {
inf.http.info.request.url = estrdup(Z_STRVAL_P(sval));
- } else {
- inf.http.info.request.url = ecalloc(1, 1);
}
http_message_set_info(message, &inf);
PHP_HTTP_API void _http_message_set_info(http_message *message, http_info *info)
{
- message->http.version = info->http.version;
http_message_set_type(message, info->type);
+ message->http.version = info->http.version;
switch (message->type) {
case IS_HTTP_REQUEST:
- HTTP_INFO(message).request.url = estrdup(HTTP_INFO(info).request.url);
- STR_SET(HTTP_INFO(message).request.method, estrdup(HTTP_INFO(info).request.method));
+ STR_SET(HTTP_INFO(message).request.url, HTTP_INFO(info).request.url ? estrdup(HTTP_INFO(info).request.url) : NULL);
+ STR_SET(HTTP_INFO(message).request.method, HTTP_INFO(info).request.method ? estrdup(HTTP_INFO(info).request.method) : NULL);
break;
case IS_HTTP_RESPONSE:
HTTP_INFO(message).response.code = HTTP_INFO(info).response.code;
- STR_SET(HTTP_INFO(message).response.status, estrdup(HTTP_INFO(info).response.status));
+ STR_SET(HTTP_INFO(message).response.status, HTTP_INFO(info).response.status ? estrdup(HTTP_INFO(info).response.status) : NULL);
break;
default:
switch (msg->type) {
case HTTP_MSG_REQUEST:
- phpstr_appendf(&str, "%s %s HTTP/%1.1f" HTTP_CRLF,
- msg->http.info.request.method?msg->http.info.request.method:"UNKNOWN",
- msg->http.info.request.url?msg->http.info.request.url:"/",
- msg->http.version);
+ phpstr_appendf(&str, HTTP_INFO_REQUEST_FMT_ARGS(&msg->http, HTTP_CRLF));
break;
case HTTP_MSG_RESPONSE:
- phpstr_appendf(&str, "HTTP/%1.1f %d%s%s" HTTP_CRLF,
- msg->http.version,
- msg->http.info.response.code,
- msg->http.info.response.status&&*msg->http.info.response.status ? " ":"",
- STR_PTR(msg->http.info.response.status));
+ phpstr_appendf(&str, HTTP_INFO_RESPONSE_FMT_ARGS(&msg->http, HTTP_CRLF));
break;
case HTTP_MSG_NONE:
{
case HTTP_MSG_RESPONSE:
add_assoc_long(&strct, "responseCode", msg->http.info.response.code);
- add_assoc_string(&strct, "responseStatus", msg->http.info.response.status, 1);
+ add_assoc_string(&strct, "responseStatus", STR_PTR(msg->http.info.response.status), 1);
break;
case HTTP_MSG_REQUEST:
- add_assoc_string(&strct, "requestMethod", msg->http.info.request.method, 1);
- add_assoc_string(&strct, "requestUrl", msg->http.info.request.url, 1);
+ add_assoc_string(&strct, "requestMethod", STR_PTR(msg->http.info.request.method), 1);
+ add_assoc_string(&strct, "requestUrl", STR_PTR(msg->http.info.request.url), 1);
break;
case HTTP_MSG_NONE:
switch (obj->message->type) {
case HTTP_MSG_REQUEST:
- Z_STRLEN_P(return_value) = spprintf(&Z_STRVAL_P(return_value), 0, "%s %s HTTP/%0.1f", obj->message->http.info.request.method, obj->message->http.info.request.url, obj->message->http.version);
+ Z_STRLEN_P(return_value) = spprintf(&Z_STRVAL_P(return_value), 0, HTTP_INFO_REQUEST_FMT_ARGS(&obj->message->http, ""));
break;
case HTTP_MSG_RESPONSE:
- Z_STRLEN_P(return_value) = spprintf(&Z_STRVAL_P(return_value), 0, "HTTP/%0.1f %d %s", obj->message->http.version, obj->message->http.info.response.code, obj->message->http.info.response.status);
+ Z_STRLEN_P(return_value) = spprintf(&Z_STRVAL_P(return_value), 0, HTTP_INFO_RESPONSE_FMT_ARGS(&obj->message->http, ""));
break;
default:
RETURN_NULL();
#define HTTP_INFO(ptr) (ptr)->http.info
+#define HTTP_INFO_REQUEST_FMT_ARGS(_http_ptr, _EOL) "%s %s HTTP/%1.1f" _EOL, \
+ (_http_ptr)->info.request.method?(_http_ptr)->info.request.method:"UNKNOWN", \
+ (_http_ptr)->info.request.url?(_http_ptr)->info.request.url:"/", \
+ (_http_ptr)->version>0.0?(_http_ptr)->version:1.1
+
+#define HTTP_INFO_RESPONSE_FMT_ARGS(_http_ptr, _EOL) "HTTP/%1.1f %d%s%s" _EOL, \
+ (_http_ptr)->version>0.0?(_http_ptr)->version:1.1, \
+ (_http_ptr)->info.response.code?(_http_ptr)->info.response.code:200, \
+ (_http_ptr)->info.response.status&&*(_http_ptr)->info.response.status ? " ":"", \
+ STR_PTR((_http_ptr)->info.response.status)
+
typedef struct _http_request_info_t {
char *method;
char *url;
checkcls('HttpRequestPool');
checkurl('www.php.net');
checkurl('de.php.net');
-checkurl('ch.php.net');
checkurl('at.php.net');
checkurl('dev.iworks.at');
?>
new HttpRequest('http://www.php.net/', HTTP_METH_HEAD),
new HttpRequest('http://at.php.net/', HTTP_METH_HEAD),
new HttpRequest('http://de.php.net/', HTTP_METH_HEAD),
- new HttpRequest('http://ch.php.net/', HTTP_METH_HEAD),
$post
);
http://www.php.net/=200:200
http://at.php.net/=200:200
http://de.php.net/=200:200
-http://ch.php.net/=200:200
http://dev.iworks.at/.print_request.php=200:200
.
.
.
.
-.
Done
<?php
include 'skip.inc';
checkcls('HttpRequestPool');
-checkurl('ch.php.net');
checkurl('at.php.net');
checkurl('de.php.net');
checkurl('www.php.net');
$pool = new MyPool(
new HttpRequest('http://www.php.net/', HTTP_METH_HEAD),
new HttpRequest('http://at.php.net/', HTTP_METH_HEAD),
- new HttpRequest('http://de.php.net/', HTTP_METH_HEAD),
- new HttpRequest('http://ch.php.net/', HTTP_METH_HEAD)
+ new HttpRequest('http://de.php.net/', HTTP_METH_HEAD)
);
$pool->send();
?>
--EXPECTREGEX--
.+TEST
-\.*=200=\.*=200=\.*=200=\.*=200=
+\.*=200=\.*=200=\.*=200=
Done
try {
if (strlen($method) > 3 && substr($method, 0, 3) == 'get')
$x = $r->$method();
- else
- $x = $r->$method(null, null);
} catch (HttpException $e) {
}
}