From: Michael Wallner Date: Wed, 24 Jan 2007 11:07:55 +0000 (+0000) Subject: - more fixes for empty message info X-Git-Tag: RELEASE_1_4_1~3 X-Git-Url: https://git.m6w6.name/?a=commitdiff_plain;h=84b7bf18bf27a5767615d4f3ef06ae910abd29f5;p=m6w6%2Fext-http - more fixes for empty message info --- diff --git a/http_info_api.c b/http_info_api.c index 369bf69..d300ed2 100644 --- a/http_info_api.c +++ b/http_info_api.c @@ -107,7 +107,7 @@ PHP_HTTP_API STATUS _http_info_parse_ex(const char *pre_header, http_info *info, 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; @@ -129,8 +129,8 @@ PHP_HTTP_API STATUS _http_info_parse_ex(const char *pre_header, http_info *info, 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; diff --git a/http_message_api.c b/http_message_api.c index 5a64cc7..4f1ac7f 100644 --- a/http_message_api.c +++ b/http_message_api.c @@ -104,17 +104,17 @@ PHP_HTTP_API void _http_message_set_type(http_message *message, http_message_typ 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: @@ -317,18 +317,11 @@ PHP_HTTP_API void _http_message_tostring(http_message *msg, char **string, size_ 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: @@ -455,12 +448,12 @@ PHP_HTTP_API void _http_message_tostruct_recursive(http_message *msg, zval *obj { 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: diff --git a/php_http_info_api.h b/php_http_info_api.h index 94a8d31..4b6868e 100644 --- a/php_http_info_api.h +++ b/php_http_info_api.h @@ -20,6 +20,17 @@ #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;